<template> <div class="eibs-tab"> <el-table :data="model.recgrp.tbk" @selection-change="handleSelectionChange" ref="multipleTable" style="width: 100%"> <el-table-column :selectable="rowSelectable" type="selection" v-if="showSelection" width="55"></el-table-column> <el-table-column label="明细主键" prop="seqno" width="100"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.listopertype, 'opertype')" label="明细操作类型" prop="listopertype" width="150"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.balofpaycode, this.balofpaycode)" label="国际收支交易编码" prop="balofpaycode" width="150"></el-table-column> <el-table-column label="付款金额" prop="payamt" width="150"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.bustypecode, 'bustypecode')" label="业务种类代码" prop="bustypecode" width="150"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.bustypelist, 'bustypelist.' + row.bustypecode)" label="业务种类明细分类" prop="bustypelist" width="150"></el-table-column> <el-table-column label="实际付款人代码" prop="actualpayercode" width="150"></el-table-column> <el-table-column label="实际付款人名称" prop="actualpayername" width="150"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.ifprepayment, 'fingua')" label="是否预付款" prop="ifprepayment" width="150"></el-table-column> <el-table-column label="预付款比例" prop="prepayerscale" width="150"></el-table-column> <el-table-column label="结账期" prop="accountperiod" width="150"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.custstate, 'custstate')" label="物流状态" prop="custstate" width="150"></el-table-column> <el-table-column label="政府部门核准证书编号" prop="certificateno" width="150"></el-table-column> <el-table-column label="融资合同备案号" prop="contractno" width="150"></el-table-column> <el-table-column :show-overflow-tooltip="true" label="交易附言" prop="addword" width="150"></el-table-column> <el-table-column :formatter="(row) => getCodeLabel(row.sta, 'rmbsta')" fixed="right" label="状态" prop="sta" v-if="showSta" width="100"></el-table-column> <el-table-column fixed="right" label="操作" v-if="showButton" width="150"> <template slot-scope="scope"> <el-button :disabled="isButtonDisabled(scope.row)" @click="handleEdit(scope.$index,scope.row)" size="mini">编辑 </el-button> <el-button :disabled="isButtonDisabled(scope.row)" @click="handleDelete(scope.$index)" size="mini" v-if="showDeleteButton(scope.row)"> 删除 </el-button> </template> </el-table-column> </el-table> <div style="margin-top: 20px" v-show="showButton"> <el-button :disabled="!isFlgChecked" @click="addRow" type="primary">添 加</el-button> <!-- <el-button @click="deleteSelectedRows" type="primary">删 除</el-button>--> </div> <el-dialog :before-close="cancel" :visible.sync="showDialog" center title="明细信息" v-dialogDrag v-if="showDialog"> <el-form :model="formData" :rules="rules" :validate-on-rule-change="false" label-width="150px" ref="formRef" style="width: 100%"> <c-row> <c-col :span="12"> <el-form-item label="国际收支交易编码" prop="balofpaycode"> <c-select :code="balofpaycode" placeholder="请输入国际收支交易编码" v-model="formData.balofpaycode"></c-select> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="付款金额" prop="payamt"> <c-input-currency placeholder="请输入付款金额" v-model="formData.payamt"></c-input-currency> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="业务种类代码" prop="bustypecode"> <c-select dbCode="RMB18" placeholder="请输入业务种类代码" sort="SRT" v-model="formData.bustypecode"></c-select> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="业务种类明细分类" prop="bustypelist"> <c-select :dbCode="bustypelistCode" :disabled="disabledBustypelist" placeholder="请输入业务种类明细分类" sort="SRT" v-model="formData.bustypelist"></c-select> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="实际付款人代码" prop="actualpayercode"> <c-input maxlength="18" placeholder="请输入实际付款人代码" v-model="formData.actualpayercode"></c-input> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="实际付款人名称" prop="actualpayername"> <c-input maxlength="128" placeholder="请输入实际付款人名称" v-model="formData.actualpayername"></c-input> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="是否预付款" prop="ifprepayment"> <c-select dbCode="ISYN" placeholder="请输入是否预付款" v-model="formData.ifprepayment"></c-select> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="预付款比例" prop="prepayerscale"> <c-input-number :disabled="disabledPrepayerscale" :precision="2" placeholder="请输入预付款比例" v-model="formData.prepayerscale"></c-input-number> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="结账期" prop="accountperiod"> <c-input-number :disabled="disabledAccountperiod" placeholder="请输入结账期" v-model="formData.accountperiod"></c-input-number> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="物流状态" prop="custstate"> <c-select @change="changeCuststate" dbCode="RMB117" placeholder="请输入物流状态" sort="SRT" v-model="formData.custstate"></c-select> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="政府部门核准证书编号" prop="certificateno"> <c-input maxlength="32" placeholder="请输入政府部门核准证书编号" v-model="formData.certificateno"></c-input> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="融资合同备案号" prop="contractno"> <c-input maxlength="24" placeholder="请输入融资合同备案号" v-model="formData.contractno"></c-input> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="24"> <el-form-item label="交易附言" prop="addword"> <c-input maxlength="128" placeholder="请输入交易附言" show-word-limit type="textarea" v-model="formData.addword"></c-input> </el-form-item> </c-col> </c-row> </el-form> <span class="dialog-footer" slot="footer"> <el-button @click="saveRow" type="primary">保 存</el-button> <el-button @click="cancel" type="primary">取 消</el-button> </span> </el-dialog> </div> </template> <script> import event from "../event"; import {getBopCod} from "../../../../../../service/business/rmb"; import commonDepend from "../../../../../../mixin/commonDepend"; import commonMixin from "../../../../../../mixin/commonMixin"; import {checkRuleOfTBK} from "RcpmisRules" export default { props: ["model", "codes"], mixins: [commonDepend, commonMixin, event], data() { return { balofpaycode: [], formData: { balofpaycode: '', payamt: 0, bustypecode: '', bustypelist: '', actualpayercode: '', actualpayername: '', ifprepayment: '', prepayerscale: 0, accountperiod: 0, custstate: '', certificateno: '', contractno: '', addword: '', }, }; }, created() { let request = { dir: "O", cod: this.formData.balofpaycode, branch: this.model.rmbbut.ownextkey, }; getBopCod(request).then(response => { if (response.respCode === SUCCESS) { for (const item of response.data) { const option = { label: item.cod + '-' + item.txt, value: item.cod }; let existingIndex = this.balofpaycode.findIndex(item => item.value === option.value); if (existingIndex !== -1) { this.balofpaycode.splice(existingIndex, 1) } this.balofpaycode.push(option); } } }); }, computed: { bustypelistCode() { return this.formData.bustypecode === "700052" ? "700051" : this.formData.bustypecode; }, disabledBustypelist() { switch (this.formData.bustypecode) { case "100011": case "600011": case "600031": case "700022": case "800041": case "700041": case "800071": case "800081": case "700021": case "700051": case "700052": case "100021": case "800031": case "800011": return false; default: return true; } }, disabledPrepayerscale() { return this.formData.ifprepayment !== 'Y'; }, disabledAccountperiod() { return this.formData.ifprepayment !== 'Y'; }, rules() { let checks = checkRuleOfTBK().call({module:"TBKAME"}).call(this,this) return checks // return { // balofpaycode: [ // {required: true, message: '必输项'} // ], // payamt: [ // { // validator: (rule, value, callback) => { // if (value <= 0) { // return callback(new Error('付款金额必须大于0')) // } // callback(); // }, trigger: 'blur' // } // ], // bustypecode: [ // {required: true, message: '必输项'} // ], // bustypelist: [ // { // validator: (rule, value, callback) => { // switch (this.formData.bustypecode) { // case "100011": // case "100021": // case "600011": // case "600031": // case "700022": // case "800011": // case "800031": // case "800041": // case "700041": // case "700051": // case "700052": // case "800071": // case "800081": // if (!value) { // callback(new Error("必输项")); // } // } // callback(); // } // } // ], // actualpayercode: [ // {required: true, message: '必输项'}, // { // validator: (rule, value, callback) => { // if (this.formData.bustypecode !== "200012" && this.formData.payamt <= 30000) { // if (value !== this.model.recgrp.ads.payerorgcode) { // callback(new Error("实际付款人代码应和付款人机构代码或身份证号码相同")); // } // } // callback(); // }, trigger: 'blur' // } // ], // actualpayername: [ // {required: true, message: '必输项'}, // { // validator: (rule, value, callback) => { // if (this.formData.bustypecode !== "200012" && this.formData.payamt <= 30000) { // if (value !== this.model.recgrp.ads.payername) { // callback(new Error("实际付款人名称应和付款人名称相同")); // } // } // callback(); // }, trigger: 'blur' // } // ], // ifprepayment: [ // {required: true, message: '必输项'} // ], // prepayerscale: [ // { // validator: (rule, value, callback) => { // if (this.formData.ifprepayment === "Y") { // if (value <= 0 || value > 1) { // return callback(new Error("预付款比例必须大于0小于等于1")); // } // } else { // if (value < 0 || value > 1) { // return callback(new Error("预付款比例必须大于等于0小于等于1")); // } // } // callback(); // }, trigger: 'blur' // } // ], // accountperiod: [ // { // validator: (rule, value, callback) => { // if (this.formData.ifprepayment === "Y") { // if (value <= 0 || value >= 99999) { // return callback(new Error("结账期值必须大于0小于99999")); // } // } else { // if (value < 0 || value >= 99999) { // return callback(new Error("结账期值必须大于等于0小于99999")); // } // } // callback(); // }, trigger: 'blur' // } // ], // custstate: [ // {required: this.formData.ifprepayment === "Y", message: '必输项'} // ], // addword: [ // {required: true, message: '必输项'} // ], // } }, }, watch: { 'model.rmbbut.flg': { handler(newValue) { const dectyp = this.model.pblmod.dectyp; const opertype = this.model.recgrp.ads.opertype; if (dectyp === "D" && opertype === "1") { if (newValue === "X") { this.model.recgrp.tbk.forEach(row => { if (row.sta !== 'D' && row.sta !== 'G' && row.acp !== 'X') { this.$refs.multipleTable.toggleRowSelection(row); } }) } else { this.$refs.multipleTable.clearSelection(); } } }, }, "model.recgrp.ads.opertype": { handler(newValue) { const dectyp = this.model.pblmod.dectyp; if (dectyp === "D") { if (newValue === "3") { this.model.recgrp.tbk.forEach(row => { if (row.sta !== 'D' && row.sta !== 'G' && row.acp !== 'X') { this.$refs.multipleTable.toggleRowSelection(row); } }) } else { this.$refs.multipleTable.clearSelection(); } } } }, 'formData.balofpaycode': { handler(newValue) { const modifySet = this.formData.modifySet; if (!modifySet || !modifySet.includes('custstate')) { this.formData.custstate = newValue.startsWith('1') ? '0001' : ''; } }, }, 'formData.ifprepayment': { handler(newValue) { this.formData.prepayerscale = newValue !== 'Y' ? 0 : this.formData.prepayerscale; this.formData.accountperiod = newValue !== 'Y' ? 0 : this.formData.accountperiod; }, }, 'formData.bustypecode': { handler(newValue, oldValue) { if (newValue === '') { this.formData.actualpayercode = ''; this.formData.actualpayername = ''; } if (newValue === '200012' && this.formData.payamt > 30000) { this.formData.actualpayercode = ''; this.formData.actualpayername = ''; } else { this.formData.actualpayercode = this.model.recgrp.ads.payerorgcode; this.formData.actualpayername = this.model.recgrp.ads.payername; } if (newValue !== oldValue && oldValue !== '') { this.formData.bustypelist = ''; } }, }, 'formData.payamt': { handler(newValue) { if (newValue === 0) { this.formData.actualpayercode = ''; this.formData.actualpayername = ''; } if (this.formData.bustypecode === '200012' && newValue > 30000) { this.formData.actualpayercode = ''; this.formData.actualpayername = ''; } else { this.formData.actualpayercode = this.model.recgrp.ads.payerorgcode; this.formData.actualpayername = this.model.recgrp.ads.payername; } }, }, }, methods: { handleSelectionChange(selection) { this.selectedRows = selection; // 当前行被选中时,备份原始值并更新值 selection.forEach(row => { if (row.acp !== 'X') { row.backupValue = row.listopertype; if (row.backupValue === '2' || row.backupValue === '3' || row.sta === '8') { row.listopertype = '3'; } else { if (row.sta === 'D' || row.sta === 'G') { row.listopertype = row.backupValue; } else { row.listopertype = '1'; } } // 添加一个标记,表示当前行已被选中 row.acp = 'X'; } }); // 检查哪些行被取消选中,并恢复它们的原始值 this.model.recgrp.tbk.forEach(row => { if (!selection.includes(row) && row.acp === 'X') { row.listopertype = row.backupValue; // 清除选中标记 row.acp = ''; } }) }, addRow() { this.isEdit = false; let tbk = { seqno: this.model.recgrp.tbk.length + 1, listopertype: '1', balofpaycode: '', payamt: 0, bustypecode: '', bustypelist: '', actualpayercode: '', actualpayername: '', ifprepayment: '', prepayerscale: 0, accountperiod: 0, custstate: '', certificateno: '', contractno: '', addword: '', acp: 'X', }; this.index = this.model.recgrp.tbk.push(tbk) - 1; this.formData = this.model.recgrp.tbk[this.index]; this.toggleShow(); }, saveRow() { this.$refs.formRef.validate((valid) => { if (valid) { this.$set(this.model.recgrp.tbk, this.index, {...this.formData}); this.$refs.formRef.resetFields(); this.toggleShow(); this.formData.modifySet = []; } else { // 前端校验失败 this.$notify({ title: '失败', message: '校验失败', type: 'error', }); return false; } }) }, cancel() { if (!this.isEdit) { this.model.recgrp.tbk.splice(this.index, 1); } this.showDialog = false; this.formData.modifySet = []; }, handleDelete(index) { this.model.recgrp.tbk.splice(index, 1); }, deleteSelectedRows() { if (this.selectedRows.length === 0) { this.$message.warning('请先选择要删除的数据行'); return; } this.selectedRows.forEach(row => { const index = this.model.recgrp.tbk.indexOf(row); if (index !== -1) { this.model.recgrp.tbk.splice(index, 1); } }); this.$message.success('成功删除选中行'); this.selectedRows = []; }, changeCuststate() { this.customAddModify(this.formData, "custstate"); }, } }; </script> <style> </style>