<template> <div class="eibs-tab"> <el-table :data="model.recgrp.tfd" @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 label="买入币种" prop="buycurrencycode" width="150"></el-table-column> <el-table-column label="买入金额" prop="buyamt" width="150"></el-table-column> <el-table-column label="价格" prop="price" width="150"></el-table-column> <el-table-column label="卖出币种" prop="sellcurrencycode" width="150"></el-table-column> <el-table-column label="卖出金额" prop="sellamt" width="150"></el-table-column> <el-table-column label="交易日" prop="tradedate" width="150"></el-table-column> <el-table-column label="到期日" prop="enddate" width="150"></el-table-column> <el-table-column label="结算日" prop="settledate" 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="buycurrencycode"> <c-select-cur :disabled="buyDisabled" dbCode="CURTXT" placeholder="请选择买入币种" style="width:100%" v-model="formData.buycurrencycode"></c-select-cur> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="买入金额" prop="buyamt"> <c-input-currency :disabled="buyDisabled" placeholder="请输入买入金额" v-model="formData.buyamt"></c-input-currency> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="价格" prop="price"> <c-input-currency :precision=8 maxlength="16" placeholder="请输入价格" v-model="formData.price"></c-input-currency> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="卖出币种" prop="sellcurrencycode"> <c-select-cur :disabled="selDisabled" dbCode="CURTXT" placeholder="请选择卖出币种" style="width:100%" v-model="formData.sellcurrencycode"></c-select-cur> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="卖出金额" prop="sellamt"> <c-input-currency :disabled="selDisabled" placeholder="请输入卖出金额" v-model="formData.sellamt"></c-input-currency> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="交易日" prop="tradedate"> <c-date-picker placeholder="请选择交易日" style="width:100%" type="date" v-model="formData.tradedate"></c-date-picker> </el-form-item> </c-col> </c-row> <c-row> <c-col :span="12"> <el-form-item label="到期日" prop="enddate"> <c-date-picker placeholder="请选择交易日" style="width:100%" type="date" v-model="formData.enddate"></c-date-picker> </el-form-item> </c-col> <c-col :span="12"> <el-form-item label="结算日" prop="settledate"> <c-date-picker placeholder="请选择结算日" style="width:100%" type="date" v-model="formData.settledate"></c-date-picker> </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 commonMixin from "../../../../../../mixin/commonMixin"; import moment from 'moment'; import {checkRuleOfTFD} from "RcpmisRules" export default { mixins: [commonMixin, event], props: ["model", "codes"], data() { return { formData: { sellcurrencycode: '', buyamt: '', bustypelist: '', buycurrencycode: '', actualpayercode: '', tradedate: '', enddate: '', settledate: '', }, }; }, computed: { selDisabled() { if (this.model.recgrp.ads.cnybuytype === "2") { this.formData.sellcurrencycode = "CNY"; } return this.model.recgrp.ads.cnybuytype === "2"; }, buyDisabled() { if (this.model.recgrp.ads.cnybuytype === "1") { this.formData.buycurrencycode = "CNY"; } return this.model.recgrp.ads.cnybuytype === "1"; }, rules() { let checks = checkRuleOfTFD().call({module:"TFDAME"}).call(this,this,moment) return checks // return { // buyamt: [ // {required: true, message: "必输项"}, // {validator:(rule,value,callback)=>{ // if(Number(value) === 0){ // callback(new Error('必输项')) // } // if(this.model.recgrp.ads.cnybuytype=="2" && this.formData.price !== ''){ // this.formData.sellamt = value*this.formData.price; // callback() // } // callback() // } // } // ], // buycurrencycode: [ // {required: true, message: "必输项"}, // { // validator: (rule, value, callback) => { // if (this.formData.sellcurrencycode == value && this.model.recgrp.ads.cnybuytype == "2") { // callback(new Error('卖出币种为CNY时买入币种必须为外币')) // } // callback() // }, // trigger: ['blur', 'change'] // } // ], // enddate: [ // {required: true, message: "必输项"}, // { // validator: (rule, value, callback) => { // const moment = require('moment'); // const settledate = moment(this.formData.settledate); // if (value != "" && moment(settledate).isAfter(value)) { // callback(new Error('到期日需大于结算日')) // } // callback() // }, // trigger: ['blur', 'change'] // } // ], // price: [ // {required: true, message: "必输项"}, // {validator:(rule,value,callback)=>{ // if(Number(value) === 0){ // callback(new Error('必输项')) // } // callback() // } // } // ], // sellamt: [ // {required: true, message: "必输项"}, // {validator:(rule,value,callback)=>{ // if(Number(value) === 0){ // callback(new Error('必输项')) // } // if(this.model.recgrp.ads.cnybuytype=="1" && this.formData.price !== ''){ // this.formData.buyamt = value * this.formData.price; // callback() // } // callback() // } // } // ], // sellcurrencycode: [ // {required: true, message: "必输项"}, // { // validator: (rule, value, callback) => { // if (value == this.formData.buycurrencycode && this.model.recgrp.ads.cnybuytype == "1") { // callback(new Error('买入币种为CNY时卖出币种必须为外币')) // } // callback() // }, // trigger: ['blur', 'change'] // } // ], // settledate: [ // {required: true, message: "必输项"}, // { // validator: (rule,value,callback) => { // const moment = require('moment'); // const tradedate = moment(this.formData.tradedate); // if(tradedate!="" && !moment(value).isAfter(tradedate)){ // callback(new Error('结算日不能小于交易日期')) // } // callback() // }, // trigger: ['blur', 'change'] // } // ], // tradedate: [ // {required: true, message: "必输项"}, // { // validator: (rule, value, callback) => { // const moment = require('moment'); // const today = moment().startOf('day'); // if (moment(value).isBefore(today)) { // callback(new Error('交易日不能小于当日 ')) // } // callback() // }, // trigger: ['blur', 'change'] // } // ], // } }, }, 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.tfd.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.tfd.forEach(row => { if (row.sta !== 'D' && row.sta !== 'G' && row.acp !== 'X') { this.$refs.multipleTable.toggleRowSelection(row); } }) } else { this.$refs.multipleTable.clearSelection(); } } } }, }, 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.tfd.forEach(row => { if (!selection.includes(row) && row.acp === 'X') { row.listopertype = row.backupValue; // 清除选中标记 row.acp = ''; } }) }, addRow() { this.isEdit = false; let tfd = { seqno: this.model.recgrp.tfd.length + 1, listopertype: '1', sellcurrencycode: '', buyamt: '', bustypelist: '', buycurrencycode: '', actualpayercode: '', tradedate: new Date(), enddate: '', settledate: '', acp: 'X', }; this.index = this.model.recgrp.tfd.push(tfd) - 1; this.formData = this.model.recgrp.tfd[this.index]; this.toggleShow(); }, saveRow() { this.$refs.formRef.validate((valid) => { if (valid) { this.$set(this.model.recgrp.tfd, this.index, {...this.formData}); this.$refs.formRef.resetFields(); this.toggleShow(); } else { // 前端校验失败 this.$notify({ title: '失败', message: '校验失败', type: 'error', }); return false; } }) }, cancel() { if (!this.isEdit) this.model.recgrp.tfd.splice(this.index, 1); this.toggleShow(); }, handleDelete(index) { this.model.recgrp.tfd.splice(index, 1); }, deleteSelectedRows() { if (this.selectedRows.length === 0) { this.$message.warning('请先选择要删除的数据行'); return; } this.selectedRows.forEach(row => { const index = this.model.recgrp.tfd.indexOf(row); if (index !== -1) { this.model.recgrp.tfd.splice(index, 1); } }); this.$message.success('成功删除选中行'); this.selectedRows = []; }, } } </script> <style> </style>