diff --git a/src/api/mes/deviceledger/index.ts b/src/api/mes/deviceledger/index.ts index 1f614787..d14f7e03 100644 --- a/src/api/mes/deviceledger/index.ts +++ b/src/api/mes/deviceledger/index.ts @@ -10,6 +10,7 @@ export interface DeviceLedgerVO { deviceName: string // 设备名称 deviceStatus: number // 设备状态 (0-正常, 1-停用, 2-维修, 3-报废) deviceBrand: string // 设备品牌 + sn?: string // 序列号 deviceModel: string // 设备型号 deviceSpec: string // 设备规格 deviceType: string | number // 设备类型 @@ -22,6 +23,7 @@ export interface DeviceLedgerVO { useDept?: string // 使用部门 deviceManager: string // 设备负责人 productionDate: string | number | Date // 设备生产日期 + outgoingTime?: string | number | Date // 出厂日期 factoryEntryDate: string | number | Date // 设备入厂日期 deviceRemark: string // 设备备注 remark: string // 备注 diff --git a/src/api/mes/dvrepair/index.ts b/src/api/mes/dvrepair/index.ts index f3f9c4b7..63942c09 100644 --- a/src/api/mes/dvrepair/index.ts +++ b/src/api/mes/dvrepair/index.ts @@ -15,8 +15,20 @@ export interface DvRepairVO { finishDate: Date // 完成日期 confirmDate: Date // 验收日期 repairResult: string // 维修结果 + repairStatus?: string // 维修结果状态 + faultPhenomenon?: string // 故障现象 + faultDescription?: string // 故障描述 + faultImages?: string // 故障图片,逗号分隔 + downtimeDuration?: string // 停机时长 + faultReason?: string // 故障原因 + handlingMeasures?: string // 处理措施 + replacementParts?: string // 更换配件 + repairContent?: string // 维修内容 + repairedImages?: string // 维修后图片,逗号分隔 acceptedBy: string // 维修人员 confirmBy: string // 验收人员 + faultLevel?: string // 故障等级 + isShutdown?: boolean // 是否停机 status: string // 单据状态 remark: string // 备注 } diff --git a/src/api/system/menu/index.ts b/src/api/system/menu/index.ts index 804082d7..04dbc258 100644 --- a/src/api/system/menu/index.ts +++ b/src/api/system/menu/index.ts @@ -37,12 +37,12 @@ export const getMenu = (id: number) => { } // 新增菜单 -export const createMenu = (data: MenuVO) => { +export const createMenu = (data: Partial) => { return request.post({ url: '/system/menu/create', data }) } // 修改菜单 -export const updateMenu = (data: MenuVO) => { +export const updateMenu = (data: Partial) => { return request.put({ url: '/system/menu/update', data }) } diff --git a/src/api/system/permission/index.ts b/src/api/system/permission/index.ts index b3c7696b..b6369288 100644 --- a/src/api/system/permission/index.ts +++ b/src/api/system/permission/index.ts @@ -17,8 +17,11 @@ export interface PermissionAssignRoleDataScopeReqVO { } // 查询角色拥有的菜单权限 -export const getRoleMenuList = async (roleId: number) => { - return await request.get({ url: '/system/permission/list-role-menus?roleId=' + roleId }) +export const getRoleMenuList = async (roleId: number, clientType?: number) => { + return await request.get({ + url: '/system/permission/list-role-menus', + params: { roleId, clientType } + }) } // 赋予角色菜单权限 diff --git a/src/components/QrcodeActionCard/index.vue b/src/components/QrcodeActionCard/index.vue index 7477e779..6d8eb2c6 100644 --- a/src/components/QrcodeActionCard/index.vue +++ b/src/components/QrcodeActionCard/index.vue @@ -39,6 +39,7 @@ import request from '@/config/axios' import HiprintPreviewDialog from '@/components/HiprintPreviewDialog/index.vue' import { createImageViewer } from '@/components/ImageViewer' import { ElLoading } from 'element-plus' +import { getSimpleDictDataList } from '@/api/system/dict/dict.data' const { t } = useI18n() const message = useMessage() @@ -66,6 +67,7 @@ const props = withDefaults( templateJsonUrl?: string templateJson?: any printData?: Record + printTemplateType?: string | number }>(), { imageUrl: '', @@ -88,7 +90,8 @@ const props = withDefaults( printMaxHeight: 120, templateJsonUrl: '', templateJson: undefined, - printData: () => ({}) + printData: () => ({}), + printTemplateType: undefined } ) @@ -99,14 +102,49 @@ const emit = defineEmits<{ const hiprintPreviewDialogRef = ref() const refreshLoading = ref(false) +type TemplateFieldMap = { + qrcodeField?: string + nameField?: string + codeField?: string +} + +let printTemplateDictCache: any[] | undefined + const showActionMask = computed(() => props.showPreview || props.showPrint || props.showRefresh) +const parseTemplateFieldMap = (remark: any): TemplateFieldMap | undefined => { + const parts = String(remark || '') + .split(',') + .map((item) => item.trim()) + .filter(Boolean) + if (!parts.length) return undefined + return { + qrcodeField: parts[0], + nameField: parts[1], + codeField: parts[2] || parts[1] + } +} + +const getTemplateFieldMap = async (): Promise => { + if (props.printTemplateType === undefined || props.printTemplateType === null || props.printTemplateType === '') { + return undefined + } + if (!printTemplateDictCache) { + printTemplateDictCache = await getSimpleDictDataList() + } + const matched = (printTemplateDictCache || []).find( + (item: any) => item.dictType === 'print_template_type' && String(item.value) === String(props.printTemplateType) + ) + return parseTemplateFieldMap(matched?.remark) +} + const buildQrcodeTemplateJson = ( qrcodeUrl: string, - printId: string, + printData: Record, imageWidth: number, imageHeight: number, - paperHeight: number + paperHeight: number, + fieldMap?: TemplateFieldMap ) => ({ panels: [ { @@ -124,7 +162,7 @@ const buildQrcodeTemplateJson = ( width: imageWidth, height: imageHeight, src: qrcodeUrl, - field: 'qrcodeUrl', + field: fieldMap?.qrcodeField || 'qrcodeUrl', title: '二维码图片', testData: qrcodeUrl }, @@ -133,23 +171,7 @@ const buildQrcodeTemplateJson = ( type: 'image' } }, - { - options: { - left: 0, - top: imageHeight + 2, - height: 10, - width: imageWidth, - testData: printId, - title: 'ID', - field: 'printId', - textAlign: 'center', - fontSize: 10 - }, - printElementType: { - title: '文本', - type: 'text' - } - } + ...buildDefaultTextElements(printData, imageWidth, imageHeight, fieldMap) ], paperNumberDisabled: true, paperNumberContinue: true, @@ -159,6 +181,60 @@ const buildQrcodeTemplateJson = ( ] }) +const buildDefaultTextElements = ( + printData: Record, + imageWidth: number, + imageHeight: number, + fieldMap?: TemplateFieldMap +) => { + const fields = [ + { title: '名称', field: fieldMap?.nameField }, + { title: '编码', field: fieldMap?.codeField } + ].filter((item) => item.field) + + if (!fields.length) { + const printId = printData.printId === undefined || printData.printId === null ? '' : String(printData.printId) + if (!printId) return [] + return [ + { + options: { + left: 0, + top: imageHeight + 2, + height: 10, + width: imageWidth, + testData: printId, + title: 'ID', + field: 'printId', + textAlign: 'center', + fontSize: 10 + }, + printElementType: { + title: '文本', + type: 'text' + } + } + ] + } + + return fields.map((item, index) => ({ + options: { + left: 0, + top: imageHeight + 2 + index * 12, + height: 10, + width: imageWidth, + testData: printData[item.field!] === undefined || printData[item.field!] === null ? '' : String(printData[item.field!]), + title: item.title, + field: item.field, + textAlign: 'center', + fontSize: 10 + }, + printElementType: { + title: '文本', + type: 'text' + } + })) +} + const getImageSize = (src: string) => new Promise<{ width: number; height: number }>((resolve, reject) => { const img = new Image() @@ -208,33 +284,44 @@ const handlePreview = () => { }) } -const replaceTemplateValues = (templateJson: any, printData: Record) => { +const resolveElementFieldKey = (element: any, fieldMap?: TemplateFieldMap) => { + const fieldKey = typeof element?.options?.field === 'string' ? element.options.field.trim() : '' + const qidKey = typeof element?.options?.qid === 'string' ? element.options.qid.trim() : '' + const title = String(element?.options?.title || element?.printElementType?.title || '').trim() + + if (fieldMap) { + if (title.includes('二维码')) return fieldMap.qrcodeField || fieldKey || qidKey + if (title.includes('名称')) return fieldMap.nameField || fieldKey || qidKey + if (title.includes('编码') || title.includes('条码') || title.includes('文本')) return fieldMap.codeField || fieldKey || qidKey + } + + return fieldKey || qidKey +} + +const replaceTemplateValues = (templateJson: any, printData: Record, fieldMap?: TemplateFieldMap) => { if (!templateJson?.panels) return templateJson - + return { ...templateJson, panels: templateJson.panels.map((panel: any) => ({ ...panel, printElements: panel.printElements?.map((element: any) => { - if (!element?.options?.qid) return element - - const qid = element.options.qid - const value = printData[qid] - + const valueKey = resolveElementFieldKey(element, fieldMap) + if (!valueKey) return element + + const value = printData[valueKey] if (value === undefined || value === null) return element - + const newOptions = { ...element.options } - - if (qid === 'qrcodeUrl') { + + if (element?.printElementType?.type === 'image') { newOptions.src = value newOptions.testData = value } else { - newOptions.field = qid - if (newOptions.testData === undefined || newOptions.testData === '') { - newOptions.testData = String(value) - } + newOptions.field = valueKey + newOptions.testData = String(value) } - + return { ...element, options: newOptions @@ -249,6 +336,7 @@ const handlePrint = async () => { let templateJson: any let printData: Record + const templateFieldMap = await getTemplateFieldMap() printData = { qrcodeUrl: props.imageUrl, @@ -257,12 +345,12 @@ const handlePrint = async () => { } if (props.templateJson) { - templateJson = replaceTemplateValues(props.templateJson, printData) + templateJson = replaceTemplateValues(props.templateJson, printData, templateFieldMap) } else if (props.templateJsonUrl) { try { const response = await request.get({ url: props.templateJsonUrl }) templateJson = typeof response.data === 'string' ? JSON.parse(response.data) : response.data - templateJson = replaceTemplateValues(templateJson, printData) + templateJson = replaceTemplateValues(templateJson, printData, templateFieldMap) } catch (error) { console.error('获取打印模板失败', error) message.error('获取打印模板失败') @@ -273,10 +361,11 @@ const handlePrint = async () => { const imageWidth = printSize.width const imageHeight = printSize.height const printId = props.printId === undefined || props.printId === null ? '' : String(props.printId) - const idAreaHeight = printId ? 14 : 0 - const paperHeight = imageHeight + idAreaHeight - - templateJson = buildQrcodeTemplateJson(props.imageUrl, printId, imageWidth, imageHeight, paperHeight) + const hasMappedFields = Boolean(templateFieldMap?.nameField || templateFieldMap?.codeField) + const textLineCount = hasMappedFields ? [templateFieldMap?.nameField, templateFieldMap?.codeField].filter(Boolean).length : (printId ? 1 : 0) + const paperHeight = imageHeight + textLineCount * 12 + (textLineCount ? 4 : 0) + + templateJson = buildQrcodeTemplateJson(props.imageUrl, printData, imageWidth, imageHeight, paperHeight, templateFieldMap) } const paperSize = templateJson?.panels?.[0] ? { diff --git a/src/components/UploadFile/src/UploadImgs.vue b/src/components/UploadFile/src/UploadImgs.vue index 86e1109c..6bd31db1 100644 --- a/src/components/UploadFile/src/UploadImgs.vue +++ b/src/components/UploadFile/src/UploadImgs.vue @@ -119,18 +119,27 @@ interface UploadEmits { } const emit = defineEmits() +const unwrapUploadPayload = (res: any) => { + if (!res) return undefined + const payload = res.data ?? res + if (payload && typeof payload === 'object' && payload.data) { + return payload.data + } + return payload +} + const getUrlFromRes = (res: any): string => { if (!res) return '' if (typeof res === 'string') return res if (typeof res.data === 'string') return res.data - const data = res.data || res + const data = unwrapUploadPayload(res) if (typeof data === 'string') return data if (data.fileUrl) return data.fileUrl return '' } const getNameFromRes = (res: any, url: string): string => { - const data = res && res.data ? res.data : res + const data = unwrapUploadPayload(res) if (data && typeof data === 'object' && data.fileName) return data.fileName if (!url) return '' const idx = url.lastIndexOf('/') diff --git a/src/locales/en.ts b/src/locales/en.ts index 7e2ddee2..08e3518d 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1283,6 +1283,7 @@ export default { yes: 'Yes', no: 'No', productionDate: 'Production Date', + outgoingTime: 'Outgoing Date', factoryEntryDate: 'Factory Entry Date', deviceLocation: 'Location', deviceManagerName: 'Manager', @@ -1301,8 +1302,11 @@ export default { placeholderDeviceType: 'Please select type', placeholderDeviceModel: 'Please input model', placeholderDeviceSpec: 'Please input spec', + placeholderDeviceBrand: 'Please input device brand', + placeholderSn: 'Please input serial number', placeholderRatedCapacity: 'Please input rated capacity', placeholderProductionDate: 'Please select production date', + placeholderOutgoingTime: 'Please select outgoing date', placeholderFactoryEntryDate: 'Please select factory entry date', placeholderDeviceLocation: 'Please input location', placeholderDeviceManagerIds: 'Please select manager', @@ -1311,6 +1315,7 @@ export default { placeholderBeijianIds: 'Please select spare part', deviceNo: 'Device No', deviceBrand: 'Device Brand', + sn: 'Serial Number', supplier: 'Supplier', workshop: 'Workshop', systemOrg: 'System Org', @@ -1580,10 +1585,21 @@ export default { component: 'Key Component', acceptedBy: 'Repairer', confirmBy: 'Inspector', + faultLevel: 'Failure Level', + isShutdown: 'Shutdown Required', requireDate: 'Request Date', finishDate: 'Finish Date', confirmDate: 'Accept Date', repairResult: 'Repair Result', + faultPhenomenon: 'Fault Phenomenon', + faultDescription: 'Fault Description', + faultImages: 'On-site Images', + downtimeDuration: 'Downtime Duration', + faultReason: 'Fault Reason', + handlingMeasures: 'Handling Measures', + replacementParts: 'Replacement Parts', + repairContent: 'Repair Content', + repairedImages: 'After-repair Images', repairStatus: 'Result', status: 'Order Status', deviceTypeDevice: 'Device', @@ -1623,7 +1639,17 @@ export default { placeholderRequireDate: 'Select request date', placeholderFinishDate: 'Select finish date', placeholderConfirmDate: 'Select accept date', + placeholderRepairResult: 'Please select repair result', + placeholderFaultLevel: 'Please select failure level', placeholderAutoFill: 'Auto fill', + placeholderFaultPhenomenon: 'Please enter fault phenomenon', + placeholderFaultDescription: 'Please enter fault description', + placeholderDowntimeDuration: 'Please enter downtime duration', + placeholderFaultReason: 'Please enter fault reason', + placeholderHandlingMeasures: 'Please enter handling measures', + placeholderReplacementParts: 'Please enter replacement parts (optional)', + placeholderRepairContent: 'Please describe the repair process and result', + placeholderRemark: 'Please enter remarks within 300 characters', placeholderLineSubjectCode: 'Please input repair code', placeholderLineSubjectName: 'Please input repair name', placeholderLineSubjectContent: 'Please input repair content', @@ -1634,9 +1660,13 @@ export default { validatorMachineryNameRequired: 'Device name can not be empty', validatorMachineryTypeIdRequired: 'Device type can not be empty', validatorRequireDateRequired: 'Request date can not be empty', + validatorFaultLevelRequired: 'Failure level can not be empty', + validatorIsShutdownRequired: 'Shutdown required can not be empty', validatorFinishDateRequired: 'Finish date can not be empty', validatorConfirmDateRequired: 'Accept date can not be empty', validatorRepairResultRequired: 'Repair result can not be empty', + validatorFaultPhenomenonRequired: 'Fault phenomenon can not be empty', + validatorComponentRequired: 'Component can not be empty', validatorLineRepairIdRequired: 'Repair order ID can not be empty', validatorLineSubjectIdRequired: 'Item ID can not be empty', validatorLineSubjectCodeRequired: 'Item code can not be empty', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 627218dc..1a70f1e9 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1273,6 +1273,7 @@ export default { yes: '是', no: '否', productionDate: '生产日期', + outgoingTime: '出厂日期', factoryEntryDate: '入厂日期', deviceLocation: '位置', deviceManagerName: '责任人', @@ -1291,8 +1292,11 @@ export default { placeholderDeviceType: '请选择类型', placeholderDeviceModel: '请输入型号', placeholderDeviceSpec: '请输入规格型号', + placeholderDeviceBrand: '请输入设备品牌', + placeholderSn: '请输入序列号', placeholderRatedCapacity: '请输入额定产能', placeholderProductionDate: '请选择生产日期', + placeholderOutgoingTime: '请选择出厂日期', placeholderFactoryEntryDate: '请选择入厂日期', placeholderDeviceLocation: '请输入位置', placeholderDeviceManagerIds: '请选择责任人', @@ -1301,6 +1305,7 @@ export default { placeholderBeijianIds: '请选择备件', deviceNo: '设备编号', deviceBrand: '设备品牌', + sn: '序列号', supplier: '供应商', workshop: '所属车间', systemOrg: '所属系统组织', @@ -1577,10 +1582,21 @@ export default { component: '关键件', acceptedBy: '维修人员', confirmBy: '验收人员', + faultLevel: '故障等级', + isShutdown: '是否停机', requireDate: '报修日期', finishDate: '完成日期', confirmDate: '验收日期', repairResult: '维修结果', + faultPhenomenon: '故障现象', + faultDescription: '故障描述', + faultImages: '现场图片', + downtimeDuration: '停机时长', + faultReason: '故障原因', + handlingMeasures: '处理措施', + replacementParts: '更换配件', + repairContent: '维修总结 / 维修内容', + repairedImages: '附件 / 维修后图片', repairStatus: '结果', status: '单据状态', deviceTypeDevice: '设备', @@ -1620,7 +1636,17 @@ export default { placeholderRequireDate: '选择报修日期', placeholderFinishDate: '选择完成日期', placeholderConfirmDate: '选择验收日期', + placeholderRepairResult: '请选择维修结果', + placeholderFaultLevel: '请选择故障等级', placeholderAutoFill: '自动带出', + placeholderFaultPhenomenon: '请输入故障现象', + placeholderFaultDescription: '请输入故障描述', + placeholderDowntimeDuration: '请输入停机时长', + placeholderFaultReason: '请输入故障原因', + placeholderHandlingMeasures: '请输入处理措施', + placeholderReplacementParts: '请输入更换配件(可选)', + placeholderRepairContent: '请详细描述维修过程、处理情况及结果', + placeholderRemark: '请输入备注信息,限 300 字以内', placeholderLineSubjectCode: '请输入维修编码', placeholderLineSubjectName: '请输入维修名称', placeholderLineSubjectContent: '请输入维修内容', @@ -1631,9 +1657,13 @@ export default { validatorMachineryNameRequired: '设备名称不能为空', validatorMachineryTypeIdRequired: '设备类型不能为空', validatorRequireDateRequired: '报修日期不能为空', + validatorFaultLevelRequired: '故障等级不能为空', + validatorIsShutdownRequired: '是否停机不能为空', validatorFinishDateRequired: '完成日期不能为空', validatorConfirmDateRequired: '验收日期不能为空', validatorRepairResultRequired: '维修结果不能为空', + validatorFaultPhenomenonRequired: '故障现象不能为空', + validatorComponentRequired: '关键件不能为空', validatorLineRepairIdRequired: '维修单ID不能为空', validatorLineSubjectIdRequired: '项目ID不能为空', validatorLineSubjectCodeRequired: '项目编码不能为空', diff --git a/src/utils/dict.ts b/src/utils/dict.ts index 0fd92e59..826fac82 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -142,6 +142,7 @@ export enum DICT_TYPE { // ========== INFRA 模块 ========== INFRA_BOOLEAN_STRING = 'infra_boolean_string', + FAILURE_LEVEL = 'failure_level', INFRA_JOB_STATUS = 'infra_job_status', INFRA_JOB_LOG_STATUS = 'infra_job_log_status', INFRA_API_ERROR_LOG_PROCESS_STATUS = 'infra_api_error_log_process_status', diff --git a/src/views/erp/autocode/AutocodeIndex.vue b/src/views/erp/autocode/AutocodeIndex.vue index b90f8ed7..88da4a5a 100644 --- a/src/views/erp/autocode/AutocodeIndex.vue +++ b/src/views/erp/autocode/AutocodeIndex.vue @@ -1,132 +1,135 @@ + + diff --git a/src/views/erp/component/in/StockInForm.vue b/src/views/erp/component/in/StockInForm.vue index 03cee405..bf4c1cc4 100644 --- a/src/views/erp/component/in/StockInForm.vue +++ b/src/views/erp/component/in/StockInForm.vue @@ -1,100 +1,108 @@ + + diff --git a/src/views/erp/component/in/index.vue b/src/views/erp/component/in/index.vue index 39a1a982..38bf25e8 100644 --- a/src/views/erp/component/in/index.vue +++ b/src/views/erp/component/in/index.vue @@ -1,6 +1,7 @@ + + diff --git a/src/views/erp/component/out/index.vue b/src/views/erp/component/out/index.vue index e2da4546..e89456bb 100644 --- a/src/views/erp/component/out/index.vue +++ b/src/views/erp/component/out/index.vue @@ -1,6 +1,7 @@ - + + diff --git a/src/views/erp/product/product/index.vue b/src/views/erp/product/product/index.vue index 82e7df02..28214408 100644 --- a/src/views/erp/product/product/index.vue +++ b/src/views/erp/product/product/index.vue @@ -1,97 +1,79 @@ diff --git a/src/views/erp/stock/in/StockInForm.vue b/src/views/erp/stock/in/StockInForm.vue index 76b110b0..83becfa7 100644 --- a/src/views/erp/stock/in/StockInForm.vue +++ b/src/views/erp/stock/in/StockInForm.vue @@ -1,121 +1,110 @@ + diff --git a/src/views/erp/stock/in/index.vue b/src/views/erp/stock/in/index.vue index ed58dbb8..75e143d7 100644 --- a/src/views/erp/stock/in/index.vue +++ b/src/views/erp/stock/in/index.vue @@ -1,283 +1,262 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/src/views/erp/stock/out/index.vue b/src/views/erp/stock/out/index.vue index f11f485c..98fe6a75 100644 --- a/src/views/erp/stock/out/index.vue +++ b/src/views/erp/stock/out/index.vue @@ -1,5 +1,7 @@ + + diff --git a/src/views/erp/warehouselocation/index.vue b/src/views/erp/warehouselocation/index.vue index 147ef28f..817ae239 100644 --- a/src/views/erp/warehouselocation/index.vue +++ b/src/views/erp/warehouselocation/index.vue @@ -1,175 +1,179 @@ + + diff --git a/src/views/mes/bom/index.vue b/src/views/mes/bom/index.vue index e09a0102..cfbdad2e 100644 --- a/src/views/mes/bom/index.vue +++ b/src/views/mes/bom/index.vue @@ -1,155 +1,158 @@ diff --git a/src/views/mes/criticalComponent/CriticalComponentForm.vue b/src/views/mes/criticalComponent/CriticalComponentForm.vue index 0de68532..c099d59c 100644 --- a/src/views/mes/criticalComponent/CriticalComponentForm.vue +++ b/src/views/mes/criticalComponent/CriticalComponentForm.vue @@ -1,103 +1,107 @@ - + + diff --git a/src/views/mes/criticalComponent/index.vue b/src/views/mes/criticalComponent/index.vue index 9cce9127..8b68930e 100644 --- a/src/views/mes/criticalComponent/index.vue +++ b/src/views/mes/criticalComponent/index.vue @@ -1,154 +1,204 @@ diff --git a/src/views/mold/moldrepair/MoldRepairForm.vue b/src/views/mold/moldrepair/MoldRepairForm.vue index 13264125..6ae10f93 100644 --- a/src/views/mold/moldrepair/MoldRepairForm.vue +++ b/src/views/mold/moldrepair/MoldRepairForm.vue @@ -1,149 +1,154 @@ + + + diff --git a/src/views/mold/moldrepair/index.vue b/src/views/mold/moldrepair/index.vue index 582b9255..7f8e533b 100644 --- a/src/views/mold/moldrepair/index.vue +++ b/src/views/mold/moldrepair/index.vue @@ -1,5 +1,6 @@ + - +
+ +