瀏覽代碼

feature/表格随工单

dengrui 10 月之前
父節點
當前提交
d148c44e8b
共有 4 個文件被更改,包括 762 次插入304 次删除
  1. 1 1
      .env.development
  2. 16 0
      src/api/excel/index.ts
  3. 347 0
      src/views/plan/workOrder/components/proWorkOrderExcel.vue
  4. 398 303
      src/views/plan/workOrder/index.vue

+ 1 - 1
.env.development

@@ -10,7 +10,7 @@ VITE_APP_BASE_API = '/dev-api'
 # 上传文件接口地址
 # 上传文件接口地址
 VITE_APP_UPLOAD_URL = 'http://192.168.101.4:9000'
 VITE_APP_UPLOAD_URL = 'http://192.168.101.4:9000'
 # 开发接口地址
 # 开发接口地址
- VITE_APP_API_URL = 'http://192.168.101.4:7104'
+ VITE_APP_API_URL = 'http://192.168.101.168:7104'
 
 
 
 
 # 是否启用 Mock 服务
 # 是否启用 Mock 服务

+ 16 - 0
src/api/excel/index.ts

@@ -94,3 +94,19 @@ export function setExcelData(data: any) {
     data,
     data,
   });
   });
 }
 }
+// 生产随工单Exceldata获取
+export function getProExcel(id: any) {
+  return request({
+    url: `/api/v1/ProcessFormData/getExcel/${id}`,
+    method: "get",
+  });
+}
+
+//生产随工单更新
+export function updateProExcel(data: any) {
+  return request({
+    url: `/api/v1/ProcessFormData/updateExcel`,
+    method: "post",
+    data,
+  });
+}

+ 347 - 0
src/views/plan/workOrder/components/proWorkOrderExcel.vue

