From 701fdf3e7283e892324bf9eb093e1675d03ea211 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 10 七月 2026 16:37:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/warehouse/location/modules/form.vue          |    2 
 src/views/mes/pro/card/index.vue                       |    2 
 src/views/itemreceipt/modules/line-list.vue            |    2 
 src/views/mes/md/workstation/modules/form.vue          |  249 +++---
 src/views/sn/modules/detail.vue                        |    2 
 src/views/returnvendor/modules/line-list.vue           |    2 
 src/views/mes/md/item/modules/form.vue                 |    2 
 src/views/productreceipt/modules/line-list.vue         |    2 
 src/views/warehouse/area/modules/form.vue              |    2 
 src/views/warehouse/modules/form.vue                   |    2 
 src/views/mes/tm/tool/modules/form.vue                 |  199 +++---
 src/views/mes/dv/machinery/modules/form.vue            |  230 +++---
 src/views/outsourcereceipt/modules/line-list.vue       |    2 
 src/views/returnissue/modules/line-list.vue            |    2 
 src/views/mes/md/item/index.vue                        |  282 ++++----
 src/views/mes/pro/workorder/modules/form.vue           |  481 +++++++-------
 src/views/mes/pro/card/modules/form.vue                |    2 
 src/views/mes/pro/workorder/index.vue                  |  271 ++++----
 src/views/transfer/modules/line-list.vue               |    2 
 src/views/mes/md/workstation/index.vue                 |    2 
 src/views/mes/md/workstation/workshop/modules/form.vue |  198 +++--
 src/views/returnsales/modules/line-list.vue            |    2 
 22 files changed, 972 insertions(+), 968 deletions(-)

diff --git a/src/views/itemreceipt/modules/line-list.vue b/src/views/itemreceipt/modules/line-list.vue
index e3fcb74..9a88157 100644
--- a/src/views/itemreceipt/modules/line-list.vue
+++ b/src/views/itemreceipt/modules/line-list.vue
@@ -18,7 +18,7 @@
   getItemReceiptLinePage,
 } from '#/api/mes/wm/itemreceipt/line';
 import { $t } from '#/locales';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/mes/dv/machinery/modules/form.vue b/src/views/mes/dv/machinery/modules/form.vue
index cd33dba..5a9a3f9 100644
--- a/src/views/mes/dv/machinery/modules/form.vue
+++ b/src/views/mes/dv/machinery/modules/form.vue
@@ -1,144 +1,144 @@
 <script lang="ts" setup>
-import type { FormType } from '../data';
+  import type { FormType } from "../data";
 
-import type { MesDvMachineryApi } from '#/api/mes/dv/machinery';
+  import type { MesDvMachineryApi } from "#/api/mes/dv/machinery";
 
-import { computed, ref } from 'vue';
+  import { computed, ref } from "vue";
 
-import { useVbenModal } from '../../../../../packages/effects/common-ui/src';
-import { BarcodeBizTypeEnum } from '../../../../../packages/constants/src';
+  import { useVbenModal } from "../../../../../packages/effects/common-ui/src";
+  import { BarcodeBizTypeEnum } from "../../../../../packages/constants/src";
 
-import { Button, message, Tabs } from 'ant-design-vue';
+  import { Button, message, Tabs } from "ant-design-vue";
 
-import { useVbenForm } from '#/adapter/form';
-import {
-  createMachinery,
-  getMachinery,
-  updateMachinery,
-} from '#/api/mes/dv/machinery';
-import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+  import { useVbenForm } from "#/adapter/form";
+  import {
+    createMachinery,
+    getMachinery,
+    updateMachinery,
+  } from "#/api/mes/dv/machinery";
+  import { $t } from "#/locales";
+  import { BarcodeDetail } from "#/views/wls/barcode/components";
 
-import { useFormSchema } from '../data';
-import CheckRecordList from './check-record-list.vue';
-import MaintenRecordList from './mainten-record-list.vue';
-import RepairList from './repair-list.vue';
+  import { useFormSchema } from "../data";
+  import CheckRecordList from "./check-record-list.vue";
+  import MaintenRecordList from "./mainten-record-list.vue";
+  import RepairList from "./repair-list.vue";
 
-const emit = defineEmits(['success']);
-const formType = ref<FormType>('create'); // 琛ㄥ崟妯″紡
-const subTabsName = ref('check'); // 褰撳墠璧勬簮椤电
-const formData = ref<MesDvMachineryApi.Machinery>();
-const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
-const isDetail = computed(() => formType.value === 'detail'); // 鏄惁鏌ョ湅妯″紡
-const getTitle = computed(() => {
-  if (formType.value === 'detail') {
-    return '鏌ョ湅璁惧';
-  }
-  return formType.value === 'update' ? '淇敼璁惧' : '鏂板璁惧';
-});
+  const emit = defineEmits(["success"]);
+  const formType = ref<FormType>("create"); // 琛ㄥ崟妯″紡
+  const subTabsName = ref("check"); // 褰撳墠璧勬簮椤电
+  const formData = ref<MesDvMachineryApi.Machinery>();
+  const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
+  const isDetail = computed(() => formType.value === "detail"); // 鏄惁鏌ョ湅妯″紡
+  const getTitle = computed(() => {
+    if (formType.value === "detail") {
+      return "鏌ョ湅璁惧";
+    }
+    return formType.value === "update" ? "淇敼璁惧" : "鏂板璁惧";
+  });
 
