<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>