@@ -0,0 +1,347 @@
+<template>
+  <div class="dialogBody">
+    <!-- 生产随工单 -->
+    <div class="exView" :key="excelKey1">
+      <ExcelView
+        ref="excelViewRef"
+        :option="options"
+        @confirm="confirm"
+        v-model:data="exceldata"
+        :checkStatus="true"
+        :verifications="setting"
+      />
+    </div>
+    <div class="btns" v-if="options.edit !== false">
+      <el-button class="btn" type="success" @click="submit">确 定 </el-button>
+      <el-button class="btn" type="info" @click="cancel">取 消 </el-button>
+    </div>
+    <div class="btns" v-else>
+      <el-button class="btn" type="info" @click="cancel">返 回 </el-button>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { ref } from "vue";
+import { updateProExcel } from "@/api/excel/index.ts";
+import ExcelView from "@/components/ExcelView/index.vue";
+const setting = ref([]);
+const props = defineProps({
+  data: {
+    type: Object,
+  },
+});
+const rowData = ref({});
+const emits = defineEmits(["update:modelValue", "close", "refresh"]);
+const excelKey1 = ref(false);
+const submit = async () => {
+  //@ts-ignore
+  excelViewRef.value.confirm();
+  const { data, code } = await updateProExcel({
+    excelData: JSON.stringify(exceldata.value),
+    id: rowData.value.id,
+  });
+  if (code == "200") {
+    ElMessage.success("修改成功!");
+    cancel();
+  }
+};
+const cancel = () => {
+  excelKey1.value = !excelKey1.value;
+  emits("close");
+};
+// 存放操作表格相关业务代码
+const useAddTemplateHook = () => {
+  //excelView 组件实例
+  const excelViewRef = ref(null);
+  //表格配置项
+  const options = ref({
+    //头部操作区域
+    opreaState: true,
+    //导入按钮展示
+    in: false,
+    //导出按钮展示
+    out: true,
+    print: true,
+    //编辑状态 false:为查看状态
+    edit: true,
+    //当前操作表格名称
+    inName: "",
+    opreaTitle: false,
+  });
+  //双向绑定表格data变量
+  const exceldata = ref(null);
+  //控制表格组件展示界面变量(包括表格展示页面和操作页面)
+  const excelStatus = ref(true);
+
+  //获取组件内实时数据赋值到外层
+  const confirm = (data: any) => {
+    exceldata.value = data;
+  };
+  return {
+    excelStatus,
+    options,
+    confirm,
+    exceldata,
+    excelViewRef,
+  };
+};
+const { options, confirm, exceldata, excelViewRef } = useAddTemplateHook();
+const useFormHook = () => {
+  //KEY告知组件刷新
+  const excelKey = ref(1);
+  //表单data
+  const formVlaue = reactive({ formType: null, formName: null, state: null });
+  //表单是否为编辑状态变量
+  const operaEditStatus = ref(false);
+  //选中的行id
+  const selectId = ref(null);
+  //表单ref实例
+  const formRef = ref(null);
+  //表单校验规则
+  const rules = reactive({
+    formName: [
+      {
+        required: true,
+        trigger: "blur",
+      },
+    ],
+    formType: [
+      {
+        required: true,
+        trigger: "blur",
+      },
+    ],
+    state: [
+      {
+        required: true,
+        trigger: "blur",
+      },
+    ],
+  });
+  //新增模版
+  const submitForm = async (formEl: any) => {
+    //@ts-ignore;
+    excelViewRef.value.confirm();
+    if (exceldata.value == null) return ElMessage.error("请提供表格数据!");
+    if (!formEl) return;
+    await formEl.validate(async (valid: any, fields: any) => {
+      if (valid) {
+        const { data, code } = await addExcel({
+          ...formVlaue,
+          excelData: exceldata.value,
+        });
+        if (code == "200") {
+          ElMessage.success("添加成功!");
+          resetData();
+          dataEditList();
+          editTep(data);
+        }
+      }
+    });
+  };
+  //更新行内信息
+  const updateExForm = async (formEl: any) => {
+    //@ts-ignore;
+    excelViewRef.value.saveCellData();
+    //@ts-ignore;
+    excelViewRef.value.confirm();
+    if (exceldata.value == null) return ElMessage.error("请提供表格数据!");
+    if (!formEl) return;
+    await formEl.validate(async (valid: any, fields: any) => {
+      if (valid) {
+        const { data, code } = await updateExcel({
+          ...formVlaue,
+          excelData: exceldata.value,
+          id: selectId.value,
+          settings: settings.value,
+        });
+        if (code == "200") {
+          ElMessage.success("修改成功!");
+          resetData();
+          dataEditList();
+        }
+      }
+    });
+  };
+  //表达数据重置
+  const resetForm = (formEl: any) => {
+    if (!formEl) return;
+    formEl.resetFields();
+  };
+  return {
+    formVlaue,
+    formRef,
+    rules,
+    selectId,
+    excelKey,
+    operaEditStatus,
+    submitForm,
+    resetForm,
+    updateExForm,
+  };
+};
+
+const {
+  formVlaue,
+  formRef,
+  rules,
+  selectId,
+  excelKey,
+  operaEditStatus,
+  submitForm,
+  resetForm,
+  updateExForm,
+} = useFormHook();
+//表格新增 分页
+const useAddFormHook = () => {
+  const formRef1 = ref(null);
+  const settings = ref([]);
+  const searchForm = ref({
+    pageNo: 1,
+    pageSize: 5,
+    totalPages: 0,
+  });
+  const addForm = ref({
+    paramName: "",
+    position: "",
+  });
+  const addPage = () => {
+    searchForm.value.pageNo = searchForm.value.pageNo + 1;
+    getSettingData();
+  };
+  const deletePage = () => {
+    searchForm.value.pageNo = searchForm.value.pageNo - 1;
+    getSettingData();
+  };
+  const getSettingData = async () => {
+    const { data } = await getSettingsData({
+      excelFormId: selectId.value,
+      ...searchForm.value,
+    });
+    settings.value = data.records;
+    if (settings.value.length == 0 && searchForm.value.pageNo > 1) {
+      deletePage();
+    }
+    searchForm.value.totalPages = data.totalPages;
+  };
+  const addSettings = async () => {
+    const { data, code } = await addSettingsData({
+      excelFormId: selectId.value,
+      ...addForm.value,
+    });
+    if (code == "200") {
+      ElMessage.success("添加成功");
+      resetAddForm();
+      getSettingData();
+    }
+  };
+  const deleteSettings = async (id: any) => {
+    const { data, code } = await deleteSettingsData({ id: id });
+    if (code == "200") {
+      ElMessage.success("删除成功");
+      getSettingData();
+    }
+  };
+
+  const resetAddForm = () => {
+    addForm.value = {
+      paramName: "",
+      position: "",
+    };
+    searchForm.value = {
+      pageNo: 1,
+      pageSize: 5,
+      totalPages: 0,
+    };
+    settings.value = [];
+  };
+  const creatAddForm = async () => {
+    await formRef1.value.validate(async (valid: any, fields: any) => {
+      if (valid) {
+        addSettings();
+      }
+    });
+  };
+  const addRules = reactive({
+    paramName: [
+      {
+        required: true,
+        trigger: "blur",
+      },
+    ],
+    position: [
+      {
+        required: true,
+        trigger: "blur",
+      },
+    ],
+  });
+  return {
+    formRef1,
+    addForm,
+    searchForm,
+    settings,
+    addRules,
+    creatAddForm,
+    resetAddForm,
+    getSettingData,
+    addSettings,
+    addPage,
+    deleteSettings,
+    deletePage,
+  };
+};
+
+const {
+  formRef1,
+  addForm,
+  searchForm,
+  settings,
+  addRules,
+  creatAddForm,
+  deletePage,
+  addPage,
+  resetAddForm,
+  getSettingData,
+  deleteSettings,
+} = useAddFormHook();
+watch(
+  () => props.data,
+  () => {
+    //@ts-ignore
+    rowData.value = props.data;
+    exceldata.value = JSON.parse(rowData.value.excelData);
+    excelKey1.value = !excelKey1.value;
+    if (rowData.value.lookStatus == true) {
+      options.value.edit = false;
+    }
+    setting.value = rowData.value.settings;
+  },
+  { immediate: true }
+);
+</script>
+<style lang="scss" scoped>
+.dialogBody {
+  width: 1560px;
+  height: 560px;
+  display: flex;
+  .exView {
+    width: 1330px;
+    height: 560px;
+    display: flex;
+    position: relative;
+  }
+  .btns {
+    width: 200px;
+    height: 560px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding: 40px 0 0 20px;
+    .btn {
+      width: 100%;
+      margin: 10px;
+    }
+  }
+}
+</style>