-const [Form, formApi] = useVbenForm({
-  commonConfig: {
-    componentProps: {
-      class: 'w-full',
+  const [Form, formApi] = useVbenForm({
+    commonConfig: {
+      componentProps: {
+        class: "w-full",
+      },
+      formItemClass: "col-span-1",
+      labelWidth: 110,
     },
-    formItemClass: 'col-span-1',
-    labelWidth: 110,
-  },
-  wrapperClass: 'grid-cols-3',
-  layout: 'horizontal',
-  schema: [],
-  showDefaultActions: false,
-});
+    wrapperClass: "grid-cols-3",
+    layout: "horizontal",
+    schema: [],
+    showDefaultActions: false,
+  });
 
-/** 鏌ョ湅璁惧鏉$爜 */
-function handleBarcode() {
-  if (!formData.value?.id) {
-    return;
+  /** 鏌ョ湅璁惧鏉$爜 */
+  function handleBarcode() {
+    if (!formData.value?.id) {
+      return;
+    }
+    barcodeDetailRef.value?.openByBusiness(
+      formData.value.id,
+      BarcodeBizTypeEnum.MACHINERY,
+      formData.value.code,
+      formData.value.name
+    );
   }
-  barcodeDetailRef.value?.openByBusiness(
-    formData.value.id,
-    BarcodeBizTypeEnum.MACHINERY,
-    formData.value.code,
-    formData.value.name,
-  );
-}
 
-const [Modal, modalApi] = useVbenModal({
-  async onConfirm() {
-    if (isDetail.value) {
-      await modalApi.close();
-      return;
-    }
-    const { valid } = await formApi.validate();
-    if (!valid) {
-      return;
-    }
-    modalApi.lock();
-    // 鎻愪氦琛ㄥ崟
-    const data = (await formApi.getValues()) as MesDvMachineryApi.Machinery;
-    try {
-      await (data.id ? updateMachinery(data) : createMachinery(data));
-      // 鍏抽棴骞舵彁绀�
-      await modalApi.close();
-      emit('success');
-      message.success($t('ui.actionMessage.operationSuccess'));
-    } finally {
-      modalApi.unlock();
-    }
-  },
-  async onOpenChange(isOpen: boolean) {
-    if (!isOpen) {
-      formData.value = undefined;
-      return;
-    }
-    subTabsName.value = 'check';
-    // 鍔犺浇鏁版嵁
-    const data = modalApi.getData<{ formType: FormType; id?: number }>();
-    formType.value = data.formType;
-    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
-    formApi.setDisabled(formType.value === 'detail');
-    modalApi.setState({ showConfirmButton: formType.value !== 'detail' });
-    if (!data?.id) {
-      return;
-    }
-    modalApi.lock();
-    try {
-      formData.value = await getMachinery(data.id);
-      // 璁剧疆鍒� values
-      await formApi.setValues(formData.value);
-    } finally {
-      modalApi.unlock();
-    }
-  },
-});
+  const [Modal, modalApi] = useVbenModal({
+    async onConfirm() {
+      if (isDetail.value) {
+        await modalApi.close();
+        return;
+      }
+      const { valid } = await formApi.validate();
+      if (!valid) {
+        return;
+      }
+      modalApi.lock();
+      // 鎻愪氦琛ㄥ崟
+      const data = (await formApi.getValues()) as MesDvMachineryApi.Machinery;
+      try {
+        await (data.id ? updateMachinery(data) : createMachinery(data));
+        // 鍏抽棴骞舵彁绀�
+        await modalApi.close();
+        emit("success");
+        message.success($t("ui.actionMessage.operationSuccess"));
+      } finally {
+        modalApi.unlock();
+      }
+    },
+    async onOpenChange(isOpen: boolean) {
+      if (!isOpen) {
+        formData.value = undefined;
+        return;
+      }
+      subTabsName.value = "check";
+      // 鍔犺浇鏁版嵁
+      const data = modalApi.getData<{ formType: FormType; id?: number }>();
+      formType.value = data.formType;
+      formApi.setState({ schema: useFormSchema(formType.value, formApi) });
+      formApi.setDisabled(formType.value === "detail");
+      modalApi.setState({ showConfirmButton: formType.value !== "detail" });
+      if (!data?.id) {
+        return;
+      }
+      modalApi.lock();
+      try {
+        formData.value = await getMachinery(data.id);
+        // 璁剧疆鍒� values
+        await formApi.setValues(formData.value);
+      } finally {
+        modalApi.unlock();
+      }
+    },
+  });
 </script>
 
 <template>
-  <Modal :title="getTitle" class="w-4/5">
+  <Modal :title="getTitle"
+         class="w-4/5">
     <Form class="mx-4" />
-    <Tabs
-      v-if="formType !== 'create' && formData?.id"
-      v-model:active-key="subTabsName"
-      class="mx-4 mt-4"
-    >
-      <Tabs.TabPane key="check" tab="鐐规璁板綍">
+    <Tabs v-if="formType !== 'create' && formData?.id"
+          v-model:active-key="subTabsName"
+          class="mx-4 mt-4">
+      <Tabs.TabPane key="check"
+                    tab="鐐规璁板綍">
         <CheckRecordList :machinery-id="formData.id" />
       </Tabs.TabPane>
-      <Tabs.TabPane key="mainten" tab="淇濆吇璁板綍">
+      <Tabs.TabPane key="mainten"
+                    tab="淇濆吇璁板綍">
         <MaintenRecordList :machinery-id="formData.id" />
       </Tabs.TabPane>
-      <Tabs.TabPane key="repair" tab="缁翠慨璁板綍">
+      <Tabs.TabPane key="repair"
+                    tab="缁翠慨璁板綍">
         <RepairList :machinery-id="formData.id" />
       </Tabs.TabPane>
     </Tabs>
     <template #prepend-footer>
       <div class="flex flex-auto items-center">
-        <Button
-          v-if="isDetail && formData?.id"
-          type="primary"
-          @click="handleBarcode"
-        >
+        <Button v-if="isDetail && formData?.id"
+                type="primary"
+                @click="handleBarcode">
           鏌ョ湅鏉$爜
         </Button>
       </div>
diff --git a/src/views/mes/md/item/index.vue b/src/views/mes/md/item/index.vue
index 5a9253c..85c3375 100644
--- a/src/views/mes/md/item/index.vue
+++ b/src/views/mes/md/item/index.vue
@@ -1,149 +1,156 @@
 <script lang="ts" setup>
-import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesMdItemApi } from '#/api/mes/md/item';
-import type { MesMdItemTypeApi } from '#/api/mes/md/item/type';
+  import type { VxeTableGridOptions } from "#/adapter/vxe-table";
+  import type { MesMdItemApi } from "#/api/mes/md/item";
+  import type { MesMdItemTypeApi } from "#/api/mes/md/item/type";
 
-import { ref } from 'vue';
+  import { ref } from "vue";
 
-import { confirm, Page, useVbenModal } from '../../../../packages/effects/common-ui/src';
-import { DICT_TYPE } from '../../../../packages/constants/src';
-import { getDictLabel } from '../../../../packages/effects/hooks/src';
-import { downloadFileFromBlobPart } from '../../../../packages/utils/src';
+  import {
+    confirm,
+    Page,
+    useVbenModal,
+  } from "../../../../packages/effects/common-ui/src";
+  import { DICT_TYPE } from "../../../../packages/constants/src";
+  import { getDictLabel } from "../../../../packages/effects/hooks/src";
+  import { downloadFileFromBlobPart } from "../../../../packages/utils/src";
 
-import { Button, Card, message } from 'ant-design-vue';
+  import { Button, Card, message } from "ant-design-vue";
 
-import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
-import {
-  deleteItem,
-  exportItem,
-  getItemPage,
-  updateItemStatus,
-} from '#/api/mes/md/item';
-import { $t } from '#/locales';
-import { MdItemTypeTree } from '#/views/mes/md/item/type/components';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+  import { ACTION_ICON, TableAction, useVbenVxeGrid } from "#/adapter/vxe-table";
+  import {
+    deleteItem,
+    exportItem,
+    getItemPage,
+    updateItemStatus,
+  } from "#/api/mes/md/item";
+  import { $t } from "#/locales";
+  import { MdItemTypeTree } from "#/views/mes/md/item/type/components";
+  import { PrinterLabel } from "#/views/wls/barcode/components";
 
-import { useGridColumns, useGridFormSchema } from './data';
-import Form from './modules/form.vue';
-import ImportForm from './modules/import-form.vue';
+  import { useGridColumns, useGridFormSchema } from "./data";
+  import Form from "./modules/form.vue";
+  import ImportForm from "./modules/import-form.vue";
 
-const selectedItemTypeId = ref<number>(); // 褰撳墠閫変腑鐨勭墿鏂欏垎绫荤紪鍙�
+  const selectedItemTypeId = ref<number>(); // 褰撳墠閫変腑鐨勭墿鏂欏垎绫荤紪鍙�
 
-const [FormModal, formModalApi] = useVbenModal({
-  connectedComponent: Form,
-  destroyOnClose: true,
-});
-
-const [ImportModal, importModalApi] = useVbenModal({
-  connectedComponent: ImportForm,
-  destroyOnClose: true,
-});
-
-/** 鍒锋柊琛ㄦ牸 */
-function handleRefresh() {
-  gridApi.query();
-}
-
-/** 鍒涘缓鐗╂枡 */
-function handleCreate() {
-  formModalApi.setData({ formType: 'create' }).open();
-}
-
-/** 鏌ョ湅鐗╂枡 */
-function handleDetail(row: MesMdItemApi.Item) {
-  formModalApi.setData({ id: row.id, formType: 'detail' }).open();
-}
-
-/** 缂栬緫鐗╂枡 */
-function handleEdit(row: MesMdItemApi.Item) {
-  formModalApi.setData({ id: row.id, formType: 'update' }).open();
-}
-
-/** 鍒犻櫎鐗╂枡 */
-async function handleDelete(row: MesMdItemApi.Item) {
-  const hideLoading = message.loading({
-    content: $t('ui.actionMessage.deleting', [row.name]),
-    duration: 0,
+  const [FormModal, formModalApi] = useVbenModal({
+    connectedComponent: Form,
+    destroyOnClose: true,
   });
-  try {
-    await deleteItem(row.id!);
-    message.success($t('ui.actionMessage.deleteSuccess', [row.name]));
+
+  const [ImportModal, importModalApi] = useVbenModal({
+    connectedComponent: ImportForm,
+    destroyOnClose: true,
+  });
+
+  /** 鍒锋柊琛ㄦ牸 */
+  function handleRefresh() {
+    gridApi.query();
+  }
+
+  /** 鍒涘缓鐗╂枡 */
+  function handleCreate() {
+    formModalApi.setData({ formType: "create" }).open();
+  }
+
+  /** 鏌ョ湅鐗╂枡 */
+  function handleDetail(row: MesMdItemApi.Item) {
+    formModalApi.setData({ id: row.id, formType: "detail" }).open();
+  }
+
+  /** 缂栬緫鐗╂枡 */
+  function handleEdit(row: MesMdItemApi.Item) {
+    formModalApi.setData({ id: row.id, formType: "update" }).open();
+  }
+
+  /** 鍒犻櫎鐗╂枡 */
+  async function handleDelete(row: MesMdItemApi.Item) {
+    const hideLoading = message.loading({
+      content: $t("ui.actionMessage.deleting", [row.name]),
+      duration: 0,
+    });
+    try {
+      await deleteItem(row.id!);
+      message.success($t("ui.actionMessage.deleteSuccess", [row.name]));
+      handleRefresh();
+    } finally {
+      hideLoading();
+    }
+  }
+
+  /** 瀵煎嚭鐗╂枡 */
+  async function handleExport() {
+    const data = await exportItem(await gridApi.formApi.getValues());
+    downloadFileFromBlobPart({ fileName: "鐗╂枡浜у搧.xls", source: data });
+  }
+
+  /** 瀵煎叆鐗╂枡 */
+  function handleImport() {
+    importModalApi.open();
+  }
+
+  /** 鍒嗙被鏍戠偣鍑� */
+  function handleTypeNodeClick(row: MesMdItemTypeApi.ItemType | undefined) {
+    selectedItemTypeId.value = row?.id;
     handleRefresh();
-  } finally {
-    hideLoading();
   }
-}
 
-/** 瀵煎嚭鐗╂枡 */
-async function handleExport() {
-  const data = await exportItem(await gridApi.formApi.getValues());
-  downloadFileFromBlobPart({ fileName: '鐗╂枡浜у搧.xls', source: data });
-}
-
-/** 瀵煎叆鐗╂枡 */
-function handleImport() {
-  importModalApi.open();
-}
-
-/** 鍒嗙被鏍戠偣鍑� */
-function handleTypeNodeClick(row: MesMdItemTypeApi.ItemType | undefined) {
-  selectedItemTypeId.value = row?.id;
-  handleRefresh();
-}
-
-/** 鏇存柊鐗╂枡鐘舵�� */
-async function handleStatusChange(
-  newStatus: number,
-  row: MesMdItemApi.Item,
-): Promise<boolean | undefined> {
-  try {
-    await confirm(
-      `纭瑕佸皢"${row.name}"鐗╂枡鍒囨崲涓恒��${getDictLabel(DICT_TYPE.COMMON_STATUS, newStatus)}銆戝悧锛焋,
-    );
-  } catch {
-    return false;
+  /** 鏇存柊鐗╂枡鐘舵�� */
+  async function handleStatusChange(
+    newStatus: number,
+    row: MesMdItemApi.Item
+  ): Promise<boolean | undefined> {
+    try {
+      await confirm(
+        `纭瑕佸皢"${row.name}"鐗╂枡鍒囨崲涓恒��${getDictLabel(
+          DICT_TYPE.COMMON_STATUS,
+          newStatus
+        )}銆戝悧锛焋
+      );
+    } catch {
+      return false;
+    }
+    await updateItemStatus(row.id!, newStatus);
+    message.success($t("ui.actionMessage.operationSuccess"));
+    return true;
   }
-  await updateItemStatus(row.id!, newStatus);
-  message.success($t('ui.actionMessage.operationSuccess'));
-  return true;
-}
 
-const [Grid, gridApi] = useVbenVxeGrid({
-  formOptions: {
-    schema: useGridFormSchema(),
-  },
-  gridOptions: {
-    columns: useGridColumns(handleStatusChange),
-    height: 'auto',
-    keepSource: true,
-    proxyConfig: {
-      ajax: {
-        query: async ({ page }, formValues) => {
-          return await getItemPage({
-            pageNo: page.currentPage,
-            pageSize: page.pageSize,
-            ...formValues,
-            itemTypeId: selectedItemTypeId.value,
-          });
+  const [Grid, gridApi] = useVbenVxeGrid({
+    formOptions: {
+      schema: useGridFormSchema(),
+    },
+    gridOptions: {
+      columns: useGridColumns(handleStatusChange),
+      height: "auto",
+      keepSource: true,
+      proxyConfig: {
+        ajax: {
+          query: async ({ page }, formValues) => {
+            return await getItemPage({
+              pageNo: page.currentPage,
+              pageSize: page.pageSize,
+              ...formValues,
+              itemTypeId: selectedItemTypeId.value,
+            });
+          },
         },
       },
-    },
-    rowConfig: {
-      keyField: 'id',
-      isHover: true,
-    },
-    toolbarConfig: {
-      refresh: true,
-      search: true,
-    },
-  } as VxeTableGridOptions<MesMdItemApi.Item>,
-});
+      rowConfig: {
+        keyField: "id",
+        isHover: true,
+      },
+      toolbarConfig: {
+        refresh: true,
+        search: true,
+      },
+    } as VxeTableGridOptions<MesMdItemApi.Item>,
+  });
 </script>
 
 <template>
-  <Page auto-content-height><FormModal @success="handleRefresh" />
+  <Page auto-content-height>
+    <FormModal @success="handleRefresh" />
     <ImportModal @success="handleRefresh" />
-
     <div class="flex h-full w-full">
       <Card class="mr-4 h-full w-1/6">
         <MdItemTypeTree @node-click="handleTypeNodeClick" />
@@ -151,8 +158,7 @@
       <div class="w-5/6">
         <Grid table-title="鐗╂枡浜у搧鍒楄〃">
           <template #toolbar-tools>
-            <TableAction
-              :actions="[
+            <TableAction :actions="[
                 {
                   label: $t('ui.actionTitle.create', ['鐗╂枡']),
                   type: 'primary',
@@ -174,18 +180,17 @@
                   auth: ['mes:md-item:export'],
                   onClick: handleExport,
                 },
-              ]"
-            />
+              ]" />
           </template>
           <template #code="{ row }">
-            <Button type="link" @click="handleDetail(row)">
+            <Button type="link"
+                    @click="handleDetail(row)">
               {{ row.code }}
             </Button>
           </template>
           <template #actions="{ row }">
             <div class="flex items-center justify-center">
-              <TableAction
-                :actions="[
+              <TableAction :actions="[
                   {
                     label: $t('common.edit'),
                     type: 'link',
@@ -204,13 +209,10 @@
                       confirm: handleDelete.bind(null, row),
                     },
                   },
-                ]"
-              />
-              <PrinterLabel
-                :biz-id="row.id"
-                :biz-code="row.code"
-                biz-type="ITEM"
-              />
+                ]" />
+              <PrinterLabel :biz-id="row.id"
+                            :biz-code="row.code"
+                            biz-type="ITEM" />
             </div>
           </template>
         </Grid>
