qinhb před 1 rokem
rodič
revize
fd8312cba4

+ 14 - 0
src/api/order/index.ts

@@ -112,3 +112,17 @@ export function importOrder(importData: any) {
     },
   });
 }
+
+export function apsWorkOrder(params: any) {
+  return request({
+    url: "/api/v1/plan/aps/scheduling",
+    method: "post",
+    data: params,
+  });
+}
+export function distributeWorkOrder(workOrderId: any) {
+  return request({
+    url: "/api/v1/plan/aps/distribute/" + workOrderId,
+    method: "get",
+  });
+}

+ 5 - 0
src/common/configs/buttonPermission.ts

@@ -45,6 +45,7 @@ const ButtonPermKeys = {
     CATALOG: "plan",
     MENUS: {
       order: "plan:order",
+      workOrder: "plan:workOrder",
     },
     BTNS: {
       order_add: "plan:order:add",
@@ -52,6 +53,10 @@ const ButtonPermKeys = {
       order_del: "plan:order:del",
       order_import: "plan:order:import",
       order_export: "plan:order:export",
+      work_order_add: "plan:workOrder:add",
+      work_order_edit: "plan:workOrder:edit",
+      work_order_del: "plan:workOrder:del",
+      work_order_aps: "plan:workOrder:aps",
     },
   },
   //设备管理

+ 18 - 0
src/views/plan/order/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="mainContentBox">
     <avue-crud
+        ref="crudRef"
       :option="option"
       v-model:page="page"
       v-model:search="search"
@@ -37,6 +38,17 @@
           <template #icon> <i-ep-download /> </template>导出
         </el-button>
       </template>
+      <template #menu="{size,row,index}">
+        <el-button
+            v-hasPerm="[buttonPermission.PLAN.BTNS.order_edit]"
+            v-if="row.orderState === '0' ||  row.orderState === '1' ||  row.orderState === '2'"
+            type="primary"
+            link
+            size="small"
+            @click="handleEdit(row,0)"
+        ><i-ep-edit />编辑
+        </el-button>
+      </template>
     </avue-crud>
 
     <el-dialog
@@ -101,6 +113,7 @@ import {
   updateOrder,
   getExpandAlias,
 } from "@/api/order";
+import {ref} from "vue";
 
 // 弹窗对象
 const dialog = reactive({
@@ -127,10 +140,12 @@ const permission = reactive({
   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
   menu: true,
 });
+const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 option.value = {
   border: true,
   searchIndex: 3,
   searchIcon: true,
+  editBtn: false,
   //searchSpan: 4,
   searchMenuSpan: 8,
   align: "center",
@@ -459,6 +474,9 @@ const downloadTemplate = () => {
     downFile(response);
   });
 };
+const handleEdit = (row, index) =>{
+  crudRef.value && crudRef.value.rowEdit(row, index);
+}
 /** 弹窗提交 */
 const handleSubmit = () => {
   importOrder(importData).then((data: any) => {

+ 36 - 141
src/views/plan/workOrder/components/choice-line-page.vue

@@ -29,7 +29,7 @@ const test = () => {
 };
 
 const props = defineProps({
-  workShopId: {
+  parentCode: {
     type: String,
     default: () => {
       return '';
@@ -45,7 +45,7 @@ const props = defineProps({
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({
-    src: "/api/v1/plan/order",
+    src: "/api/v1/base/productionLine",
   });
 const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
@@ -56,7 +56,6 @@ const emit = defineEmits(["lineInfo"])
 const rowClick = (row)=>{
   emit("lineInfo", row)
 }
-
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,
@@ -68,164 +67,60 @@ option.value = Object.assign(option.value, {
   menu: false,
   column: [
     {
-      label: "订单编号",
-      prop: "orderCode",
-      search: true,
-      width: "125",
-      display: false,
-    },
-    {
-      label: "订单名称",
-      prop: "orderName",
+      label: "产线名称",
+      prop: "name",
       search: true,
-      width: "100",
-    },
-    {
-      label: "ERP号",
-      prop: "erpCode",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "产品编码",
-      prop: "materialCode",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "产品名称",
-      prop: "materialName",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "产品规格",
-      width: "100",
-      prop: "materialModel",
-    },
-    {
-      label: "订单状态",
-      prop: "orderState",
-      display: false,
-      width: "100",
-      type: "select", //类型为下拉选择框
-      dicUrl:
-          dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_state,
-      props: {
-        label: "dictLabel",
-        value: "dictValue",
-      },
-      searchClearable: false, //可清空的输入框,默认为true
-      filterable: true, //添加filterable属性即可启用搜索功能
-    },
-    {
-      label: "订单类型",
-      prop: "orderType",
-      type: "select", //类型为下拉选择框
-      width: "100",
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_type,
+      rules: [{
+        required: true,
+        message: "请填写产线名称",
+        trigger: "blur"
+      }],
+    },
+    {
+      label: "产线负责人",
+      prop: "manager",
+      rules: [{
+        required: true,
+        message: "请选择产线负责人",
+        trigger: "blur"
+      }],
+      type: 'select',
+      dicUrl:import.meta.env.VITE_APP_BASE_API+"/api/v1/sys/user/list",
+      dicMethod:"post",
       props: {
-        label: "dictLabel",
-        value: "dictValue",
+        label: "userName", // 下拉菜单显示的字段
+        value: "userName" // 下拉菜单值的字段
       },
-      searchClearable: false, //可清空的输入框,默认为true
-      filterable: true, //添加filterable属性即可启用搜索功能
     },
     {
-      label: "订单数量",
-      prop: "orderNum",
-      type: "number",
-      width: "100",
-      min: 1,
-      max: 99999,
+      label: "产线位置",
+      prop: "position",
     },
     {
-      label: "排产数量",
-      prop: "scheduledNum",
-      width: "100",
-      display: false,
+      label: "所属车间",
+      prop: "workShopName",
+      display:false
     },
     {
-      label: "优先级",
-      prop: "priority",
-      width: "100",
-      type: "select", //类型为下拉选择框
-      dicUrl:
-          dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
-      props: {
-        label: "dictLabel",
-        value: "dictValue",
-      },
-      searchClearable: false, //可清空的输入框,默认为true
-      filterable: true, //添加filterable属性即可启用搜索功能
-    },
-    {
-      label: "交付日期",
-      prop: "deliverTime",
-      type: "date",
-      width: "100",
-      format: "YYYY-MM-DD", //前端展示格式
-      valueFormat: "YYYY-MM-DD", //设置后端接收的日期格式
-    },
-    {
-      label: "所属公司",
-      prop: "companyId",
-      width: "100",
-      type: "select", //类型为下拉选择框
-      dicUrl: import.meta.env.VITE_APP_BASE_API + "/api/v1/sys/dept/orgList",
-      props: {
-        label: "deptName",
-        value: "id",
-      },
-    },
-    {
-      label: "项目号",
-      width: "100",
-      prop: "projectCode",
-    },
-    {
-      label: "绑定铭牌",
-      prop: "nameplated",
-      width: "100",
-      type: "radio", //类型为单选框
-      dicData: [
-        {
-          label: "否",
-          value: 0,
-        },
-        {
-          label: "是",
-          value: 1,
-        },
-      ],
-      value: 0,
+      label: "产线描述",
+      prop: "remark",
     },
     {
-      label: "备注",
-      prop: "remark",
-      width: "100",
-      minRows: 2, //最小行/最小值
-      type: "textarea", //类型为多行文本域框
-      maxlength: 512, //最大输入长度
+      label: "创建人",
+      prop: "creator",
+      display:false
     },
     {
       label: "创建时间",
       prop: "created",
-      width: "140",
-      overHidden: true,
-      type: "datetime",
-      valueFormat: "yyyy-MM-dd HH:mm:ss",
-    },
-    {
-      label: "创建人",
-      prop: "creator",
-      width: 80,
-      overHidden: true,
+      display:false
     },
   ],
 });
 
 onMounted(() => {
+  search.value.parentCode = props.parentCode
+  search.value.materialCode = props.materialCode
   dataList();
 });
 </script>

+ 25 - 136
src/views/plan/workOrder/components/choice-workshop-page.vue

@@ -53,159 +53,48 @@ option.value = Object.assign(option.value, {
   menu: false,
   column: [
     {
-      label: "订单编号",
-      prop: "orderCode",
+      label: "车间名称",
+      prop: "name",
       search: true,
-      width: "125",
-      display: false,
     },
     {
-      label: "订单名称",
-      prop: "orderName",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "ERP号",
-      prop: "erpCode",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "产品编码",
-      prop: "materialCode",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "产品名称",
-      prop: "materialName",
-      search: true,
-      width: "100",
-    },
-    {
-      label: "产品规格",
-      width: "100",
-      prop: "materialModel",
-    },
-    {
-      label: "订单状态",
-      prop: "orderState",
-      display: false,
-      width: "100",
-      type: "select", //类型为下拉选择框
-      dicUrl:
-          dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_state,
-      props: {
-        label: "dictLabel",
-        value: "dictValue",
-      },
-      searchClearable: false, //可清空的输入框,默认为true
-      filterable: true, //添加filterable属性即可启用搜索功能
-    },
-    {
-      label: "订单类型",
-      prop: "orderType",
-      type: "select", //类型为下拉选择框
-      width: "100",
-      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_type,
-      props: {
-        label: "dictLabel",
-        value: "dictValue",
-      },
-      searchClearable: false, //可清空的输入框,默认为true
-      filterable: true, //添加filterable属性即可启用搜索功能
-    },
-    {
-      label: "订单数量",
-      prop: "orderNum",
-      type: "number",
-      width: "100",
-      min: 1,
-      max: 99999,
-    },
-    {
-      label: "排产数量",
-      prop: "scheduledNum",
-      width: "100",
-      display: false,
-    },
-    {
-      label: "优先级",
-      prop: "priority",
-      width: "100",
-      type: "select", //类型为下拉选择框
-      dicUrl:
-          dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
+      label: "车间负责人",
+      prop: "manager",
+      rules: [{
+        required: true,
+        message: "请选择厂区负责人",
+        trigger: "blur"
+      }],
+      type: 'select',
+      dicUrl:import.meta.env.VITE_APP_BASE_API+"/api/v1/sys/user/list",
+      dicMethod:"post",
       props: {
-        label: "dictLabel",
-        value: "dictValue",
+        label: "userName", // 下拉菜单显示的字段
+        value: "userName" // 下拉菜单值的字段
       },
-      searchClearable: false, //可清空的输入框,默认为true
-      filterable: true, //添加filterable属性即可启用搜索功能
     },
     {
-      label: "交付日期",
-      prop: "deliverTime",
-      type: "date",
-      width: "100",
-      format: "YYYY-MM-DD", //前端展示格式
-      valueFormat: "YYYY-MM-DD", //设置后端接收的日期格式
+      label: "车间位置",
+      prop: "position",
     },
     {
-      label: "所属公司",
-      prop: "companyId",
-      width: "100",
-      type: "select", //类型为下拉选择框
-      dicUrl: import.meta.env.VITE_APP_BASE_API + "/api/v1/sys/dept/orgList",
-      props: {
-        label: "deptName",
-        value: "id",
-      },
+      label: "所属工厂",
+      prop: "factoryName",
+      display:false
     },
     {
-      label: "项目号",
-      width: "100",
-      prop: "projectCode",
-    },
-    {
-      label: "绑定铭牌",
-      prop: "nameplated",
-      width: "100",
-      type: "radio", //类型为单选框
-      dicData: [
-        {
-          label: "否",
-          value: 0,
-        },
-        {
-          label: "是",
-          value: 1,
-        },
-      ],
-      value: 0,
+      label: "车间描述",
+      prop: "remark",
     },
     {
-      label: "备注",
-      prop: "remark",
-      width: "100",
-      minRows: 2, //最小行/最小值
-      type: "textarea", //类型为多行文本域框
-      maxlength: 512, //最大输入长度
+      label: "创建人",
+      prop: "creator",
+      display:false
     },
     {
       label: "创建时间",
       prop: "created",
-      width: "140",
-      overHidden: true,
-      type: "datetime",
-      valueFormat: "yyyy-MM-dd HH:mm:ss",
-    },
-    {
-      label: "创建人",
-      prop: "creator",
-      width: 80,
-      overHidden: true,
+      display:false
     },
   ],
 });

+ 82 - 0
src/views/plan/workOrder/components/work-order-seq.vue

@@ -0,0 +1,82 @@
+<template>
+  <div class="mainContentBox">
+    <avue-crud
+        ref="crudRef"
+        v-model:search="search"
+        v-model="form"
+        :data="data"
+        :option="option"
+        v-model:page="page"
+        @search-change="searchChange"
+        @search-reset="resetChange"
+        @size-change="dataList"
+        @current-change="dataList"
+    >
+    </avue-crud>
+  </div>
+</template>
+<script setup>
+import {defineProps, ref} from "vue";
+import { useCrud } from "@/hooks/userCrud";
+import { useCommonStoreHook } from "@/store";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+const test = () => {
+  isShowTable.value = true;
+  tableType.value = tableType.value == 1 ? 2 : 1;
+};
+const props = defineProps({
+  workOrderId: {
+    type: String,
+    default: () => {
+      return 0;
+    }
+  }
+})
+// 传入一个url,后面不带/
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/plan/seq",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate } = Utils; //按钮权限等工具
+const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value, {
+  delBtn: false,
+  selection: false,
+  search: false,
+  editBtn: false,
+  addBtn: false,
+  viewBtn: false,
+  menu: false,
+  column: [
+    {
+      label: "序列号",
+      prop: "seqNo",
+      search: true,
+      overHidden: true,
+    },
+    {
+      label: "铭牌号",
+      prop: "nameplateNo",
+      search: true,
+      overHidden: true,
+    },
+    {
+      label: "状态",
+      prop: "state",
+      minWidth: 100,
+      type: "select",
+      dicData: [{label: '正常',value: 0},{label: '冻结',value: 1},{label: '完成',value: 2}],
+    },
+  ],
+});
+
+onMounted(() => {
+  search.value.workOrderId = props.workOrderId
+  dataList();
+});
+</script>

+ 186 - 26
src/views/plan/workOrder/index.vue

@@ -7,6 +7,7 @@
         :data="data"
         :option="option"
         v-model:page="page"
+        :permission="permission"
         @row-save="createRow"
         @row-update="updateRow"
         @row-del="deleteRow"
@@ -25,6 +26,47 @@
           @click="multipleDelete"
           >删除</el-button
         >
+        <el-button
+            :disabled="toDeleteIds.length < 1"
+            type="primary"
+            icon="el-icon-primary"
+            :size="size"
+            @click="aps1"
+        >批量排程</el-button
+        >
+      </template>
+      <template #menu="{size,row,index}">
+        <el-button
+            v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_edit]"
+            v-if="row.workOrderState === '0' ||  row.workOrderState === '1' ||  row.workOrderState === '2'"
+            type="primary"
+            link
+            size="small"
+            @click="handleEdit(row,0)"
+        ><i-ep-edit />编辑
+        </el-button>
+        <el-button @click="aps(row.id)"
+                   icon="el-icon-setting"
+                   text
+                   v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_aps]"
+                   v-if="row.workOrderState === '0' ||  row.workOrderState === '1' ||  row.workOrderState === '2'"
+                   type="primary"
+                   :size="size">排程</el-button>
+          <el-button
+              icon="el-icon-setting"
+              text
+              v-if="row.workOrderState === '2'"
+              @click="distribute(row.id)"
+              type="primary"
+              v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_aps]"
+              :size="size">下发</el-button>
+        <el-button
+            icon="el-icon-setting"
+            text
+            v-if="row.workOrderState !== '0' && row.workOrderState !== '1'"
+            @click="dialog4.visible = true"
+            type="primary"
+            :size="size">流水</el-button>
       </template>
     </avue-crud>
     <el-dialog
@@ -60,24 +102,80 @@
         width="80%"
         @close="dialog3.visible = false"
     >
-      <choice-line-page  @orderInfo="lineInfo"/>
+      <choice-line-page :parentCode="form.workshopCode" :materialCode="form.materialCode" @lineInfo="lineInfo"/>
+    </el-dialog>
+
+    <el-dialog
+        v-model="dialog4.visible"
+        :title="dialog4.title"
+        width="950px"
+        @close="dialog4.visible = false"
+    >
+      <work-order-seq :workOrderId="form.id"/>
+    </el-dialog>
+
+    <el-dialog
+        v-model="dialog5.visible"
+        :title="dialog5.title"
+        width="450px"
+        @close="dialog5.visible = false"
+    >
+      <el-form
+          ref="dataFormRef"
+          :model="formData"
+          :rules="rules"
+          label-width="150px">
+      <el-form-item label="排程时间" prop="apsTime">
+        <el-date-picker
+            v-model="formData.apsTime"
+            type="date"
+            :picker-options="pickerOptions"
+            placeholder="请选择时间"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+        />
+
+<!--        <el-input width="250px" v-model="formData.apsTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>-->
+      </el-form-item>
+      <el-form-item label="排程类型" prop="apsModel">
+        <el-radio-group v-model="formData.apsModel">
+          <el-radio :value="0">排产</el-radio>
+<!--          <el-radio :value="1">停用</el-radio>-->
+        </el-radio-group>
+      </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="handleSubmit">确 定</el-button>
+          <el-button @click="dialog5.visible = false">取 消</el-button>
+        </div>
+      </template>
+
     </el-dialog>
   </div>
 </template>
 <script setup>
 import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
-import ButtonPermKeys from "@/common/configs/buttonPermission";
-
+import buttonPermission from "@/common/configs/buttonPermission";
+import {apsWorkOrder,distributeWorkOrder} from "@/api/order"
 import { useCommonStoreHook } from "@/store";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ChoiceRoutePage from "./components/choice-route-page.vue";
 import ChoiceWorkshopPage from "./components/choice-workshop-page.vue";
+import WorkOrderSeq from "./components/work-order-seq.vue";
+import { checkPerm } from "@/directive/permission";
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
 const test = () => {
   isShowTable.value = true;
   tableType.value = tableType.value == 1 ? 2 : 1;
 };
+const permission = reactive({
+  delBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_del),
+  addBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_add),
+  editBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_edit),
+  menu: true,
+});
 const dialog = reactive({
   title: "订单选择",
   visible: false,
@@ -94,6 +192,69 @@ const dialog3 = reactive({
   title: "产线选择",
   visible: false,
 });
+const dialog4 = reactive({
+  title: "工单流水",
+  visible: false,
+});
+const dialog5 = reactive({
+  title: "排程确认",
+  visible: false,
+});
+const pickerOptions = ref({
+  disabledDate(time) {
+    return time.getTime() < Date.now() - 8.64e7;
+  }
+})
+const aps =(id)=>{
+  formData.workOrderIds = [id]
+  dialog5.visible = true
+}
+const distribute = (id)=>{
+  ElMessageBox.confirm("当前操作不可逆,确定下发工单吗?")
+      .then(() => {
+        distributeWorkOrder(id).then((data)=>{
+          ElMessage.success(data.msg);
+          dataList()
+        })
+      })
+      .catch(() => {
+        // catch error
+      });
+}
+const handleEdit = (row, index) =>{
+  crudRef.value && crudRef.value.rowEdit(row, index);
+}
+const aps1 =()=>{
+  formData.workOrderIds = toDeleteIds
+  dialog5.visible = true
+}
+const dataFormRef = ref(ElForm);
+
+const formData = reactive({
+  apsTime: null,
+  apsModel: 0,
+  workOrderId: 0
+});
+
+const rules = reactive({
+  apsTime: [{ required: true, message: "排程时间不能为空", trigger: "blur" }],
+  apsModel: [{ required: true, message: "排程类型不能为空", trigger: "blur" }],
+});
+const handleSubmit =()=>{
+  dataFormRef.value.validate((isValid) => {
+    if (isValid) {
+      apsWorkOrder(formData).then((data)=>{
+        if(data.code === '200'){
+          ElMessage.success(data.msg);
+          dialog5.visible = false
+          dataList()
+        }else{
+          ElMessage.error(data.msg);
+        }
+      })
+    }
+  });
+}
 const orderInfo = (value) => {
   form.value.orderCode = value.orderCode
   form.value.orderName = value.orderName
@@ -104,12 +265,14 @@ const orderInfo = (value) => {
   dialog.visible = false
 }
 const lineInfo = (value) => {
-  form.value.orderCode = value.orderCode
+  form.value.productLineId = value.id
+  form.value.productLineName = value.name
   dialog3.visible = false
 }
 const workShopInfo = (value) => {
-  form.value.workShopId = value.id
-  form.value.workShopName = value.id
+  form.value.workshopName = value.id
+  form.value.workshopCode = value.code
+  form.value.workshopName = value.name
   dialog2.visible = false
 }
 const routeInfo = (value) => {
@@ -132,20 +295,21 @@ const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 // 设置表格列或者其他自定义的option
 option.value = Object.assign(option.value, {
   delBtn: false,
-  selection: false,
+  selection: true,
+  editBtn: false,
   column: [
     {
       label: "工单编号",
       prop: "workOrderCode",
       search: true,
       display: false,
-      width: 115,
+      width: 125,
     },
     {
       label: "订单编号",
       prop: "orderCode",
       search: true,
-      width: 115,
+      width: 125,
       rules: [
         {
           required: true,
@@ -271,6 +435,13 @@ option.value = Object.assign(option.value, {
       ],
       click: ({ value, column }) => {
         if(column.boxType){
+          if(!form.value.workshopCode){
+            ElMessage({
+              message: "请先选择生产车间",
+              type: "warning",
+            })
+            return;
+          }
           dialog3.visible = true
         }
       },
@@ -278,14 +449,14 @@ option.value = Object.assign(option.value, {
     {
       label: "开始时间",
       prop: "planStartWhen",
-      width: 120,
+      width: 180,
       overHidden: true,
       display: false,
     },
     {
       label: "结束时间",
       prop: "planStartEnd",
-      width: 120,
+      width: 180,
       display: false,
       overHidden: true,
     },
@@ -293,6 +464,9 @@ option.value = Object.assign(option.value, {
       label: "工单数量",
       prop: "planNum",
       width: 85,
+      type: "number",
+      min: 1,
+      max: 99999,
       rules: [
         {
           required: true,
@@ -322,7 +496,7 @@ option.value = Object.assign(option.value, {
     },
     {
       label: "创建时间",
-      width: 100,
+      width: 180,
       display: false,
       prop: "created",
     },
@@ -339,18 +513,4 @@ onMounted(() => {
   // console.log("crudRef", crudRef)
   dataList();
 });
-/**
- * 上传excel相关
- */
-const uploadRef = ref(null);
-const uploadFinished = () => {
-  // 上传完成后的刷新操作
-  page.currentPage = 1;
-  dataList();
-};
-const importExcelData = () => {
-  if (uploadRef.value) {
-    uploadRef.value.show("/api/v1/device/import");
-  }
-};
 </script>

src/views/base/modeling/storage/index.vue → src/views/storage/storage/index.vue