+ 398 - 303
src/views/plan/workOrder/index.vue

@@ -1,22 +1,22 @@
 <template>
 <template>
   <div class="mainContentBox">
   <div class="mainContentBox">
     <avue-crud
     <avue-crud
-        ref="crudRef"
-        v-model:search="search"
-        v-loading="loading"
-        v-model="form"
-        :data="data"
-        :option="option"
-        v-model:page="page"
-        :permission="permission"
-        @row-save="createRow"
-        @row-update="updateRow"
-        @row-del="deleteRow"
-        @search-change="searchChange"
-        @search-reset="resetChange"
-        @size-change="dataList"
-        @current-change="dataList"
-        @selection-change="selectionChange"
+      ref="crudRef"
+      v-model:search="search"
+      v-loading="loading"
+      v-model="form"
+      :data="data"
+      :option="option"
+      v-model:page="page"
+      :permission="permission"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @size-change="dataList"
+      @current-change="dataList"
+      @selection-change="selectionChange"
     >
     >
       <template #menu-left="{ size }">
       <template #menu-left="{ size }">
         <el-button
         <el-button
@@ -28,81 +28,115 @@
           >删除</el-button
           >删除</el-button
         >
         >
         <el-button
         <el-button
-            :disabled="toDeleteIds.length < 1"
-            type="primary"
-            icon="el-icon-primary"
-            :size="size"
-            @click="aps1"
-        >批量排程</el-button
+          :disabled="toDeleteIds.length < 1"
+          type="primary"
+          icon="el-icon-primary"
+          :size="size"
+          @click="aps1"
+          >批量排程</el-button
         >
         >
       </template>
       </template>
-      <template #menu="{size,row,index}">
+      <template #menu="{ size, row, index }">
         <el-button
         <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 />编辑
+          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>
-        <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-hasPerm="[buttonPermission.PLAN.BTNS.work_order_lock]"
-              v-if="row.workOrderState === '4'"
-              @click="lockOrUnLockWorkOrder(row.id,5)"
-              type="primary"
-              :size="size">冻结</el-button>
         <el-button
         <el-button
-            icon="el-icon-setting"
-            text
-            v-if="row.workOrderState === '5'"
-            v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_lock]"
-            @click="lockOrUnLockWorkOrder(row.id,4)"
-            type="primary"
-            :size="size">解冻</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-hasPerm="[buttonPermission.PLAN.BTNS.work_order_lock]"
+          v-if="row.workOrderState === '4'"
+          @click="lockOrUnLockWorkOrder(row.id, 5)"
+          type="primary"
+          :size="size"
+          >冻结</el-button
+        >
+        <el-button
+          icon="el-icon-setting"
+          text
+          v-if="row.workOrderState === '5'"
+          v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_lock]"
+          @click="lockOrUnLockWorkOrder(row.id, 4)"
+          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
         <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>
+          icon="el-icon-setting"
+          text
+          @click="showSeqPage(row)"
+          type="primary"
+          :size="size"
+          >流转卡号</el-button
+        >
         <el-button
         <el-button
-            icon="el-icon-setting"
-            text
-            @click="showSeqPage(row)"
-            type="primary"
-            :size="size">流转卡号</el-button>
+          icon="el-icon-delete"
+          text
+          v-if="row.workOrderState === '3'"
+          @click="revoke(row.id)"
+          type="primary"
+          :size="size"
+          >撤销</el-button
+        >
         <el-button
         <el-button
-            icon="el-icon-delete"
-            text
-            v-if="row.workOrderState === '3'"
-            @click="revoke(row.id)"
-            type="primary"
-            :size="size">撤销</el-button>
+          icon="el-icon-setting"
+          text
+          @click="showCheckTask(row)"
+          type="primary"
+          :size="size"
+          >检验任务</el-button
+        >
         <el-button
         <el-button
-            icon="el-icon-setting"
-            text
-            @click="showCheckTask(row)"
-            type="primary"
-            :size="size">检验任务</el-button>
+          icon="el-icon-setting"
+          text
+          @click="jumpPage(row.workOrderCode, 2)"
+          type="primary"
+          :size="size"
+          >生产准备</el-button
+        >
         <el-button
         <el-button
-            icon="el-icon-setting"
-            text
-            @click="jumpPage(row.workOrderCode,2)"
-            type="primary"
-            :size="size">生产准备</el-button>
-       <!-- <el-button
+          icon="el-icon-setting"
+          text
+          @click="showProExcel(row.id)"
+          type="primary"
+          v-if="row.isExcel == 1"
+          :size="size"
+          >生产随工单</el-button
+        >
+        <!-- <el-button
           icon="el-icon-notebook"
           icon="el-icon-notebook"
           text
           text
           v-if="row.workOrderState === '6'&&row.packageUrl==='0'"
           v-if="row.workOrderState === '6'&&row.packageUrl==='0'"
