695593266@qq.com 3 روز پیش
والد
کامیت
9d2e75c22c

+ 4 - 12
src/views/factoryModel/station/components/edit.vue

@@ -61,12 +61,8 @@
             </el-form-item>
           </el-col>
 
-          <el-col :span="8">
-            <el-form-item
-              label="设备编码:"
-              prop="extInfo.assetCode"
-              v-if="form.extInfo.type == 1"
-            >
+          <el-col :span="8" v-if="form.extInfo.type == 1">
+            <el-form-item label="设备编码:" prop="extInfo.assetCode">
               <el-input
                 v-model="form.extInfo.assetCode"
                 readonly
@@ -75,12 +71,8 @@
             </el-form-item>
           </el-col>
 
-          <el-col :span="8">
-            <el-form-item
-              label="设备名称:"
-              prop="extInfo.assetName"
-              v-if="form.extInfo.type == 1"
-            >
+          <el-col :span="8" v-if="form.extInfo.type == 1">
+            <el-form-item label="设备名称:" prop="extInfo.assetName">
               <el-input disabled v-model="form.extInfo.assetName" />
             </el-form-item>
           </el-col>

+ 136 - 16
src/views/system/organization/components/staffSelection.vue

@@ -34,8 +34,38 @@
         </el-col>
         <el-col :span="9" class="zw-page-main">
           <el-card>
-            <div class="zw-card-header" slot="header">
+            <div class="zw-card-header staff-header" slot="header">
               <span class="zw-header-title details-title">员工明细 </span>
+              <div class="staff-search">
+                <el-input
+                  v-model.trim="userName"
+                  :placeholder="form.groupId ? '请输入员工姓名' : '请先选择部门'"
+                  clearable
+                  size="small"
+                  prefix-icon="el-icon-search"
+                  class="staff-search-input"
+                  :disabled="!form.groupId"
+                  @keyup.enter.native="searchStaff"
+                  @clear="searchStaff(false)"
+                />
+                <el-button
+                  size="small"
+                  type="primary"
+                  icon="el-icon-search"
+                  :disabled="!form.groupId"
+                  @click="searchStaff"
+                >
+                  查询
+                </el-button>
+                <el-button
+                  size="small"
+                  icon="el-icon-refresh"
+                  :disabled="!form.groupId && !userName"
+                  @click="resetStaffSearch"
+                >
+                  重置
+                </el-button>
+              </div>
             </div>
             <div class="zw-page-main-list">
               <el-container class="zw-container">
@@ -56,7 +86,7 @@
                   </el-table-column>
                   <el-table-column label="工号">
                     <template slot-scope="{ row }">
-                      <div>{{ row.jobNumber }}</div>
+                      <div>{{ getStaffJobNumber(row) }}</div>
                     </template>
                   </el-table-column>
                   <el-table-column width="80" label="操作">
@@ -109,7 +139,7 @@
                   </el-table-column>
                   <el-table-column label="工号">
                     <template slot-scope="{ row }">
-                      <div>{{ row.jobNumber }}</div>
+                      <div>{{ getStaffJobNumber(row) }}</div>
                     </template>
                   </el-table-column>
                   <el-table-column width="80" label="操作">
@@ -136,7 +166,11 @@
   </div>
 </template>
 <script>
