Jelajahi Sumber

fix:修改admin编辑生产履历的权限

lupeng 11 bulan lalu
induk
melakukan
f59f8eb177

+ 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,

+ 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[] }>({});
 

+ 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",
     },
   ],
 });

+ 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,
     },
     {

+ 23 - 2
src/views/pro/traceability/components/mediaCom.vue

@@ -16,6 +16,9 @@
                    type="primary"
         >查看</el-button>
       </template>
+      <template #filePath-form="scope">
+        <single-upload v-model="form.filePath" />
+      </template>
     </avue-crud>
     <el-dialog
         v-model="dialog.visible"
@@ -31,7 +34,8 @@ 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 { dicts } = useDictionaryStore();
@@ -68,8 +72,14 @@ 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;
+
+  }
+});
 
 option.value = Object.assign(option.value, {
   selection: false,
@@ -90,6 +100,7 @@ option.value = Object.assign(option.value, {
       label: "上传工序",
       prop: "operationName",
       search: false,
+      display: false,
     },
     {
       label: "上传人员",
@@ -100,6 +111,16 @@ 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",
+    },
+    {
+      label: "图纸上传",
+      prop: "filePath",
+      span: 24,
+      slot: true,
+      hide: true,
     },
   ],
 });

+ 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,
     },
   ],