@@ -121,93 +155,118 @@
       </template>
       </template>
     </avue-crud>
     </avue-crud>
     <el-dialog
     <el-dialog
-        v-model="dialog.visible"
-        :title="dialog.title"
-        width="80%"
-        @close="dialog.visible = false"
+      v-model="dialog.visible"
+      :title="dialog.title"
+      width="80%"
+      @close="dialog.visible = false"
     >
     >
-      <order-page queryType="1"  @orderInfo="orderInfo"/>
+      <order-page queryType="1" @order-info="orderInfo" />
     </el-dialog>
     </el-dialog>
 
 
     <el-dialog
     <el-dialog
-        v-model="dialog1.visible"
-        :title="dialog1.title"
-        width="80%"
-        @close="dialog1.visible = false"
+      v-model="dialog1.visible"
+      :title="dialog1.title"
+      width="80%"
+      @close="dialog1.visible = false"
     >
     >
-      <choice-route-page :processRouteType="processRouteType" :material-code="form.materialCode" @routeInfo="routeInfo"/>
+      <choice-route-page
+        :processRouteType="processRouteType"
+        :material-code="form.materialCode"
+        @route-info="routeInfo"
+      />
     </el-dialog>
     </el-dialog>
 
 
     <el-dialog
     <el-dialog
-        v-model="dialog2.visible"
-        :title="dialog2.title"
-        width="80%"
-        @close="dialog2.visible = false"
+      v-model="dialog2.visible"
+      :title="dialog2.title"
+      width="80%"
+      @close="dialog2.visible = false"
     >
     >
-      <choice-workshop-page  @workShopInfo="workShopInfo"/>
+      <choice-workshop-page @work-shop-info="workShopInfo" />
     </el-dialog>
     </el-dialog>
 
 
     <el-dialog
     <el-dialog
-        v-model="dialog3.visible"
-        :title="dialog3.title"
-        width="80%"
-        @close="dialog3.visible = false"
+      v-model="dialog3.visible"
+      :title="dialog3.title"
+      width="80%"
+      @close="dialog3.visible = false"
     >
     >
-      <choice-line-page :parentCode="form.workshopCode" :materialCode="form.materialCode" @lineInfo="lineInfo"/>
+      <choice-line-page
+        :parentCode="form.workshopCode"
+        :materialCode="form.materialCode"
+        @line-info="lineInfo"
+      />
     </el-dialog>
     </el-dialog>
 
 
     <el-dialog
     <el-dialog
-        v-model="dialog4.visible"
-        :title="dialog4.title"
-        width="950px"
-        @close="dialog4.visible = false"
+      v-model="dialog4.visible"
+      :title="dialog4.title"
+      width="950px"
+      @close="dialog4.visible = false"
     >
     >
-      <work-order-seq :workOrderInfo="form"/>
+      <work-order-seq :workOrderInfo="form" />
     </el-dialog>
     </el-dialog>
     <el-dialog
     <el-dialog
-        v-model="dialog6.visible"
-        :title="dialog6.title"
-        width="1100px"
-        @close="dialog6.visible = false"
+      v-model="dialog6.visible"
+      :title="dialog6.title"
+      width="1100px"
+      @close="dialog6.visible = false"
     >
     >
-      <check-task :workOrderInfo="form"/>
+      <check-task :workOrderInfo="form" />
     </el-dialog>
     </el-dialog>
     <el-dialog
     <el-dialog
-        v-model="dialog5.visible"
-        :title="dialog5.title"
-        width="450px"
-        @close="dialog5.visible = false"
+      v-model="dialog5.visible"
+      :title="dialog5.title"
+      width="450px"
+      @close="dialog5.visible = false"
     >
     >
       <el-form
       <el-form
-          ref="dataFormRef"
-          :model="formData"
-          :rules="rules"
-          label-width="150px">
-      <el-form-item label="排程时间" prop="apsTime" >
-        <el-date-picker
+        ref="dataFormRef"
+        :model="formData"
+        :rules="rules"
+        label-width="150px"
+      >
+        <el-form-item label="排程时间" prop="apsTime">
+          <el-date-picker
             v-model="formData.apsTime"
             v-model="formData.apsTime"
             type="date"
             type="date"
-            style="width:200px;"
+            style="width: 200px"
             :disabled-date="disabledDate"
             :disabled-date="disabledDate"
             placeholder="请选择时间"
             placeholder="请选择时间"
             format="YYYY/MM/DD"
             format="YYYY/MM/DD"
             value-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-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="priority" v-if="apsType === 1">
         <el-form-item label="优先级" prop="priority" v-if="apsType === 1">
-          <el-select v-model="formData.priority" placeholder="排程类型"
-                     style="width:200px;">
-            <el-option v-for="item in apsPriority" :label="item.dictLabel" :value="item.dictValue" :key="item.dictValue"></el-option>
+          <el-select
+            v-model="formData.priority"
+            placeholder="排程类型"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in apsPriority"
+              :label="item.dictLabel"
+              :value="item.dictValue"
+              :key="item.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="排程类型" prop="apsModel">
+          <el-select
+            v-model="formData.apsModel"
+            placeholder="排程类型"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in schedulingTypes"
+              :label="item.dictLabel"
+              :value="item.dictValue"
+              :key="item.dictValue"
+            />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
-      <el-form-item label="排程类型" prop="apsModel">
-        <el-select v-model="formData.apsModel" placeholder="排程类型"
-                   style="width:200px;">
-          <el-option v-for="item in schedulingTypes" :label="item.dictLabel" :value="item.dictValue" :key="item.dictValue"></el-option>
-        </el-select>
-      </el-form-item>
       </el-form>
       </el-form>
       <template #footer>
       <template #footer>
         <div class="dialog-footer">
         <div class="dialog-footer">
@@ -215,7 +274,15 @@
           <el-button @click="dialog5.visible = false">取 消</el-button>
           <el-button @click="dialog5.visible = false">取 消</el-button>
         </div>
         </div>
       </template>
       </template>
-
+    </el-dialog>
+    <!-- 生产随工单 -->
+    <el-dialog
+      v-model="workOderShow"
+      :title="updateTitle"
+      @close="workOderShow = false"
+      width="1600"
+    >
+      <proWorkOrderExcel :data="ExDataObj" @close="closeShow" />
     </el-dialog>
     </el-dialog>
   </div>
   </div>
 </template>
 </template>
@@ -223,7 +290,13 @@
 import { ref, getCurrentInstance } from "vue";
 import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import { useCrud } from "@/hooks/userCrud";
 import buttonPermission from "@/common/configs/buttonPermission";
 import buttonPermission from "@/common/configs/buttonPermission";
-import {apsWorkOrder,distributeWorkOrder,revokeWorkOrder,lockWorkOrder,zipWorkOrder} from "@/api/order"
+import {
+  apsWorkOrder,
+  distributeWorkOrder,
+  revokeWorkOrder,
+  lockWorkOrder,
+  zipWorkOrder,
+} from "@/api/order";
 import { useCommonStoreHook } from "@/store";
 import { useCommonStoreHook } from "@/store";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ChoiceRoutePage from "./components/choice-route-page.vue";
 import ChoiceRoutePage from "./components/choice-route-page.vue";
@@ -231,31 +304,52 @@ import ChoiceWorkshopPage from "./components/choice-workshop-page.vue";
 import WorkOrderSeq from "./components/work-order-seq.vue";
 import WorkOrderSeq from "./components/work-order-seq.vue";
 import CheckTask from "./components/check-task.vue";
 import CheckTask from "./components/check-task.vue";
 import { checkPerm } from "@/directive/permission";
 import { checkPerm } from "@/directive/permission";
-import {queryDictDataByType} from "@/api/system/dict"
+import { queryDictDataByType } from "@/api/system/dict";
+import { getProExcel } from "@/api/excel";
+import proWorkOrderExcel from "./components/proWorkOrderExcel.vue";
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
 const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+const updateTitle = ref("生产随工单");
 const router = useRouter();
 const router = useRouter();
+const workOderShow = ref(false);
+const ExDataObj = ref({});
+const excelData = ref([]);
+const showProExcel = async (id) => {
+  const { data, code } = await getProExcel(id);
+  if (code == "200") {
+    ExDataObj.value = data;
+
+    workOderShow.value = true;
+  } else {
+    ExDataObj.value = {};
+
+    workOderShow.value = false;
+  }
+};
+const closeShow = () => {
+  workOderShow.value = false;
+};
 const test = () => {
 const test = () => {
   isShowTable.value = true;
   isShowTable.value = true;
   tableType.value = tableType.value == 1 ? 2 : 1;
   tableType.value = tableType.value == 1 ? 2 : 1;
 };
 };
-const processRouteType = ref('')
+const processRouteType = ref("");
 const permission = reactive({
 const permission = reactive({
   delBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_del),
   delBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_del),
   addBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_add),
   addBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_add),
   editBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_edit),
   editBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_edit),
   menu: true,
   menu: true,
 });
 });
-const disabledDate = (time) =>{
+const disabledDate = (time) => {
   return time.getTime() < Date.now(); // 8.64e7 毫秒数代表一天
   return time.getTime() < Date.now(); // 8.64e7 毫秒数代表一天
-}
+};
 
 
-const jumpPage= (workOrderCode,type) =>{
-  if(type === 1){
-    router.push('/requisition?workOrderCode=' + workOrderCode);
-  }else{
-    router.push('/plan/prepare?workOrderCode=' + workOrderCode);
+const jumpPage = (workOrderCode, type) => {
+  if (type === 1) {
+    router.push("/requisition?workOrderCode=" + workOrderCode);
+  } else {
+    router.push("/plan/prepare?workOrderCode=" + workOrderCode);
   }
   }
-}
+};
 const dialog = reactive({
 const dialog = reactive({
   title: "订单选择",
   title: "订单选择",
   visible: false,
   visible: false,
@@ -284,103 +378,100 @@ const dialog6 = reactive({
   title: "检验任务",
   title: "检验任务",
   visible: false,
   visible: false,
 });
 });
-const apsType = ref(0)
-const aps =(id)=>{
-  apsType.value = 0
-  formData.workOrderIds = [id]
-  dialog5.visible = true
-}
-const showSeqPage =(workOrderCode)=>{
-  form.value = workOrderCode
-  dialog4.visible = true
-}
-const showCheckTask =(workOrderCode)=>{
-  form.value = workOrderCode
-  dialog6.visible = true
-}
-const distribute = (id)=>{
+const apsType = ref(0);
+const aps = (id) => {
+  apsType.value = 0;
+  formData.workOrderIds = [id];
+  dialog5.visible = true;
+};
+const showSeqPage = (workOrderCode) => {
+  form.value = workOrderCode;
+  dialog4.visible = true;
+};
+const showCheckTask = (workOrderCode) => {
+  form.value = workOrderCode;
+  dialog6.visible = true;
+};
+const distribute = (id) => {
   ElMessageBox.confirm("当前操作不可逆,确定下发工单吗?")
   ElMessageBox.confirm("当前操作不可逆,确定下发工单吗?")
-      .then(() => {
-        loading.value=true;
-        distributeWorkOrder(id).then((data)=>{
-          loading.value=false;
-          ElMessage.success(data.msg);
-          dataList()
-        })
-      })
-      .catch(() => {
-        // catch error
-      });
-}
-const lockOrUnLockWorkOrder = (id,status)=>{
-  let message = status === "4" ? "解冻" : "冻结"
-  ElMessageBox.confirm("当前操作不可逆,确定"+message+"工单吗?")
-      .then(() => {
-        loading.value=true;
-        lockWorkOrder({id: id,workOrderState: status}).then((data)=>{
-          loading.value=false;
-          ElMessage.success(data.msg);
-          dataList()
-        })
-      })
-      .catch(() => {
-        // catch error
+    .then(() => {
+      loading.value = true;
+      distributeWorkOrder(id).then((data) => {
+        loading.value = false;
+        ElMessage.success(data.msg);
+        dataList();
       });
       });
-}
-const loading=ref(false);
-const zipWork=ref({});
-const zipData=(workOrderCode)=>{
-  loading.value=true;
-  zipWork.value.workOrderCode=workOrderCode;
-  zipWorkOrder(zipWork.value).then(
-    (data)=>{
-      if(data.code === '200'){
-        loading.value=false;
+    })
+    .catch(() => {
+      // catch error
+    });
+};
+const lockOrUnLockWorkOrder = (id, status) => {
+  let message = status === "4" ? "解冻" : "冻结";
+  ElMessageBox.confirm("当前操作不可逆,确定" + message + "工单吗?")
+    .then(() => {
+      loading.value = true;
+      lockWorkOrder({ id: id, workOrderState: status }).then((data) => {
+        loading.value = false;
         ElMessage.success(data.msg);
         ElMessage.success(data.msg);
-        dataList()
-      }else{
-        loading.value=false;
-        ElMessage.error(data.msg);
-      }
+        dataList();
+      });
+    })
+    .catch(() => {
+      // catch error
+    });
+};
+const loading = ref(false);
+const zipWork = ref({});
+const zipData = (workOrderCode) => {
+  loading.value = true;
+  zipWork.value.workOrderCode = workOrderCode;
+  zipWorkOrder(zipWork.value).then((data) => {
+    if (data.code === "200") {
+      loading.value = false;
+      ElMessage.success(data.msg);
+      dataList();
+    } else {
+      loading.value = false;
+      ElMessage.error(data.msg);
     }
     }
-
-  )
-}
-const revoke = (id)=>{
+  });
+};
+const revoke = (id) => {
   ElMessageBox.confirm("当前操作不可逆,确定撤销工单吗?")
   ElMessageBox.confirm("当前操作不可逆,确定撤销工单吗?")
-      .then(() => {
-        loading.value=true;
-        revokeWorkOrder(id).then((data)=>{
-          if(data.code === '200'){
-            loading.value=false;
-            ElMessage.success(data.msg);
-            dataList()
-          }else{
-            loading.value=false;
-            ElMessage.error(data.msg)
-          }
-        })
-      })
-      .catch(() => {
-        // catch error
+    .then(() => {
+      loading.value = true;
+      revokeWorkOrder(id).then((data) => {
+        if (data.code === "200") {
+          loading.value = false;
+          ElMessage.success(data.msg);
+          dataList();
+        } else {
+          loading.value = false;
+          ElMessage.error(data.msg);
+        }
       });
       });
-}
-const handleEdit = (row, index) =>{
+    })
+    .catch(() => {
+      // catch error
+    });
+};
+const handleEdit = (row, index) => {
   crudRef.value && crudRef.value.rowEdit(row, index);
   crudRef.value && crudRef.value.rowEdit(row, index);
-}
-const aps1 =()=>{
-  apsType.value = 1
-  formData.workOrderIds = toDeleteIds
-  dialog5.visible = true
-}
+};
+const aps1 = () => {
+  apsType.value = 1;
+  formData.workOrderIds = toDeleteIds;
+  dialog5.visible = true;
+};
 const dataFormRef = ref(ElForm);
 const dataFormRef = ref(ElForm);
-const schedulingTypes = ref([])
-const apsPriority = ref([])
+const schedulingTypes = ref([]);
+const apsPriority = ref([]);
 const formData = reactive({
 const formData = reactive({
   apsTime: null,
   apsTime: null,
   priority: "1",
   priority: "1",
   apsModel: "0",
   apsModel: "0",
-  workOrderId: 0
+  workOrderId: 0,
 });
 });
 
 
 const rules = reactive({
 const rules = reactive({
@@ -388,65 +479,66 @@ const rules = reactive({
   apsTime: [{ required: true, message: "排程时间不能为空", trigger: "blur" }],
   apsTime: [{ required: true, message: "排程时间不能为空", trigger: "blur" }],
   apsModel: [{ required: true, message: "排程类型不能为空", trigger: "blur" }],
   apsModel: [{ required: true, message: "排程类型不能为空", trigger: "blur" }],
 });
 });
-const handleSubmit =()=>{
+const handleSubmit = () => {
   dataFormRef.value.validate((isValid) => {
   dataFormRef.value.validate((isValid) => {
     if (isValid) {
     if (isValid) {
-      apsWorkOrder(formData).then((data)=>{
-        if(data.code === '200'){
+      apsWorkOrder(formData).then((data) => {
+        if (data.code === "200") {
           ElMessage.success(data.msg);
           ElMessage.success(data.msg);
-          dialog5.visible = false
-          dataList()
-        }else{
+          dialog5.visible = false;
+          dataList();
+        } else {
           ElMessage.error(data.msg);
           ElMessage.error(data.msg);
         }
         }
-      })
+      });
     }
     }
   });
   });
-}
+};
 
 
 const orderInfo = (value) => {
 const orderInfo = (value) => {
-  form.value.orderCode = value.orderCode
-  form.value.orderName = value.orderName
-  form.value.materialCode = value.materialCode
-  form.value.materialName = value.materialName
-  form.value.materialModel = value.materialModel
-  form.value.priority = value.priority
-  form.value.orderType = value.orderType
-  form.value.processRouteId = ''
-  form.value.processRouteCode = ''
-  form.value.processRouteName = ''
-  form.value.processRouteVersion = ''
-  form.value.productLineId = ''
-  form.value.productLineName = ''
-  form.value.workshopName = ''
-  form.value.workshopCode = ''
-  form.value.workshopName = ''
-  dialog.visible = false
-}
+  form.value.orderCode = value.orderCode;
+  form.value.orderName = value.orderName;
+  form.value.materialCode = value.materialCode;
+  form.value.materialName = value.materialName;
+  form.value.materialModel = value.materialModel;
+  form.value.priority = value.priority;
+  form.value.orderType = value.orderType;
+  form.value.processRouteId = "";
+  form.value.processRouteCode = "";
+  form.value.processRouteName = "";
+  form.value.processRouteVersion = "";
+  form.value.productLineId = "";
+  form.value.productLineName = "";
+  form.value.workshopName = "";
+  form.value.workshopCode = "";
+  form.value.workshopName = "";
+  dialog.visible = false;
+};
 const lineInfo = (value) => {
 const lineInfo = (value) => {
-  form.value.productLineId = value.id
-  form.value.productLineName = value.name
-  dialog3.visible = false
-}
+  form.value.productLineId = value.id;
+  form.value.productLineName = value.name;
+  dialog3.visible = false;
+};
 const workShopInfo = (value) => {
 const workShopInfo = (value) => {
-  form.value.workshopName = value.id
-  form.value.workshopCode = value.code
-  form.value.workshopName = value.name
-  dialog2.visible = false
-}
+  form.value.workshopName = value.id;
+  form.value.workshopCode = value.code;
+  form.value.workshopName = value.name;
+  dialog2.visible = false;
+};
 const routeInfo = (value) => {
 const routeInfo = (value) => {
-  form.value.processRouteId = value.id
-  form.value.processRouteCode = value.processRouteCode
-  form.value.processRouteName = value.processRouteName
-  form.value.processRouteVersion = value.processRouteVersion
-  dialog1.visible = false
-}
+  form.value.processRouteId = value.id;
+  form.value.processRouteCode = value.processRouteCode;
+  form.value.processRouteName = value.processRouteName;
+  form.value.processRouteVersion = value.processRouteVersion;
+  dialog1.visible = false;
+};
 // 传入一个url,后面不带/
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({
   useCrud({
     src: "/api/v1/plan/workOrder",
     src: "/api/v1/plan/workOrder",
   });
   });
-const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+  Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 
 
@@ -481,8 +573,8 @@ option.value = Object.assign(option.value, {
         },
         },
       ],
       ],
       click: ({ value, column }) => {
       click: ({ value, column }) => {
-        if(column.boxType){
-          dialog.visible = true
+        if (column.boxType) {
+          dialog.visible = true;
         }
         }
       },
       },
     },
     },
