Bladeren bron

Merge branch 'qingban' of http://192.168.101.4:3000/jiaxiaoqiang/JG-ADMIN-TEMP into qingban

dengrui 11 maanden geleden
bovenliggende
commit
cb4876b4ed

+ 7 - 6
src/components/CommonTable/configs/tableConfig.ts

@@ -550,6 +550,12 @@ export const tableConfig = {
     url: "/api/v1/sys/employeeSkill/users",
     column: [
       {
+        label: "用户名",
+        prop: "userName",
+        search: true,
+        width: "120",
+      },
+      {
         label: "员工编码",
         prop: "employeeCode",
         search: true,
@@ -557,15 +563,10 @@ export const tableConfig = {
       {
         label: "用户id",
         prop: "id",
+        hide : true,
         /*display:false,*/
       },
       {
-        label: "用户名",
-        prop: "userName",
-        search: true,
-        width: "120",
-      },
-      {
         label: "用户电话",
         prop: "phone",
         search: true,

+ 0 - 1
src/components/ExcelView/index.vue

@@ -72,7 +72,6 @@ const resetOb = ref({
   container: "luckysheet", // 设定DOM容器的id
   title: "Luckysheet Demo", // 设定表格名称
   lang: "zh", // 设定表格语言
-  title: false, // 工作簿名称
   enableAddBackTop: true, //返回头部按钮
   userInfo: false, // 右上角的用户信息展示样式
   showinfobar: false, // 是否显示顶部信息栏

+ 10 - 5
src/components/Upload/SingleUpload.vue

@@ -38,13 +38,18 @@ const props = defineProps({
 const emit = defineEmits(["update:modelValue", "finished"]);
 const imgUrl = useVModel(props, "modelValue", emit);
 const photoSource = ref<string>();
-
-watch(
-  () => props.modelValue,
-  (newVal) => {
+/*onMounted(() => {
+  if(imgUrl.value!=null&&imgUrl.value!=''){
     photoSource.value = import.meta.env.VITE_APP_UPLOAD_URL + props.modelValue;
   }
-);
+
+});*/
+watchEffect(() => {
+  /*if (props.modelValue != null && props.modelValue != "") {
+    photoSource.value = import.meta.env.VITE_APP_UPLOAD_URL + props.modelValue;
+  }*/
+  photoSource.value = props.modelValue;
+});
 
 /**
  * 自定义图片上传

+ 1 - 0
src/store/modules/dictionary.ts

@@ -31,6 +31,7 @@ export const useDictionaryStore = defineStore("dictionaryStore", () => {
     "process_check_result",
     "excel_type",
     "excel_states",
+    "process_state",
   ];
   const dicts = ref<{ [key: string]: any[] }>({});
 

+ 1 - 0
src/store/modules/user.ts

@@ -67,6 +67,7 @@ export const useUserStore = defineStore("user", () => {
     return new Promise<void>((resolve, reject) => {
       logoutApi()
         .then(() => {
+          isGetAuth.value = false;
           localStorage.setItem("token", "");
           // location.reload(); // 清空路由
           resolve();

+ 11 - 1
src/views/device/instance/components/device-page.vue

@@ -35,7 +35,14 @@ const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
 const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate } = Utils; //按钮权限等工具
-
+const props = defineProps({
+  deviceType: {
+    type: String,
+    default: () => {
+      return 0;
+    }
+  }
+})
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
 const emit = defineEmits(["deviceInfo"])
 const rowClick = (row)=>{
@@ -129,6 +136,9 @@ option.value = Object.assign(option.value, {
 });
 
 onMounted(() => {
+  if(props.deviceType!=null){
+    search.value.deviceType = props.deviceType;
+  }
   dataList();
 });
 </script>

+ 0 - 2
src/views/device/metering/index.vue

@@ -485,8 +485,6 @@ option.value = Object.assign(option.value, {
         hide: true,
       startPlaceholder: '开始范围',
       endPlaceholder: '结束范围',
-      format: 'YYYY-MM-DD',
-      valueFormat: 'YYYY-MM-DD',
       overHidden: true,
       search: true,
     },

+ 40 - 12
src/views/pro/traceability/components/checkCom.vue

@@ -7,16 +7,22 @@
       v-model="form"
       :data="data"
       :option="option"
+      @row-update="updateRow"
       v-model:page="page"
-    />
-    <!-- <el-collapse accordion>
-      <el-collapse-item
-        :title="item.opName"
-        :name="item.id"
-        v-for="item in data"
-        :key="item.id"
-      />
-    </el-collapse> -->
+    >
+      <template #menu="{ size, row, index }">
+        <el-button
+            v-if="
+            row.checkName!=undefined && row.checkName!=null
+          "
+            type="primary"
+            link
+            size="small"
+            @click="doEdit(row,index)"
+        ><i-ep-edit />编辑
+        </el-button>
+      </template>
+    </avue-crud>
   </div>
 </template>
 <script setup>
@@ -24,7 +30,7 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {useCommonStoreHook, useDictionaryStore, useUserStoreHook} from "@/store";
 
 // 数据字典相关
 const { dicts } = useDictionaryStore();
@@ -48,15 +54,23 @@ const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 
-const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+const crudRef2 = ref(null); //crudRef.value 获取avue-crud对象
 
 const refreshTra = (row) => {
   commonConfig.value.params = { seqNo: row.seqNo };
   dataList();
 };
 defineExpose({ refreshTra });
-onMounted(() => {});
+const userStore = useUserStoreHook();
+onMounted(() => {
+  if(userStore.user.userId===10000){
+    option.value.menu=true;
 
+  }
+});
+const doEdit = (row, index) => {
+  crudRef2.value && crudRef2.value.rowEdit(row, index);
+};
 option.value = Object.assign(option.value, {
   selection: false,
   border: true,
@@ -67,6 +81,9 @@ option.value = Object.assign(option.value, {
   labelWidth: 100,
   addBtn: false,
   menu: false,
+  editBtn : false,
+  viewBtn: false,
+  delBtn: false,
   header: false,
   rowKey: "opId",
   column: [
@@ -79,25 +96,30 @@ option.value = Object.assign(option.value, {
     {
       label: "工序名称",
       prop: "opName",
+      display: false,
     },
     {
       label: "点检项名称",
       prop: "checkName",
       search: false,
+      disabled: true,
     },
     {
       label: "点检项编码",
       prop: "checkCode",
       search: false,
+      disabled: true,
     },
     {
       label: "内容",
       prop: "content",
       search: false,
+      disabled: true,
     },
     {
       label: "结果",
       prop: "result",
+      type: "select",
       dicData: dicts.process_check_result,
       props: {
         label: "dictLabel",
@@ -114,16 +136,19 @@ option.value = Object.assign(option.value, {
       label: "标准值",
       prop: "standard",
       search: false,
+      disabled: true,
     },
     {
       label: "上限值",
       prop: "upper",
       search: false,
+      disabled: true,
     },
     {
       label: "下限值",
       prop: "lower",
       search: false,
+      disabled: true,
     },
     // {
     //   label: "实测值",
@@ -144,6 +169,9 @@ option.value = Object.assign(option.value, {
       label: "录入时间",
       prop: "created",
       search: false,
+      format: 'YYYY-MM-DD HH:mm:ss',
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      type: "datetime",
     },
   ],
 });

+ 91 - 16
src/views/pro/traceability/components/equitCom.vue

@@ -8,15 +8,30 @@
       :data="data"
       :option="option"
       v-model:page="page"
-    />
-    <!-- <el-collapse accordion>
-      <el-collapse-item
-        :title="item.opName"
-        :name="item.id"
-        v-for="item in data"
-        :key="item.id"
-      />
-    </el-collapse> -->
+      @row-update="updateRow"
+    >
+      <template #menu="{ size, row, index }">
+        <el-button
+            v-if="
+            row.equitCode!=undefined && row.equitCode!=null
+          "
+            type="primary"
+            link
+            size="small"
+            @click="doEdit(row,index)"
+        ><i-ep-edit />编辑
+        </el-button>
+      </template>
+    </avue-crud>
+    <el-dialog
+        v-model="dialog.visible"
+        :title="dialog.title"
+        width="850px"
+        @close="dialog.visible = false"
+        :destroy-on-close="true"
+    >
+      <device-page  @deviceInfo="deviceInfo" :deviceType="deviceDetail.equitType"/>
+    </el-dialog>
   </div>
 </template>
 <script setup>
@@ -24,7 +39,7 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {useCommonStoreHook, useDictionaryStore, useUserStoreHook} from "@/store";
 
 // 数据字典相关
 const { dicts } = useDictionaryStore();
@@ -43,19 +58,44 @@ const {
 } = useCrud({
   src: "/api/v1/process/web/traceability/equitRecordInfo",
 });
+const dialog = reactive({
+  title: "设备选择",
+  visible: false,
+});
 const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
   Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 
-const crudRef = ref(null); //crudRef.value 获取avue-crud对象
-
+const crudRef2 = ref(null); //crudRef.value 获取avue-crud对象
+const userStore = useUserStoreHook();
 const refreshTra = (row) => {
   commonConfig.value.params = { seqNo: row.seqNo };
   dataList();
 };
+const deviceDetail = ref({});
+const doEdit = (row, index) => {
+  crudRef2.value && crudRef2.value.rowEdit(row, index);
+  deviceDetail.value = row;
+};
+
+const deviceInfo = (value) => {
+  form.value.equitCode = value.deviceNo;
+  form.value.equitName =value.deviceName;
+  form.value.validDate = value.meteringDate;
+  form.value.equitId = value.id;
+  dialog.visible = false;
+
+
+}
 defineExpose({ refreshTra });
-onMounted(() => {});
+onMounted(() => {
+  if(userStore.user.userId===10000){
+    option.value.menu=true;
+
+  }
+
+});
 
 option.value = Object.assign(option.value, {
   selection: false,
@@ -67,6 +107,9 @@ option.value = Object.assign(option.value, {
   labelWidth: 100,
   addBtn: false,
   menu: false,
+  editBtn : false,
+  viewBtn: false,
+  delBtn: false,
   header: false,
   rowKey: "opId",
   column: [
@@ -79,36 +122,68 @@ option.value = Object.assign(option.value, {
     {
       label: "工序名称",
       prop: "opName",
+      display: false
     },
     {
       label: "设备类型",
       prop: "equitType",
       search: false,
+      disabled: true,
+      type: "select",
+      dicData: dicts.device_type,
+      props: {
+        label: "dictLabel",
+        value: "dictValue",
+      },
+
     },
     {
       label: "精度要求",
       prop: "accuracy",
       search: false,
+      disabled: true,
     },
     {
-      label: "设备有效期",
+      label: "设备编码",
+      prop: "equitCode",
+      search: false,
+      rules: [
+        {
+          required: true,
+          message: "请选择设备编码",
+          trigger: "blur",
+        },
+      ],
+      click: ({ value, column }) => {
+        dialog.visible = true;
+      },
+    },
+    {
+      label: "计量有效期",
       prop: "validDate",
       search: false,
+      disabled: true,
     },
     {
       label: "设备名称",
       prop: "equitName",
       search: false,
+      disabled: true,
     },
     {
-      label: "设备编码",
-      prop: "equitCode",
+      label: "设备id",
+      prop: "equitId",
       search: false,
+      display: false,
+      hide: true,
     },
     {
       label: "录入时间",
       prop: "created",
       search: false,
+      format: 'YYYY-MM-DD HH:mm:ss',
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      type: "datetime",
     },
   ],
 });

+ 45 - 12
src/views/pro/traceability/components/faultCom.vue

@@ -8,15 +8,14 @@
       :data="data"
       :option="option"
       v-model:page="page"
+      @row-update="updateRow"
+    />
+    <CommonTable
+      ref="ctableRef"
+      tableTitle="人员选择"
+      tableType="USERS"
+      @selected-sure="onSelectedFinish"
     />
-    <!-- <el-collapse accordion>
-      <el-collapse-item
-        :title="item.opName"
-        :name="item.id"
-        v-for="item in data"
-        :key="item.id"
-      />
-    </el-collapse> -->
   </div>
 </template>
 <script setup>
@@ -24,7 +23,11 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {
+  useCommonStoreHook,
+  useDictionaryStore,
+  useUserStoreHook,
+} from "@/store";
 
 // 数据字典相关
 const { dicts } = useDictionaryStore();
@@ -54,9 +57,18 @@ const refreshTra = (row) => {
   commonConfig.value.params = { seqNo: row.seqNo };
   dataList();
 };
+const userStore = useUserStoreHook();
+const onSelectedFinish = (selectValue) => {
+  form.value.creator = selectValue.userName;
+};
 defineExpose({ refreshTra });
-onMounted(() => {});
-
+onMounted(() => {
+  if (userStore.user.userId === 10000) {
+    option.value.menu = true;
+    option.value.editBtn = true;
+  }
+});
+const ctableRef = ref(null);
 option.value = Object.assign(option.value, {
   selection: false,
   border: true,
@@ -66,6 +78,8 @@ option.value = Object.assign(option.value, {
   align: "center",
   labelWidth: 100,
   addBtn: false,
+  viewBtn: false,
+  delBtn: false,
   menu: false,
   header: false,
   column: [
@@ -73,6 +87,7 @@ option.value = Object.assign(option.value, {
       label: "冻结状态",
       prop: "state",
       dicData: dicts.escalation_fault_state,
+      display: false,
       props: {
         label: "dictLabel",
         value: "dictValue",
@@ -82,31 +97,49 @@ option.value = Object.assign(option.value, {
       label: "报故人",
       prop: "creator",
       search: false,
+      click: ({ value, column }) => {
+        ctableRef.value.startSelect();
+      },
+      rules: [
+        {
+          required: true,
+          message: "请选择上传人员",
+          trigger: "blur",
+        },
+      ],
     },
     {
       label: "报故工位",
       prop: "stationName",
       search: false,
+      display: false,
     },
     {
       label: "报故时间",
       prop: "created",
       search: false,
+      format: "YYYY-MM-DD HH:mm:ss",
+      valueFormat: "YYYY-MM-DD HH:mm:ss",
+      type: "datetime",
     },
     {
       label: "处理结果",
       prop: "currentState",
       dicData: dicts.fault_current_state,
+      type: "select",
       props: {
         label: "dictLabel",
         value: "dictValue",
       },
+      display: false,
       search: false,
     },
     {
       label: "备注",
-      prop: "standard",
+      prop: "remark",
       search: false,
+      type: "textarea",
+      span: 24,
     },
   ],
 });

+ 55 - 18
src/views/pro/traceability/components/materialsCom.vue

@@ -5,18 +5,30 @@
       ref="crudRef2"
       v-model:search="search"
       v-model="form"
+      @row-update="updateRow"
       :data="data"
       :option="option"
       v-model:page="page"
+    >
+      <template #menu="{ size, row, index }">
+        <el-button
+            v-if="
+            row.itemCode!=undefined && row.itemCode!=null
+          "
+            type="primary"
+            link
+            size="small"
+            @click="doEdit(row,index)"
+        ><i-ep-edit />编辑
+        </el-button>
+      </template>
+    </avue-crud>
+    <CommonTable
+        ref="ctableRef"
+        tableTitle="物料选择"
+        tableType="MARTERIAL"
+        @selected-sure="onSelectedFinish"
     />
-    <!-- <el-collapse accordion>
-      <el-collapse-item
-        :title="item.opName"
-        :name="item.id"
-        v-for="item in data"
-        :key="item.id"
-      />
-    </el-collapse> -->
   </div>
 </template>
 <script setup>
@@ -24,11 +36,11 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {useCommonStoreHook, useDictionaryStore, useUserStoreHook} from "@/store";
 
 // 数据字典相关
 const { dicts } = useDictionaryStore();
-
+const crudRef2 = ref({});
 // 传入一个url,后面不带/
 const {
   form,
@@ -43,20 +55,32 @@ const {
 } = useCrud({
   src: "/api/v1/process/web/traceability/materialsRecordInfo",
 });
+const ctableRef = ref(null);
 const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
   Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
-
+const userStore = useUserStoreHook();
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
-
+const doEdit = (row, index) => {
+  crudRef2.value && crudRef2.value.rowEdit(row, index);
+};
 const refreshTra = (row) => {
   commonConfig.value.params = { seqNo: row.seqNo };
   dataList();
 };
 defineExpose({ refreshTra });
-onMounted(() => {});
+onMounted(() => {
+  if(userStore.user.userId===10000){
+    option.value.menu=true;
 
+  }
+});
+const onSelectedFinish = (selectedValue) => {
+   form.value.itemCode=selectedValue.materialCode;
+   form.value.itemName=selectedValue.materialName;
+   form.value.itemModel=selectedValue.spec;
+};
 option.value = Object.assign(option.value, {
   selection: false,
   border: true,
@@ -66,8 +90,11 @@ option.value = Object.assign(option.value, {
   align: "center",
   labelWidth: 100,
   addBtn: false,
+  delBtn: false,
+  viewBtn: false,
   menu: false,
   header: false,
+  editBtn: false,
   rowKey: 'opId',
   column: [
 	{
@@ -79,30 +106,40 @@ option.value = Object.assign(option.value, {
     {
       label: "工序名称",
       prop: "opName",
+      display: false,
     },
 
     {
       label: "物料名称",
       prop: "itemName",
+      disabled: "true",
     },
     {
       label: "物料规格",
       prop: "itemModel",
+      disabled: "true",
       type: "select",
-      dicData: dicts.workshop_section,
-      props: {
-        label: "dictLabel",
-        value: "dictValue",
-      },
     },
     {
       label: "物料编号",
       prop: "itemCode",
       search: false,
+      click: ({ value, column }) => {
+        ctableRef.value.startSelect();
+      },
+      rules: [
+        {
+          required: true,
+          message: "请选择物料编码",
+          trigger: "blur",
+        },
+      ],
+
     },
     {
       label: "采集编码",
       prop: "itemSeq",
+      display: false,
       search: false,
     },
     {

+ 76 - 21
src/views/pro/traceability/components/mediaCom.vue

@@ -1,6 +1,7 @@
 <!-- 报故记录 -->
 <template>
   <div class="mainContentBox">
+    <img src="" />
     <avue-crud
       ref="crudRef2"
       v-model:search="search"
@@ -8,22 +9,34 @@
       :data="data"
       :option="option"
       v-model:page="page"
+      @row-update="updateRow"
     >
-      <template #menu="{row,index,type}">
-        <el-button @click="openDialog(row)"
-                   icon="el-icon-link"
-                   text
-                   type="primary"
-        >查看</el-button>
+      <template #menu="{ row, index, type }">
+        <el-button
+          @click="openDialog(row)"
+          icon="el-icon-link"
+          text
+          type="primary"
+          >查看</el-button
+        >
+      </template>
+      <template #filePath-form="scope">
+        <single-upload v-model="form.filePath" />
       </template>
     </avue-crud>
     <el-dialog
-        v-model="dialog.visible"
-        :title="dialog.title"
-        width="60%"
-        @close="dialog.visible = false"
-    ><el-image :src="url" fit="none" />
+      v-model="dialog.visible"
+      :title="dialog.title"
+      width="60%"
+      @close="dialog.visible = false"
+      ><el-image :src="url" fit="none" />
     </el-dialog>
+    <CommonTable
+      ref="ctableRef"
+      tableTitle="人员选择"
+      tableType="USERS"
+      @selected-sure="onSelectedFinish"
+    />
   </div>
 </template>
 <script setup>
@@ -31,15 +44,20 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
-
+import {
+  useCommonStoreHook,
+  useDictionaryStore,
+  useUserStoreHook,
+} from "@/store";
+import SingleUpload from "@/components/Upload/SingleUpload.vue";
+const ctableRef = ref(null);
 // 数据字典相关
 const { dicts } = useDictionaryStore();
 const dialog = reactive({
   title: "图片预览",
   visible: false,
 });
-const url = ref(null)
+const url = ref(null);
 // 传入一个url,后面不带/
 const {
   form,
@@ -60,17 +78,24 @@ const { selectionChange, multipleDelete } = Methords; //选中和批量删除事
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
 
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
-const openDialog = (row) =>{
-  dialog.visible = true
-  url.value =  import.meta.env.VITE_APP_UPLOAD_URL + row.filePath
-}
+const openDialog = (row) => {
+  dialog.visible = true;
+  url.value = import.meta.env.VITE_APP_UPLOAD_URL + row.filePath;
+};
 const refreshTra = (row) => {
   commonConfig.value.params = { seqNo: row.seqNo };
   dataList();
 };
+const userStore = useUserStoreHook();
 defineExpose({ refreshTra });
-onMounted(() => {});
-
+onMounted(() => {
+  if (userStore.user.userId === 10000) {
+    option.value.editBtn = true;
+  }
+});
+const onSelectedFinish = (selectValue) => {
+  form.value.creator = selectValue.userName;
+};
 option.value = Object.assign(option.value, {
   selection: false,
   border: true,
@@ -83,23 +108,53 @@ option.value = Object.assign(option.value, {
   menu: true,
   editBtn: false,
   delBtn: false,
-  viewBtn:false,
+  viewBtn: false,
   header: false,
   column: [
     {
       label: "上传工序",
       prop: "operationName",
       search: false,
+      display: false,
     },
     {
       label: "上传人员",
       prop: "creator",
+      span: 16,
       search: false,
+      click: ({ value, column }) => {
+        ctableRef.value.startSelect();
+      },
+      rules: [
+        {
+          required: true,
+          message: "请选择上传人员",
+          trigger: "blur",
+        },
+      ],
     },
     {
       label: "上传时间",
       prop: "created",
       search: false,
+      span: 16,
+      format: "YYYY-MM-DD HH:mm:ss",
+      valueFormat: "YYYY-MM-DD HH:mm:ss",
+      type: "datetime",
+    },
+    {
+      label: "图片上传",
+      prop: "filePath",
+      span: 16,
+      slot: true,
+      hide: true,
+      rules: [
+        {
+          required: true,
+          message: "请上传图片",
+          trigger: "blur",
+        },
+      ],
     },
   ],
 });

+ 58 - 12
src/views/pro/traceability/components/recordCom.vue

@@ -7,16 +7,22 @@
       v-model="form"
       :data="data"
       :option="option"
+      @row-update="updateRow"
       v-model:page="page"
-    />
-    <!-- <el-collapse accordion>
-      <el-collapse-item
-        :title="item.opName"
-        :name="item.id"
-        v-for="item in data"
-        :key="item.id"
-      />
-    </el-collapse> -->
+    >
+      <template #menu="{ size, row, index }">
+        <el-button
+            v-if="
+            row.label!=undefined && row.label!=null
+          "
+            type="primary"
+            link
+            size="small"
+            @click="doEdit(row,index)"
+        ><i-ep-edit />编辑
+        </el-button>
+      </template>
+    </avue-crud>
   </div>
 </template>
 <script setup>
@@ -24,11 +30,11 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {useCommonStoreHook, useDictionaryStore, useUserStoreHook} from "@/store";
 
 // 数据字典相关
 const { dicts } = useDictionaryStore();
-
+const crudRef2 = ref({});
 // 传入一个url,后面不带/
 const {
   form,
@@ -55,8 +61,16 @@ const refreshTra = (row) => {
   dataList();
 };
 defineExpose({ refreshTra });
-onMounted(() => {});
+const userStore = useUserStoreHook();
+onMounted(() => {
+  if(userStore.user.userId===10000){
+    option.value.menu = true;
+  }
 
+});
+const doEdit = (row, index) => {
+  crudRef2.value && crudRef2.value.rowEdit(row, index);
+};
 option.value = Object.assign(option.value, {
   selection: false,
   border: true,
@@ -66,6 +80,9 @@ option.value = Object.assign(option.value, {
   align: "center",
   labelWidth: 100,
   addBtn: false,
+  delBtn: false,
+  viewBtn: false,
+  editBtn: false,
   menu: false,
   header: false,
   rowKey: "opId",
@@ -79,19 +96,48 @@ option.value = Object.assign(option.value, {
     {
       label: "工序名称",
       prop: "opName",
+      display: false,
     },
     {
       label: "记录项名称",
       prop: "label",
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入记录项名称",
+          trigger: "blur",
+        },
+      ],
     },
     {
       label: "记录项值",
       prop: "inputValue",
+      type: "textarea",
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入记录项值",
+          trigger: "blur",
+        },
+      ],
     },
     {
       label: "录入时间",
       prop: "created",
+      format: 'YYYY-MM-DD HH:mm:ss',
+      valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      type: "datetime",
       search: false,
+      span: 24,
+      rules: [
+        {
+          required: true,
+          message: "请输入录入时间",
+          trigger: "blur",
+        },
+      ],
     },
   ],
 });

+ 60 - 8
src/views/pro/traceability/components/traceabilityCom.vue

@@ -7,8 +7,15 @@
       v-model="form"
       :data="data"
       :option="option"
+      @row-update="updateRow"
       v-model:page="page"
     />
+    <CommonTable
+        ref="userRef"
+        tableTitle="操作人选择"
+        tableType="USERS"
+        @selected-sure="onUserSelectedFinish"
+    />
   </div>
 </template>
 <script setup>
@@ -16,10 +23,11 @@ import { ref, getCurrentInstance } from "vue";
 import { useCrud } from "@/hooks/userCrud";
 import dictDataUtil from "@/common/configs/dictDataUtil";
 import ButtonPermKeys from "@/common/configs/buttonPermission";
-import { useCommonStoreHook, useDictionaryStore } from "@/store";
+import {useCommonStoreHook, useDictionaryStore, useUserStoreHook} from "@/store";
 
 // 数据字典相关
 const { dicts } = useDictionaryStore();
+const userStore = useUserStoreHook();
 
 // 传入一个url,后面不带/
 const {
@@ -35,19 +43,27 @@ const {
 } = useCrud({
   src: "/api/v1/process/info",
 });
-const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+const { dataList,createRow, updateRow, deleteRow, searchChange, resetChange } =
   Methords; //增删改查
 const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
 const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
-
+const onUserSelectedFinish = (selectedValue)=>{
+  form.value.operator = selectedValue.userName;
+}
 const crudRef = ref(null); //crudRef.value 获取avue-crud对象
-
+const userRef = ref(null);
 const refreshTra = (row) => {
   commonConfig.value.params = { seqNo: row.seqNo };
-  dataList();
+    dataList();
 };
 defineExpose({ refreshTra });
-onMounted(() => {});
+onMounted(() => {
+    if(userStore.user.userId===10000){
+        option.value.menu=true;
+        option.value.editBtn=true;
+
+    }
+});
 
 option.value = Object.assign(option.value, {
   selection: false,
@@ -58,16 +74,30 @@ option.value = Object.assign(option.value, {
   align: "center",
   labelWidth: 100,
   addBtn: false,
-  menu: false,
+    delBtn:false,
+    menuWidth:100,
+    editBtn: false,
+    viewBtn:false,
+    menu:false,
   header: false,
   column: [
     {
+      label: "生产过程id",
+      prop: "id",
+      display : false,
+      hide:true,
+      width:120,
+    },
+    {
       label: "工序名称",
       prop: "operationName",
+        editDisplay : false,
+        width:120,
     },
     {
       label: "工段",
       prop: "workSection",
+        editDisplay : false,
       type: "select",
       dicData: dicts.workshop_section,
       props: {
@@ -77,32 +107,54 @@ option.value = Object.assign(option.value, {
     },
     {
       label: "状态",
+        editDisplay : false,
       prop: "currentState",
       search: false,
+      dicData: dicts.process_state,
+      props: {
+        label: "dictLabel",
+        value: "dictValue",
+      },
     },
     {
       label: "开始时间",
       prop: "realStartWhen",
       search: false,
+        format: 'YYYY-MM-DD HH:mm:ss',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        width:160,
+        type:"datetime",
     },
     {
       label: "结束时间",
       prop: "realEndWhen",
       search: false,
+        format: 'YYYY-MM-DD HH:mm:ss',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        width:160,
+        type:"datetime",
     },
     {
       label: "操作人",
-      prop: "creator",
+      prop: "operator",
       search: false,
+      width:100,
+      overHidden:true,
+      click: ({ value, column }) => {
+        userRef.value.startSelect();
+      },
+
     },
     {
       label: "工时(秒)",
       prop: "totalTime",
+        editDisplay : false,
       search: false,
     },
     {
       label: "工步",
       prop: "operationSort",
+        editDisplay : false,
       search: false,
     },
   ],

+ 7 - 0
vite.config.ts

@@ -66,6 +66,13 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
           rewrite: (path) =>
             path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""),
         },
+        "/jgfile": {
+          changeOrigin: true,
+          // 接口地址
+          target: env.VITE_APP_UPLOAD_URL,
+          rewrite: (path) =>
+            path.replace(new RegExp("^" + env.VITE_APP_UPLOAD_URL + "/jgfile")),
+        },
       },
     },
     plugins: [