admin-vben/apps/web-antd/src/views/mes/pro/route/data.ts

336 lines
9.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MesProRouteApi } from '#/api/mes/pro/route';
import type { MesProRouteProcessApi } from '#/api/mes/pro/route/process';
import type { MesProRouteProductApi } from '#/api/mes/pro/route/product';
import type { MesProRouteProductBomApi } from '#/api/mes/pro/route/productbom';
import { h } from 'vue';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { Button } from 'ant-design-vue';
import { z } from '#/adapter/form';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { MesAutoCodeRuleCode } from '#/views/mes/utils/constants';
/** 工艺路线表单 */
export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {
return [
{
fieldName: 'id',
component: 'Input',
dependencies: { triggerFields: [''], show: () => false },
},
{
fieldName: 'code',
label: '路线编码',
component: 'Input',
componentProps: {
maxLength: 64,
placeholder: '请输入工艺路线编码',
},
rules: z.string().min(1, '路线编码不能为空').max(64),
suffix: () =>
h(
Button,
{
type: 'default',
onClick: async () => {
try {
const code = await generateAutoCode(
MesAutoCodeRuleCode.PRO_ROUTE_CODE,
);
await formApi?.setFieldValue('code', code);
} catch (error) {
console.error(error);
}
},
},
{ default: () => '生成' },
),
},
{
fieldName: 'name',
label: '路线名称',
component: 'Input',
componentProps: {
maxLength: 100,
placeholder: '请输入工艺路线名称',
},
rules: z.string().min(1, '路线名称不能为空').max(100),
},
{
fieldName: 'description',
label: '路线说明',
component: 'Textarea',
formItemClass: 'col-span-2',
componentProps: {
maxLength: 500,
placeholder: '请输入工艺路线说明',
rows: 3,
},
},
{
fieldName: 'remark',
label: '备注',
component: 'Textarea',
formItemClass: 'col-span-2',
componentProps: {
maxLength: 250,
placeholder: '请输入备注',
rows: 2,
},
},
];
}
/** 列表搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {
return [
{
fieldName: 'code',
label: '路线编码',
component: 'Input',
componentProps: { allowClear: true, placeholder: '请输入路线编码' },
},
{
fieldName: 'name',
label: '路线名称',
component: 'Input',
componentProps: { allowClear: true, placeholder: '请输入路线名称' },
},
{
fieldName: 'status',
label: '状态',
component: 'Select',
componentProps: {
allowClear: true,
options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'),
placeholder: '请选择状态',
},
},
];
}
/** 列表字段 */
export function useGridColumns(): VxeTableGridOptions<MesProRouteApi.Route>['columns'] {
return [
{
field: 'code',
title: '路线编码',
minWidth: 160,
slots: { default: 'code' },
},
{ field: 'name', title: '路线名称', minWidth: 180 },
{ field: 'description', title: '路线说明', minWidth: 200 },
{
field: 'status',
title: '状态',
width: 110,
slots: { default: 'status' },
},
{ field: 'remark', title: '备注', minWidth: 160 },
{
field: 'createTime',
title: '创建时间',
width: 180,
formatter: 'formatDateTime',
},
{
title: '操作',
width: 160,
fixed: 'right',
slots: { default: 'actions' },
},
];
}
/** 工艺路线工序明细表单 */
export function useRouteProcessFormSchema(
processOptions: Array<{ label: string; value: number }>,
): VbenFormSchema[] {
return [
{
fieldName: 'id',
component: 'Input',
dependencies: { triggerFields: [''], show: () => false },
},
{
fieldName: 'routeId',
component: 'Input',
dependencies: { triggerFields: [''], show: () => false },
},
{
fieldName: 'sort',
label: '序号',
component: 'InputNumber',
componentProps: { class: '!w-full', min: 1, precision: 0 },
rules: z.number().default(1),
},
{
fieldName: 'processId',
label: '工序',
component: 'Select',
componentProps: {
allowClear: true,
options: processOptions,
placeholder: '请选择工序',
showSearch: true,
},
rules: 'selectRequired',
},
{
fieldName: 'linkType',
label: '与下道工序关系',
component: 'Select',
componentProps: {
allowClear: true,
options: getDictOptions(DICT_TYPE.MES_PRO_LINK_TYPE, 'number'),
placeholder: '请选择',
},
rules: z.number().default(3),
},
{
fieldName: 'colorCode',
label: '甘特图颜色',
component: 'Input',
componentProps: {
maxLength: 16,
placeholder: '请输入颜色 hex例如 #00AEF3',
},
},
{
fieldName: 'keyFlag',
label: '是否关键工序',
component: 'Switch',
componentProps: { checkedChildren: '是', unCheckedChildren: '否' },
rules: z.boolean().default(false),
},
{
fieldName: 'checkFlag',
label: '是否质检确认',
component: 'Switch',
componentProps: { checkedChildren: '是', unCheckedChildren: '否' },
rules: z.boolean().default(false),
},
{
fieldName: 'prepareTime',
label: '准备时间(分)',
component: 'InputNumber',
componentProps: { class: '!w-full', min: 0, precision: 0 },
rules: z.number().default(0),
},
{
fieldName: 'waitTime',
label: '等待时间(分)',
component: 'InputNumber',
componentProps: { class: '!w-full', min: 0, precision: 0 },
rules: z.number().default(0),
},
{
fieldName: 'remark',
label: '备注',
component: 'Textarea',
formItemClass: 'col-span-2',
componentProps: { maxLength: 250, placeholder: '请输入备注', rows: 2 },
},
];
}
/** 工艺路线工序列表字段 */
export function useRouteProcessGridColumns(): VxeTableGridOptions<MesProRouteProcessApi.RouteProcess>['columns'] {
return [
{ field: 'sort', title: '序号', width: 70, align: 'center', fixed: 'left' },
{ field: 'processCode', title: '工序编码', width: 140, fixed: 'left' },
{ field: 'processName', title: '工序名称', width: 140, fixed: 'left' },
{ field: 'nextProcessName', title: '下一道工序', width: 140 },
{
field: 'linkType',
title: '与下一道工序关系',
width: 160,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.MES_PRO_LINK_TYPE },
},
},
{
field: 'keyFlag',
title: '关键工序',
width: 90,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },
},
},
{
field: 'checkFlag',
title: '质检确认',
width: 100,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },
},
},
{ field: 'prepareTime', title: '准备时间(分)', width: 110 },
{ field: 'waitTime', title: '等待时间(分)', width: 110 },
{
field: 'colorCode',
title: '甘特图颜色',
width: 130,
slots: { default: 'colorCode' },
},
{ field: 'remark', title: '备注', minWidth: 160 },
{
title: '操作',
width: 130,
fixed: 'right',
slots: { default: 'actions' },
},
];
}
/** 工艺路线产品列表字段 */
export function useRouteProductGridColumns(): VxeTableGridOptions<MesProRouteProductApi.RouteProduct>['columns'] {
return [
{ field: 'itemCode', title: '产品物料编码', width: 150 },
{ field: 'itemName', title: '产品物料名称', width: 150 },
{ field: 'specification', title: '规格型号', width: 150 },
{ field: 'unitName', title: '单位', width: 80 },
{ field: 'quantity', title: '生产数量', width: 100 },
{
field: 'productionTime',
title: '生产用时',
width: 130,
slots: { default: 'productionTime' },
},
{ field: 'remark', title: '备注', minWidth: 160 },
{
title: '操作',
width: 130,
fixed: 'right',
slots: { default: 'actions' },
},
];
}
/** 工艺路线产品 BOM 列表字段 */
export function useRouteProductBomGridColumns(): VxeTableGridOptions<MesProRouteProductBomApi.RouteProductBom>['columns'] {
return [
{ field: 'itemCode', title: 'BOM 物料编码', width: 150 },
{ field: 'itemName', title: 'BOM 物料名称', width: 150 },
{ field: 'specification', title: '规格型号', width: 150 },
{ field: 'unitName', title: '单位', width: 80 },
{ field: 'quantity', title: '用料比例', width: 100 },
{ field: 'remark', title: '备注', minWidth: 160 },
{
title: '操作',
width: 130,
fixed: 'right',
slots: { default: 'actions' },
},
];
}