@@ -538,7 +630,7 @@ option.value = Object.assign(option.value, {
       width: "80",
       width: "80",
       type: "select", //类型为下拉选择框
       type: "select", //类型为下拉选择框
       dicUrl:
       dicUrl:
-          dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
+        dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
       props: {
       props: {
         label: "dictLabel",
         label: "dictLabel",
         value: "dictValue",
         value: "dictValue",
@@ -551,7 +643,7 @@ option.value = Object.assign(option.value, {
       display: false,
       display: false,
       type: "select", //类型为下拉选择框
       type: "select", //类型为下拉选择框
       dicUrl:
       dicUrl:
-          dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_work_order_state,
+        dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_work_order_state,
       props: {
       props: {
         label: "dictLabel",
         label: "dictLabel",
         value: "dictValue",
         value: "dictValue",
@@ -570,30 +662,34 @@ option.value = Object.assign(option.value, {
         },
         },
       ],
       ],
       click: ({ value, column }) => {
       click: ({ value, column }) => {
-        if(column.boxType){
-          if(!form.value.materialCode){
+        if (column.boxType) {
+          if (!form.value.materialCode) {
             ElMessage({
             ElMessage({
               message: "请先选择订单",
               message: "请先选择订单",
               type: "warning",
               type: "warning",
-            })
+            });
             return;
             return;
           }
           }
-          processRouteType.value = form.value.orderType === '1' ? "ZC" : "FG"
-          dialog1.visible = true
+          processRouteType.value = form.value.orderType === "1" ? "ZC" : "FG";
+          dialog1.visible = true;
         }
         }
       },
       },
     },
     },
     {
     {
-    label: "工艺版本",
-    width: 100,
-    overHidden: true,
-    prop: "processRouteVersion",
-    display: false,
+      label: "工艺版本",
+      width: 100,
+      overHidden: true,
+      prop: "processRouteVersion",
+      display: false,
       html: true,
       html: true,
       formatter: (val) => {
       formatter: (val) => {
-        return '<b class="el-tag el-tag--success el-tag--light">'+val.processRouteVersion+'</b>';
+        return (
+          '<b class="el-tag el-tag--success el-tag--light">' +
+          val.processRouteVersion +
+          "</b>"
+        );
       },
       },
-  },
+    },
     {
     {
       label: "生产车间",
       label: "生产车间",
       prop: "workshopName",
       prop: "workshopName",
@@ -607,8 +703,8 @@ option.value = Object.assign(option.value, {
         },
         },
       ],
       ],
       click: ({ value, column }) => {
       click: ({ value, column }) => {
-        if(column.boxType){
-          dialog2.visible = true
+        if (column.boxType) {
+          dialog2.visible = true;
         }
         }
       },
       },
     },
     },
@@ -625,15 +721,15 @@ option.value = Object.assign(option.value, {
         },
         },
       ],
       ],
       click: ({ value, column }) => {
       click: ({ value, column }) => {
-        if(column.boxType){
-          if(!form.value.workshopCode){
+        if (column.boxType) {
+          if (!form.value.workshopCode) {
             ElMessage({
             ElMessage({
               message: "请先选择生产车间",
               message: "请先选择生产车间",
               type: "warning",
               type: "warning",
-            })
+            });
             return;
             return;
           }
           }
-          dialog3.visible = true
+          dialog3.visible = true;
         }
         }
       },
       },
     },
     },
