<template>
    <div class="app-container">
        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
            label-width="100px">
            <el-form-item label="申请单号" prop="applyNo">
                <el-input v-model="queryParams.applyNo" placeholder="请输入申请单号" clearable
                    @keyup.enter.native="handleQuery" />
            </el-form-item>
            <el-form-item label="产品编码" prop="sapItemCode">
                <el-input v-model="queryParams.sapItemCode" placeholder="请输入产品编码" clearable
                    @keyup.enter.native="handleQuery" />
            </el-form-item>
            <el-form-item label="产品名称" prop="itemName">
                <el-input v-model="queryParams.itemName" placeholder="请输入产品名称" clearable
                    @keyup.enter.native="handleQuery" />
            </el-form-item>
            <el-form-item label="工作中心编码" prop="workstationCode">
                <el-input v-model="queryParams.workstationCode" placeholder="请输入工作中心编码" clearable
                    @keyup.enter.native="handleQuery" />
            </el-form-item>
            <el-form-item label="任务单编码" width="150" prop="taskCode">
                <el-input v-model="queryParams.taskCode" placeholder="请输入任务单编码" clearable
                    @keyup.enter.native="handleQuery" />
            </el-form-item>
            <el-form-item label="需求日期" prop="endTime">
                <el-date-picker clearable v-model="queryParams.endTime" type="date" value-format="yyyy-MM-dd"
                    placeholder="请选择需求日期">
                </el-date-picker>
            </el-form-item>
            <el-form-item label="创建时间">
                <el-date-picker v-model="daterangePurchaseDate" value-format="yyyy-MM-dd" type="daterange"
                    range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
            </el-form-item>
            <el-form-item></el-form-item>


            <el-form-item>
                <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
                <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
            </el-form-item>
        </el-form>

        <el-row :gutter="10" class="mb8">
            <el-col :span="1.5">
                <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
                    v-hasPermi="['allocation:ProAllocationMaterial:add']">新增</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
                    v-hasPermi="['allocation:ProAllocationMaterial:edit']">修改</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
                    @click="handleDelete" v-hasPermi="['allocation:ProAllocationMaterial:remove']">删除</el-button>
            </el-col>
            <el-col :span="1.5">
                <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
                    v-hasPermi="['allocation:ProAllocationMaterial:export']">导出</el-button>
            </el-col>
            <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
        </el-row>

        <el-table v-loading="loading" :data="ProAllocationMaterialList" @selection-change="handleSelectionChange">
            <el-table-column type="selection" width="55" align="center" />
            <el-table-column label="申请单号" align="center" prop="applyNo" />
            <el-table-column label="产品编码" align="center" prop="sapItemCode" />
            <el-table-column label="产品名称" align="center" prop="itemName" />
            <el-table-column label="工作中心编码" align="center" prop="workstationCode" />
            <el-table-column label="任务单编码" align="center" prop="taskCode" />
            <el-table-column label="申请数量" align="center" prop="applyNum" />
            <el-table-column label="已调拨料" align="center" prop="allocationNum" />
            <el-table-column label="是的结案" align="center" prop="windCase">
                <template slot-scope="scope">
                    <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.windCase" />
                </template>
            </el-table-column>
            <el-table-column label="领料方式" align="center" prop="materialType">
                <template slot-scope="scope">
                    <dict-tag :options="dict.type.pro_material_from" :value="scope.row.materialType" />
                </template>
            </el-table-column>
            <el-table-column label="需求日期" align="center" prop="startTime" width="180">
                <template slot-scope="scope">
                    <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
                </template>
            </el-table-column>
            <el-table-column label="预计结束" align="center" prop="endTime" width="180">
                <template slot-scope="scope">
                    <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
                </template>
            </el-table-column>
            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
                <template slot-scope="scope">
                    <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
                        v-hasPermi="['allocation:ProAllocationMaterial:edit']">修改</el-button>
                    <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
                        v-hasPermi="['allocation:ProAllocationMaterial:remove']">删除</el-button>
                </template>
            </el-table-column>
        </el-table>

        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
            :limit.sync="queryParams.pageSize" @pagination="getList" />

        <!-- 添加或修改调拨料申请对话框 -->
        <el-dialog :title="title" :visible.sync="open" width="960px" append-to-body>
            <el-form ref="form" :model="form" :rules="rules" label-width="100px">
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="申请单号" prop="applyNo">
                            <el-input disabled v-model="form.applyNo" placeholder="自动生成" />
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="产品编码" prop="sapItemCode">
                            <el-input v-model="form.sapItemCode" placeholder="请选择物料">
                                <el-button slot="append" icon="el-icon-search" @click="handleItemSelect" />
                            </el-input>
                            <itemSelect ref="brSelectpro" @onSelected="onItemSelect">
                            </itemSelect>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="产品名称" prop="itemName">
                            <el-input disabled v-model="form.itemName" placeholder="请输入产品名称" />
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="工作中心编码" prop="workstationCode">
                            <el-input v-model="form.workstationCode" placeholder="请输入工作中心编码">
                                <el-button slot="append" icon="el-icon-search" @click="handleWorkstationSelect" />
                            </el-input>
                            <taskSelect ref="brSelectworkstation" @onSelected="onWorkstationSelect">
                            </taskSelect>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="任务单编码" prop="taskCode">
                            <el-input v-model="form.taskCode" placeholder="请输入任务单编码">
                                <el-button slot="append" icon="el-icon-search" @click="handleTaskSelect" />
                            </el-input>
                            <taskSelect ref="brSelectTask" @onSelected="onTaskSelect">
                            </taskSelect>
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="申请数量" prop="applyNum">
                            <el-input v-model="form.applyNum" placeholder="请输入申请数量" />
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="需求日期" prop="startTime">
                            <el-date-picker clearable v-model="form.startTime" type="date" value-format="yyyy-MM-dd"
                                placeholder="请选择需求日期">
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button type="primary" @click="submitForm">确 定</el-button>
                <el-button @click="cancel">取 消</el-button>
            </div>
        </el-dialog>
        <!-- 新增和详情对话框 -->
        <el-dialog :title="title" :visible.sync="opens" width="950px" append-to-body>
            <el-form ref="form" :model="form" :rules="rules" label-width="100px">
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="申请单号" prop="applyNo">
                            <el-input disabled v-model="form.applyNo" placeholder="自动生成" />
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="任务单号" prop="taskCode">
                            <el-input v-model="form.taskCode" placeholder="请选任务单号" readonly="readonly">
                                <el-button slot="append" icon="el-icon-search" @click="handleBrandSelect"
                                    :disabled="form.allocationMaterialId"></el-button>
                            </el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <BrandSelect ref="brSelect" :arrangeCode="form.arrangeCode" @onSelected="onBrandSelected">
                </BrandSelect>
                <arangeSelect ref="arangeSelect" :arrangeCode="form.arrangeCode" @onSelected="onBrandSelected">
                </arangeSelect>
                <el-row>
                    <el-col :span="12">
                        <el-form-item label="编排单号" prop="arrangeCode">
                            <el-input v-model="form.arrangeCode" placeholder="请输入编排单号">
                                <el-button slot="append" icon="el-icon-search"
                                    @click="$refs.arangeSelect.showFlag = true"
                                    :disabled="form.allocationMaterialId"></el-button>
                            </el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="申请时间" prop="createTime">
                            <el-date-picker clearable v-model="form.createTime" type="datetime"
                                value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择申请时间">
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="需求日期" prop="startTime">
                            <el-date-picker clearable v-model="form.startTime" type="datetime"
                                value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择需求日期">
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <el-divider content-position="center">调拨料表体</el-divider>
            <el-card shadow="always" class="box-card">
                <allocationIndex v-if="opens" ref="allocationRef" :quantity="form.requestNum" :id="form.toolWarehouseId"
                    :optType="optType"></allocationIndex>
            </el-card>
            <div slot="footer" class="dialog-footer">
                <el-button v-if="optType !== 'view'" type="primary" @click="submitForm">确 定</el-button>
                <el-button @click="cancels">取 消</el-button>
            </div>
        </el-dialog>


    </div>