diff --git a/src/views/mes/md/item/modules/form.vue b/src/views/mes/md/item/modules/form.vue
index b666528..3295fb3 100644
--- a/src/views/mes/md/item/modules/form.vue
+++ b/src/views/mes/md/item/modules/form.vue
@@ -13,7 +13,7 @@
 import { useVbenForm } from '#/adapter/form';
 import { createItem, getItem, updateItem } from '#/api/mes/md/item';
 import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useFormSchema } from '../data';
 import ItemBatchConfigForm from './item-batch-config-form.vue';
diff --git a/src/views/mes/md/workstation/index.vue b/src/views/mes/md/workstation/index.vue
index 17021d7..528c523 100644
--- a/src/views/mes/md/workstation/index.vue
+++ b/src/views/mes/md/workstation/index.vue
@@ -17,7 +17,7 @@
   getWorkstationPage,
 } from '#/api/mes/md/workstation';
 import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useGridColumns, useGridFormSchema } from './data';
 import Form from './modules/form.vue';
diff --git a/src/views/mes/md/workstation/modules/form.vue b/src/views/mes/md/workstation/modules/form.vue
index c8070f9..5abf364 100644
--- a/src/views/mes/md/workstation/modules/form.vue
+++ b/src/views/mes/md/workstation/modules/form.vue
@@ -1,151 +1,154 @@
 <script lang="ts" setup>
-import type { FormType } from '../data';
+  import type { FormType } from "../data";
 
-import type { MesMdWorkstationApi } from '#/api/mes/md/workstation';
+  import type { MesMdWorkstationApi } from "#/api/mes/md/workstation";
 
-import { computed, ref } from 'vue';
+  import { computed, ref } from "vue";
 
-import { useVbenModal } from '../../../../../packages/effects/common-ui/src';
-import { BarcodeBizTypeEnum } from '../../../../../packages/constants/src';
+  import { useVbenModal } from "../../../../../packages/effects/common-ui/src";
+  import { BarcodeBizTypeEnum } from "../../../../../packages/constants/src";
 
-import { Button, message, Tabs } from 'ant-design-vue';
+  import { Button, message, Tabs } from "ant-design-vue";
 
-import { useVbenForm } from '#/adapter/form';
-import {
-  createWorkstation,
-  getWorkstation,
-  updateWorkstation,
-} from '#/api/mes/md/workstation';
-import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+  import { useVbenForm } from "#/adapter/form";
+  import {
+    createWorkstation,
+    getWorkstation,
+    updateWorkstation,
+  } from "#/api/mes/md/workstation";
+  import { $t } from "#/locales";
+  import { BarcodeDetail } from "#/views/wls/barcode/components";
 
-import { useFormSchema } from '../data';
-import MachineList from './machine-list.vue';
-import ToolList from './tool-list.vue';
-import WorkerList from './worker-list.vue';
+  import { useFormSchema } from "../data";
+  import MachineList from "./machine-list.vue";
+  import ToolList from "./tool-list.vue";
+  import WorkerList from "./worker-list.vue";
 
-const emit = defineEmits(['success']);
-const formType = ref<FormType>('create'); // 琛ㄥ崟妯″紡
-const subTabsName = ref('machine'); // 褰撳墠璧勬簮椤电
-const formData = ref<MesMdWorkstationApi.Workstation>();
-const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
+  const emit = defineEmits(["success"]);
+  const formType = ref<FormType>("create"); // 琛ㄥ崟妯″紡
+  const subTabsName = ref("machine"); // 褰撳墠璧勬簮椤电
+  const formData = ref<MesMdWorkstationApi.Workstation>();
+  const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
 
-const isDetail = computed(() => formType.value === 'detail'); // 鏄惁鏌ョ湅妯″紡
-const getTitle = computed(() => {
-  if (formType.value === 'detail') {
-    return '鏌ョ湅宸ヤ綔绔�';
-  }
-  return formType.value === 'update' ? '淇敼宸ヤ綔绔�' : '鏂板宸ヤ綔绔�';
-});
+  const isDetail = computed(() => formType.value === "detail"); // 鏄惁鏌ョ湅妯″紡
+  const getTitle = computed(() => {
+    if (formType.value === "detail") {
+      return "鏌ョ湅宸ヤ綔绔�";
+    }
+    return formType.value === "update" ? "淇敼宸ヤ綔绔�" : "鏂板宸ヤ綔绔�";
+  });
 
