<template>
    <div>
        <basic-container v-if="isShow">
            <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :search.sync="query"
                v-model="form" id="out-table" :header-cell-class-name="headerClassName" ref="crud" @row-del="rowDel"
                @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
                @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
                @resetColumn="resetColumn('crud', 'option', 'optionBack', 501)"
                @saveColumn="saveColumn('crud', 'option', 'optionBack', 501)" @on-load="onLoad">
                <template slot="menuLeft">
                    <el-button type="primary" size="small" icon="el-icon-plus" @click="addButton">创建单据
                    </el-button>
                    <el-button type="success" size="small" :disabled="selectionList.length != 1"
                        @click="copyButton">复制单据
                    </el-button>
                    <el-button type="warning" size="small" @click="outExport">导 出</el-button>
                    <div style="margin-top: 10px">
                        <el-tabs type="card" v-model="query.billStatus" @tab-click="handleClick">
                            <!-- <el-tab-pane label="录入" name="1"></el-tab-pane>
                            <el-tab-pane label="提交" name="2"></el-tab-pane>
                            <el-tab-pane label="受理" name="3"></el-tab-pane> -->
                            <el-tab-pane label="待确认" name="4"></el-tab-pane>
                            <el-tab-pane label="已生成" name="5"></el-tab-pane>
                            <el-tab-pane label="订舱驳回" name="7"></el-tab-pane>
                            <el-tab-pane label="全部" name="0"></el-tab-pane>
                        </el-tabs>
                    </div>
                </template>
                <template slot="menu" slot-scope="{ row, index }">
                    <el-button size="small" icon="el-icon-edit" type="text" @click="rowEdit(row)">编辑</el-button>
                    <el-button size="small" icon="el-icon-delete" type="text" @click="rowDel(row, index)"
                        :disabled="!(row.issueStatus == 0 || row.issueStatus == 6||row.billStatus==1)">删 除</el-button>
                </template>
                <!-- <template slot="status" slot-scope="{ row }">
                    <span v-if="row.issueStatus == 0"
                        style="color: #fff;border-radius: 30px;padding: 2px 15px;background-color: #409EFF;">{{
                            row.status }}</span>
                    <span v-if="row.issueStatus != 0"
                        style="color: #fff;border-radius: 30px;padding: 2px 15px;background-color: #67C23A;">{{
                            row.status }}</span>
                </template> -->
                <template slot="billNo" slot-scope="{ row }">
                    <span style="color: #1e9fff;cursor: pointer;" @click="rowEdit(row)">{{ row.billNo }}</span>
                </template>
            </avue-crud>
        </basic-container>
        <detailsPage v-if="!isShow" :detailData="detailData" @goBack="goBack"></detailsPage>
    </div>
</template>