-import { listOrganizations, getUserPage } from '@/api/system/organization';
+import {
+  listOrganizations,
+  getUserPage,
+  getUserDetail
+} from '@/api/system/organization';
 export default {
   data() {
     return {
@@ -154,16 +188,55 @@ export default {
       pageNum: 1, //设备当前页数
       size: 10,
       isMore: false,
+      userName: '',
       dialogVisible: false
     };
   },
   created() {},
   methods: {
-    open(selectedList) {
+    async open(selectedList) {
       this.dialogVisible = true;
-      this.selectStafflist = selectedList;
+      this.selectStafflist = await this.normalizeSelectedStaffList(
+        selectedList
+      );
       this.getInfo();
     },
+    getStaffJobNumber(row) {
+      return (
+        row.jobNumber ||
+        row.approverJobNumber ||
+        row.userCode ||
+        row.code ||
+        ''
+      );
+    },
+    async normalizeSelectedStaffList(selectedList) {
+      const list = Array.isArray(selectedList) ? selectedList : [];
+      return Promise.all(
+        list.map(async (item) => {
+          const normalized = {
+            ...item,
+            id: item.id || item.approverId,
+            name: item.name || item.approverName,
+            jobNumber: this.getStaffJobNumber(item)
+          };
+          if (normalized.jobNumber || !normalized.id) {
+            return normalized;
+          }
+          try {
+            const detail = await getUserDetail(normalized.id);
+            return {
+              ...detail,
+              ...normalized,
+              name: normalized.name || detail.name,
+              jobNumber: detail.jobNumber || this.getStaffJobNumber(detail)
+            };
+          } catch (error) {
+            return normalized;
+          }
+        })
+      );
+    },
     //初始数据
     async getInfo() {
       let list = await listOrganizations();
@@ -172,19 +245,53 @@ export default {
         idField: 'id',
         parentIdField: 'parentId'
       });
+      this.$nextTick(() => {
+        this.selectDefaultDepartment();
+      });
       //this.treeList = res.data;
     },
+    selectDefaultDepartment() {
+      const defaultDepartment = this.treeList && this.treeList[0];
+      if (!defaultDepartment) {
+        return;
+      }
+      if (this.$refs.tree) {
+        this.$refs.tree.setCurrentKey(defaultDepartment.id);
+      }
+      this.handleNodeClick(defaultDepartment);
+    },
     //选择分类
     handleNodeClick(data) {
       this.staffList = [];
       this.pageNum = 1;
       this.form.groupId = data.id;
-      let params = {
-        pageNum: 1,
+      this.getStaffList(this.buildStaffParams());
+    },
+    buildStaffParams(pageNum = 1) {
+      return {
+        pageNum,
         size: this.size,
-        groupId: this.form.groupId
+        groupId: this.form.groupId,
+        name: this.userName
       };
-      this.getStaffList(params);
+    },
+    searchStaff(showTip = true) {
+      if (!this.form.groupId) {
+        this.staffList = [];
+        this.pageNum = 1;
+        this.isMore = false;
+        if (showTip) {
+          this.$message.warning('请先选择部门');
+        }
+        return;
+      }
+      this.staffList = [];
+      this.pageNum = 1;
+      this.getStaffList(this.buildStaffParams());
+    },
+    resetStaffSearch() {
+      this.userName = '';
+      this.searchStaff();
     },
     //获取员工列表
     async getStaffList(params) {
@@ -210,12 +317,7 @@ export default {
     //查询更多员工
     async getMore() {
       this.pageNum = this.pageNum + 1;
-      let params = {
-        pageNum: this.pageNum,
-        size: this.size,
-        groupId: this.form.groupId
-      };
-      this.getStaffList(params);
+      this.getStaffList(this.buildStaffParams(this.pageNum));
     },
     //选择员工
     choiceAsset(info) {
@@ -241,6 +343,10 @@ export default {
     handleClose() {
       this.staffList = [];
       this.selectStafflist = [];
+      this.userName = '';
+      this.form.groupId = null;
+      this.pageNum = 1;
+      this.isMore = false;
       this.dialogVisible = false;
     }
   }
@@ -264,6 +370,20 @@ export default {
   line-height: 32px;
   height: 32px;
 }
+.staff-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 32px;
+}
+.staff-search {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+}
+.staff-search-input {
+  width: 180px;
+}
 .zw-page-list-p {
   font-size: 14px;
   margin-bottom: 18px;

+ 177 - 156
src/views/technology/route/components/historyModal.vue

@@ -1,191 +1,212 @@
 <template>
-    <el-dialog title="历史版本" :visible.sync="visible" v-if="visible" :before-close="handleClose" :close-on-click-modal="false"
-        :close-on-press-escape="false" append-to-body width="60%">
-
+  <el-dialog
+    title="历史版本"
+    :visible.sync="visible"
+    v-if="visible"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    width="70%"
+  >
+    <el-form :model="form" label-width="120px">
+      <el-row :gutter="16">
         <el-col :span="8">
-            <el-form-item label="工艺路线编码:">
-                <span> {{ form.code }} </span>
-            </el-form-item>
+          <el-form-item label="工艺路线编码:">
+            <span> {{ form.code }} </span>
+          </el-form-item>
         </el-col>
         <el-col :span="8">
-            <el-form-item label="工艺路线名称:">
-                <span> {{ form.name }} </span>
-            </el-form-item>
+          <el-form-item label="工艺路线名称:">
+            <span> {{ form.name }} </span>
+          </el-form-item>
         </el-col>
-        <el-col :span="8">
-            <el-form-item label="产品编码:">
-                <span> {{ form.categoryCode }} </span>
-            </el-form-item>
+        <!-- <el-col :span="8">
+          <el-form-item label="产品编码:">
+            <span> {{ form.categoryCode }} </span>
+          </el-form-item>
         </el-col>
         <el-col :span="8">
-            <el-form-item label="产品名称:">
-                <span> {{ form.categoryName }} </span>
-            </el-form-item>
-        </el-col>
-
-
-
-        <ele-pro-table ref="table" :columns="columns" :datasource="datasource" height="calc(100vh - 350px)"
-            class="dict-table">
-            <!-- 表头工具栏 -->
-
-            <!-- 状态列 -->
-            <template v-slot:status="{ row }">
-                {{ checkStatus(row) }}
-            </template>
-
-        </ele-pro-table>
-
-
-    </el-dialog>
+          <el-form-item label="产品名称:">
+            <span> {{ form.categoryName }} </span>
+          </el-form-item>
+        </el-col> -->
+      </el-row>
+    </el-form>
+
+    <ele-pro-table
+      ref="table"
+      :columns="columns"
+      :datasource="datasource"
+      height="calc(100vh - 350px)"
+      class="dict-table"
+    >
+      <!-- 表头工具栏 -->
+
+      <!-- 状态列 -->
+      <template v-slot:status="{ row }">
+        {{ checkStatus(row) }}
+      </template>
+
+      <template v-slot:action="{ row }">
+        <el-link type="primary" :underline="false" @click="openDetail(row)">
+          详情
+        </el-link>
+      </template>
+    </ele-pro-table>
+
+    <UserDetail
+      :visible.sync="detailEdit"
+      :data="current"
+      @close="detailEdit = false"
+      ref="UserDetailRef"
+    ></UserDetail>
+  </el-dialog>
 </template>
-  
+
 <script>
-import AssetTree from '@/components/AssetTree';
-import route from '@/api/technology/route';
-export default {
-    components: { AssetTree },
+  import route from '@/api/technology/route';
+  import UserDetail from './user-detail.vue';
+  export default {
+    components: {
+      UserDetail
+    },
     data() {
-        return {
-            visible: false,
-            // 表格列配置
-            columns: [
-                {
-                    columnKey: 'index',
-                    type: 'index',
-                    width: 45,
-                    align: 'center',
-                    reserveSelection: true
-                },
-                {
-                    prop: 'version',
-                    label: '版本',
-                    align: 'center',
-                    showOverflowTooltip: true,
-                    minWidth: 110
-                },
-                {
-                    prop: 'status',
-                    label: '状态',
-                    align: 'center',
-                    slot: 'status',
-                    showOverflowTooltip: true,
-                    minWidth: 110
-                },
-
-                {
-                    prop: 'createTime',
-                    label: '创建日期',
-                    align: 'center',
-                    showOverflowTooltip: true,
-                    minWidth: 110
-                },
-
-                {
-                    prop: 'releaseTime',
-                    label: '发布日期',
-                    align: 'center',
-                    showOverflowTooltip: true,
-                    minWidth: 110
-                },
-
-
-                {
-                    prop: 'downTime',
-                    label: '停用时间',
-                    align: 'center',
-                    showOverflowTooltip: true,
-                    minWidth: 110
-                },
-
-
-
-
-
-
-
-
-
-            ],
-
-            statusList: [
-                { label: '草稿', value: -1 },
-                { label: '失效', value: 0 },
-                { label: '生效', value: 1 }
-            ],
-            form: null
-
-        }
+      return {
+        visible: false,
+        detailEdit: false,
+        current: {},
+        // 表格列配置
+        columns: [
+          {
+            columnKey: 'index',
+            type: 'index',
+            width: 45,
+            align: 'center',
+            reserveSelection: true
+          },
+          {
+            prop: 'version',
+            label: '版本',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'status',
+            label: '状态',
+            align: 'center',
+            slot: 'status',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+
+          {
+            prop: 'createTime',
+            label: '创建日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+
+          {
+            prop: 'releaseTime',
+            label: '发布日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+
+          {
+            prop: 'downTime',
+            label: '停用时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'action',
+            slot: 'action',
+            label: '操作',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          }
+        ],
+
+        statusList: [
+          { label: '草稿', value: -1 },
+          { label: '失效', value: 0 },
+          { label: '生效', value: 1 }
+        ],
+        form: {}
+      };
     },
 
-    watch: {
-
-    },
+    watch: {},
     methods: {
-        /* 表格数据源 */
-        async datasource({ page, limit }) {
-            const res = await route.list({
-                code: this.form.code,
-
-                pageNum: page,
-                size: limit
-            });
-            return res;
-        },
-
-
-        open(item) {
-            if (item) {
-                this.form = item
-            }
-            this.visible = true
-        },
-
-
-        handleClose() {
-            this.visible = false
-            this.form = null
-
-        },
-
-        checkStatus(row) {
-            let obj = this.statusList.find((it) => it.value == row.status);
-            return obj.label;
-        },
-
+      /* 表格数据源 */
+      async datasource({ page, limit }) {
+        const res = await route.list({
+          code: this.form.code,
+
+          pageNum: page,
+          size: limit
+        });
+        return res;
+      },
+
+      open(item) {
+        this.form = item || {};
+        this.visible = true;
+      },
+
+      handleClose() {
+        this.visible = false;
+        this.form = {};
+      },
+
+      openDetail(row) {
+        this.current = row;
+        this.detailEdit = true;
+      },
+
+      checkStatus(row) {
+        let obj = this.statusList.find((it) => it.value == row.status);
+        return obj ? obj.label : '';
+      }
     }
-}
+  };
 </script>
-  
+
 <style lang="scss" scoped>
-.tree_col {
+  .tree_col {
     border: 1px solid #eee;
     padding: 10px 0;
     box-sizing: border-box;
     height: 500px;
     overflow: auto;
-}
+  }
 
-.table_col {
+  .table_col {
     padding-left: 10px;
 
     ::v-deep .el-table th.el-table__cell {
-        background: #f2f2f2;
+      background: #f2f2f2;
     }
-}
+  }
 
-.pagination {
+  .pagination {
     text-align: right;
     padding: 10px 0;
-}
+  }
 
-.btns {
+  .btns {
     text-align: center;
     padding: 10px 0;
-}
+  }
 
-.topsearch {
+  .topsearch {
     margin-bottom: 15px;
-}
+  }
 </style>
-  

+ 1 - 0
src/views/technology/route/components/production/components/user-search.vue

@@ -25,6 +25,7 @@
             placeholder="请选择"
             filterable
             clearable
+            disabled
           >
             <el-option
               v-for="item in factoryList"

+ 4 - 1
src/views/technology/route/components/user-edit.vue

@@ -31,7 +31,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="所属工厂:">
+          <el-form-item label="所属工厂:" prop="factoryId">
             <el-select
               v-model="form.factoryId"
               placeholder="请选择"
@@ -194,6 +194,9 @@
           ],
           produceVersionId: [
             { required: true, message: '请输入工艺类型', trigger: 'blur' }
+          ],
+          factoryId: [
+            { required: true, message: '请选择所属工厂', trigger: 'blur' }
           ]
 
           // routeType: [