<template>
    <div>
            <!-- 第一行 -->
            <el-row :gutter="24" >
                <el-col :span="4">
                    <el-input size="medium" v-model="query.clientCode" placeholder="客户编码" clearable></el-input>
                </el-col>
                <el-col :span="4">
                    <el-input size="medium" v-model="query.ebcname" placeholder="电商企业名称" clearable></el-input>
                </el-col>
                <el-col :span="4">
                    <el-input size="medium" v-model="query.ebpname" placeholder="平台企业名称" clearable></el-input>
                </el-col>
                <el-col :span="4">
                    <el-input size="medium" v-model="query.logisticsName" placeholder="物流企业名称" clearable></el-input>
                </el-col>
                <el-col :span="4">
                    <el-input size="medium" v-model="query.agentName" placeholder="申报企业名称" clearable></el-input>
                </el-col>
            </el-row>

            <!-- 第二行 -->
            <el-row :gutter="24" >
                <el-col :span="4">
                    <el-input size="medium" v-model="query.customsName" placeholder="申报口岸名称" clearable></el-input>
                </el-col>
            </el-row>

        <!-- 第三行 -->
        <el-row :gutter="24" >
            <el-col :span="1.5">
                <el-button size="medium" @click="getList">查询</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button size="medium" type="info" @click="exportDataToExcel">导出</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button size="medium" type="success" @click="addForm">新增</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button size="medium" type="danger">删除</el-button>
            </el-col>
        </el-row>
        <el-row :gutter="24" style="margin-left: 3px">
            <el-table
                    ref="multipleTable"
                    :data="tableData"
                    tooltip-effect="dark"
                    style="width: 100%;"
                    size="medium"
                    @selection-change="handleSelectionChange">
                <el-table-column
                        type="selection"
                        width="55">
                </el-table-column>
                <el-table-column
                        prop="clientCode"
                        label="客户编码"
                        width="120"
                        >
                </el-table-column>
                <el-table-column
                        prop="clientName"
                        label="客户名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        label="电商企业代码"
                        prop="ebccode"
                        width="120">
                </el-table-column>-->
                <el-table-column
                        prop="ebcname"
                        label="电商企业名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        prop="ebpcode"
                        label="电商平台代码"
                        show-overflow-tooltip>
                </el-table-column>-->
                <el-table-column
                        prop="ebpname"
                        label="电商平台名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        prop="logisticsCode"
                        label="物流企业代码"
                        show-overflow-tooltip>
                </el-table-column>-->
                <el-table-column
                        prop="logisticsName"
                        label="物流企业名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        prop="agentCode"
                        label="申报企业代码"
                        show-overflow-tooltip>
                </el-table-column>-->
                <el-table-column
                        prop="agentName"
                        label="申报企业名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        prop="customsCode"
                        label="申报口岸代码"
                        show-overflow-tooltip>
                </el-table-column>-->
                <el-table-column
                        prop="customsName"
                        label="申报口岸名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        prop="portCode"
                        label="出口口岸代码"
                        show-overflow-tooltip>
                </el-table-column>-->
                <el-table-column
                        prop="portName"
                        label="出口口岸名称"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <!--<el-table-column
                        prop="ownerCode"
                        label="生产销售企业代码"
                        show-overflow-tooltip>
                </el-table-column>-->
                <el-table-column
                        prop="ownerName"
                        label="生产销售企业"
                        width="120"
                        show-overflow-tooltip>
                </el-table-column>
                <el-table-column
                        prop="loctNo"
                        label="监管场所"
                        show-overflow-tooltip>
                </el-table-column>
                <el-table-column
                        prop="createTime"
                        label="创建时间"
                        show-overflow-tooltip>
                </el-table-column>

                <el-table-column
                        fixed="right"
                        label="操作"
                        width="120">
                    <template slot-scope="scope">
                        <el-button
                                @click.native.prevent="ediForm(scope.row)"
                                type="text"
                                style="color: #5BB75B"
                                size="small">
                            更新
                        </el-button>
                        <el-button
                                @click.native.prevent="deleteRow(scope.row.id)"
                                type="text"
                                style="color: #5BB75B"
                                size="small">
                            移除
                        </el-button>
                    </template>
                </el-table-column>
            </el-table>
        </el-row>
        <el-row>
            <div class="block">
                <el-pagination
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        :current-page="query.pageNum"
                        :page-sizes="[100, 200, 300, 400]"
                        :page-size="query.pageSize"
                        layout="total, sizes, prev, pager, next, jumper"
                        :total="total">
                </el-pagination>
            </div>
        </el-row>
        <el-dialog
                :title="'客户信息'+textMap[dialogStatus]"
                :visible.sync="dialogVisible"
                width="65%"
                :before-close="handleClose">
            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="130px" class="demo-ruleForm">
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="客户编码" prop="clientCode">
                            <el-input size="medium" v-model="ruleForm.clientCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="客户名称" prop="clientName">
                            <el-input size="medium" v-model="ruleForm.clientName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="电商企业代码" prop="ebccode">
                            <el-input size="medium" v-model="ruleForm.ebccode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="电商企业名称" prop="ebcname">
                            <el-input size="medium" v-model="ruleForm.ebcname"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="电商平台代码" prop="ebpcode">
                            <el-input size="medium" v-model="ruleForm.ebpcode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="电商平台名称" prop="ebpname">
                            <el-input size="medium" v-model="ruleForm.ebpname"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="物流企业代码" prop="logisticsCode">
                            <el-input size="medium" v-model="ruleForm.logisticsCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="物流企业名称" prop="logisticsName">
                            <el-input size="medium" v-model="ruleForm.logisticsName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="申报企业代码" prop="agentCode">
                            <el-input size="medium" v-model="ruleForm.agentCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="申报企业名称" prop="agentName">
                            <el-input size="medium" v-model="ruleForm.agentName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="申报口岸代码" prop="customsCode">
                            <el-input size="medium" v-model="ruleForm.customsCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="申报口岸名称" prop="customsName">
                            <el-input size="medium" v-model="ruleForm.customsName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="出口口岸代码" prop="portCode">
                            <el-input size="medium" v-model="ruleForm.portCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="出口口岸名称" prop="portName">
                            <el-input size="medium" v-model="ruleForm.portName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="出口口岸代码" prop="portCode">
                            <el-input size="medium" v-model="ruleForm.portCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="出口口岸名称" prop="portName">
                            <el-input size="medium" v-model="ruleForm.portName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="生产销售企业代码" prop="ownerCode">
                            <el-input size="medium" v-model="ruleForm.ownerCode"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="生产销售企业名称" prop="ownerName">
                            <el-input size="medium" v-model="ruleForm.ownerName"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="10">
                        <el-form-item label="监管场所" prop="loctNo">
                            <el-input size="medium" v-model="ruleForm.loctNo"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row :gutter="20">
                    <el-col :span="20">
                        <el-form-item>
                            <el-button size="medium" type="primary" @click="dialogStatus==='create'?addsubmitForm('ruleForm'):edisubmitForm('ruleForm')">保存</el-button>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
        </el-dialog>
    </div>
