Commit cee41fc5 by wanggang_yf

fctcan前端页面调整

parent af7001ae
export default {
buildPtspta (ptsptaObj) {
let pts = ptsptaObj.pts;
let ptspta = {
rol: pts.rol,
name: pts.nam,
ptyinr: pts.ptyinr,
ptainr: pts.ptainr,
extkey: pts.extkey,
dftdsp: pts.dftdsp,
dftcur: pts.dftcur,
dftact: pts.dftact,
dftfeecur: pts.dftfeecur,
dftactptainr: pts.dftactptainr,
glggrpflg: pts.glggrpflg,
adrblk: pts.adrblk
};
return ptspta;
},
buildCommonData (model, trnName) {
let ptsptaList = [];
if (model.gidgrp.apl.pts.extkey) {
ptsptaList.push(this.buildPtspta(model.gidgrp.apl));
}
if (model.gidgrp.adv.pts.extkey) {
ptsptaList.push(this.buildPtspta(model.gidgrp.adv));
}
if (model.gidgrp.ben.pts.extkey) {
ptsptaList.push(this.buildPtspta(model.gidgrp.ben));
}
let dataObj = {
rec: {
objtyp: 'GID',
ownref: model.gidgrp.rec.ownref,
opndat: model.gidgrp.rec.opndat,
expdat: model.gidgrp.rec.expdat,
branchInr: model.gidgrp.rec.branchInr,
hndtyp: model.gidgrp.rec.hndtyp,
gartyp: model.gidgrp.rec.gartyp,
fingua: model.gidgrp.rec.fingua,
segtyp: model.gidgrp.ghd.segtyp,
fromflg: model.gidgrp.rec.fromflg,
othersno: model.gidgrp.rec.othersno,
sndto: model.gidgrp.rec.sndto,
swiftflg: model.gitp.swiftflg,
giduil: model.gidgrp.rec.giduil,
purpos: model.gidgrp.rec.purpos,
revflg: model.gidgrp.rec.revflg,
cnfsta: model.gidgrp.rec.cnfsta,
},
cbsMap: {
MAX: model.gidgrp.cbs.max,
OPN1: model.gidgrp.cbs.opn1,
MAC: model.gidgrp.cbs.mac,
MAC2: model.gidgrp.cbs.mac2,
OPC2: model.gidgrp.cbs.opc2,
CNF: model.gidgrp.cbs.cnf,
},
ptsList: ptsptaList,
transName: trnName,
userId: window.sessionStorage.userId ? window.sessionStorage.userId : 'ZL'
};
return dataObj
},
buildSetfeg (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
liaall: model.liaall,
liaccv: model.liaccv,
doceot: model.trnmod.trndoc.doceot,
};
return params
},
buildSetglg (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
setfeg: model.setmod.setfeg,
liaall: model.liaall,
liaccv: model.liaccv,
};
return params
},
buildGlentry (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
liaallg: model.liaall.liaallg,
setfog: model.setmod.setfog,
setfeg: model.setmod.setfeg,
setglg: model.setmod.setglg,
};
return params
},
buildEngp (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
liaallg: model.liaall.liaallg,
};
return params
},
buildDocpan (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
};
return params
},
buildCcvpan (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
liaccvg: model.liaccv.liaccvg,
oldamt: model.liaccv.oldamt,
chgamt: model.liaccv.chgamt,
concur: model.liaccv.concur,
};
return params
},
buildLimitbody (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
rec: {
objtyp: 'GID',
objinr: model.gidgrp.rec.objinr,
ownref: model.gidgrp.rec.ownref,
},
};
return params
},
buildDoctre (model, trnName) {
let params = {
...this.buildCommonData(model, trnName),
rec: {
objtyp: 'GID',
objinr: model.gidgrp.rec.objinr,
ownref: model.gidgrp.rec.ownref,
swiftflg: model.gitp.swiftflg,
},
};
return params
},
// 公共组件setmod中dsp字段改变,触发联动时候的入参
buildSetgllAccts (model, trnName, setglg) {
let params = {
...this.buildCommonData(model, trnName),
setglg
};
return params
}
}
\ No newline at end of file
import Api from '~/service/Api';
import commonFunctions from '~/mixin/commonFunctions.js';
import setmod from '~/components/business/setmod/event';
import glentry from '~/components/business/glentry/event';
import engp from '~/components/business/engp/event';
import docpan from '~/components/business/docpan/event';
import ccvpan from '~/components/business/ccvpan/event';
import limitbody from '~/components/business/limitbody/event';
import doctre from '~/components/business/doctre/event';
import Utils from "~/utils";
import buildFn from './buildCommons.js';
export default {
mixins: [commonFunctions],
methods: {
...setmod,
...glentry,
...engp,
...docpan,
...ccvpan,
...limitbody,
...doctre,
async init () {
const params = {
spt: JSON.parse(localStorage.getItem('row_' + this.trnName))
}
const res = await Api.post('/service/gctadd/init', {
...params,
transName: this.trnName,
userId: window.sessionStorage.userId || 'ZL',
});
if (!res.data) {
return
}
this.copyValueFromVoData(this.model, res.data)
this.copyValueFromVoData(this.model.setmod.setfeg, res.data.setfeg)
this.copyValueFromVoData(this.model.setmod.setfog, res.data.setfog)
this.copyValueFromVoData(this.model.setmod.setglg, res.data.setglg)
},
// 兼容处理在前端model中定义了字段,后端返回的数据中不存在字段的问题
copyValueFromVoData (model, data) {
let keysList = Object.keys(model)
keysList.map((key) => {
if (data[key]) {
if (Utils.typeOf(model[key]) === 'Object') {
this.copyValueFromVoData(model[key], data[key])
} else {
this.$set(model, key, data[key])
}
}
})
},
async tabClick(tab) {
if (this.isInDisplay) {
return;
}
let name = tab.name;
switch (name) {
case 'ccvpan':
let ccvpanRequest = buildFn.buildCcvpan(this.model, this.trnName);
this.processLiaccv(ccvpanRequest);
break;
case 'engp':
let engpRequest = buildFn.buildEngp(this.model, this.trnName);
this.processLiaall(engpRequest);
break;
case 'setpan':
let setfegRequest = buildFn.buildSetfeg(this.model, this.trnName);
// 此处利用回调是为了等setfeg的接口调用完成后才去获取setglg参数,由于setglg参数依赖于setfeg函数的返回值
this.processSetpan(setfegRequest, () => {
return buildFn.buildSetglg(this.model, this.trnName);
});
break;
case 'docpan':
let docpanRequest = buildFn.buildDocpan(this.model, this.trnName);
this.processTrndoc(docpanRequest);
break;
case 'glepan':
let glentryRequest = buildFn.buildGlentry(this.model, this.trnName);
this.processGlentry(glentryRequest);
break;
case 'limitbody':
let limitbodyRequest = buildFn.buildLimitbody(this.model, this.trnName);
this.processLimitbody(limitbodyRequest);
break;
case 'doctre':
let doctreRequest = buildFn.buildDoctre(this.model, this.trnName);
this.processDoctre(doctreRequest);
break;
default:
return;
}
},
// 点击获取按钮拉取当前key字段下的表单数据
queryFormData(key) {
console.log(key);
},
// 业务信息=》基本信息=》保函编号-----获取保函编号
async queryOwnref() {
let params = {
ptainr: this.model.gidgrp.apl.pts.ptainr,
businessType: 'LG',
tbl: 'LG',
};
const loading = this.loading();
let res = await Api.post('/service/gctadd/getOwnRef', params);
if (res.respCode == SUCCESS) {
loading.close();
this.model.gidgrp.rec.ownref = res.data;
}
},
// 获取gctadd弹框表格数据
async queryGridEtyPromptDialogData(type, ptytyp) {
let params = {
userId: window.sessionStorage.userId || 'ZL',
ptytyp: ptytyp,
extkey: this.model.gidgrp[type.toLowerCase()].pts.extkey,
};
let res = await Api.post('/service/ptspta/list', params);
if (res.respCode == SUCCESS) {
this.root.$refs['etyDialog'].show = true;
this.root.promptData.data = res.data.ptaInfos;
this.root.promptData.type = type;
}
},
// 选中gctadd弹框表格的行数据
async selectGridEtyPromptData(row) {
let params = {
...row,
};
let res = await Api.post('/service/ptspta/fetch', params);
if (res.respCode == SUCCESS) {
this.$set(this.model.gidgrp, row.role.toLowerCase(), res.data);
}
},
// 业务信息=》基本信息=》支出目的
purposChange(key, value) {
this.handleChangeForm(key, value);
},
// 初始化保函开立类型码表下拉列表
async queryHndtypCodeTableList(trnName) {
let params = {
gitp: {
swiftflg: this.model.gitp.swiftflg,
},
gidgrp: {
rec: {
purpos: this.model.gidgrp.rec.purpos,
},
},
transName: trnName.toUpperCase(),
};
let res = await Api.post('/service/gctadd/initHndtyp', params);
if (res.respCode == SUCCESS) {
this.$set(this.codes, 'voHndtyp', res.data);
}
},
// 是否SWIFT格式修改--联动保函开立类型
handleChangeSwiftflg() {
this.queryHndtypCodeTableList(this.root.trnName);
},
// 支出目的修改--联动保函开立类型
handleChangePurpos() {
this.queryHndtypCodeTableList(this.root.trnName);
},
buildLiaccv () {
let params = {
...buildFn.buildCommonData(this.model, this.trnName),
liaccvg: this.model.liaccv.liaccvg,
oldamt: this.model.liaccv.oldamt,
chgamt: this.model.liaccv.chgamt,
concur: this.model.liaccv.concur,
};
return params
},
// 公共组件setmod处理方式改变触发联动
changeSetmodModel (emitParams) {
let reqParams = {}
switch (emitParams.code) {
case 'processMethods':
reqParams = buildFn.buildSetglg(this.model, this.trnName);
this.calcPayDetail(reqParams)
break
case 'changeDsp':
let index = emitParams.index;
let setglgRequest = buildFn.buildSetglg(this.model, this.trnName);
setglgRequest.setglg = {setgll: emitParams.list};
this.setgllAccts(setglgRequest, index);
break
default:
return
}
}
},
};
export default {
"aplp.ptsget.sdamod.dadsnd":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"fcdgrp.apl.pts.extkey":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"aplp.ptsget.sdamod.seainf":[
{type: "string", required: false, message: "必输项"},
{max: 3,message:"长度不能超过3"}
],
"fcdgrp.apl.pts.nam":[
{type: "string", required: false, message: "必输项"},
{max: 40,message:"长度不能超过40"}
],
"fcdgrp.apl.pta.nam1":[
{type: "string", required: false, message: "必输项"},
{max: 40,message:"长度不能超过40"}
],
"fcdgrp.rec.ownref":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"fcdgrp.rec.reason":[
{type: "string", required: false, message: "必输项"},
{max: 40,message:"长度不能超过40"}
],
"fcdgrp.rec.amt":[
{required: false, message: "必输项"},
{max: 18,message:"整数位不能超过14位"},
{pattern: /(^\d+$)|(^\.\d{1,3}$)|(^\d+\.\d{1,3}$)/, message: "小数位不能超过3位" }
],
"fcdgrp.rec.extact":[
{type: "string", required: false, message: "必输项"},
{max: 8,message:"长度不能超过8"}
],
"fcdgrp.rec.engact":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"cshstm":[
{type: "string", required: false, message: "必输项"},
{max: 1,message:"长度不能超过1"}
],
"fcdgrp.apl.pts.extkey" :null,
"fcdgrp.apl.pts.nam" :null,
"fcdgrp.rec.ownref" :null,
}
\ No newline at end of file
import Pts from '~/components/business/commonModel/Pts';
import Pub from '~/components/business/commonModel/index.js';
export default class Fctcan{
constructor () {
this.data = {
fcdgrp:{
apl:{
pts:new Pts().data,
pta:{
nam1:"", // Externally Visible Name of Address .fcdgrp.apl.pta.nam1
},
},
rec:{
ownref:"", // Our Reference .fcdgrp.rec.ownref
cur:"", // currency .fcdgrp.rec.cur
amt:"", // 保证金金额 .fcdgrp.rec.amt
reason:"", // collect reason .fcdgrp.rec.reason
extact:"", // Extend Account .fcdgrp.rec.extact
engact:"", // Engagement account .fcdgrp.rec.engact
},
},
aplp:{
ptsget:{
sdamod:{
dadsnd:"", // Drag Drop Sender .aplp.ptsget.sdamod.dadsnd
seainf:"", // .aplp.ptsget.sdamod.seainf
},
},
},
gleflg:"", // 是否过�'� .gleflg
cshstm:"", // stream of csh .cshstm
errflg:"", // 已使用保证金 .errflg
pageId: "", // ctx的key
setmod: new Pub().data.Setmod,
mtabut: new Pub().data.Mtabut,
trnmod: new Pub().data.Trnmod,
liaall: new Pub().data.Liaall,
liaccv: new Pub().data.Liaccv,
docpan: new Pub().data.Docpan,
}
}
}
\ No newline at end of file
<template>
<div class="eibs-tab">
<c-col :span="24">
<c-col :span="12">
<c-fullbox>
<el-form-item label="申请人" prop="fcdgrp.apl.pts.extkey">
<c-input
v-model="model.fcdgrp.apl.pts.extkey"
maxlength="16"
placeholder="请输入申请人Extkey"
@keyup.enter.native="showGridPromptDialog('fcdgrp.apl.pts.extkey')"
></c-input>
</el-form-item>
<template slot="footer">
<c-button size="small" type="primary" @click="onAplpDet">
详情
</c-button>
</template>
</c-fullbox>
</c-col>
<c-col :span="12">
<el-form-item label="">
<c-checkbox v-model="model.errflg">已使用保证金</c-checkbox>
</el-form-item>
</c-col>
</c-col>
<c-col :span="24">
<c-col :span="12">
<el-form-item label="" prop="fcdgrp.apl.pts.nam">
<c-input
v-model="model.fcdgrp.apl.pts.nam"
maxlength="40"
placeholder="请输入"
disabled
></c-input>
</el-form-item>
</c-col>
</c-col>
<c-col :span="24">
<c-col :span="12">
<el-form-item label="" prop="fcdgrp.apl.pta.nam1">
<c-input
v-model="model.fcdgrp.apl.pta.nam1"
maxlength="40"
placeholder="请输入Externally Visible Name of Address"
disabled
></c-input>
</el-form-item>
</c-col>
</c-col>
<c-col :span="24">
<c-col :span="12">
<el-form-item label="参考号" prop="fcdgrp.rec.ownref">
<c-input
v-model="model.fcdgrp.rec.ownref"
maxlength="16"
placeholder="请输入参考号"
disabled
></c-input>
</el-form-item>
</c-col>
<c-col :span="12">
<el-form-item label="说明" prop="fcdgrp.rec.reason">
<c-input
v-model="model.fcdgrp.rec.reason"
maxlength="40"
placeholder="请输入collect reason"
disabled
></c-input>
</el-form-item>
</c-col>
</c-col>
<c-col :span="24">
<c-col :span="12">
<c-col :span="12">
<el-form-item label="保证金金额" prop="fcdgrp.rec.cur">
<c-select
v-model="model.fcdgrp.rec.cur"
style="width: 100%"
placeholder="请选择currency"
disabled
>
</c-select>
</el-form-item>
</c-col>
<c-col :span="12">
<el-form-item label="" label-width="20px" prop="fcdgrp.rec.amt">
<c-input
v-model="model.fcdgrp.rec.amt"
placeholder="请输入保证金金额"
disabled
></c-input>
</el-form-item>
</c-col>
</c-col>
<c-col :span="12">
<c-col :span="12">
<el-form-item label="保证金账户" prop="fcdgrp.rec.extact">
<c-input
v-model="model.fcdgrp.rec.extact"
maxlength="8"
placeholder="请输入Extend Account"
disabled
></c-input>
</el-form-item>
</c-col>
<c-col :span="12">
<c-fullbox>
<el-form-item label="" label-width="20px" prop="fcdgrp.rec.engact">
<c-input
v-model="model.fcdgrp.rec.engact"
maxlength="16"
placeholder="请输入Engagement account"
disabled
></c-input>
</el-form-item>
<template slot="footer">
<el-form-item label="" label-width="0" prop="gleflg">
<c-checkbox v-model="model.gleflg" style="margin-left: 10px"
class="" @change="eventFunction('model.gleflg')"
>是否过帐</c-checkbox
>
</el-form-item>
</template>
</c-fullbox>
</c-col>
</c-col>
</c-col>
<!-- <c-col :span="12">
<el-form-item label="" prop="aplp.ptsget.sdamod.seainf">
<c-input
v-model="model.aplp.ptsget.sdamod.seainf"
placeholder="请输入"
></c-input>
</el-form-item>
</c-col> -->
<c-col :span="24">
<c-istream-table
:list="model.cshstm.rows || []"
:columns="columns"
:showSelection="true"
v-on:multipleSelect="multipleSelect"
></c-istream-table>
</c-col>
</div>
</template>
<script>
import Api from "~/service/Api";
import commonProcess from "~/mixin/commonProcess";
import CodeTable from "~/config/CodeTable";
import Event from "~/model/Fctcan/Event";
export default {
inject: ["root"],
props: ["model", "codes"],
mixins: [commonProcess],
data() {
return {
columns: [
'0 1 "INR" 100',
'1 2 "Own Reference" 150',
'2 3 "收取日期" 120 4 7',
'3 4 "Cur" 100',
'4 5 "Relevant Amount" 150 2 8:1 2 5',
'5 6 "" auto',
'6 7 "保证金帐号" 120',
'7 8 "是否过帐" 120',
'8 9 "是否到帐" 120',
'9 10 "是否被用" 120',
'10 11 "说明 " 200',
'11 12 "被用在交易" 120',
"P COLORED TRUE",
"P VERTLINES TRUE",
"P HORZLINES TRUE",
"P MULTISELECT FLASE",
],
};
},
methods: {
...Event,
async multipleSelect(selection) {
console.log(selection);
if (selection) {
let selIds = selection.map(x=>x+1);
let params = {selDst:"cshstm",selIds}
const rtnmsg = await this.executeRule("cshstm",params);
if (rtnmsg.respCode == SUCCESS) {
this.updateModel(rtnmsg.data)
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
}
},
},
created: function () {},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="eibs-tab">
<el-collapse v-model="activeNames" >
<el-collapse-item title="Opnp1" name="Opnp1">
<m-Opnp1 :model="model" :codes="codes" />
</el-collapse-item>
</el-collapse>
</div>
</template>
<script>
import event from '../event'
import Opnp1 from "./Opnp1";
export default {
components: {
"m-Opnp1" : Opnp1,
},
inject: ["root"],
props: ["model", "codes"],
mixins: [event],
data() {
return {
activeNames: ["Opnp1"],
};
},
methods: {},
created () {},
};
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="eContainer">
<c-page title="保证金注销">
<el-form :model="model" :rules="rules" ref="modelForm" label-width="120px" label-position="right" size="small" :validate-on-rule-change="false">
<c-tabs v-model="tabVal" ref="elment" type="card">
<el-tab-pane label="业务信息" name="ovwp">
<c-content>
<m-ovwp :model="model" :codes="codes" />
</c-content>
</el-tab-pane>
<!--PD000027 -->
<el-tab-pane label="费用/账务" name="setpan">
<c-content>
<m-setmod
:model="model"
:codes="codes"
@changeSetmodModel="changeSetmodModel"
/>
</c-content>
</el-tab-pane>
</c-tabs>
</el-form>
<c-function-btn
:handleSubmit="handleSubmit"
:handleCheck="handleCheck"
:handleStash="handleStash"
>
</c-function-btn>
<c-grid-ety-prompt-dialog
ref="etyDialog"
:promptData="promptData"
v-on:select-ety="selectEty"
>
</c-grid-ety-prompt-dialog>
</c-page>
</div>
</template>
<script>
import Api from "~/service/Api";
import operationFunc from "~/mixin/operationFunc";
import event from '../event';
import CodeTable from "~/config/CodeTable";
import Fctcan from "../model";
import Opnp1 from "./Opnp1";
import Ovwp from "./Ovwp";
import formRules from '../model/check'
// import Setpan from "~/components/business/setpan/views";
import Setmod from "~/components/business/setmod/views";
export default {
name: "Gctcan",
components: {
"m-opnp1" : Opnp1,
"m-ovwp" :Ovwp,
// "m-setpan" :Setpan
"m-setmod": Setmod,
},
provide() {
return {
root: this,
};
},
mixins: [event,operationFunc],
data() {
return {
tabVal: "ovwp",
trnName: "fctcan",
model: new Fctcan().data,
rules: formRules,
codes: {
...CodeTable
},
promptData: {
title: 'Select a Party',
columns: [
{
prop: 'ptyInr',
label: 'Party Number'
},
{
prop: 'inr',
label: 'Address Number'
},
{
prop: 'branch',
label: 'Branch Code'
},
{
prop: 'bchName',
label: 'Branch Name'
},
{
prop: 'adrName',
label: 'Address Name'
},
{
prop: 'adr1',
label: 'Address1'
},
{
prop: 'locCty',
label: 'City'
},
{
prop: 'locZip',
label: 'Zip'
},
{
prop: 'bicCode',
label: 'BIC'
}
],
data: []
}
};
},
methods:{
selectEty(row) {
this.$emit("selectEty", {
...row,
role: this.promptData.type
});
this.show = false;
this.currentPage = 1;
},
},
mounted () {
this.init()
},
};
</script>
<style>
</style>
......@@ -11,7 +11,7 @@
:validate-on-rule-change="false">
<c-tabs v-model="tabVal" ref="elment" type="card" @tab-click="tabClick">
<!--gctp PD000047 Overview -->
<!--gctp PD000047 业务信息 -->
<el-tab-pane :label="$t('gctp.PD000047')" name="ovwp">
<c-content>
<m-ovwp :model="model" :codes="codes"/>
......
......@@ -53,7 +53,7 @@ export default {
"SG000483": "中间行(56A)",
"SG000482": "汇款行(52A)",
"PD000810": "FWTG",
"PD000017": "Overview",
"PD000017": "业务信息",
"PD000413": "103 Panel",
"S0000677": "帐号",
"S0000711": "清算代理行",
......
......@@ -47,7 +47,7 @@ export default {
"S0000056": "Open Amount",
"CT000012": "unlimited",
"S0000057": "Claim Number",
"PD000047": "Overview",
"PD000047": "业务信息",
"SF000555": "Date of Claim",
"SF000558": "Reinstate. Amount Interest",
"SF000557": "Reinstate. Amount Principle",
......
......@@ -3,7 +3,7 @@ export default {
"CT000020": "Transfer",
"CT000019": "Letter of Credit",
"CT000029": "Forward Contract",
"CT000428": "Guarantee",
"CT000428": "保函编号",
"CT000025": "Clean Payment",
"CT000022": "Loan",
"CT000021": "Collection",
......
......@@ -20,6 +20,8 @@ const Business = [
{ path: 'gctcan', component: () => import('~/business/gctcan/views'), name: 'gctcan', meta: { title: '保函索赔注销' } },
{ path: 'gitplb', component: () => import('~/business/gitplb/views'), name: 'gitplb', meta: { title: '保函责任计划变更' } },
{ path: 'gitdla', component: () => import('~/business/gitdla/views'), name: 'gitdla', meta: { title: '减额后处理' } },
{ path: 'fctcan', component: () => import('~/business/fctcan/views'), name: 'fctcan', meta: { title: '保证金注销' } },
{ path: 'gitrop', component: () => import('~/business/gitrop/views'), name: 'gitrop', meta: { title: '保函注销后激活' } },
{ path: 'gitpca', component: () => import('~/business/gitpca/views'), name: 'gitpca', meta: { title: '关税保函预注销' } },
......
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