<template> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="订单号" prop="orderNo"> <el-input v-model="queryParams.orderNo" placeholder="请输入订单号" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="订单状态" prop="status"> <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable @change="handleQuery"> <el-option v-for="dict in dict.type.order_status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="客户" prop="customer"> <el-input v-model="queryParams.customer" placeholder="请输入客户" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="产品名称" prop="name"> <el-input v-model="queryParams.name" placeholder="请输入产品名称" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="用料" prop="material"> <el-input v-model="queryParams.material" placeholder="请输入用料" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="包装大小" prop="packageSize"> <el-input v-model="queryParams.packageSize" placeholder="请输入包装大小" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="特殊要求" prop="remark"> <el-input v-model="queryParams.remark" placeholder="请输入特殊要求" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="创建人" prop="createBy"> <el-input v-model="queryParams.createBy" placeholder="请输入创建人" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="订单日期" prop="orderDateRange"> <el-date-picker v-model="queryParams.orderDateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" @change="handleQuery" clearable /> </el-form-item> <el-form-item label="交货日期" prop="deliveryDateRange"> <el-date-picker v-model="queryParams.deliveryDateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" @change="handleQuery" clearable /> </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-has-permi="['bst:order:add']" >新增</el-button> </el-col> <!-- <el-col :span="1.5">--> <!-- <el-button--> <!-- type="warning"--> <!-- plain--> <!-- icon="el-icon-download"--> <!-- size="mini"--> <!-- @click="handleExport"--> <!-- v-has-permi="['bst:order:export']"--> <!-- >导出</el-button>--> <!-- </el-col>--> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> </el-row> <el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange"> <el-table-column type="selection" width="55" align="center" /> <template v-for="column of showColumns"> <el-table-column :key="column.key" :label="column.label" :prop="column.key" :align="column.align" :min-width="column.minWidth" :sort-orders="orderSorts" :sortable="column.sortable" :show-overflow-tooltip="column.overflow" :width="column.width" > <template slot-scope="d"> <template v-if="column.key === 'id'"> {{d.row[column.key]}} </template> <template v-else-if="column.key === 'status'"> <dict-tag :options="dict.type.order_status" :value="d.row[column.key]"/> </template> <template v-else-if="column.key === 'picture'"> <image-preview :src="d.row.picture" :width="50" :height="50"/> </template> <template v-else-if="column.key === 'progress'"> <el-progress :percentage="d.row.progress" :color="ProgressColors" :format="ProgressFormat"/> </template> <template v-else> {{d.row[column.key]}} </template> </template> </el-table-column> </template> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)" v-has-permi="['bst:order:query']" >详情</el-button> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-has-permi="['bst:order:edit']" v-show="OrderStatus.canEdit().includes(scope.row.status)" >修改</el-button> <el-button size="mini" type="text" icon="el-icon-check" @click="handleFinish(scope.row)" v-has-permi="['bst:order:finish']" v-show="OrderStatus.canFinished().includes(scope.row.status)" >完工</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-has-permi="['bst:order:remove']" v-show="OrderStatus.canDel().includes(scope.row.status)" >删除</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" /> </div> </template> <script> import { delOrder, finishOrder, listOrder } from '@/api/bst/order' import FormCol from '@/components/FormCol/index.vue' import { $showColumns } from '@/utils/mixins' import { OrderStatus } from '@/utils/enums' import { ProgressColors, ProgressFormat } from '@/utils/constants' // 默认排序字段 const defaultSort = { prop: "createTime", order: "descending" } export default { name: "Order", mixins: [$showColumns], dicts: ['order_status'], components: {FormCol}, data() { return { ProgressColors, OrderStatus, span: 24, // 字段列表 columns: [ {key: 'id', visible: true, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"}, {key: 'orderNo', visible: true, label: '单号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null}, {key: 'customOrderNo', visible: false, label: '客户单号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null}, {key: 'status', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null}, {key: 'picture', visible: true, label: '主图', minWidth: null, sortable: false, overflow: false, align: 'center', width: null}, {key: 'customer', visible: true, label: '客户', minWidth: null, sortable: false, overflow: false, align: 'center', width: null}, {key: 'orderDate', visible: true, label: '订单日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"}, {key: 'deliveryDate', visible: true, label: '交货日期', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"}, {key: 'name', visible: true, label: '名称', minWidth: null, sortable: false, overflow: true, align: 'center', width: null}, {key: 'material', visible: true, label: '用料', minWidth: null, sortable: false, overflow: true, align: 'center', width: null}, {key: 'contentNum', visible: true, label: '装量', minWidth: null, sortable: true, overflow: true, align: 'center', width: null}, {key: 'packageSize', visible: true, label: '包装', minWidth: null, sortable: false, overflow: true, align: 'center', width: null}, {key: 'remark', visible: true, label: '要求', minWidth: null, sortable: false, overflow: true, align: 'center', width: null}, {key: 'num', visible: true, label: '数量', minWidth: null, sortable: true, overflow: false, align: 'center', width: null}, {key: 'reportNum', visible: true, label: '已上报', minWidth: null, sortable: false, overflow: false, align: 'center', width: null}, {key: 'storeNum', visible: true, label: '已清点', minWidth: null, sortable: false, overflow: false, align: 'center', width: null}, {key: 'progress', visible: true, label: '进度', minWidth: null, sortable: false, overflow: false, align: 'center', width: "160"}, {key: 'createBy', visible: true, label: '创建人', minWidth: null, sortable: false, overflow: false, align: 'center', width: null}, {key: 'createTime', visible: true, label: '创建时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"}, ], // 排序方式 orderSorts: ['ascending', 'descending', null], // 遮罩层 loading: true, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 生产订单表格数据 orderList: [], // 弹出层标题 title: "", // 是否显示弹出层 open: false, defaultSort, // 查询参数 queryParams: { pageNum: 1, pageSize: 20, orderByColumn: defaultSort.prop, isAsc: defaultSort.order, id: null, orderNo: null, customer: null, remark: null, createBy: null, deleted: null, orderDateRange: [], deliveryDateRange: [] }, }; }, created() { this.getList(); }, methods: { ProgressFormat, /** 当排序按钮被点击时触发 **/ onSortChange(column) { if (column.order == null) { this.queryParams.orderByColumn = defaultSort.prop; this.queryParams.isAsc = defaultSort.order; } else { this.queryParams.orderByColumn = column.prop; this.queryParams.isAsc = column.order; } this.getList(); }, /** 查询生产订单列表 */ getList() { this.loading = true; listOrder(this.queryParams).then(response => { this.orderList = response.rows; this.total = response.total; this.loading = false; }); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.id) this.single = selection.length!==1 this.multiple = !selection.length }, /** 新增按钮操作 */ handleAdd() { this.$tab.closeOpenPage("/edit/order") }, /** 修改按钮操作 */ handleUpdate(row) { this.$tab.closeOpenPage(`/edit/order/${row.id}`) }, // 完工 handleFinish(row) { this.$confirm(`确定完成订单号为${row.orderNo}的订单吗?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.loading = true; finishOrder(row.id).then(res => { this.$modal.msgSuccess("操作成功") this.getList() }).catch( e => { this.loading = false; }) }) }, handleView(row) { this.$router.push(`/view/order/${row.id}`) }, /** 删除按钮操作 */ handleDelete(row) { const ids = row.id || this.ids; this.$modal.confirm('是否确认删除生产订单编号为"' + ids + '"的数据项?').then(function() { return delOrder(ids); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); }).catch(() => {}); }, /** 导出按钮操作 */ handleExport() { this.download('bst/order/export', { ...this.queryParams }, `order_${new Date().getTime()}.xlsx`) } } }; </script>