<script>
import { getList, remove } from "@/api/iosBasicData/businessCenter/bookingCabin.js";
import { getWorkDicts } from "@/api/system/dictbiz";
import detailsPage from "./detailsPage";
import { getToken } from "@/util/auth";
import { dateFormat } from "@/util/date";
import _ from "lodash";
export default {
    data() {
        return {
            isShow: true,
            form: {},
            query: {
                businessType: 'KHTS',
                billStatus: '4'
            },
            loading: false,
            page: {
                pageSize: 10,
                currentPage: 1,
                total: 0
            },
            selectionList: [],
            option: {},
            optionBack: {
                height: 'auto',
                calcHeight: 30,
                menuWidth: 140,
                tip: false,
                searchShow: true,
                searchMenuSpan: 18,
                border: true,
                index: true,
                addBtn: false,
                viewBtn: false,
                editBtn: false,
                delBtn: false,
                selection: true,
                searchIcon: true,
                align: 'center',
                searchIndex: 3,
                column: [
                    {
                        label: '所属公司',
                        prop: "branchName",
                        width: "100",
                        // search: true,
                        // type: "select",
                        // filterable: true,
                        // dicUrl: "/api/blade-system/dept/lazy-list",
                        // props: {
                        //     label: "deptName",
                        //     value: "deptName",
                        // },
                        overHidden: true,
                    },
                    {
                        label: '所属公司',
                        prop: "branchId",
                        width: "100",
                        search: true,
                        type: "select",
                        filterable: true,
                        dicUrl: "/api/blade-system/dept/lazy-list",
                        props: {
                            label: "deptName",
                            value: "id",
                        },
                        hide: true,
                        // showColumn: false,
                        overHidden: true,
                    },
                    {
                        label: '系统号',
                        prop: "billNo",
                        width: "120",
                        search: true,
                        overHidden: true,
                    },
                    {
                        label: 'B/L NO',
                        prop: "hblno",
                        width: "100",
                        search: true,
                        overHidden: true,
                    },
                    {
                        label: '客户',
                        prop: "corpCnName",
                        width: "100",
                        search: true,
                        type: 'select',
                        filterable: true,
                        remote: true,
                        dicUrl: "/api/blade-los/bcorps/selectList?status=0&current=1&size=20&cnName={{key}}",
                        props: {
                            label: 'cnName',
                            value: 'cnName',
                            res: 'data.records'
                        },
                        overHidden: true,
                    },
                    {
                        label: 'ETD',
                        prop: "etd",
                        width: "100",
                        overHidden: true,
                        type: "date",
                        format: "yyyy-MM-dd",
                        valueFormat: "yyyy-MM-dd 00:00:00",
                    },
                    {
                        label: "起运港",
                        prop: "polEnName",
                        width: "80",
                        overHidden: true,
                        search: true,
                        type: 'select',
                        filterable: true,
                        remote: true,
                        dicUrl: "/api/blade-los/bports/list?current=1&size=5&cnName={{key}}",
                        props: {
                            label: 'enName',
                            value: 'enName',
                            desc: 'code',
                            res: 'data.records'
                        },
                    },
                    {
                        label: "卸货港",
                        prop: "podEnName",
                        width: "80",
                        overHidden: true,
                        search: true,
                        type: 'select',
                        filterable: true,
                        remote: true,
                        dicUrl: "/api/blade-los/bports/list?current=1&size=5&cnName={{key}}",
                        props: {
                            label: 'enName',
                            value: 'enName',
                            desc: 'code',
                            res: 'data.records'
                        },
                    },
                    {
                        label: "箱型箱量",
                        prop: "quantityCntrDescr",
                        width: "80",
                        overHidden: true,
                    },
                      {
                        label: "TEU",
                        prop: "teu",
                        width: "100",
                        overHidden: true
                    },
                    {
                        label: "20GP",
                        prop: "quantityV20",
                        width: "100",
                        overHidden: true
                    },
                    {
                        label: "40GP",
                        prop: "quantityV40",
                        width: "100",
                        overHidden: true
                    },
                    {
                        label: "20HC",
                        prop: "quantityV45",
                        width: "100",
                        overHidden: true
                    },
                    {
                        label: "40FR",
                        prop: "quantityV48",
                        width: "100",
                        overHidden: true
                    },
                    {
                        label: "40HC",
                        prop: "quantityV40hc",
                        width: "100",
                        overHidden: true
                    }, 
                    // {
                    //     label: "单据状态",
                    //     prop: "issueStatus",
                    //     width: "80",
                    //     overHidden: true,
                    //     // search: true,
                    //     type: 'select',
                    //     dicData: [{
                    //         label: '录入',
                    //         value: '0',
                    //     }, {
                    //         label: '已生成',
                    //         value: '1',
                    //     }, {
                    //         label: '待确认',
                    //         value: '2',
                    //     }, {
                    //         label: '订舱驳回',
                    //         value: '6',
                    //     }],
                    // },
                    {
                        label: "审核状态",
                        prop: "status",
                        width: "80",
                        overHidden: true,
                        // search: true,
                        type: 'select',
                        dicData: [{
                            label: '录入',
                            value: 0,
                        }, {
                            label: '提交审核',
                            value: 1,
                        }, {
                            label: '已审核',
                            value: 3,
                        }, {
                            label: '驳回',
                            value: 4,
                        }],
                    },
                    {
                        label: "OP",
                        prop: "operatorName",
                        width: "80",
                        overHidden: true,
                        search: true,
                        type: 'select',
                        filterable: true,
                        dicUrl: "/api/blade-user/userListAll?roleAlias=操作员",
                        props: {
                            label: 'realName',
                            value: 'realName',
                        },
                    },
                    {
                        label: "客服",
                        prop: "customerServiceName",
                        width: "80",
                        overHidden: true,
                        search: true,
                        type: 'select',
                        filterable: true,
                        dicUrl: "/api/blade-user/userListAll?roleAlias=客服",
                        props: {
                            label: 'realName',
                            value: 'realName',
                        },
                    },
                    {
                        label: '订舱日期',
                        prop: "bookingDate",
                        width: "100",
                        overHidden: true,
                        search: true,
                        type: "date",
                        searchProp: "bookingDateList",
                        unlinkPanels: true,
                        searchRange: true,
                        format: "yyyy-MM-dd",
                        valueFormat: "yyyy-MM-dd HH:mm:ss",
                        searchDefaultTime: ["00:00:00", "23:59:59"],
                    },
                    {
                        label: '付费方式',
                        prop: "mpaymode",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: "运输条款",
                        prop: "serviceTerms",
                        width: "80",
                        overHidden: true,
                    },
                    {
                        label: '件数',
                        prop: "quantity",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '包装',
                        prop: "packingUnit",
                        width: "100",
                        overHidden: true,
                    },

                    {
                        label: '毛重(KGS)',
                        prop: "grossWeight",

                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '尺码(CBM)',
                        prop: "measurement",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '发货人',
                        prop: "hshipperDetails",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '收货人',
                        prop: "hconsigneeDetails",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '通知人',
                        prop: "hnotifyDetails",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '唛头',
                        prop: "marks",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '货物',
                        prop: "commodityDescr",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '船名',
                        prop: "vesselCnName",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: '航次',
                        prop: "voyageNo",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: "制单人",
                        prop: "createUserName",
                        width: "100",
                        overHidden: true,
                    },
                    {
                        label: "制单日期",
                        prop: "createTime",
                        width: "120",
                        overHidden: true,
                    },
                    {
                        label: "修改人",
                        prop: "updateUserName",
                        width: "100",
                        overHidden: true
                    },
                    {
                        label: "修改日期",
                        prop: "updateTime",
                        width: "120",
                        overHidden: true,
                    },
                    {
                        label: "备注",
                        prop: "cyRemarks",
                        width: "100",
                        overHidden: true
                    },
                ]
            },
            data: [],
        };
    },
    components: {
        detailsPage
    },
    async created() {
        this.option = await this.getColumnData(this.getColumnName(501), this.optionBack);
    },
    activated() {
        setTimeout(() => {
            if (this.$route.query.billId) {
                this.isShow = false
            }
            this.$refs.crud.doLayout();
        }, 100);
    },
    methods: {
        handleClick(tab, event) {
            // if (this.query.billStatus == 4) {
            //     this.query.billStatus = null;
            // }
            this.onLoad(this.page, this.query);
        },
        addButton() {
            this.isShow = false
            this.detailData = {
                type: 'new'
            }
        },
        copyButton() {
            this.isShow = false
            this.detailData = {
                copyId: this.selectionList[0].id
            };
        },
        rowEdit(row) {
            this.detailData = {
                id: row.id
            };
            this.isShow = false
        },
        // 删除
        rowDel(row, index) {
            if (row.item == 1) {
                return this.$message.error("存在明细不允许删除");
            }
            this.$confirm("确定将选择数据删除?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
            }).then(() => {
                remove({ ids: row.id }).then(res => {
                    this.onLoad(this.page, this.query);
                    this.$message.success("成功删除");
                })
            })

        },
        searchReset() {
            this.query = this.$options.data().query;
            this.onLoad(this.page);
        },
        // 搜索按钮点击
        searchChange(params, done) {
            this.page.currentPage = 1;
            this.onLoad(this.page, this.query);
            done();
        },
        selectionChange(list) {
            this.selectionList = list;
        },
        currentChange(currentPage) {
            this.page.currentPage = currentPage;
        },
        sizeChange(pageSize) {
            this.page.pageSize = pageSize;
        },
        refreshChange() {
            this.onLoad(this.page, this.query);
        },
        onLoad(page, params = {}) {
            let obj = {}
            obj = {
                ...Object.assign(params, this.query),
            }
            this.loading = true;
            getList(page.currentPage, page.pageSize, obj).then(res => {
                this.data = res.data.data.records;
                this.page.total = res.data.data.total;
                this.$nextTick(() => {
                    this.$refs.crud.doLayout();
                    this.$refs.crud.dicInit();
                });
            }).finally(() => {
                this.loading = false;
            })
        },
        // 详情的返回列表
        goBack() {
            // 初始化数据
            if (JSON.stringify(this.$route.query) != "{}") {
                this.$router.$avueRouter.closeTag();
                this.$router.push({
                    path: "/iosBasicData/businessCenter/customerLetter/index"
                });
            }
            this.detailData = {}
            this.isShow = true;
            this.onLoad(this.page, this.query);
        },
        outExport() {
            let config = { params: { ...this.query } }
            if (config.params) {
                for (const propName of Object.keys(config.params)) {
                    const value = config.params[propName];
                    if (value !== null && typeof (value) !== "undefined") {
                        if (value instanceof Array) {
                            for (const key of Object.keys(value)) {
                                let params = propName + '[' + key + ']';
                                config.params[params] = value[key]
                            }
                            delete config.params[propName]
                        }
                    }
                }
            }
            const routeData = this.$router.resolve({
                path: '/api/blade-los/routecost/exportRouteCost',      //跳转目标窗口的地址
                query: {
                    ...config.params,    //括号内是要传递给新窗口的参数
                    identification: this.url
                }
            })
            window.open(routeData.href.slice(1, routeData.href.length) + '&' + `${this.website.tokenHeader}=${getToken()}`);
        },
        //自定义列保存
        async saveColumn(ref, option, optionBack, code) {
            /**
             * 已定义全局方法，直接使用，saveColumnData保存列数据方法,参数传值(表格名称，当前表格的option数据)
             * 已定义全局方法，直接使用，getColumnName方法用来获取枚举值，参数根据自己定义的code值获取中文名
             * 一定要执行异步操作，要等接口成功返回，才能执行下一行代码
             */
            const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
            if (inSave) {
                this.$message.success("保存成功");
                //关闭窗口
                this.$refs[ref].$refs.dialogColumn.columnBox = false;
                this.selectionList = []
                this.searchReset()
                this.$nextTick(() => {
                    this.$refs.crud.refreshTable();
                    this.$refs.crud.dicInit();
                });
            }
        },
        //自定义列重置
        async resetColumn(ref, option, optionBack, code) {
            this[option] = this[optionBack];
            const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
            if (inSave) {
                this.$message.success("重置成功");
                this.$refs[ref].$refs.dialogColumn.columnBox = false;
                this.selectionList = []
                this.searchReset()
                this.$nextTick(() => {
                    this.$refs.crud.refreshTable();
                    this.$refs.crud.dicInit();
                });
            }
        },
        // 更改表格颜色
        headerClassName(tab) {
            //颜色间隔
            let back = ""
            if (tab.columnIndex >= 0 && tab.column.level === 1) {
                if (tab.columnIndex % 2 === 0) {
                    back = "back-one"
                } else if (tab.columnIndex % 2 === 1) {
                    back = "back-two"
                }
            }
            return back;
        },

    }
}

</script>

<style lang="scss" scoped>
::v-deep #out-table .back-one {
    background: #ecf5ff !important;
    text-align: center;
}

::v-deep #out-table .back-two {
    background: #ecf5ff !important;
    text-align: center;
}

.pointerClick {
    cursor: pointer;
    color: #1e9fff;
}

::v-deep .el-col-md-8 {
    width: 24.33333%;
}
</style>
