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