Commit 30fb684f authored by yujinyao's avatar yujinyao

Merge branch 'pre-release' of...

Merge branch 'pre-release' of http://110.41.143.128:8081/lanbaoming/jiedao-app-operator-master into yujinyao
parents dd9d2183 56d50f0e
...@@ -174,3 +174,11 @@ export function applyCargoControlApproval(data){ ...@@ -174,3 +174,11 @@ export function applyCargoControlApproval(data){
data data
}) })
} }
//根据订单ID查询控货订单放货限制修改审核详情
export function getLimitUpdateInfo(orderId){
return request({
url: '/ecw/order-cargo-control/limit-update/info/' + orderId,
method: 'get'
})
}
...@@ -12,7 +12,7 @@ export default { ...@@ -12,7 +12,7 @@ export default {
}, },
props:{ props:{
options: Array, options: Array,
value: [String, Number, Boolean, Object], value: [String, Number, Array, Boolean, Object],
labelField: { labelField: {
type: [String, Function], type: [String, Function],
default: 'label' default: 'label'
......
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
</div> </div>
</el-col> </el-col>
</el-card> </el-card>
<!-- 申请信息 --> <!-- 申请信息 -->
<el-card class="box-card mt-10" v-loading="processInstanceLoading"> <el-card class="box-card mt-10" v-loading="processInstanceLoading">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
...@@ -661,6 +661,16 @@ export default { ...@@ -661,6 +661,16 @@ export default {
id: this.processInstance.businessKey, id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath, path: this.processInstance.processDefinition?.formCustomViewPath,
}, },
// 收货人限制修改申请
order_consignee_limit_change:{
component: () => import("@/views/ecw/order/components/updateReleaseLimitApproval"),
id: this.processInstance.businessKey,
},
// 海外仓修改申请,下面的组件待改
order_overseas_warehouse_change:{
component: () => import("@/views/ecw/order/components/updateReleaseLimitApproval"),
id: this.processInstance.businessKey,
}
}; };
console.log( console.log(
"formCustomViewPath", "formCustomViewPath",
......
This diff is collapsed.
<template> <template>
<el-dialog :visible="show" @close="handleClose" :title="$t('收货人限制修改申请')" width="1000px"> <el-dialog :visible="show" @close="handleClose" :title="$t('收货人限制修改申请')" width="1000px">
<el-form label-position="left" label-width="150px" :model="form"> <el-form label-position="left" label-width="150px" :model="form" :disabled="applyStatus === 1">
<el-row :gutter="20"> <el-row :gutter="20">
<!-- 订单号 --> <!-- 订单号 -->
<el-col :span="8"> <el-col :span="8">
...@@ -120,12 +120,13 @@ ...@@ -120,12 +120,13 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<work-flow xmlkey="shipment_change_release_goods_limit" v-model="form.ccIds"></work-flow> <work-flow xmlkey="order_consignee_limit_change" v-model="form.ccIds"></work-flow>
</el-row> </el-row>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="handleClose">{{$t('取消')}}</el-button> <el-button @click="handleClose">{{$t('取消')}}</el-button>
<el-button type="primary" @click="handleSubmit">{{$t('确定')}}</el-button> <el-button v-if="applyStatus === 1" type="primary" @click="handleGoBpm">{{$t('审批中')}}</el-button>
<el-button v-else type="primary" @click="handleSubmit">{{$t('确定')}}</el-button>
</span> </span>
</el-dialog> </el-dialog>
</template> </template>
...@@ -133,7 +134,9 @@ ...@@ -133,7 +134,9 @@
<script> <script>
import WorkFlow from '@/components/WorkFlow/index.vue' import WorkFlow from '@/components/WorkFlow/index.vue'
import FileUpload from '@/components/FileUpload/index.vue' import FileUpload from '@/components/FileUpload/index.vue'
import { applyCargoControlApproval } from '@/api/ecw/orderCargoControl' import { applyCargoControlApproval, getLimitUpdateInfo } from '@/api/ecw/orderCargoControl'
import dayjs from 'dayjs'
import { getApproval } from '@/api/ecw/order'
export default { export default {
components:{ components:{
FileUpload, FileUpload,
...@@ -147,6 +150,8 @@ export default { ...@@ -147,6 +150,8 @@ export default {
// 是否显示弹窗 // 是否显示弹窗
show: true, show: true,
fileType: ["doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "pdf", 'jpg', 'jpeg', 'png', 'mp4', 'mov', 'avi', 'mp3'], fileType: ["doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "pdf", 'jpg', 'jpeg', 'png', 'mp4', 'mov', 'avi', 'mp3'],
applyStatus: 0, // 审批状态: 1 处理中 2 通过 3 不通过 4 已取消
bpmId: null, // 审批流程ID
form: { form: {
// 申请类型:此处应该是 61 放货限制修改申请 62 海外仓修改申请 // 申请类型:此处应该是 61 放货限制修改申请 62 海外仓修改申请
applyType: 61, applyType: 61,
...@@ -159,7 +164,9 @@ export default { ...@@ -159,7 +164,9 @@ export default {
// 附件 // 附件
annex: '', annex: '',
ccIds: [] ccIds: []
} },
// 审批信息
approvalDetail: null
} }
}, },
computed:{ computed:{
...@@ -168,7 +175,7 @@ export default { ...@@ -168,7 +175,7 @@ export default {
if(!this.order.unloadTime || !this.form.newIsLimitUpdateConsignee || !this.form.newLockConsigneeDay){ if(!this.order.unloadTime || !this.form.newIsLimitUpdateConsignee || !this.form.newLockConsigneeDay){
return '-' return '-'
} }
return new Date(new Date().getTime() + this.form.newLockConsigneeDay * 86400 * 1000).toLocaleString() return dayjs(this.order.unloadTime).add(this.form.newLockConsigneeDay, "day").format('YYYY-MM-DD HH:mm:ss')
} }
}, },
watch:{ watch:{
...@@ -184,8 +191,47 @@ export default { ...@@ -184,8 +191,47 @@ export default {
if(this.form.newIsLimitUpdateConsignee){ if(this.form.newIsLimitUpdateConsignee){
this.form.newLockConsigneeDay = this.order.lockConsigneeDay this.form.newLockConsigneeDay = this.order.lockConsigneeDay
} }
// 根据订单获取审批详情
this.getApply()
}, },
methods:{ methods:{
getApply(){
// 先重置
this.applyStatus = 0
getLimitUpdateInfo(this.order.orderId).then(res => {
const data = res.data
console.log({data})
if(data.applyType === this.form.applyType){
this.form.newIsLimitUpdateConsignee = data.newIsLimitUpdateConsignee
this.form.newLockConsigneeDay = data.newLockConsigneeDay
this.form.reasonZh = data.reasonZh
this.form.annex = data.annex
this.form.ccIds = data.ccIds?.split(",").filter(item => !!item).map(item => Number(item)) || []
this.applyStatus = data.applyStatus
this.bpmId = data.formId
/* // 如果是申请中,则需要查询审批数据
if(this.applyStatus === 1){
this.getApproval()
} */
}
})
},
/* getApproval(){
getApproval(this.id).then(res => {
this.approvalDetail = res.data
})
}, */
handleGoBpm(){
console.log("跳转审批页面,待完善")
this.handleClose()
this.$router.push({
path: "/bpm/process-instance/detail",
query: {
id: this.bpmId
}
})
},
handleClose(){ handleClose(){
this.show = false this.show = false
this.$emit("close") this.$emit("close")
......
<script>
import { getApproval, getOrderDetail } from '@/api/ecw/order'
import { getPickRleaseInfo } from '@/api/ecw/orderCargoControl'
import Template from '@/views/cms/template/index.vue'
import dayjs from 'dayjs'
export default {
name: 'updateReleaseLimitApproval',
components: { Template },
props: {
// 审批ID
id: Number
},
data(){
return {
detail: null,
releaseInfo: null
}
},
mounted() {
this.getApprovalDetail()
},
computed:{
showExpireTime(){
return (days) => {
if(!this.releaseInfo?.unloadTime || !days){
return '-'
}
return dayjs(this.releaseInfo.unloadTime).add(this.detail.newLockConsigneeDay, "day").format('YYYY-MM-DD HH:mm:ss')
}
}
},
methods:{
getApprovalDetail(){
getApproval(this.id).then(res => {
try {
this.detail = JSON.parse(res.data?.details)
this.getPickRleaseInfo(this.detail.orderId)
}catch (e) {
console.error("审核详情解析失败", e)
this.$message.error("审核详情数据解析失败")
}
})
},
getPickRleaseInfo(orderId){
getPickRleaseInfo(orderId).then(res => {
this.releaseInfo = res.data
})
}
}
}
</script>
<template>
<div v-if="detail && releaseInfo">
<el-descriptions>
<el-descriptions-item :label="$t('订单号')">
{{detail.orderNo}}
</el-descriptions-item>
<el-descriptions-item :label="$t('总箱数')">
{{detail.sumNum}}
</el-descriptions-item>
<el-descriptions-item :label="$t('总体积')">
{{detail.sumVolume}}
</el-descriptions-item>
<el-descriptions-item :label="$t('总重量')">
{{detail.sumWeight}}Kg
</el-descriptions-item>
<el-descriptions-item :label="$t('总控货箱数')">
{{detail.sumNum}}
</el-descriptions-item>
<el-descriptions-item :label="$t('剩余放货箱数')">
{{detail.sumNum - detail.releaseNum}}
</el-descriptions-item>
<el-descriptions-item :label="$t('卸柜/到仓时间')">
{{releaseInfo.unloadTime || '-'}}
</el-descriptions-item>
<el-descriptions-item :label="$t('订单限制修改收货人')">
{{releaseInfo.isLimitUpdateConsignee ? $t('') : $t('')}}
</el-descriptions-item>
<el-descriptions-item :label="$t('订单锁定收货人天数')" v-if="releaseInfo.isLimitUpdateConsignee">
{{releaseInfo.lockConsigneeDay}}
</el-descriptions-item>
<el-descriptions-item :label="$t('放货锁定收货人到期时间')" v-if="releaseInfo.isLimitUpdateConsignee">
{{showExpireTime(releaseInfo.lockConsigneeDay)}}
</el-descriptions-item>
</el-descriptions>
<el-divider>{{$t('修改内容')}}</el-divider>
<el-descriptions :column="3">
<el-descriptions-item :label="$t('订单限制修改收货人')">
{{detail.newIsLimitUpdateConsignee ? $t('') : $t('')}}
</el-descriptions-item>
<el-descriptions-item :label="$t('订单锁定收货人天数')" v-if="detail.newIsLimitUpdateConsignee">
{{detail.newLockConsigneeDay}}
</el-descriptions-item>
<el-descriptions-item :label="$t('放货锁定收货人到期时间')" v-if="detail.newIsLimitUpdateConsignee">
{{showExpireTime(detail.newLockConsigneeDay)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('修改原因')" :span="3">
{{detail.reasonZh}}
</el-descriptions-item>
<el-descriptions-item :label="$t('附件')" :span="3">
<div v-if="detail.annex">
<div v-for="url in detail.annex.split(',').filter(item => !!item)">
<el-link :href="url" target="_blank">{{url.split("/").pop()}}</el-link>
</div>
</div>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<style scoped lang="scss">
</style>
...@@ -1257,6 +1257,21 @@ export default { ...@@ -1257,6 +1257,21 @@ export default {
this.$set(this.form, 'consigneeNameEn', res.data.consigneeVO.nameEn) this.$set(this.form, 'consigneeNameEn', res.data.consigneeVO.nameEn)
this.$set(this.form, 'consigneePhone', res.data.consigneeVO.phone) this.$set(this.form, 'consigneePhone', res.data.consigneeVO.phone)
} }
// res.data.hasConsignee 订单冗余的发货人是否允许无收货人
// res.data.noConsignee 当前订单发货人是否允许无收货
// 回显冗余数据
this.noConsignee = res.data.hasConsignee
// 是否有收货人
this.hasConsignee = !!res.data.consigneeVO
// 如果订单无收货人,但是最新的发货人不允许无收货人则重置状态
if(!res.data.noConsignee && !this.hasConsignee){
// 最新的发货人不允许无收货人,则重置为有收货人
this.hasConsignee = true
// 如果发货人不允许无收货人,则更新是否允许无收货人状态
this.noConsignee = false
}
if(this.form.channelId == 0){ if(this.form.channelId == 0){
delete this.form.channelId delete this.form.channelId
......
This diff is collapsed.
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<el-input v-model="queryParams.marks" :placeholder="$t('唛头')" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.marks" :placeholder="$t('唛头')" clearable @keyup.enter.native="handleQuery" />
</el-form-item> --> </el-form-item> -->
<el-form-item :label="$t('发货人')" prop="consignorKey" v-show="showSearch"> <el-form-item :label="$t('发货人')" prop="consignorKey">
<el-input <el-input
v-model="queryParams.consignorKey" v-model="queryParams.consignorKey"
:placeholder="$t('发货人')" :placeholder="$t('发货人')"
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('收货人')" prop="consigneeKey" v-show="showSearch"> <el-form-item :label="$t('收货人')" prop="consigneeKey">
<el-input <el-input
v-model="queryParams.consigneeKey" v-model="queryParams.consigneeKey"
:placeholder="$t('收货人')" :placeholder="$t('收货人')"
...@@ -150,8 +150,8 @@ ...@@ -150,8 +150,8 @@
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('商品类型')" prop="goodsType" v-show="showSearch"> <el-form-item :label="$t('商品类型')" prop="goodsTypes" v-show="showSearch">
<selector v-model="queryParams.goodsType" :options="productAttrList" label-field="attrName" value-field="id"> <selector v-model="queryParams.goodsTypes" multiple :options="productAttrList" label-field="attrName" value-field="id">
</selector> </selector>
</el-form-item> </el-form-item>
<!-- <!--
...@@ -298,7 +298,7 @@ ...@@ -298,7 +298,7 @@
@change="handleQuery" @change="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('增值服务')" prop="number"> <el-form-item :label="$t('增值服务')" prop="types" v-show="showSearch">
<el-select <el-select
v-model="queryParams.types" v-model="queryParams.types"
multiple multiple
...@@ -1633,13 +1633,12 @@ export default { ...@@ -1633,13 +1633,12 @@ export default {
if (this.destCountryId != null && this.destCountryId != "") { if (this.destCountryId != null && this.destCountryId != "") {
queryParams.destCountryIds = this.destCountryId; queryParams.destCountryIds = this.destCountryId;
} }
//目的城市
if (this.objectiveId != null && this.objectiveId != "") { if (this.objectiveId != null && this.objectiveId != "") {
//目的城市
queryParams.objectiveIds = this.objectiveId; queryParams.objectiveIds = this.objectiveId;
} }
//目的仓
if (this.destWarehouseId != null && this.destWarehouseId != "") { if (this.destWarehouseId != null && this.destWarehouseId != "") {
//目的仓
queryParams.destWarehouseIds = this.destWarehouseId; queryParams.destWarehouseIds = this.destWarehouseId;
} }
...@@ -1677,9 +1676,9 @@ export default { ...@@ -1677,9 +1676,9 @@ export default {
(res) => (this.currencyList = res.data.list) (res) => (this.currencyList = res.data.list)
); );
// 如果是空运(专线空运和海空联运)则获取渠道 // 如果是空运(专线空运和海空联运)则获取渠道
if (this.transportId == 3 || this.transportId == 4) { //if (this.transportId == 3 || this.transportId == 4) {
getChannelList().then((res) => (this.channelList = res.data)); getChannelList().then((res) => (this.channelList = res.data));
} //}
}, },
methods: { methods: {
init() { init() {
......
...@@ -102,8 +102,8 @@ ...@@ -102,8 +102,8 @@
:prepend="{ id: 0, nickname: $t('未分配客户经理')}"/> :prepend="{ id: 0, nickname: $t('未分配客户经理')}"/>
</el-form-item> </el-form-item>
<!--根据需求文档 lanbm 2024-06-23 隐藏--> <!--根据需求文档 lanbm 2024-06-23 隐藏-->
<el-form-item :label="$t('订单状态')" prop="status"> <el-form-item :label="$t('订单状态')" prop="status" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ORDER_STATUS" v-model="queryParams.statusList" <dict-selector :type="DICT_TYPE.ORDER_STATUS" v-model="queryParams.status"
@keyup.enter.native="handleQuery" clearable /> @keyup.enter.native="handleQuery" clearable />
</el-form-item> </el-form-item>
<el-form-item :label="$t('报关方式')" prop="customsType" v-show="showSearch"> <el-form-item :label="$t('报关方式')" prop="customsType" v-show="showSearch">
...@@ -114,12 +114,12 @@ ...@@ -114,12 +114,12 @@
<dict-selector v-model="queryParams.isNeat" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" clearable @change="handleQuery"/> <dict-selector v-model="queryParams.isNeat" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" clearable @change="handleQuery"/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('备案属性')" prop="productRecord" v-show="showSearch"> <el-form-item :label="$t('备案属性')" prop="productRecords" v-show="showSearch">
<dict-selector :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" v-model="queryParams.productRecord" multiple clearable @change="handleQuery" /> <dict-selector :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" multiple v-model="queryParams.productRecords" multiple clearable @change="handleQuery" />
</el-form-item> </el-form-item>
<!--lanbm 2024-06-23 根据需求文档隐藏--> <!--lanbm 2024-06-23 根据需求文档隐藏-->
<el-form-item :label="$t('快递单号')" prop="number" v-show="showSearch"> <el-form-item :label="$t('快递单号')" prop="number" v-show="showSearch">
<el-input v-model="queryParams.number" :placeholder="$t('快递单号')" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.number" :placeholder="$t('快递单号')" clearable @keyup.enter.native="handleQuery" onkeyup="this.value=this.value.replace(/\s+/g, '')" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('外部仓')" prop="number" v-show="showSearch"> <el-form-item :label="$t('外部仓')" prop="number" v-show="showSearch">
<el-select v-model="queryParams.isExternalWarehouse" :placeholder="$t('请选择')" clearable @change="handleQuery"> <el-select v-model="queryParams.isExternalWarehouse" :placeholder="$t('请选择')" clearable @change="handleQuery">
...@@ -136,7 +136,7 @@ ...@@ -136,7 +136,7 @@
<dict-selector :type="DICT_TYPE.ECW_ORDER_APPROVAL_TYPE" v-model="queryParams.auditType" <dict-selector :type="DICT_TYPE.ECW_ORDER_APPROVAL_TYPE" v-model="queryParams.auditType"
@keyup.enter.native="handleQuery" clearable /> @keyup.enter.native="handleQuery" clearable />
</el-form-item> </el-form-item>
<el-form-item :label="$t('增值服务')" prop="number"> <el-form-item :label="$t('增值服务')" prop="number" v-show="showSearch">
<el-select v-model="queryParams.types" :placeholder="$t('请选择')" multiple clearable> <el-select v-model="queryParams.types" :placeholder="$t('请选择')" multiple clearable>
<el-option :label="$t('普通订单')" :value="0"></el-option> <el-option :label="$t('普通订单')" :value="0"></el-option>
<el-option :label="$t('集运服务')" :value="1"></el-option> <el-option :label="$t('集运服务')" :value="1"></el-option>
...@@ -146,7 +146,7 @@ ...@@ -146,7 +146,7 @@
<el-form-item :label="$t('出货渠道')" prop="number"> <el-form-item :label="$t('出货渠道')" prop="number">
<selector clearable :options="channelList" :label-field="$l('name')" value-field="channelId" v-model="queryParams.channelIds" multiple></selector> <selector clearable :options="channelList" :label-field="$l('name')" value-field="channelId" v-model="queryParams.channelIds" multiple></selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('特需')" prop="packageType"> <el-form-item :label="$t('特需')" prop="packageType" v-show="showSearch">
<el-select v-model="queryParams.packageTypeArr" multiple :placeholder="$t('请选择')" clearable > <el-select v-model="queryParams.packageTypeArr" multiple :placeholder="$t('请选择')" clearable >
<template v-for="item in getDictDatas(DICT_TYPE.ORDER_SPECIAL_NEEDS)"> <template v-for="item in getDictDatas(DICT_TYPE.ORDER_SPECIAL_NEEDS)">
<el-option :label="$l(item, 'label')" :value="item.value"></el-option> <el-option :label="$l(item, 'label')" :value="item.value"></el-option>
...@@ -167,6 +167,10 @@ ...@@ -167,6 +167,10 @@
<el-button :disabled="!multipleSelection.length" type="primary" :loading="exporting" plain size="mini" @click="exportXls(ids)" v-hasPermi="['ecw:order:peddingList:export_selected']">{{$t('导出所选')}}</el-button> <el-button :disabled="!multipleSelection.length" type="primary" :loading="exporting" plain size="mini" @click="exportXls(ids)" v-hasPermi="['ecw:order:peddingList:export_selected']">{{$t('导出所选')}}</el-button>
<el-button type="primary" :loading="exporting" plain size="mini" @click="exportXls(queryParams)" v-hasPermi="['ecw:order:peddingList:export_search']">{{$t('导出搜索')}}</el-button> <el-button type="primary" :loading="exporting" plain size="mini" @click="exportXls(queryParams)" v-hasPermi="['ecw:order:peddingList:export_search']">{{$t('导出搜索')}}</el-button>
</el-col> </el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<!-- 列表 --> <!-- 列表 -->
...@@ -218,7 +222,7 @@ ...@@ -218,7 +222,7 @@
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="row.transportId" /> / {{row.dstWarehouseName}} <dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="row.transportId" /> / {{row.dstWarehouseName}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('控货')" align="center" prop="isCargoControl"> <el-table-column :label="$t('控货')" align="center" prop="isCargoControl" v-show="showSearch">
<template slot-scope="{row}"> <template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="row.isCargoControl" /> <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="row.isCargoControl" />
</template> </template>
...@@ -428,7 +432,6 @@ export default { ...@@ -428,7 +432,6 @@ export default {
this.destWarehouseId == "" this.destWarehouseId == ""
) { ) {
//获取当前城市值id,获取该城市下区域 //获取当前城市值id,获取该城市下区域
} else if ( } else if (
this.destCountryId == "" && this.destCountryId == "" &&
this.objectiveId == "" && this.objectiveId == "" &&
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment