import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent"; import TableTextComponent from "@/components/noTemplateComponents/detailComponent"; // import StatusComponent from "@/components/noTemplateComponents/statusComponent"; import { timeFilter, dictFilter } from "@/utils/filters"; function changeOrderSort(orderId, location) { /** this - vue instance, 0 - to top, 1 - up, 2 - down, 3 - to bottom */ return this.$http .get("/pms/order/change", { params: { id: orderId, location } }) .then(({ data: res }) => { if (res.code === 0) { } else throw new Error(`${res.code}: ${res.msg}`); }) .catch((err) => { this.$message({ message: err, type: "error", duration: 1500, }); }); } export default function () { const operations = { ongoing: [ // { name: 'confirm-order', label: '确认', icon: 'success', showText: true }, { name: "view-ongoing", label: "查看详情", icon: "view", emitFull: true }, { name: "end-order", label: "结束", icon: "finished" }, { name: "move-up", label: "上移", icon: "arrow-up" }, { name: "move-down", label: "下移", icon: "arrow-down" }, { name: "move-to-top", label: "至顶", icon: "upload2" }, { name: "move-to-bottom", label: "至底", icon: "download" }, { name: "destroy-order", label: "废除", icon: "close" }, ], pending: [ { name: "edit", label: "编辑", icon: "edit-outline" }, { name: "view", label: "查看详情", icon: "view" }, { name: "confirm-order", label: "确认订单", icon: "success" }, { name: "move-up", label: "上移", icon: "arrow-up" }, { name: "move-down", label: "下移", icon: "arrow-down" }, { name: "move-to-top", label: "至顶", icon: "upload2" }, // , showText: true }, { name: "move-to-bottom", label: "至底", icon: "download" }, // , showText: true }, { name: "delete", icon: "delete", label: "删除", emitFull: true, permission: "" }, ], finished: [ { name: "view-ongoing", label: "查看详情", icon: "view", emitFull: true }, // { name: 'view', label: '查看详情' } // { name: 'end-order', label: '结束订单', icon: 'error', showText: true }, ], }; const startTimeProp = (type) => ({ ongoing: [ { width: 120, prop: "startTime", label: "开始时间", filter: timeFilter }, // "订单砖数" }, ], pending: [], finished: [ { width: 120, prop: "startTime", label: "开始时间", filter: timeFilter }, // "订单砖数" }, ], }[type]); const genTableProps = (type /** ongoing, pending, finished */) => [ { width: 60, type: "index", label: "序号", fixed: true }, { width: 120, prop: "code", label: "订单号", fixed: "left" }, { width: 60, prop: "cate", label: "子号" }, { width: 60, prop: "statusDictValue", label: "状态", filter: dictFilter("order_status") }, // 不可编辑 { width: 120, prop: "planStartTime", label: "计划开始时间", filter: timeFilter }, // "订单砖数" }, ...startTimeProp(type), { width: 60, prop: "prodqty", label: "数量" }, // "订单砖数" }, { width: 100, prop: "productCode", label: "物料" }, // "物料编号" }, // select, filterable { width: 100, prop: "shapeCode", label: "砖型" }, // "砖型编号" }, // select, filterable { width: 120, prop: "brand", label: "牌号" }, // select, filterable { width: 60, prop: "ai", label: "版本" }, // "版本号" }, // auto display according to the 配方 { width: 65, prop: "sapParam1", label: "addon" }, { width: 200, prop: "shortDesc", label: "物料号销售文本" }, { width: 100, prop: "bomCode", label: "配方编码" }, { width: 80, prop: "pressCode", label: "压机号" }, // select, filterable { width: 80, prop: "blenderCode", label: "混料机号" }, // select, filterable { width: 80, prop: "kilnCode", label: "隧道窑号" }, // select, filterable { width: 120, prop: "sapParam6", label: "烧成温度" }, { width: 120, prop: "sapParam7", label: "烧成时间(h)" }, { width: 120, prop: "yieldqty", label: "已生产数量" }, // uneditable { width: 120, prop: "soqty", label: "销售订单数" }, { width: 200, prop: "saleNo", label: "销售订单号" }, { width: 200, prop: "saleOrderItem", label: "销售订单item号" }, { width: 200, prop: "packTechCode", label: "包装工艺代码" }, // select, filterable { width: 120, prop: "specifications", label: "生产订单类型" }, { width: 120, prop: "deliveryTime", label: "销售时间", filter: timeFilter }, { width: 120, prop: "customerCode", label: "客户" }, { width: 120, prop: "pcsKilnCar", label: "托盘码放砖数" }, // { prop: "description", label: "详情", subcomponent: TableTextComponent }, { width: 120, prop: "remark", label: "备注" }, { width: 120, prop: "createTime", label: "添加时间", filter: timeFilter }, { prop: "operations", name: "操作", fixed: "right", subcomponent: TableOperaionComponent, options: operations[type], width: operations[type].length > 1 ? operations[type].length * 40 : 90, }, // type !== "finished" // ? { // prop: "operations", // name: "操作", // fixed: "right", // subcomponent: TableOperaionComponent, // options: operations[type], // width: operations[type].length * 64, // } // : {}, ]; const genHeadFormFields = (type) => ({ ongoing: [ { label: "订单号", prop: "code", input: true, default: { value: "" }, bind: { placeholder: "输入订单号" }, }, { // 时间段 timerange: true, prop: "timerange", label: "时间段", bind: { placeholder: "选择日期时间", type: "datetimerange", "start-placeholder": "开始时间", "end-placeholder": "结束时间", }, }, { // 查询 button: { type: "primary", name: "查询", }, }, ], pending: [ { label: "订单号", prop: "code", input: true, bind: { placeholder: "输入订单号" }, }, { // 查询 button: { type: "primary", name: "查询", }, }, { // 新增订单 button: { type: "primary", name: "新增", permission: "", }, bind: { plain: true, }, }, { // 导入订单 - TODO: 需完善具体接口和功能 button: { type: "success", name: "导入订单", }, bind: { plain: true, }, }, ], finished: [ { label: "订单号", prop: "code", input: true, bind: { placeholder: "输入订单号" }, }, { // 查询 button: { type: "primary", name: "查询", }, }, ], }[type]); const textOnlyComponent = { props: { modelValue: { type: String | Number, required: true, }, useBuiltin: { type: Boolean, default: true, }, }, data() { return { orderStatusMap: ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝"], }; }, render: function (h) { return h( "span", { style: { display: "block", marginTop: "0" } }, this.useBuiltin ? this.orderStatusMap[this.modelValue] ?? "-" : this.modelValue.toString().trim() === "" ? "-" : this.modelValue.toString() ); }, }; const dictList = JSON.parse(localStorage.getItem("dictList")); const dialogConfigs = { form: { field: [ { title: "生产订单", rows: [ [ { label: "订单状态", prop: "statusDictValue", component: textOnlyComponent, }, { input: true, label: "订单号", prop: "code", rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "输入订单号" }, }, { input: true, label: "订单子号", prop: "cate", rules: [ { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入订单子号" }, }, { datetime: true, label: "计划开始时间", prop: "planStartTime", rules: { required: true, message: "必填项不能为空", trigger: "blur", }, elparams: { placeholder: "选择计划开始时间", type: "datetime", 'value-format': 'yyyy-MM-ddTHH:mm:ss' }, }, ], ], }, { title: "设备与参数", rows: [ [ { select: true, label: "压机", prop: "press", options: [], optionLabel: "code", rules: { required: true, message: "必填项不能为空", trigger: "blur" }, fetchData: () => this.$http.get("/pms/equipment/search", { params: { equipmentTypeCode: "Press" } }), elparams: { placeholder: "选择压机", filterable: true }, }, { select: true, label: "混料机号", prop: "blender", options: [], optionLabel: "code", rules: { required: true, message: "必填项不能为空", trigger: "blur" }, fetchData: () => this.$http.get("/pms/equipment/search", { params: { equipmentTypeCode: "Mix" } }), elparams: { placeholder: "选择混料机", filterable: true }, }, { select: true, label: "隧道窑号", prop: "kiln", options: [], optionLabel: "code", fetchData: () => this.$http.get("/pms/equipment/search", { params: { equipmentTypeCode: "Kiln" } }), elparams: { placeholder: "选择隧道窑", filterable: true }, }, { input: true, label: "Add on", prop: "sapParam1", // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "输入addon" }, }, ], [ { select: true, label: "牌号", prop: "bomId", options: [], // optionLabel: '', fetchData: () => this.$http.get("/pms/bom/page", { params: { limit: 999, page: 1, key: "", externalCode: "" } }), elparams: { placeholder: "选择牌号", filterable: true }, // TODO: 选择后,需要带出一些数据 injectTo: [ ["bomCode", "code"], ["ai", "externalCode"], ], }, { // input: true, // select: true, label: "配方号", prop: "bomCode", // options: [], // optionLabel: 'code', // fetchData: () => this.$http.get("/pms/bom/page", { params: { limit: 999, page: 1, key: "" } }), // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, // elparams: { placeholder: "选择配方" }, component: textOnlyComponent, bind: { useBuiltin: false, }, }, { label: "版本号", prop: "ai", component: textOnlyComponent, bind: { useBuiltin: false, }, }, { select: true, label: "包装代码", prop: "packTech", options: [], optionLabel: "code", fetchData: () => this.$http.post("/pms/equipmentTech/pageView", { limit: 999, page: 1, key: "", shape: "", wsId: 5 }), // label: "单位", // prop: "unitDictValue", // options: dictList["unit"].map((u) => ({ label: u.dictLabel, value: u.dictValue })), elparams: { placeholder: "选择包装代码", filterable: true }, }, ], [ { select: true, label: "物料", prop: "productId", options: [], optionLabel: "code", // optionValue: 'code', // fetchedDataIdConvertTo: 'productId', // optionValue: 'id', fetchData: () => this.$http.get("/pms/product/page", { params: { limit: 999, page: 1, key: "" } }), // label: "单位", // prop: "unitDictValue", // options: dictList["unit"].map((u) => ({ label: u.dictLabel, value: u.dictValue })), elparams: { placeholder: "选择物料", filterable: true }, }, { select: true, label: "砖型", prop: "shape", optionLabel: "code", options: [], fetchData: () => this.$http.get("/pms/shape/page", { params: { limit: 999, page: 1, key: "" } }), // label: "单位", // prop: "unitDictValue", // options: dictList["unit"].map((u) => ({ label: u.dictLabel, value: u.dictValue })), elparams: { placeholder: "选择砖型", filterable: true }, }, { input: true, label: "烧成温度", prop: "sapParam6", rules: [ { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入烧成温度" }, }, { input: true, label: "烧成时间 H", prop: "sapParam7", rules: [ { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入烧成时间" }, }, ], ], }, { title: "其他", rows: [ [ { input: true, label: "生产订单类型", prop: "specifications", // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "输入生产订单类型" }, }, { input: true, label: "生产订单砖数", prop: "prodqty", rules: [ { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入要求生产的数量" }, }, { input: true, label: "已生产数", prop: "yieldqty", // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, rules: [ // { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入已经生产的数量" }, }, { input: true, label: "托盘码放砖数", prop: "pcsKilnCar", rules: [ { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入托盘码放砖数" }, }, ], [ { input: true, label: "销售订单号", prop: "saleNo", rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "输入销售订单号" }, }, { input: true, label: "销售订单item号", prop: "saleOrderItem", // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "输入销售订单item号" }, }, { input: true, label: "销售订单砖数", prop: "soqty", rules: [ { required: true, message: "必填项不能为空", trigger: "blur" }, { type: "number", message: "输入正确的数字类型", trigger: "blur", transform: (val) => Number(val) }, ], elparams: { placeholder: "输入销售订单砖数" }, }, { // time datetime: true, label: "销售时间", prop: "deliveryTime", rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "选择销售时间" }, }, ], [ { select: true, label: "客户", prop: "customerId", options: [], optionLabel: "name", fetchData: () => this.$http.get("/pms/customer/page", { params: { limit: 999, page: 1, name: "" } }), rules: { required: true, message: "必填项不能为空", trigger: "blur" }, elparams: { placeholder: "选择客户" }, }, // { // input: true, // label: "版本号", // prop: "ai", // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, // elparams: { placeholder: "输入版本号" }, // }, // { // input: true, // label: "物料号销售文本", // prop: "shortDesc", // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, // elparams: { placeholder: "输入物料号销售文本" }, // }, { label: "物料号销售文本", prop: "shortDesc", component: textOnlyComponent, bind: { useBuiltin: false, }, }, {}, {} ], [ { input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }, // { // select: true, // label: "原料类别", // prop: "typeDictValue", // options: dictList["material_category"].map((u) => ({ label: u.dictLabel, value: u.dictValue })), // elparams: { placeholder: "原料类别" }, // // autoDisabled: true // }, ], ], }, ], operations: [ { name: "add", label: "保存", type: "primary", permission: "", showOnEdit: false }, { name: "update", label: "更新", type: "primary", permission: "", showOnEdit: true }, { name: "reset", label: "重置", type: "warning", showAlways: true }, ], }, }; return { dialogConfigs, tableConfigs: { ongoingTable: genTableProps("ongoing"), pendingTable: genTableProps("pending"), finishedTable: genTableProps("finished"), }, headFormConfigs: { ongoingTableSearch: genHeadFormFields("ongoing"), pendingTableSearch: genHeadFormFields("pending"), finishedTableSearch: genHeadFormFields("finished"), }, urls: { confirmedOrder: "/pms/order/pageCom", finishedOrder: "/pms/order/pageEnd", unConfirmedOrder: "/pms/order/pageUnCom", base: "/pms/order", importUrl: "/pms/order/importExcelOrder", templateUrl: "/importTemplates/orderImport.xlsx", payload: "/pms/carHandle", }, }; }