Files
pms-aomei/src/views/modules/pms/order/config.js
2023-03-28 10:26:23 +08:00

596 lines
21 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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', label: '查看详情', icon: 'view' },
{ 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', label: '查看详情' },
{} // 占位
// { name: 'view', label: '查看详情' }
// { name: 'end-order', label: '结束订单', icon: 'error', showText: true },
],
};
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: "startTime", label: "开始时间", filter: timeFilter }, // "订单砖数" },
{ 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: "addon", 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: "ktmp", label: "烧成温度" },
{ width: 120, prop: "tt", label: "烧成时间" },
{ 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: "发货时间" },
{ 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 * 35,
}
// 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: {
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: "请输入订单子号" },
},
{
input: true,
label: "生产订单类型",
prop: "specifications",
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
elparams: { placeholder: "请输入生产订单类型" },
},
{
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: "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 },
},
],
[
{
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: "Add on",
prop: "sapParam1",
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
elparams: { placeholder: "请输入addon" },
},
{
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 },
},
{
select: true,
label: "压机",
prop: "press",
options: [],
optionLabel: "code",
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
fetchData: () => this.$http.get("/pms/equipment/page", { params: { limit: 999, page: 1, name: "" } }),
elparams: { placeholder: "请选择压机号", filterable: true },
},
],
[
{
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: "blender",
options: [],
optionLabel: "code",
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
fetchData: () => this.$http.get("/pms/equipment/page", { params: { limit: 999, page: 1, name: "" } }),
elparams: { placeholder: "请选择混料机号", filterable: true },
},
{
select: true,
label: "隧道窑号",
prop: "kiln",
options: [],
optionLabel: "code",
fetchData: () => this.$http.get("/pms/equipment/page", { params: { limit: 999, page: 1, name: "" } }),
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: "版本号",
// prop: "ai",
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
// 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: "请输入烧成时间" },
},
{
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",
option: [],
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: "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",
// base: "/pms/material",
// page: "/pms/material/page",
// tree: "/pms/material/tree",
// subase: "/pms/materialArrt",
// subpage: "/pms/materialArrt/page",
// more...
},
};
}
// const headFormFields = [
// {
// label: '订单号',
// prop: 'code',
// input: true,
// bind: { placeholder: '请输入订单号' }
// },
// // {
// // label: '子订单号',
// // prop: 'cate',
// // input: true,
// // bind: { placeholder: '请输入子订单号', rules: [{ type: 'number', message: '请输入整数', trigger: 'blur', transform: val => Number(val) }] }
// // },
// // {
// // label: "配方",
// // prop: "bomId",
// // select: [],
// // fn: () => this.$http.get('/pms/bom/page', { params: { key: '', limit: 999, page: 1 } }),
// // bind: { placeholder: "请选择配方" },
// // },
// // {
// // label: '砖型',
// // prop: 'shapeId',
// // select: [],
// // fn: () => this.$http.get('/pms/shape/page', { params: { key: '', limit: 999, page: 1 } }),
// // bind: { placeholder: "请选择砖型" },
// // },
// // {
// // label: '工艺',
// // prop: 'techId',
// // select: [],
// // fn: () => this.$http.post('/pms/equipmentTech/pageView', { key: '', shape: '', wsId: 0, limit: 999, page: 1 }),
// // bind: { placeholder: "请选择砖型" },
// // },
// // {
// // label: '订单状态',
// // prop: 'types', // 0等待, 1确认, 2生产3暂停, 4结束, 5接受, 6拒绝
// // select: [
// // {label: '等待', value: 0},
// // {label: '确认', value: 1},
// // {label: '生产', value: 2},
// // {label: '暂停', value: 3},
// // {label: '结束', value: 4},
// // {label: '接受', value: 5},
// // {label: '拒绝', value: 6},
// // ],
// // // fn: () => this.$http.post('/pms/equipmentTech/pageView', { key: '', shape: '', wsId: 0, limit: 999, page: 1 }),
// // bind: { placeholder: "请选择订单状态" },
// // },
// {
// button: {
// type: "primary",
// name: "查询",
// },
// },
// {
// button: {
// type: "primary",
// name: "新增",
// permission: "",
// },
// bind: {
// plain: true,
// },
// },
// ];