-const [Form, formApi] = useVbenForm({
-  commonConfig: {
-    componentProps: {
-      class: 'w-full',
+  const [Form, formApi] = useVbenForm({
+    commonConfig: {
+      componentProps: {
+        class: "w-full",
+      },
+      formItemClass: "col-span-1",
+      labelWidth: 110,
     },
-    formItemClass: 'col-span-1',
-    labelWidth: 110,
-  },
-  wrapperClass: 'grid-cols-3',
-  layout: 'horizontal',
-  schema: [],
-  showDefaultActions: false,
-});
+    wrapperClass: "grid-cols-3",
+    layout: "horizontal",
+    schema: [],
+    showDefaultActions: false,
+  });
 
-/** 鏌ョ湅宸ヤ綔绔欐潯鐮� */
-function handleBarcode() {
-  if (!formData.value?.id) {
-    return;
+  /** 鏌ョ湅宸ヤ綔绔欐潯鐮� */
+  function handleBarcode() {
+    if (!formData.value?.id) {
+      return;
+    }
+    barcodeDetailRef.value?.openByBusiness(
+      formData.value.id,
+      BarcodeBizTypeEnum.WORKSTATION,
+      formData.value.code,
+      formData.value.name
+    );
   }
-  barcodeDetailRef.value?.openByBusiness(
-    formData.value.id,
-    BarcodeBizTypeEnum.WORKSTATION,
-    formData.value.code,
-    formData.value.name,
-  );
-}
 
-const [Modal, modalApi] = useVbenModal({
-  async onConfirm() {
-    if (isDetail.value) {
-      await modalApi.close();
-      return;
-    }
-    const { valid } = await formApi.validate();
-    if (!valid) {
-      return;
-    }
-    modalApi.lock();
-    // 鎻愪氦琛ㄥ崟
-    const data = (await formApi.getValues()) as MesMdWorkstationApi.Workstation;
-    try {
-      if (formType.value === 'create') {
-        const id = await createWorkstation(data);
-        formData.value = { ...data, id };
-        await formApi.setFieldValue('id', id);
-        formType.value = 'update';
-      } else {
-        await updateWorkstation(data);
-        formData.value = { ...formData.value, ...data };
+  const [Modal, modalApi] = useVbenModal({
+    async onConfirm() {
+      if (isDetail.value) {
+        await modalApi.close();
+        return;
       }
-      emit('success');
-      message.success($t('ui.actionMessage.operationSuccess'));
-    } finally {
-      modalApi.unlock();
-    }
-  },
-  async onOpenChange(isOpen: boolean) {
-    if (!isOpen) {
-      formData.value = undefined;
-      return;
-    }
-    subTabsName.value = 'machine';
-    // 鍔犺浇鏁版嵁
-    const data = modalApi.getData<{ formType: FormType; id?: number }>();
-    formType.value = data.formType;
-    formApi.setState({ schema: useFormSchema(data.formType, formApi) });
-    formApi.setDisabled(formType.value === 'detail');
-    modalApi.setState({ showConfirmButton: formType.value !== 'detail' });
-    if (!data?.id) {
-      return;
-    }
-    modalApi.lock();
-    try {
-      formData.value = await getWorkstation(data.id);
-      // 璁剧疆鍒� values
-      await formApi.setValues(formData.value);
-    } finally {
-      modalApi.unlock();
-    }
-  },
-});
+      const { valid } = await formApi.validate();
+      if (!valid) {
+        return;
+      }
+      modalApi.lock();
+      // 鎻愪氦琛ㄥ崟
+      const data = (await formApi.getValues()) as MesMdWorkstationApi.Workstation;
+      try {
+        if (formType.value === "create") {
+          const id = await createWorkstation(data);
+          formData.value = { ...data, id };
+          await formApi.setFieldValue("id", id);
+          formType.value = "update";
+        } else {
+          await updateWorkstation(data);
+          formData.value = { ...formData.value, ...data };
+        }
+        emit("success");
+        message.success($t("ui.actionMessage.operationSuccess"));
+      } finally {
+        modalApi.unlock();
+      }
+    },
+    async onOpenChange(isOpen: boolean) {
+      if (!isOpen) {
+        formData.value = undefined;
+        return;
+      }
+      subTabsName.value = "machine";
+      // 鍔犺浇鏁版嵁
+      const data = modalApi.getData<{ formType: FormType; id?: number }>();
+      formType.value = data.formType;
+      formApi.setState({ schema: useFormSchema(data.formType, formApi) });
+      formApi.setDisabled(formType.value === "detail");
+      modalApi.setState({ showConfirmButton: formType.value !== "detail" });
+      if (!data?.id) {
+        return;
+      }
+      modalApi.lock();
+      try {
+        formData.value = await getWorkstation(data.id);
+        // 璁剧疆鍒� values
+        await formApi.setValues(formData.value);
+      } finally {
+        modalApi.unlock();
+      }
+    },
+  });
 </script>
 
 <template>
-  <Modal :title="getTitle" class="w-4/5">
+  <Modal :title="getTitle"
+         class="w-4/5">
     <Form class="mx-4" />
-    <Tabs
-      v-if="formType !== 'create' && formData?.id"
-      v-model:active-key="subTabsName"
-      class="mx-4 mt-4"
-    >
-      <Tabs.TabPane key="machine" tab="璁惧璧勬簮">
-        <MachineList :form-type="formType" :workstation-id="formData.id" />
+    <Tabs v-if="formType !== 'create' && formData?.id"
+          v-model:active-key="subTabsName"
+          class="mx-4 mt-4">
+      <Tabs.TabPane key="machine"
+                    tab="璁惧璧勬簮">
+        <MachineList :form-type="formType"
+                     :workstation-id="formData.id" />
       </Tabs.TabPane>
-      <Tabs.TabPane key="tool" tab="宸ヨ澶瑰叿">
-        <ToolList :form-type="formType" :workstation-id="formData.id" />
+      <Tabs.TabPane key="tool"
+                    tab="宸ヨ澶瑰叿">
+        <ToolList :form-type="formType"
+                  :workstation-id="formData.id" />
       </Tabs.TabPane>
-      <Tabs.TabPane key="worker" tab="浜哄姏璧勬簮">
-        <WorkerList :form-type="formType" :workstation-id="formData.id" />
+      <Tabs.TabPane key="worker"
+                    tab="浜哄姏璧勬簮">
+        <WorkerList :form-type="formType"
+                    :workstation-id="formData.id" />
       </Tabs.TabPane>
     </Tabs>
     <template #prepend-footer>
       <div class="flex flex-auto items-center">
-        <Button
-          v-if="isDetail && formData?.id"
-          type="primary"
-          @click="handleBarcode"
-        >
+        <Button v-if="isDetail && formData?.id"
+                type="primary"
+                @click="handleBarcode">
           鏌ョ湅鏉$爜
         </Button>
       </div>
diff --git a/src/views/mes/md/workstation/workshop/modules/form.vue b/src/views/mes/md/workstation/workshop/modules/form.vue
index 7ae08f9..ba98f53 100644
--- a/src/views/mes/md/workstation/workshop/modules/form.vue
+++ b/src/views/mes/md/workstation/workshop/modules/form.vue
@@ -1,119 +1,121 @@
 <script lang="ts" setup>
-import type { FormType } from '../data';
+  import type { FormType } from "../data";
 
-import type { MesMdWorkshopApi } from '#/api/mes/md/workstation/workshop';
+  import type { MesMdWorkshopApi } from "#/api/mes/md/workstation/workshop";
 
-import { computed, ref } from 'vue';
+  import { computed, ref } from "vue";
 
-import { useVbenModal } from '../../../../../../packages/effects/common-ui/src';
-import { BarcodeBizTypeEnum } from '../../../../../../packages/constants/src';
+  import { useVbenModal } from "../../../../../../packages/effects/common-ui/src";
+  import { BarcodeBizTypeEnum } from "../../../../../../packages/constants/src";
 
-import { Button, message } from 'ant-design-vue';
+  import { Button, message } from "ant-design-vue";
 
-import { useVbenForm } from '#/adapter/form';
-import {
-  createWorkshop,
-  getWorkshop,
-  updateWorkshop,
-} from '#/api/mes/md/workstation/workshop';
-import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+  import { useVbenForm } from "#/adapter/form";
+  import {
+    createWorkshop,
+    getWorkshop,
+    updateWorkshop,
+  } from "#/api/mes/md/workstation/workshop";
+  import { $t } from "#/locales";
+  import { BarcodeDetail } from "#/views/wls/barcode/components";
 
-import { useFormSchema } from '../data';
+  import { useFormSchema } from "../data";
 
-const emit = defineEmits(['success']);
-const formType = ref<FormType>('create'); // 琛ㄥ崟妯″紡
-const formData = ref<MesMdWorkshopApi.Workshop>();
-const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
+  const emit = defineEmits(["success"]);
+  const formType = ref<FormType>("create"); // 琛ㄥ崟妯″紡
+  const formData = ref<MesMdWorkshopApi.Workshop>();
+  const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
 
-const isDetail = computed(() => formType.value === 'detail'); // 鏄惁鏌ョ湅妯″紡
-const getTitle = computed(() => {
-  if (formType.value === 'detail') {
-    return '鏌ョ湅杞﹂棿';
-  }
-  return formType.value === 'update' ? '淇敼杞﹂棿' : '鏂板杞﹂棿';
-});
+  const isDetail = computed(() => formType.value === "detail"); // 鏄惁鏌ョ湅妯″紡
+  const getTitle = computed(() => {
+    if (formType.value === "detail") {
+      return "鏌ョ湅杞﹂棿";
+    }
+    return formType.value === "update" ? "淇敼杞﹂棿" : "鏂板杞﹂棿";
+  });
 
-const [Form, formApi] = useVbenForm({
-  commonConfig: {
-    componentProps: {
-      class: 'w-full',
+  const [Form, formApi] = useVbenForm({
+    commonConfig: {
+      componentProps: {
+        class: "w-full",
+      },
+      formItemClass: "col-span-1",
+      labelWidth: 100,
     },
-    formItemClass: 'col-span-1',
-    labelWidth: 100,
-  },
-  wrapperClass: 'grid-cols-2',
-  layout: 'horizontal',
-  schema: [],
-  showDefaultActions: false,
-});
+    wrapperClass: "grid-cols-2",
+    layout: "horizontal",
+    schema: [],
+    showDefaultActions: false,
+  });
 
-/** 鏌ョ湅杞﹂棿鏉$爜 */
-function handleBarcode() {
-  if (!formData.value?.id) {
-    return;
+  /** 鏌ョ湅杞﹂棿鏉$爜 */
+  function handleBarcode() {
+    if (!formData.value?.id) {
+      return;
+    }
+    barcodeDetailRef.value?.openByBusiness(
+      formData.value.id,
+      BarcodeBizTypeEnum.WORKSHOP,
+      formData.value.code,
+      formData.value.name
+    );
   }
-  barcodeDetailRef.value?.openByBusiness(
-    formData.value.id,
-    BarcodeBizTypeEnum.WORKSHOP,
-    formData.value.code,
-    formData.value.name,
-  );
-}
 
-const [Modal, modalApi] = useVbenModal({
-  async onConfirm() {
-    if (isDetail.value) {
-      await modalApi.close();
-      return;
-    }
-    const { valid } = await formApi.validate();
-    if (!valid) {
-      return;
-    }
-    modalApi.lock();
-    // 鎻愪氦琛ㄥ崟
-    const data = (await formApi.getValues()) as MesMdWorkshopApi.Workshop;
-    try {
-      await (formData.value?.id ? updateWorkshop(data) : createWorkshop(data));
-      // 鍏抽棴骞舵彁绀�
-      await modalApi.close();
-      emit('success');
-      message.success($t('ui.actionMessage.operationSuccess'));
-    } finally {
-      modalApi.unlock();
-    }
-  },
-  async onOpenChange(isOpen: boolean) {
-    if (!isOpen) {
-      formData.value = undefined;
-      return;
-    }
-    // 鍔犺浇鏁版嵁
-    const data = modalApi.getData<{ formType: FormType; id?: number }>();
-    formType.value = data.formType;
-    formApi.setState({ schema: useFormSchema(data.formType, formApi) });
-    formApi.setDisabled(formType.value === 'detail');
-    modalApi.setState({ showConfirmButton: formType.value !== 'detail' });
-    if (!data?.id) {
-      return;
-    }
-    modalApi.lock();
-    try {
-      formData.value = await getWorkshop(data.id);
-      // 璁剧疆鍒� values
-      await formApi.setValues(formData.value);
-    } finally {
-      modalApi.unlock();
-    }
-  },
-});
+  const [Modal, modalApi] = useVbenModal({
+    async onConfirm() {
+      if (isDetail.value) {
+        await modalApi.close();
+        return;
+      }
+      const { valid } = await formApi.validate();
+      if (!valid) {
+        return;
+      }
+      modalApi.lock();
+      // 鎻愪氦琛ㄥ崟
+      const data = (await formApi.getValues()) as MesMdWorkshopApi.Workshop;
+      try {
+        await (formData.value?.id ? updateWorkshop(data) : createWorkshop(data));
+        // 鍏抽棴骞舵彁绀�
+        await modalApi.close();
+        emit("success");
+        message.success($t("ui.actionMessage.operationSuccess"));
+      } finally {
+        modalApi.unlock();
+      }
+    },
+    async onOpenChange(isOpen: boolean) {
+      if (!isOpen) {
+        formData.value = undefined;
+        return;
+      }
+      // 鍔犺浇鏁版嵁
+      const data = modalApi.getData<{ formType: FormType; id?: number }>();
+      formType.value = data.formType;
+      formApi.setState({ schema: useFormSchema(data.formType, formApi) });
+      formApi.setDisabled(formType.value === "detail");
+      modalApi.setState({ showConfirmButton: formType.value !== "detail" });
+      if (!data?.id) {
+        return;
+      }
+      modalApi.lock();
+      try {
+        formData.value = await getWorkshop(data.id);
+        // 璁剧疆鍒� values
+        await formApi.setValues(formData.value);
+      } finally {
+        modalApi.unlock();
+      }
+    },
+  });
 </script>
 
 <template>
-  <Modal :title="getTitle" class="w-1/2">
+  <Modal :title="getTitle"
+         class="w-1/2">
     <Form class="mx-4" />
-    <template v-if="isDetail && formData?.id" #prepend-footer>
+    <template v-if="isDetail && formData?.id"
+              #prepend-footer>
       <div class="flex flex-auto items-center">
         <Button @click="handleBarcode">鏌ョ湅鏉$爜</Button>
       </div>
diff --git a/src/views/mes/pro/card/index.vue b/src/views/mes/pro/card/index.vue
index 292a6ac..f4ff261 100644
--- a/src/views/mes/pro/card/index.vue
+++ b/src/views/mes/pro/card/index.vue
@@ -16,7 +16,7 @@
   getCardPage,
 } from '#/api/mes/pro/card';
 import { $t } from '#/locales';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useGridColumns, useGridFormSchema } from './data';
 import Form from './modules/form.vue';
diff --git a/src/views/mes/pro/card/modules/form.vue b/src/views/mes/pro/card/modules/form.vue
index 2539cca..365329c 100644
--- a/src/views/mes/pro/card/modules/form.vue
+++ b/src/views/mes/pro/card/modules/form.vue
@@ -19,7 +19,7 @@
   updateCard,
 } from '#/api/mes/pro/card';
 import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useFormSchema } from '../data';
 import ProcessList from './process-list.vue';
diff --git a/src/views/mes/pro/workorder/index.vue b/src/views/mes/pro/workorder/index.vue
index ce3b3cc..34b4a20 100644
--- a/src/views/mes/pro/workorder/index.vue
+++ b/src/views/mes/pro/workorder/index.vue
@@ -1,152 +1,151 @@
-锘�<script lang="ts" setup>
-import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
+<script lang="ts" setup>
+  import type { VxeTableGridOptions } from "#/adapter/vxe-table";
+  import type { MesProWorkOrderApi } from "#/api/mes/pro/workorder";
 
-import { ref } from 'vue';
+  import { ref } from "vue";
 
-import { Page, useVbenModal } from '../../../../packages/effects/common-ui/src';
-import {
-  BarcodeBizTypeEnum,
-  MesProWorkOrderStatusEnum,
-  MesProWorkOrderTypeEnum,
-} from '../../../../packages/constants/src';
-import { downloadFileFromBlobPart } from '../../../../packages/utils/src';
+  import { Page, useVbenModal } from "../../../../packages/effects/common-ui/src";
+  import {
+    BarcodeBizTypeEnum,
+    MesProWorkOrderStatusEnum,
+    MesProWorkOrderTypeEnum,
+  } from "../../../../packages/constants/src";
+  import { downloadFileFromBlobPart } from "../../../../packages/utils/src";
 
-import { Button, message } from 'ant-design-vue';
+  import { Button, message } from "ant-design-vue";
 
-import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
-import {
-  cancelWorkOrder,
-  deleteWorkOrder,
-  exportWorkOrder,
-  getWorkOrderPage,
-} from '#/api/mes/pro/workorder';
-import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+  import { ACTION_ICON, TableAction, useVbenVxeGrid } from "#/adapter/vxe-table";
+  import {
+    cancelWorkOrder,
+    deleteWorkOrder,
+    exportWorkOrder,
+    getWorkOrderPage,
+  } from "#/api/mes/pro/workorder";
+  import { $t } from "#/locales";
+  import { BarcodeDetail } from "#/views/wls/barcode/components";
 
-import { useGridColumns, useGridFormSchema } from './data';
-import Form from './modules/form.vue';
+  import { useGridColumns, useGridFormSchema } from "./data";
+  import Form from "./modules/form.vue";
 
-const [FormModal, formModalApi] = useVbenModal({
-  connectedComponent: Form,
-  destroyOnClose: true,
-});
-
-const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
-
-/** 鍒锋柊琛ㄦ牸 */
-function handleRefresh() {
-  gridApi.query();
-}
-
-/** 鍒涘缓璁㈠崟 */
-function handleCreate() {
-  formModalApi.setData({ formType: 'create' }).open();
-}
-
-/** 鏂板瀛愯鍗� */
-function handleAddChild(row: MesProWorkOrderApi.WorkOrder) {
-  formModalApi.setData({ formType: 'create', parentRow: row }).open();
-}
-
-/** 鏌ョ湅璁㈠崟璇︽儏 */
-function handleDetail(row: MesProWorkOrderApi.WorkOrder) {
-  formModalApi.setData({ formType: 'detail', id: row.id }).open();
-}
-
-/** 缂栬緫璁㈠崟 */
-function handleEdit(row: MesProWorkOrderApi.WorkOrder) {
-  formModalApi.setData({ formType: 'update', id: row.id }).open();
-}
-
-/** 瀹屾垚璁㈠崟 */
-function handleFinish(row: MesProWorkOrderApi.WorkOrder) {
-  formModalApi.setData({ formType: 'finish', id: row.id }).open();
-}
-
-/** 鍒犻櫎璁㈠崟 */
-async function handleDelete(row: MesProWorkOrderApi.WorkOrder) {
-  const hideLoading = message.loading({
-    content: $t('ui.actionMessage.deleting', [row.code]),
-    duration: 0,
+  const [FormModal, formModalApi] = useVbenModal({
+    connectedComponent: Form,
+    destroyOnClose: true,
   });
-  try {
-    await deleteWorkOrder(row.id!);
-    message.success($t('ui.actionMessage.deleteSuccess', [row.code]));
-    handleRefresh();
-  } finally {
-    hideLoading();
+
+  const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
+
+  /** 鍒锋柊琛ㄦ牸 */
+  function handleRefresh() {
+    gridApi.query();
   }
-}
 
-/** 鍙栨秷璁㈠崟 */
-async function handleCancel(row: MesProWorkOrderApi.WorkOrder) {
-  await cancelWorkOrder(row.id!);
-  message.success('璁㈠崟宸插彇娑�');
-  handleRefresh();
-}
+  /** 鍒涘缓璁㈠崟 */
+  function handleCreate() {
+    formModalApi.setData({ formType: "create" }).open();
+  }
 
-/** 鏌ョ湅璁㈠崟鏉$爜 */
-function handleBarcode(row: MesProWorkOrderApi.WorkOrder) {
-  barcodeDetailRef.value?.openByBusiness(
-    row.id!,
-    BarcodeBizTypeEnum.WORKORDER,
-    row.code,
-    row.name,
-  );
-}
+  /** 鏂板瀛愯鍗� */
+  function handleAddChild(row: MesProWorkOrderApi.WorkOrder) {
+    formModalApi.setData({ formType: "create", parentRow: row }).open();
+  }
 
-/** 瀵煎嚭琛ㄦ牸 */
-async function handleExport() {
-  const data = await exportWorkOrder(await gridApi.formApi.getValues());
-  downloadFileFromBlobPart({ fileName: '鐢熶骇璁㈠崟.xls', source: data });
-}
+  /** 鏌ョ湅璁㈠崟璇︽儏 */
+  function handleDetail(row: MesProWorkOrderApi.WorkOrder) {
+    formModalApi.setData({ formType: "detail", id: row.id }).open();
+  }
 
-const [Grid, gridApi] = useVbenVxeGrid({
-  formOptions: {
-    schema: useGridFormSchema(),
-  },
-  gridOptions: {
-    columns: useGridColumns(),
-    height: 'auto',
-    keepSource: true,
-    proxyConfig: {
-      ajax: {
-        query: async ({ page }, formValues) => {
-          return await getWorkOrderPage({
-            pageNo: page.currentPage,
-            pageSize: page.pageSize,
-            ...formValues,
-          });
+  /** 缂栬緫璁㈠崟 */
+  function handleEdit(row: MesProWorkOrderApi.WorkOrder) {
+    formModalApi.setData({ formType: "update", id: row.id }).open();
+  }
+
+  /** 瀹屾垚璁㈠崟 */
+  function handleFinish(row: MesProWorkOrderApi.WorkOrder) {
+    formModalApi.setData({ formType: "finish", id: row.id }).open();
+  }
+
+  /** 鍒犻櫎璁㈠崟 */
+  async function handleDelete(row: MesProWorkOrderApi.WorkOrder) {
+    const hideLoading = message.loading({
+      content: $t("ui.actionMessage.deleting", [row.code]),
+      duration: 0,
+    });
+    try {
+      await deleteWorkOrder(row.id!);
+      message.success($t("ui.actionMessage.deleteSuccess", [row.code]));
+      handleRefresh();
+    } finally {
+      hideLoading();
+    }
+  }
+
+  /** 鍙栨秷璁㈠崟 */
+  async function handleCancel(row: MesProWorkOrderApi.WorkOrder) {
+    await cancelWorkOrder(row.id!);
+    message.success("璁㈠崟宸插彇娑�");
+    handleRefresh();
+  }
+
+  /** 鏌ョ湅璁㈠崟鏉$爜 */
+  function handleBarcode(row: MesProWorkOrderApi.WorkOrder) {
+    barcodeDetailRef.value?.openByBusiness(
+      row.id!,
+      BarcodeBizTypeEnum.WORKORDER,
+      row.code,
+      row.name
+    );
+  }
+
+  /** 瀵煎嚭琛ㄦ牸 */
+  async function handleExport() {
+    const data = await exportWorkOrder(await gridApi.formApi.getValues());
+    downloadFileFromBlobPart({ fileName: "鐢熶骇璁㈠崟.xls", source: data });
+  }
+
+  const [Grid, gridApi] = useVbenVxeGrid({
+    formOptions: {
+      schema: useGridFormSchema(),
+    },
+    gridOptions: {
+      columns: useGridColumns(),
+      height: "auto",
+      keepSource: true,
+      proxyConfig: {
+        ajax: {
+          query: async ({ page }, formValues) => {
+            return await getWorkOrderPage({
+              pageNo: page.currentPage,
+              pageSize: page.pageSize,
+              ...formValues,
+            });
+          },
         },
       },
-    },
-    rowConfig: {
-      keyField: 'id',
-      isHover: true,
-    },
-    toolbarConfig: {
-      refresh: true,
-      search: true,
-    },
-    treeConfig: {
-      parentField: 'parentId',
-      rowField: 'id',
-      transform: true,
-      expandAll: true,
-      reserve: true,
-    },
-  } as VxeTableGridOptions<MesProWorkOrderApi.WorkOrder>,
-});
+      rowConfig: {
+        keyField: "id",
+        isHover: true,
+      },
+      toolbarConfig: {
+        refresh: true,
+        search: true,
+      },
+      treeConfig: {
+        parentField: "parentId",
+        rowField: "id",
+        transform: true,
+        expandAll: true,
+        reserve: true,
+      },
+    } as VxeTableGridOptions<MesProWorkOrderApi.WorkOrder>,
+  });
 </script>
 
 <template>
-  <Page auto-content-height><FormModal @success="handleRefresh" />
-
+  <Page auto-content-height>
+    <FormModal @success="handleRefresh" />
     <Grid table-title="鐢熶骇璁㈠崟鍒楄〃">
       <template #toolbar-tools>
-        <TableAction
-          :actions="[
+        <TableAction :actions="[
             {
               label: $t('ui.actionTitle.create', ['璁㈠崟']),
               type: 'primary',
@@ -161,17 +160,16 @@
               auth: ['mes:pro-work-order:export'],
               onClick: handleExport,
             },
-          ]"
-        />
+          ]" />
       </template>
       <template #code="{ row }">
-        <Button type="link" @click="handleDetail(row)">
+        <Button type="link"
+                @click="handleDetail(row)">
           {{ row.code }}
         </Button>
       </template>
       <template #actions="{ row }">
-        <TableAction
-          :actions="[
+        <TableAction :actions="[
             {
               label: $t('common.edit'),
               type: 'link',
@@ -225,8 +223,7 @@
               auth: ['mes:pro-work-order:query'],
               onClick: handleBarcode.bind(null, row),
             },
-          ]"
-        />
+          ]" />
       </template>
     </Grid>
     <BarcodeDetail ref="barcodeDetailRef" />
diff --git a/src/views/mes/pro/workorder/modules/form.vue b/src/views/mes/pro/workorder/modules/form.vue
index f01e02f..831b7fb 100644
--- a/src/views/mes/pro/workorder/modules/form.vue
+++ b/src/views/mes/pro/workorder/modules/form.vue
@@ -1,292 +1,293 @@
-锘�<script lang="ts" setup>
-import type { FormType } from '../data';
+<script lang="ts" setup>
+  import type { FormType } from "../data";
 
-import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
-import type { MesProWorkOrderBomApi } from '#/api/mes/pro/workorder/bom';
+  import type { MesProWorkOrderApi } from "#/api/mes/pro/workorder";
+  import type { MesProWorkOrderBomApi } from "#/api/mes/pro/workorder/bom";
 
-import { computed, ref } from 'vue';
+  import { computed, ref } from "vue";
 
-import { useVbenModal } from '../../../../../packages/effects/common-ui/src';
-import { BarcodeBizTypeEnum, MesProWorkOrderStatusEnum } from '../../../../../packages/constants/src';
+  import { useVbenModal } from "../../../../../packages/effects/common-ui/src";
+  import {
+    BarcodeBizTypeEnum,
+    MesProWorkOrderStatusEnum,
+  } from "../../../../../packages/constants/src";
 
-import { Button, message, Popconfirm, Tabs } from 'ant-design-vue';
+  import { Button, message, Popconfirm, Tabs } from "ant-design-vue";
 
-import { useVbenForm } from '#/adapter/form';
-import {
-  confirmWorkOrder,
-  createWorkOrder,
-  finishWorkOrder,
-  getWorkOrder,
-  updateWorkOrder,
-} from '#/api/mes/pro/workorder';
-import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+  import { useVbenForm } from "#/adapter/form";
+  import {
+    confirmWorkOrder,
+    createWorkOrder,
+    finishWorkOrder,
+    getWorkOrder,
+    updateWorkOrder,
+  } from "#/api/mes/pro/workorder";
+  import { $t } from "#/locales";
+  import { BarcodeDetail } from "#/views/wls/barcode/components";
 
-import { useFormSchema } from '../data';
-import BomList from './bom-list.vue';
-import ItemList from './item-list.vue';
+  import { useFormSchema } from "../data";
+  import BomList from "./bom-list.vue";
+  import ItemList from "./item-list.vue";
 
-const emit = defineEmits(['success']);
-const formType = ref<FormType>('create');
-const formData = ref<MesProWorkOrderApi.WorkOrder>();
-const originalSnapshot = ref(''); // 琛ㄥ崟鍘熷鏁版嵁蹇収锛岀敤浜庣‘璁ゆ椂璺宠繃鏈彉鏇寸殑淇濆瓨璇锋眰
-const subTabsName = ref('bom'); // 褰撳墠閫変腑鐨勫瓙琛� Tab
-const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
+  const emit = defineEmits(["success"]);
+  const formType = ref<FormType>("create");
+  const formData = ref<MesProWorkOrderApi.WorkOrder>();
+  const originalSnapshot = ref(""); // 琛ㄥ崟鍘熷鏁版嵁蹇収锛岀敤浜庣‘璁ゆ椂璺宠繃鏈彉鏇寸殑淇濆瓨璇锋眰
+  const subTabsName = ref("bom"); // 褰撳墠閫変腑鐨勫瓙琛� Tab
+  const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
 
-const isEditable = computed(() =>
-  // 鏄惁涓虹紪杈戞ā寮忥紙鍙繚瀛橈級
-  ['create', 'update'].includes(formType.value),
-);
-const isConfirm = computed(() => formType.value === 'confirm'); // 鏄惁涓虹‘璁ゆā寮�
-const isFinish = computed(() => formType.value === 'finish'); // 鏄惁涓哄畬鎴愭ā寮�
-const canConfirm = computed(
-  () =>
-    // 缂栬緫鎬佽崏绋垮彲纭
-    formType.value === 'update' &&
-    formData.value?.status === MesProWorkOrderStatusEnum.PREPARE,
-);
-const getTitle = computed(() => {
-  const isChild = !!formData.value?.parentId;
-  switch (formType.value) {
-    case 'confirm': {
-      return '纭璁㈠崟';
-    }
-    case 'detail': {
-      return $t('ui.actionTitle.view', ['璁㈠崟']);
-    }
-    case 'finish': {
-      return '瀹屾垚璁㈠崟';
-    }
-    case 'update': {
-      return isChild ? '缂栬緫瀛愯鍗�' : $t('ui.actionTitle.edit', ['璁㈠崟']);
-    }
-    default: {
-      return isChild ? '鏂板瀛愯鍗�' : $t('ui.actionTitle.create', ['璁㈠崟']);
-    }
-  }
-});
-
-const [Form, formApi] = useVbenForm({
-  commonConfig: {
-    componentProps: {
-      class: 'w-full',
-    },
-    formItemClass: 'col-span-1',
-    labelWidth: 110,
-  },
-  layout: 'horizontal',
-  schema: [],
-  showDefaultActions: false,
-  wrapperClass: 'grid-cols-3',
-});
-
-/** 閲嶆柊鎸傝浇 schema 骞舵寜琛ㄥ崟鎬佹帶鍒跺簳閮ㄧ‘璁ゆ寜閽� */
-function applySchema() {
-  formApi.setState({ schema: useFormSchema(formType.value, formApi) });
-  modalApi.setState({ showConfirmButton: isEditable.value });
-}
-
-/** 鏌ョ湅璁㈠崟鏉$爜 */
-function handleBarcode() {
-  if (!formData.value?.id) {
-    return;
-  }
-  barcodeDetailRef.value?.openByBusiness(
-    formData.value.id,
-    BarcodeBizTypeEnum.WORKORDER,
-    formData.value.code,
-    formData.value.name,
+  const isEditable = computed(() =>
+    // 鏄惁涓虹紪杈戞ā寮忥紙鍙繚瀛橈級
+    ["create", "update"].includes(formType.value)
   );
-}
-
-/** 纭璁㈠崟锛氱紪杈戞�佹湁淇敼鏃跺厛淇濆瓨锛屽啀纭 */
-async function handleConfirm() {
-  const { valid } = await formApi.validate();
-  if (!valid || !formData.value?.id) {
-    return;
-  }
-  modalApi.lock();
-  try {
-    if (isEditable.value) {
-      const current = JSON.stringify(await formApi.getValues());
-      if (current !== originalSnapshot.value) {
-        const data =
-          (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
-        await updateWorkOrder({ ...formData.value, ...data });
-        originalSnapshot.value = current;
+  const isConfirm = computed(() => formType.value === "confirm"); // 鏄惁涓虹‘璁ゆā寮�
+  const isFinish = computed(() => formType.value === "finish"); // 鏄惁涓哄畬鎴愭ā寮�
+  const canConfirm = computed(
+    () =>
+      // 缂栬緫鎬佽崏绋垮彲纭
+      formType.value === "update" &&
+      formData.value?.status === MesProWorkOrderStatusEnum.PREPARE
+  );
+  const getTitle = computed(() => {
+    const isChild = !!formData.value?.parentId;
+    switch (formType.value) {
+      case "confirm": {
+        return "纭璁㈠崟";
+      }
+      case "detail": {
+        return $t("ui.actionTitle.view", ["璁㈠崟"]);
+      }
+      case "finish": {
+        return "瀹屾垚璁㈠崟";
+      }
+      case "update": {
+        return isChild ? "缂栬緫瀛愯鍗�" : $t("ui.actionTitle.edit", ["璁㈠崟"]);
+      }
+      default: {
+        return isChild ? "鏂板瀛愯鍗�" : $t("ui.actionTitle.create", ["璁㈠崟"]);
       }
     }
-    await confirmWorkOrder(formData.value.id);
-    message.success('璁㈠崟宸茬‘璁�');
-    await modalApi.close();
-    emit('success');
-  } finally {
-    modalApi.unlock();
-  }
-}
-
-/** 瀹屾垚璁㈠崟 */
-async function handleFinish() {
-  if (!formData.value?.id) {
-    return;
-  }
-  modalApi.lock();
-  try {
-    await finishWorkOrder(formData.value.id);
-    message.success('璁㈠崟宸插畬鎴�');
-    await modalApi.close();
-    emit('success');
-  } finally {
-    modalApi.unlock();
-  }
-}
-
-/** 浠� BOM 鐗╂枡琛岄濉瓙璁㈠崟锛氬鐢ㄥ綋鍓嶈鍗曚笂涓嬫枃锛岃繘鍏ユ柊澧炴�� */
-async function handleGenerateWorkOrder(
-  bomRow: MesProWorkOrderBomApi.WorkOrderBom,
-) {
-  const current = formData.value;
-  if (!current) {
-    return;
-  }
-  formData.value = undefined;
-  formType.value = 'create';
-  subTabsName.value = 'bom';
-  applySchema();
-  await formApi.resetForm();
-  await formApi.setValues({
-    clientId: current.clientId,
-    name: `${bomRow.itemName}銆�${bomRow.quantity}銆�${bomRow.unitMeasureName || ''}`,
-    orderSourceCode: current.orderSourceCode,
-    orderSourceType: current.orderSourceType,
-    parentId: current.id,
-    productId: bomRow.itemId,
-    quantity: bomRow.quantity,
-    requestDate: current.requestDate,
-    type: current.type,
-    vendorId: current.vendorId,
   });
-  originalSnapshot.value = JSON.stringify(await formApi.getValues());
-  message.info('宸蹭粠 BOM 鐗╂枡棰勫~瀛愯鍗曪紝璇疯ˉ鍏呰鍗曠紪鐮佺瓑淇℃伅鍚庝繚瀛�');
-}
 
-const [Modal, modalApi] = useVbenModal({
-  async onConfirm() {
-    if (!isEditable.value) {
-      await modalApi.close();
+  const [Form, formApi] = useVbenForm({
+    commonConfig: {
+      componentProps: {
+        class: "w-full",
+      },
+      formItemClass: "col-span-1",
+      labelWidth: 110,
+    },
+    layout: "horizontal",
+    schema: [],
+    showDefaultActions: false,
+    wrapperClass: "grid-cols-3",
+  });
+
+  /** 閲嶆柊鎸傝浇 schema 骞舵寜琛ㄥ崟鎬佹帶鍒跺簳閮ㄧ‘璁ゆ寜閽� */
+  function applySchema() {
+    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
+    modalApi.setState({ showConfirmButton: isEditable.value });
+  }
+
+  /** 鏌ョ湅璁㈠崟鏉$爜 */
+  function handleBarcode() {
+    if (!formData.value?.id) {
       return;
     }
+    barcodeDetailRef.value?.openByBusiness(
+      formData.value.id,
+      BarcodeBizTypeEnum.WORKORDER,
+      formData.value.code,
+      formData.value.name
+    );
+  }
+
+  /** 纭璁㈠崟锛氱紪杈戞�佹湁淇敼鏃跺厛淇濆瓨锛屽啀纭 */
+  async function handleConfirm() {
     const { valid } = await formApi.validate();
-    if (!valid) {
+    if (!valid || !formData.value?.id) {
       return;
     }
     modalApi.lock();
-    // 鎻愪氦琛ㄥ崟
-    const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
     try {
-      if (formData.value?.id) {
-        await updateWorkOrder({ ...formData.value, ...data });
-        formData.value = { ...formData.value, ...data };
-      } else {
-        const id = await createWorkOrder(data);
-        formData.value = {
-          ...data,
-          id,
-          status: MesProWorkOrderStatusEnum.PREPARE,
-        };
-        formType.value = 'update';
-        // 鍒涘缓鎴愬姛鍚庡垏鎹㈢紪杈戞�侊紝閲嶆寕 schema 璁┿�岃鍗曠姸鎬併�嶅瓧娈垫樉鐜�
-        applySchema();
-        await formApi.setValues(formData.value);
+      if (isEditable.value) {
+        const current = JSON.stringify(await formApi.getValues());
+        if (current !== originalSnapshot.value) {
+          const data =
+            (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
+          await updateWorkOrder({ ...formData.value, ...data });
+          originalSnapshot.value = current;
+        }
       }
-      originalSnapshot.value = JSON.stringify(await formApi.getValues());
-      emit('success');
-      message.success($t('ui.actionMessage.operationSuccess'));
+      await confirmWorkOrder(formData.value.id);
+      message.success("璁㈠崟宸茬‘璁�");
+      await modalApi.close();
+      emit("success");
     } finally {
       modalApi.unlock();
     }
-  },
-  async onOpenChange(isOpen: boolean) {
-    if (!isOpen) {
-      formData.value = undefined;
-      originalSnapshot.value = '';
+  }
+
+  /** 瀹屾垚璁㈠崟 */
+  async function handleFinish() {
+    if (!formData.value?.id) {
       return;
     }
-    // 鍔犺浇鏁版嵁
-    const data = modalApi.getData<{
-      formType: FormType;
-      id?: number;
-      parentRow?: MesProWorkOrderApi.WorkOrder;
-    }>();
-    formType.value = data.formType;
-    subTabsName.value = 'bom';
+    modalApi.lock();
+    try {
+      await finishWorkOrder(formData.value.id);
+      message.success("璁㈠崟宸插畬鎴�");
+      await modalApi.close();
+      emit("success");
+    } finally {
+      modalApi.unlock();
+    }
+  }
+
+  /** 浠� BOM 鐗╂枡琛岄濉瓙璁㈠崟锛氬鐢ㄥ綋鍓嶈鍗曚笂涓嬫枃锛岃繘鍏ユ柊澧炴�� */
+  async function handleGenerateWorkOrder(
+    bomRow: MesProWorkOrderBomApi.WorkOrderBom
+  ) {
+    const current = formData.value;
+    if (!current) {
+      return;
+    }
+    formData.value = undefined;
+    formType.value = "create";
+    subTabsName.value = "bom";
     applySchema();
-    if (data?.id) {
+    await formApi.resetForm();
+    await formApi.setValues({
+      clientId: current.clientId,
+      name: `${bomRow.itemName}銆�${bomRow.quantity}銆�${
+        bomRow.unitMeasureName || ""
+      }`,
+      orderSourceCode: current.orderSourceCode,
+      orderSourceType: current.orderSourceType,
+      parentId: current.id,
+      productId: bomRow.itemId,
+      quantity: bomRow.quantity,
+      requestDate: current.requestDate,
+      type: current.type,
+      vendorId: current.vendorId,
+    });
+    originalSnapshot.value = JSON.stringify(await formApi.getValues());
+    message.info("宸蹭粠 BOM 鐗╂枡棰勫~瀛愯鍗曪紝璇疯ˉ鍏呰鍗曠紪鐮佺瓑淇℃伅鍚庝繚瀛�");
+  }
+
+  const [Modal, modalApi] = useVbenModal({
+    async onConfirm() {
+      if (!isEditable.value) {
+        await modalApi.close();
+        return;
+      }
+      const { valid } = await formApi.validate();
+      if (!valid) {
+        return;
+      }
       modalApi.lock();
+      // 鎻愪氦琛ㄥ崟
+      const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
       try {
-        formData.value = await getWorkOrder(data.id);
-        // 璁剧疆鍒� values
-        await formApi.setValues(formData.value);
+        if (formData.value?.id) {
+          await updateWorkOrder({ ...formData.value, ...data });
+          formData.value = { ...formData.value, ...data };
+        } else {
+          const id = await createWorkOrder(data);
+          formData.value = {
+            ...data,
+            id,
+            status: MesProWorkOrderStatusEnum.PREPARE,
+          };
+          formType.value = "update";
+          // 鍒涘缓鎴愬姛鍚庡垏鎹㈢紪杈戞�侊紝閲嶆寕 schema 璁┿�岃鍗曠姸鎬併�嶅瓧娈垫樉鐜�
+          applySchema();
+          await formApi.setValues(formData.value);
+        }
+        originalSnapshot.value = JSON.stringify(await formApi.getValues());
+        emit("success");
+        message.success($t("ui.actionMessage.operationSuccess"));
       } finally {
         modalApi.unlock();
       }
-    } else if (data?.parentRow) {
-      // 鏂板瀛愯鍗曟椂锛岄濉埗璁㈠崟淇℃伅
-      const parent = data.parentRow;
-      await formApi.setValues({
-        clientId: parent.clientId,
-        orderSourceCode: parent.orderSourceCode,
-        orderSourceType: parent.orderSourceType,
-        parentId: parent.id,
-        requestDate: parent.requestDate,
-        type: parent.type,
-        vendorId: parent.vendorId,
-      });
-    }
-    originalSnapshot.value = JSON.stringify(await formApi.getValues());
-  },
-});
+    },
+    async onOpenChange(isOpen: boolean) {
+      if (!isOpen) {
+        formData.value = undefined;
+        originalSnapshot.value = "";
+        return;
+      }
+      // 鍔犺浇鏁版嵁
+      const data = modalApi.getData<{
+        formType: FormType;
+        id?: number;
+        parentRow?: MesProWorkOrderApi.WorkOrder;
+      }>();
+      formType.value = data.formType;
+      subTabsName.value = "bom";
+      applySchema();
+      if (data?.id) {
+        modalApi.lock();
+        try {
+          formData.value = await getWorkOrder(data.id);
+          // 璁剧疆鍒� values
+          await formApi.setValues(formData.value);
+        } finally {
+          modalApi.unlock();
+        }
+      } else if (data?.parentRow) {
+        // 鏂板瀛愯鍗曟椂锛岄濉埗璁㈠崟淇℃伅
+        const parent = data.parentRow;
+        await formApi.setValues({
+          clientId: parent.clientId,
+          orderSourceCode: parent.orderSourceCode,
+          orderSourceType: parent.orderSourceType,
+          parentId: parent.id,
+          requestDate: parent.requestDate,
+          type: parent.type,
+          vendorId: parent.vendorId,
+        });
+      }
+      originalSnapshot.value = JSON.stringify(await formApi.getValues());
+    },
+  });
 </script>
 
 <template>
-  <Modal :title="getTitle" class="w-3/5">
+  <Modal :title="getTitle"
+         class="w-3/5">
     <Form class="mx-4" />
     <!-- BOM / 鐗╂枡闇�姹� Tab锛氶潪鏂板缓鎬佸睍绀� -->
     <template v-if="formData?.id">
-      <Tabs v-model:active-key="subTabsName" class="mx-4">
-        <Tabs.TabPane key="bom" tab="璁㈠崟 BOM">
-          <BomList
-            :form-type="formType"
-            :work-order="formData"
-            :work-order-id="formData.id"
-            @generate-work-order="handleGenerateWorkOrder"
-          />
+      <Tabs v-model:active-key="subTabsName"
+            class="mx-4">
+        <Tabs.TabPane key="bom"
+                      tab="璁㈠崟 BOM">
+          <BomList :form-type="formType"
+                   :work-order="formData"
+                   :work-order-id="formData.id"
+                   @generate-work-order="handleGenerateWorkOrder" />
         </Tabs.TabPane>
-        <Tabs.TabPane key="item" tab="鐗╂枡闇�姹�">
+        <Tabs.TabPane key="item"
+                      tab="鐗╂枡闇�姹�">
           <ItemList :work-order-id="formData.id" />
         </Tabs.TabPane>
       </Tabs>
     </template>
     <template #prepend-footer>
       <div class="flex flex-auto items-center gap-2">
-        <Popconfirm
-          v-if="canConfirm || isConfirm"
-          title="纭瑕佸畬鎴愯鍗曠紪鍒跺悧锛熺‘璁ゅ悗灏嗕笉鑳芥洿鏀广��"
-          @confirm="handleConfirm"
-        >
+        <Popconfirm v-if="canConfirm || isConfirm"
+                    title="纭瑕佸畬鎴愯鍗曠紪鍒跺悧锛熺‘璁ゅ悗灏嗕笉鑳芥洿鏀广��"
+                    @confirm="handleConfirm">
           <Button type="primary">纭</Button>
         </Popconfirm>
-        <Popconfirm
-          v-if="isFinish"
-          title="纭瑕佸畬鎴愯璁㈠崟鍚楋紵"
-          @confirm="handleFinish"
-        >
+        <Popconfirm v-if="isFinish"
+                    title="纭瑕佸畬鎴愯璁㈠崟鍚楋紵"
+                    @confirm="handleFinish">
           <Button type="primary">瀹屾垚</Button>
         </Popconfirm>
-        <Button
-          v-if="formType === 'detail' && formData?.id"
-          @click="handleBarcode"
-        >
+        <Button v-if="formType === 'detail' && formData?.id"
+                @click="handleBarcode">
           鏌ョ湅鏉$爜
         </Button>
       </div>
diff --git a/src/views/mes/tm/tool/modules/form.vue b/src/views/mes/tm/tool/modules/form.vue
index a436904..4cfc871 100644
--- a/src/views/mes/tm/tool/modules/form.vue
+++ b/src/views/mes/tm/tool/modules/form.vue
@@ -1,123 +1,122 @@
 <script lang="ts" setup>
-import type { FormType } from '../data';
+  import type { FormType } from "../data";
 
-import type { MesTmToolApi } from '#/api/mes/tm/tool';
+  import type { MesTmToolApi } from "#/api/mes/tm/tool";
 
-import { computed, ref } from 'vue';
+  import { computed, ref } from "vue";
 
-import { useVbenModal } from '../../../../../packages/effects/common-ui/src';
-import { BarcodeBizTypeEnum } from '../../../../../packages/constants/src';
+  import { useVbenModal } from "../../../../../packages/effects/common-ui/src";
+  import { BarcodeBizTypeEnum } from "../../../../../packages/constants/src";
 
-import { Button, message } from 'ant-design-vue';
+  import { Button, message } from "ant-design-vue";
 
-import { useVbenForm } from '#/adapter/form';
-import { createTool, getTool, updateTool } from '#/api/mes/tm/tool';
-import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+  import { useVbenForm } from "#/adapter/form";
+  import { createTool, getTool, updateTool } from "#/api/mes/tm/tool";
+  import { $t } from "#/locales";
+  import { BarcodeDetail } from "#/views/wls/barcode/components";
 
-import { useFormSchema } from '../data';
+  import { useFormSchema } from "../data";
 
-const emit = defineEmits(['success']);
-const formType = ref<FormType>('create'); // 琛ㄥ崟妯″紡
-const formData = ref<MesTmToolApi.Tool>();
-const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
+  const emit = defineEmits(["success"]);
+  const formType = ref<FormType>("create"); // 琛ㄥ崟妯″紡
+  const formData = ref<MesTmToolApi.Tool>();
+  const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 鏉$爜璇︽儏寮圭獥
 
-const isDetail = computed(() => formType.value === 'detail'); // 鏄惁鏌ョ湅妯″紡
-const getTitle = computed(() => {
-  if (formType.value === 'detail') {
-    return $t('ui.actionTitle.view', ['宸ュ叿']);
-  }
-  return formType.value === 'update'
-    ? $t('ui.actionTitle.edit', ['宸ュ叿'])
-    : $t('ui.actionTitle.create', ['宸ュ叿']);
-});
+  const isDetail = computed(() => formType.value === "detail"); // 鏄惁鏌ョ湅妯″紡
+  const getTitle = computed(() => {
+    if (formType.value === "detail") {
+      return $t("ui.actionTitle.view", ["宸ュ叿"]);
+    }
+    return formType.value === "update"
+      ? $t("ui.actionTitle.edit", ["宸ュ叿"])
+      : $t("ui.actionTitle.create", ["宸ュ叿"]);
+  });
 
-const [Form, formApi] = useVbenForm({
-  commonConfig: {
-    componentProps: {
-      class: 'w-full',
+  const [Form, formApi] = useVbenForm({
+    commonConfig: {
+      componentProps: {
+        class: "w-full",
+      },
+      formItemClass: "col-span-1",
+      labelWidth: 110,
     },
-    formItemClass: 'col-span-1',
-    labelWidth: 110,
-  },
-  wrapperClass: 'grid-cols-3',
-  layout: 'horizontal',
-  schema: [],
-  showDefaultActions: false,
-});
+    wrapperClass: "grid-cols-3",
+    layout: "horizontal",
+    schema: [],
+    showDefaultActions: false,
+  });
 
-/** 鏌ョ湅宸ュ叿鏉$爜 */
-function handleBarcode() {
-  if (!formData.value?.id) {
-    return;
+  /** 鏌ョ湅宸ュ叿鏉$爜 */
+  function handleBarcode() {
+    if (!formData.value?.id) {
+      return;
+    }
+    barcodeDetailRef.value?.openByBusiness(
+      formData.value.id,
+      BarcodeBizTypeEnum.TOOL,
+      formData.value.code,
+      formData.value.name
+    );
   }
-  barcodeDetailRef.value?.openByBusiness(
-    formData.value.id,
-    BarcodeBizTypeEnum.TOOL,
-    formData.value.code,
-    formData.value.name,
-  );
-}
 
-const [Modal, modalApi] = useVbenModal({
-  async onConfirm() {
-    if (isDetail.value) {
-      await modalApi.close();
-      return;
-    }
-    const { valid } = await formApi.validate();
-    if (!valid) {
-      return;
-    }
-    modalApi.lock();
-    // 鎻愪氦琛ㄥ崟
-    const data = (await formApi.getValues()) as MesTmToolApi.Tool;
-    try {
-      await (data.id ? updateTool(data) : createTool(data));
-      // 鍏抽棴骞舵彁绀�
-      await modalApi.close();
-      emit('success');
-      message.success($t('ui.actionMessage.operationSuccess'));
-    } finally {
-      modalApi.unlock();
-    }
-  },
-  async onOpenChange(isOpen: boolean) {
-    if (!isOpen) {
-      formData.value = undefined;
-      return;
-    }
-    // 鍔犺浇鏁版嵁
-    const data = modalApi.getData<{ formType: FormType; id?: number }>();
-    formType.value = data.formType;
-    formApi.setState({ schema: useFormSchema(data.formType, formApi) });
-    formApi.setDisabled(formType.value === 'detail');
-    modalApi.setState({ showConfirmButton: formType.value !== 'detail' });
-    if (!data?.id) {
-      return;
-    }
-    modalApi.lock();
-    try {
-      formData.value = await getTool(data.id);
-      // 璁剧疆鍒� values
-      await formApi.setValues(formData.value);
-    } finally {
-      modalApi.unlock();
-    }
-  },
-});
+  const [Modal, modalApi] = useVbenModal({
+    async onConfirm() {
+      if (isDetail.value) {
+        await modalApi.close();
+        return;
+      }
+      const { valid } = await formApi.validate();
+      if (!valid) {
+        return;
+      }
+      modalApi.lock();
+      // 鎻愪氦琛ㄥ崟
+      const data = (await formApi.getValues()) as MesTmToolApi.Tool;
+      try {
+        await (data.id ? updateTool(data) : createTool(data));
+        // 鍏抽棴骞舵彁绀�
+        await modalApi.close();
+        emit("success");
+        message.success($t("ui.actionMessage.operationSuccess"));
+      } finally {
+        modalApi.unlock();
+      }
+    },
+    async onOpenChange(isOpen: boolean) {
+      if (!isOpen) {
+        formData.value = undefined;
+        return;
+      }
+      // 鍔犺浇鏁版嵁
+      const data = modalApi.getData<{ formType: FormType; id?: number }>();
+      formType.value = data.formType;
+      formApi.setState({ schema: useFormSchema(data.formType, formApi) });
+      formApi.setDisabled(formType.value === "detail");
+      modalApi.setState({ showConfirmButton: formType.value !== "detail" });
+      if (!data?.id) {
+        return;
+      }
+      modalApi.lock();
+      try {
+        formData.value = await getTool(data.id);
+        // 璁剧疆鍒� values
+        await formApi.setValues(formData.value);
+      } finally {
+        modalApi.unlock();
+      }
+    },
+  });
 </script>
 
 <template>
-  <Modal :title="getTitle" class="w-4/5">
+  <Modal :title="getTitle"
+         class="w-4/5">
     <Form class="mx-4" />
     <template #prepend-footer>
       <div class="flex flex-auto items-center">
-        <Button
-          v-if="isDetail && formData?.id"
-          type="primary"
-          @click="handleBarcode"
-        >
+        <Button v-if="isDetail && formData?.id"
+                type="primary"
+                @click="handleBarcode">
           鏌ョ湅鏉$爜
         </Button>
       </div>
diff --git a/src/views/outsourcereceipt/modules/line-list.vue b/src/views/outsourcereceipt/modules/line-list.vue
index b83d9c4..8f63e8c 100644
--- a/src/views/outsourcereceipt/modules/line-list.vue
+++ b/src/views/outsourcereceipt/modules/line-list.vue
@@ -18,7 +18,7 @@
   getOutsourceReceiptLinePage,
 } from '#/api/mes/wm/outsourcereceipt/line';
 import { $t } from '#/locales';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/productreceipt/modules/line-list.vue b/src/views/productreceipt/modules/line-list.vue
index af90793..8274f2e 100644
--- a/src/views/productreceipt/modules/line-list.vue
+++ b/src/views/productreceipt/modules/line-list.vue
@@ -19,7 +19,7 @@
   getProductReceiptLinePage,
 } from '#/api/mes/wm/productreceipt/line';
 import { $t } from '#/locales';
-import { BarcodeDetail, PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail, PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/returnissue/modules/line-list.vue b/src/views/returnissue/modules/line-list.vue
index 5359435..d402586 100644
--- a/src/views/returnissue/modules/line-list.vue
+++ b/src/views/returnissue/modules/line-list.vue
@@ -19,7 +19,7 @@
   getReturnIssueLinePage,
 } from '#/api/mes/wm/returnissue/line';
 import { $t } from '#/locales';
-import { BarcodeDetail, PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail, PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/returnsales/modules/line-list.vue b/src/views/returnsales/modules/line-list.vue
index 454b71d..5ad1a81 100644
--- a/src/views/returnsales/modules/line-list.vue
+++ b/src/views/returnsales/modules/line-list.vue
@@ -18,7 +18,7 @@
   getReturnSalesLinePage,
 } from '#/api/mes/wm/returnsales/line';
 import { $t } from '#/locales';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/returnvendor/modules/line-list.vue b/src/views/returnvendor/modules/line-list.vue
index d8fcec5..80467ef 100644
--- a/src/views/returnvendor/modules/line-list.vue
+++ b/src/views/returnvendor/modules/line-list.vue
@@ -18,7 +18,7 @@
   getReturnVendorLinePage,
 } from '#/api/mes/wm/returnvendor/line';
 import { $t } from '#/locales';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/sn/modules/detail.vue b/src/views/sn/modules/detail.vue
index d9b4933..f29cfdb 100644
--- a/src/views/sn/modules/detail.vue
+++ b/src/views/sn/modules/detail.vue
@@ -11,7 +11,7 @@
 
 import { TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
 import { getSnListByUuid } from '#/api/mes/wm/sn';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useDetailGridColumns } from '../data';
 
diff --git a/src/views/transfer/modules/line-list.vue b/src/views/transfer/modules/line-list.vue
index a2c2016..f047061 100644
--- a/src/views/transfer/modules/line-list.vue
+++ b/src/views/transfer/modules/line-list.vue
@@ -18,7 +18,7 @@
   getTransferLineList,
 } from '#/api/mes/wm/transfer/line';
 import { $t } from '#/locales';
-import { PrinterLabel } from '#/views/mes/wm/barcode/components';
+import { PrinterLabel } from '#/views/wls/barcode/components';
 
 import { useLineGridColumns } from '../data';
 import DetailForm from './detail-form.vue';
diff --git a/src/views/warehouse/area/modules/form.vue b/src/views/warehouse/area/modules/form.vue
index cd57d58..0c0c81e 100644
--- a/src/views/warehouse/area/modules/form.vue
+++ b/src/views/warehouse/area/modules/form.vue
@@ -18,7 +18,7 @@
 } from '#/api/mes/wm/warehouse/area';
 import { getWarehouseLocation } from '#/api/mes/wm/warehouse/location';
 import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useFormSchema } from '../data';
 
diff --git a/src/views/warehouse/location/modules/form.vue b/src/views/warehouse/location/modules/form.vue
index 97c4899..1e918a6 100644
--- a/src/views/warehouse/location/modules/form.vue
+++ b/src/views/warehouse/location/modules/form.vue
@@ -18,7 +18,7 @@
   updateWarehouseLocation,
 } from '#/api/mes/wm/warehouse/location';
 import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useFormSchema } from '../data';
 
diff --git a/src/views/warehouse/modules/form.vue b/src/views/warehouse/modules/form.vue
index 84216e2..32997a0 100644
--- a/src/views/warehouse/modules/form.vue
+++ b/src/views/warehouse/modules/form.vue
@@ -17,7 +17,7 @@
   updateWarehouse,
 } from '#/api/mes/wm/warehouse';
 import { $t } from '#/locales';
-import { BarcodeDetail } from '#/views/mes/wm/barcode/components';
+import { BarcodeDetail } from '#/views/wls/barcode/components';
 
 import { useFormSchema } from '../data';
 

--
Gitblit v1.9.3