</template>

<script>
import { genCode } from "@/api/system/autocode/rule";
import ItemSelect from "@/components/itemSelect/single.vue";
import TaskSelect from "@/components/TaskSelect/taskSelectSingle.vue";
import WorkstationSelect from "@/components/workstationSelect/simpletableSingle.vue";
import BrandSelect from "@/components/TaskSelect/sngle.vue";
import allocationIndex from './allocationIndex';
import arangeSelect from "./arangeSelect.vue";
import {
    listProAllocationMaterial,
    getProAllocationMaterial,
    delProAllocationMaterial,
    addProAllocationMaterial,
    updateProAllocationMaterial
} from "@/api/mes/pro/proAllocationMaterial";
export default {
    name: "ProAllocationMaterial",
    components: { ItemSelect, TaskSelect, WorkstationSelect, allocationIndex, BrandSelect, arangeSelect },
    dicts: ['sys_yes_no','pro_material_from'],
    data() {
        return {
            // 遮罩层
            loading: true,
            // 选中数组
            ids: [],
            // 非单个禁用
            single: true,
            // 非多个禁用
            multiple: true,
            // 显示搜索条件
            showSearch: true,

            //物料集合
            itemList: [],

            optType: null,

            daterangePurchaseDate: [],
            // 总条数
            total: 0,
            // 调拨料申请表格数据
            ProAllocationMaterialList: [],
            // 弹出层标题
            title: "",
            // 是否显示弹出层
            open: false,

            opens: false,

            // 查询参数
            queryParams: {
                pageNum: 1,
                pageSize: 10,
                applyNo: null,
                sapItemCode: null,
                itemName: null,
                allocationMaterialId: null,
                workstationId: null,
                workstationCode: null,
                taskId: null,
                taskCode: null,
                applyNum: null,
                allocationNum: null,
                windCase: null,
                endTime: null,
                startTime: null,
            },
            // 表单参数
            form: {},
            // 表单校验
            rules: {
            }
        };
    },
    created() {
        this.getList();
    },
    methods: {
        /** 查询调拨料申请列表 */
        getList() {
            this.loading = true;
            this.queryParams.params = {};
            if (null != this.daterangePurchaseDate && '' != this.daterangePurchaseDate) {
                this.queryParams.params["beginPurchaseDate"] = this.daterangePurchaseDate[0];
                this.queryParams.params["endPurchaseDate"] = this.daterangePurchaseDate[1];
            }
            listProAllocationMaterial(this.queryParams).then(response => {
                this.ProAllocationMaterialList = response.rows;
                this.total = response.total;
                this.loading = false;
            });
        },
        // 取消按钮
        cancel() {
            this.open = false;
            this.reset();
        },

        cancels() {
            this.opens = false;
            this.reset();
        },
        /** 生成编码 */
        gCode() {
            genCode("ALLOCATION_CODE").then((response) => {
                this.form.applyNo = response;
            });
        },
        handleBrandSelect() {
            this.$refs.brSelect.showFlag = true;
        },
        onBrandSelected(row) {
            if (row != undefined && row != null) {
                this.form.taskId = row.taskId;
                this.form.taskCode = row.taskCode;
                this.form.arrangeCode = row.arrangeCode;
                this.form.taskName = row.taskName;
            }
        },


        handleWorkstationSelect() {
            this.$refs.brSelectworkstation.showFlag = true;
        },
        onWorkstationSelect(row) {
            if (row != undefined && row != null) {
                this.form.workstationeId = row.workstationeId;
                this.form.workstationCode = row.workstationCode;
            }
        },

        handleItemSelect() {
            this.$refs.brSelectpro.showFlag = true;
        },
        onItemSelect(row) {
            if (row != undefined && row != null) {
                this.form.itemId = row.itemId;
                this.form.sapItemCode = row.sapItemCode;
                this.form.itemName = row.itemName;
            }
        },

        handleTaskSelect() {
            this.$refs.brSelectTask.showFlag = true;
        },
        onTaskSelect(row) {
            if (row != undefined && row != null) {
                this.form.taskId = row.taskId;
                this.form.taskCode = row.taskCode;
            }
        },


        // 表单重置
        reset() {
            this.form = {
                allocationMaterialId: null,
                applyNo: null,
                sapItemCode: null,
                itemName: null,
                workstationId: null,
                workstationCode: null,
                taskId: null,
                taskCode: null,
                applyNum: null,
                allocationNum: null,
                windCase: null,
                endTime: null,
                startTime: null,
                createBy: 'admin',
                createTime: null,
                updateBy: null,
                updateTime: null
            };
            this.resetForm("form");
        },
        /** 搜索按钮操作 */
        handleQuery() {

            this.queryParams.pageNum = 1;
            this.getList();
        },
        /** 重置按钮操作 */
        resetQuery() {
            this.resetForm("queryForm");
            this.daterangePurchaseDate = [];
            this.handleQuery();
        },
        // 多选框选中数据
        handleSelectionChange(selection) {
            this.ids = selection.map(item => item.allocationMaterialId)
            this.single = selection.length !== 1
            this.multiple = !selection.length
        },
        /** 新增按钮操作 */
        handleAdd() {
            this.reset();
            this.opens = true;
            this.gCode();
            this.title = "添加调拨料申请";
        },
        /** 修改按钮操作 */
        handleUpdate(row) {
            this.reset();
            const allocationMaterialId = row.allocationMaterialId || this.ids
            getProAllocationMaterial(allocationMaterialId).then(response => {
                this.form = response.data;
                this.open = true;
                this.title = "修改调拨料申请";
            });
        },
        /** 提交按钮 */
        submitForm() {

            this.$refs["form"].validate(valid => {
                if (valid) {
                    {

                        const itemList = this.$refs.allocationRef.tableData;
                        const params = {
                            ...this.form,
                            itemList,
                        };
                        addProAllocationMaterial(params).then(response => {
                            this.$modal.msgSuccess("新增成功");
                            this.open = false;
                            this.getList();
                        });
                    }
                }
            });
        },
        /** 删除按钮操作 */
        handleDelete(row) {
            const allocationMaterialIds = row.allocationMaterialId || this.ids;
            this.$modal.confirm('是否确认删除调拨料申请编号为"' + allocationMaterialIds + '"的数据项？').then(function () {
                return delProAllocationMaterial(allocationMaterialIds);
            }).then(() => {
                this.getList();
                this.$modal.msgSuccess("删除成功");
            }).catch(() => { });
        },
        /** 导出按钮操作 */
        handleExport() {
            this.download('allocation/ProAllocationMaterial/export', {
                ...this.queryParams
            }, `ProAllocationMaterial_${new Date().getTime()}.xlsx`)
        }
    }
};
</script>