@@ -671,7 +767,6 @@ option.value = Object.assign(option.value, {
       width: 85,
       width: 85,
       display: false,
       display: false,
       prop: "completeNum",
       prop: "completeNum",
-
     },
     },
     {
     {
       label: "下线数量",
       label: "下线数量",
@@ -702,7 +797,7 @@ option.value = Object.assign(option.value, {
       width: 90,
       width: 90,
       display: false,
       display: false,
       prop: "packageUrl",
       prop: "packageUrl",
-      hide:true
+      hide: true,
     },
     },
   ],
   ],
 });
 });
@@ -710,11 +805,11 @@ option.value = Object.assign(option.value, {
 onMounted(() => {
 onMounted(() => {
   // console.log("crudRef", crudRef)
   // console.log("crudRef", crudRef)
   dataList();
   dataList();
-  queryDictDataByType("order_scheduling_type").then((data)=>{
-    schedulingTypes.value = data.data
-  })
-  queryDictDataByType("aps_priority").then((data)=>{
-    apsPriority.value = data.data
-  })
+  queryDictDataByType("order_scheduling_type").then((data) => {
+    schedulingTypes.value = data.data;
+  });
+  queryDictDataByType("aps_priority").then((data) => {
+    apsPriority.value = data.data;
+  });
 });
 });
 </script>
 </script>