</template>

<script>
    import {insertCustomer,delCustomer,ediCustomer,selectCustomers} from '../../api/consigner/customerconfig'
    import * as XLSX from 'xlsx';
    import { saveAs } from 'file-saver';
    export default {
        data() {
            return {
                dialogStatus: '',
                dialogVisible: false,
                textMap: {
                    update: '更新',
                    create: '新增'
                },
                ruleForm: {
                    id:0,
                    userId:'',
                    userName:'',
                    ext1:'',
                    ext2:'',
                    ext3:'',
                    clientCode: '',
                    clientName:'',
                    ebccode:'',
                    ebcname: '',
                    ebpcode:'',
                    ebpname:'',
                    logisticsCode:'',
                    logisticsName:'',
                    agentCode:'',
                    agentName:'',
                    customsCode:'',
                    customsName:'',
                    portCode:'',
                    portName:'',
                    ownerCode:'',
                    ownerName:'',
                    loctNo:''
                },
                rules: {
                    clientCode: [
                        { required: true, message: '请输入客户编码', trigger: 'blur' },
                        { min: 1, max: 18, message: '长度在 1 到 18 个字符', trigger: 'blur' }
                    ],
                    clientName: [
                        { required: true, message: '请输入客户名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    ebccode: [
                        { required: true, message: '请输入电商企业代码', trigger: 'blur' },
                        { min: 1, max: 18, message: '长度在 1 到 18 个字符', trigger: 'blur' }
                    ],
                    ebcname: [
                        { required: true, message: '请输入电商企业名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    ebpcode: [
                        { required: true, message: '请输入电商平台代码', trigger: 'blur' },
                        { min: 1, max: 18, message: '长度在 1 到 18 个字符', trigger: 'blur' }
                    ],
                    ebpname: [
                        { required: true, message: '请输入电商平台名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    logisticsCode: [
                        { required: true, message: '请输入物流企业代码', trigger: 'blur' },
                        { min: 1, max: 18, message: '长度在 1 到 18 个字符', trigger: 'blur' }
                    ],
                    logisticsName: [
                        { required: true, message: '请输入物流企业名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    agentCode: [
                        { required: true, message: '请输入申报企业代码', trigger: 'blur' },
                        { min: 1, max: 18, message: '长度在 1 到 18 个字符', trigger: 'blur' }
                    ],
                    agentName: [
                        { required: true, message: '请输入申报企业名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    customsCode: [
                        { required: true, message: '请输入申报口岸代码', trigger: 'blur' },
                        { min: 1, max: 4, message: '长度在 1 到 4 个字符', trigger: 'blur' }
                    ],
                    customsName: [
                        { required: true, message: '请输入申报口岸名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    portCode: [
                        { required: true, message: '请输入出口口岸代码', trigger: 'blur' },
                        { min: 1, max: 4, message: '长度在 1 到 4 个字符', trigger: 'blur' }
                    ],
                    portName: [
                        { required: true, message: '请输入出口口岸名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ],
                    ownerCode: [
                        { required: true, message: '生产销售企业代码', trigger: 'blur' },
                        { min: 1, max: 4, message: '长度在 1 到 18 个字符', trigger: 'blur' }
                    ],
                    ownerName: [
                        { required: true, message: '生产销售企业名称', trigger: 'blur' },
                        { min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
                    ]
                },
                total:0,
                tableData: [],
                multipleSelection: [],
                query: {
                    clientCode: '',
                    ebcname: '',
                    ebpname: '',
                    logisticsName: '',
                    agentName: '',
                    customsName: '',
                    pageNum:1,
                    pageSize:20
                },
            };
        },
        mounted() {
            this.getList();
        },
        methods: {
            addForm(){
                this.dialogVisible = true;
                this.dialogStatus = 'create';
            },
            ediForm(row){
                this.dialogVisible = true;
                this.dialogStatus = 'update';
                this.ruleForm=row;
            },
            //Dialog关闭提示
            handleClose(done) {
                this.$confirm('确认关闭?')
                    .then(_ => {
                        done();
                    })
                    .catch(_ => {
                    });
            },
            addsubmitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        this.ruleForm.id='';
                        insertCustomer(this.ruleForm).then((response) => {
                            const res = response.data
                            if (res.code !== '200') {
                                return this.$message.error('资源添加,失败!')
                            }
                            this.$message.success('资源添加,成功!')
                            this.dialogVisible = false;
                            this.getList();
                        }).catch(error => {
                            // 关闭加载
                            this.$message.warning('资源添加,失败!')
                        })
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            edisubmitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        ediCustomer(this.ruleForm).then((response) => {
                            const res = response.data
                            if (res.code !== '200') {
                                return this.$message.error('更新资源添加,失败!')
                            }
                            this.$message.success('更新资源添加,成功!')
                            this.dialogVisible = false;
                            this.getList();
                        }).catch(error => {
                            // 关闭加载
                            this.$message.warning('更新资源添加,失败!')
                        })
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            getList(){
                selectCustomers(this.query).then((response) => {
                    const res = response.data
                    if (res.code !== '200') {
                        return this.$message.error('获取消息收发记录,失败!')
                    }
                    // 获取列表数据
                    this.tableData = res.data.list
                    // 获取列表的总记录数
                    this.total = res.data.total
                    this.$message.success('获取消息收发记录,成功!');
                }).catch(error => {
                    // 关闭加载
                    this.$message.error(error.toString())
                })
            },
            handleSizeChange(val) {
                this.query.pageSize=val;
                this.getList();
            },
            handleCurrentChange(val) {
                this.query.pageNum=val;
                this.getList()
            },
            deleteRow(id) {
                this.$confirm('此操作永久删除该消息收发记录, 是否继续?', '警告', {
                        confirmButtonText: '确定删除',
                        cancelButtonText: '取消',
                        type: 'warning'
                    }
                ).then(() => {
                    delCustomer({id: id}).then((response) => {
                        const res = response.data
                        this.$message.success(res.msg)
                        this.getList()
                    }).catch(error => {
                        this.$message.error('删除车载运单,失败!')
                    })
                }).catch(() => {
                })
            },
            handleSelectionChange(val) {
                this.multipleSelection = val;
            },
            exportDataToExcel() {
                // 获取当前日期作为文件名的一部分
                const currentDate = new Date();
                const fileName = `导出数据_${currentDate.toISOString().split('T')[0]}.xlsx`;

                // 将表格数据转换为Excel格式
                const ws = XLSX.utils.json_to_sheet(this.tableData);
                const wb = XLSX.utils.book_new();
                XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

                // 导出为Excel文件
                XLSX.writeFile(wb, fileName);

                // 或者使用file-saver保存文件
                // const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
                // try {
                //   saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName);
                // } catch (e) {
                //   if (typeof console !== 'undefined') console.log(e, wbout);
                // }
            }
        }
    };
</script>

<style scoped>

</style>