浏览代码

feat(工厂模型): 新增工厂筛选及人员选择模式

- 产线与工位搜索重构为seekPage组件并增加工厂、车间等筛选条件
- 规则管理新增所属工厂选择,班组关联工厂联动
- 工位编辑保存factoryName并在列表展示班组信息
- 自定义表格新增person人员选择模式
yusheng 2 月之前
父节点
当前提交
6e8530f564

+ 131 - 123
src/views/factoryModel/productionLine/components/search.vue

@@ -1,137 +1,145 @@
 <!-- 搜索表单 -->
 <template>
-  <el-form
-    label-width="77px"
-    class="ele-form-search"
-    @keyup.enter.native="search"
-    @submit.native.prevent
-  >
-    <el-row :gutter="15">
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-        <el-form-item label="产线编码:">
-          <el-input clearable v-model.trim="where.code" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-        <el-form-item label="产线名称:">
-          <el-input clearable v-model.trim="where.name" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-        <el-form-item label="所属区域:" prop="location_city">
-          <area-select
-            v-model.trim="where.areaId"
-            :data="areaTreeList"
-            ref="tree"
-          />
-        </el-form-item>
-      </el-col>
-      <!-- <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 5 }">
-        <el-form-item label="组织机构:">
-          <auth-selection v-model.trim="where.deptIds" style="width: 100%"></auth-selection>
-        </el-form-item>
-      </el-col> -->
-      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
-        <div class="ele-form-actions">
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            class="ele-btn-icon"
-            @click="search"
-          >
-            查询
-          </el-button>
-          <el-button @click="reset">重置</el-button>
-        </div>
-      </el-col>
-    </el-row>
-  </el-form>
+  <seekPage :seekList="seekList" @search="search"></seekPage>
 </template>
 
 <script>
-import {basicAreaPageAPI} from "@/api/regionalManage";
-import AreaSelect from "@/views/enterpriseModel/regionalManage/components/area-cascader.vue";
+  import { basicAreaPageAPI } from '@/api/regionalManage';
+  import { getFactoryarea } from '@/api/factoryModel';
+  import work from '@/api/technology/work';
 
-export default {
-  components: {AreaSelect},
-  props: {
-    options_groupId: {
-      type: Array,
-      default() {
-        return [];
+  export default {
+    components: {},
+    props: {
+      options_groupId: {
+        type: Array,
+        default() {
+          return [];
+        }
+      },
+      options_factory: {
+        type: Array,
+        default() {
+          return [];
+        }
       }
     },
-    options_factory: {
-      type: Array,
-      default() {
-        return [];
+    data() {
+      return {
+        areaTreeList: [],
+        factoryList: [],
+        workshopList: [],
+        workCenterList: []
+      };
+    },
+    computed: {
+      seekList() {
+        return [
+          {
+            label: '产线编码:',
+            value: 'code',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '产线名称:',
+            value: 'name',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '所属区域:',
+            value: 'areaId',
+            type: 'selectTree',
+            planList: this.areaTreeList,
+            placeholder: '请选择'
+          },
+          {
+            label: '所属工厂:',
+            value: 'factoryId',
+            type: 'select',
+            planList: this.factoryList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '所属车间:',
+            value: 'workshopId',
+            type: 'select',
+            planList: this.workshopList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '工作中心:',
+            value: 'workCenterId',
+            type: 'select',
+            planList: this.workCenterList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          }
+        ];
       }
-    }
-  },
-  watch: {
-    options_groupId(nval) {
-      this.toTreeData(nval);
-    }
-  },
-  data() {
-    // 默认表单数据
-    const defaultWhere = {
-      code: '',
-      name: ''
-    };
-    return {
-      defaultWhere,
-      // 表单数据
-      where: { ...defaultWhere },
-      options: {
-        groupId: []
-      },
-      areaTreeList:[]
-    };
-  },
-  computed: {
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
-    }
-  },
-  created() {
-    this.getBasicAreaList();
-  },
-  methods: {
-    /* 获取区域集合 */
-    async getBasicAreaList() {
-      this.areaList = await basicAreaPageAPI(
-        {
+    },
+    created() {
+      this.getBasicAreaList();
+      this.getFactoryList();
+      this.getWorkshopList();
+      this.getListWorkCenter();
+    },
+    methods: {
+      /* 获取区域集合 */
+      async getBasicAreaList() {
+        this.areaList = await basicAreaPageAPI({
           pageNum: 1,
           size: 9999
-        }
-      )
-      this.areaTreeList = this.$util.toTreeData({
-        data: this.areaList,
-        idField: 'id',
-        parentIdField: 'parentId'
-      });
+        });
+        this.areaTreeList = this.$util.toTreeData({
+          data: this.areaList,
+          idField: 'id',
+          parentIdField: 'parentId'
+        });
+      },
 
-    },
-    /* 搜索 */
-    search() {
-      this.$emit('search', this.where);
-    },
-    /*  重置 */
-    reset() {
-      console.log(this.defaultWhere);
-      this.where = { ...this.defaultWhere };
-      this.search();
-    },
-    // 格式化公司数据
-    toTreeData(val) {
-      this.options.groupId = this.$util.toTreeData({
-        data: val,
-        idField: 'id',
-        parentIdField: 'parentId'
-      });
+      // 获取工厂列表
+      async getFactoryList() {
+        const { list } = await getFactoryarea({
+          pageNum: 1,
+          size: 999,
+          type: 1,
+          enable: 1
+        });
+        this.factoryList = list || [];
+      },
+
+      // 获取车间列表
+      async getWorkshopList() {
+        const { list } = await getFactoryarea({
+          pageNum: 1,
+          size: 9999,
+          type: 3,
+          enable: 1
+        });
+        this.workshopList = list || [];
+      },
+
+      // 获取工作中心列表
+      async getListWorkCenter() {
+        await work.list({ pageNum: 1, size: -1 }).then((res) => {
+          this.workCenterList = res.list;
+        });
+      },
+
+      /* 搜索 */
+      search(where) {
+        this.$emit('search', where);
+      }
     }
-  }
-};
+  };
 </script>

+ 8 - 3
src/views/factoryModel/station/components/ProductModal.vue

@@ -11,7 +11,11 @@
     :maxable="true"
   >
     <el-card shadow="never">
-      <ProductSearch @search="reload" ref="searchRef" />
+      <ProductSearch
+        @search="reload"
+        ref="searchRef"
+        :factoryName="factoryName"
+      />
 
       <ele-split-layout
         width="244px"
@@ -73,7 +77,7 @@
     data() {
       return {
         visible: false,
-
+        factoryName: '',
         deviceList: [],
 
         // 表格列配置
@@ -287,7 +291,8 @@
           this.title = title;
           this.categoryLevelId = categoryLevelId;
           this.idx = idx;
-
+          console.log(item, 'item');
+          this.factoryName=item.factoryName
           this.current = {
             id: item.categoryId,
             name: item.categoryName,

+ 5 - 1
src/views/factoryModel/station/components/edit.vue

@@ -110,6 +110,7 @@
                   v-for="item in factoryList"
                   :key="item.id"
                   :label="item.name"
+                  @click="form.extInfo.factoryName = item.name"
                   :value="item.id"
                 >
                 </el-option>
@@ -473,6 +474,7 @@
         assetName: '', //设备名称
         meterMeasuringUnit: '', // 节拍计量单位
         workCenterId: null, //所属工作中心
+        factoryName: '',
         // produceId: null, //可执行工序
         type: null,
         teamId: null,
@@ -1020,9 +1022,11 @@
             ...res,
             extInfo: {
               ...baseForm.extInfo,
-              ...res.extInfo
+              ...res.extInfo,
+              factoryName: res.factoryName
             }
           };
+
           // this.form = this.deepCopy(Object.assign({}, this.form, res));
 
           // console.log(this.form, 'this.form1');

+ 168 - 146
src/views/factoryModel/station/components/search.vue

@@ -1,116 +1,19 @@
 <!-- 搜索表单 -->
 <template>
-  <el-form
-    label-width="100px"
-    class="ele-form-search"
-    @keyup.enter.native="search"
-    @submit.native.prevent
-  >
-    <el-row :gutter="15">
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="工位编码:">
-          <el-input clearable v-model.trim="where.code" placeholder="请输入" />
-        </el-form-item>
-        <el-form-item label="所属区域:">
-          <area-select
-            v-model.trim="where.areaId"
-            :data="areaTreeList"
-            ref="tree"
-          />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="工位名称:">
-          <el-input clearable v-model.trim="where.name" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="所属工作中心:" prop="extInfo.workCenterId">
-          <el-select
-            v-model="where.workCenterId"
-            filterable
-            placeholder="请选择"
-            style="width: 100%"
-            clearable
-          >
-            <el-option
-              v-for="item in workCenterList"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="工序:" prop="where.sourceTaskId">
-          <el-select
-            v-model="where.sourceTaskId"
-            filterable
-            placeholder="请选择"
-            style="width: 100%"
-            clearable
-          >
-            <el-option
-              v-for="item in sourceTaskList"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="负责人:">
-          <el-select
-            v-model.trim="where.leaderId"
-            filterable
-            placeholder="请选择"
-            style="width: 100%"
-            clearable
-          >
-            <el-option
-              v-for="item in options.leaderId"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <!-- <el-col v-bind="styleResponsive ? { lg: 5, md: 12 } : { span: 6 }">
-        <el-form-item label="组织机构:">
-          <auth-selection v-model.trim="where.deptIds" style="width: 100%"></auth-selection>
-        </el-form-item>
-      </el-col> -->
-      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
-        <div class="ele-form-actions">
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            class="ele-btn-icon"
-            @click="search"
-          >
-            查询
-          </el-button>
-          <el-button @click="reset">重置</el-button>
-        </div>
-      </el-col>
-    </el-row>
-  </el-form>
+  <seekPage :seekList="seekList" @search="search"></seekPage>
 </template>
 
 <script>
   import { getUserPage } from '@/api/system/organization';
-  import AreaSelect from '@/views/enterpriseModel/regionalManage/components/area-cascader.vue';
   import { basicAreaPageAPI } from '@/api/regionalManage';
   import work from '@/api/technology/work';
   import producetask from '@/api/technology/production';
+  import { getteampage } from '@/api/workforceManagement/team';
+  import {
+    getFactoryarea
+  } from '@/api/factoryModel';
   export default {
-    components: { AreaSelect },
+    components: {},
     props: {
       options_groupId: {
         type: Array,
@@ -125,37 +28,124 @@
         }
       }
     },
-    watch: {
-      options_groupId(nval) {
-        this.toTreeData(nval);
-      }
-    },
     data() {
-      // 默认表单数据
-      const defaultWhere = {
-        code: '',
-        name: '',
-        leaderId: '',
-        workCenterId: '',
-        sourceTaskId: ''
-      };
       return {
-        defaultWhere,
-        // 表单数据
-        where: { ...defaultWhere },
-        options: {
-          groupId: [],
-          leaderId: []
-        },
         workCenterList: [],
         areaTreeList: [],
-        sourceTaskList: []
+        sourceTaskList: [],
+        leaderIdList: [],
+        teamList: [],
+        factoryList: [],
+        workshopPlanList: [],
+        workshopList: []
       };
     },
     computed: {
-      // 是否开启响应式布局
-      styleResponsive() {
-        return this.$store.state.theme.styleResponsive;
+      seekList() {
+        return [
+          {
+            label: '工位编码:',
+            value: 'code',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '所属区域:',
+            value: 'areaId',
+            type: 'selectTree',
+            planList: this.areaTreeList,
+            placeholder: '请选择'
+          },
+          {
+            label: '工位名称:',
+            value: 'name',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '所属工作中心:',
+            value: 'workCenterId',
+            labelWidth: '120px',
+            type: 'select',
+            planList: this.workCenterList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '工序:',
+            value: 'sourceTaskId',
+            type: 'select',
+            planList: this.sourceTaskList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '负责人:',
+            value: 'leaderId',
+            type: 'select',
+            planList: this.leaderIdList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '所属班组:',
+            value: 'teamId',
+            type: 'select',
+            planList: this.teamList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '所属工厂:',
+            value: 'factoryId',
+            type: 'select',
+            planList: this.factoryList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '设备编码:',
+            value: 'assetCode',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '设备名称:',
+            value: 'assetName',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '所属厂房:',
+            value: 'workshopPlanId',
+            type: 'select',
+            planList: this.workshopPlanList.map((item) => ({
+              label: item.workshopPlanName || item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          },
+          {
+            label: '所属车间:',
+            value: 'workshopId',
+            type: 'select',
+            planList: this.workshopList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择'
+          }
+        ];
       }
     },
     created() {
@@ -163,6 +153,10 @@
       this.getBasicAreaList();
       this.getListWorkCenter();
       this.getListProduce();
+      this.getTeamPage();
+      this.getFactoryList();
+      this.getWorkshopPlanList();
+      this.getWorkshopList();
     },
     methods: {
       /* 获取区域集合 */
@@ -186,37 +180,65 @@
 
       getListProduce() {
         producetask.list({ pageNum: 1, size: -1 }).then((res) => {
-          console.log(res.list, '工序列表');
           this.sourceTaskList = res.list || [];
         });
       },
 
       /* 搜索 */
-      search() {
-        this.$emit('search', this.where);
-      },
-      /*  重置 */
-      reset() {
-        console.log(this.defaultWhere);
-        this.where = { ...this.defaultWhere };
-        this.search();
-      },
-      // 格式化公司数据
-      toTreeData(val) {
-        this.options.groupId = this.$util.toTreeData({
-          data: val,
-          idField: 'id',
-          parentIdField: 'parentId'
-        });
+      search(where) {
+        this.$emit('search', where);
       },
+
       // 获取人员
       getUserPage() {
         let par = {
           size: 999
         };
         getUserPage(par).then((res) => {
-          console.log(res);
-          this.options.leaderId = res.list;
+          this.leaderIdList = res.list;
+        });
+      },
+      // 获取班组
+      getTeamPage() {
+        let param = {
+          pageNum: 1,
+          size: 9999
+        };
+        getteampage(param).then((res) => {
+          this.teamList = res.list || [];
+        });
+      },
+      // 获取工厂列表
+      getFactoryList() {
+        getFactoryarea({
+          pageNum: 1,
+          size: 999,
+          type: 1,
+          enable: 1
+        }).then((res) => {
+          this.factoryList = res.list || [];
+        });
+      },
+      // 获取厂房列表
+      getWorkshopPlanList() {
+        getFactoryarea({
+          pageNum: 1,
+          size: 9999,
+          type: 2,
+          enable: 1
+        }).then((res) => {
+          this.workshopPlanList = res.list || [];
+        });
+      },
+      // 获取车间列表
+      getWorkshopList() {
+        getFactoryarea({
+          pageNum: 1,
+          size: 9999,
+          type: 3,
+          enable: 1
+        }).then((res) => {
+          this.workshopList = res.list || [];
         });
       }
     }

+ 4 - 0
src/views/factoryModel/station/index.vue

@@ -141,6 +141,10 @@
             label: '所属区域',
             prop: 'areaName'
           },
+          {
+            label: '所属班组',
+            prop: 'teamName'
+          },
 
           {
             label: '所属工厂',

+ 18 - 3
src/views/rulesManagement/components/MaterialAdd.vue

@@ -30,7 +30,11 @@
 
         <!-- 数据表格 -->
         <template v-slot:content>
-          <ProductSearch @search="reload" ref="searchRef" />
+          <ProductSearch
+            @search="reload"
+            ref="searchRef"
+            :factoryName="factoryName"
+          />
           <ele-pro-table
             height="400"
             ref="table"
@@ -110,6 +114,9 @@
           label: 'name'
         },
         type: null,
+        factoryId: '',
+        factoryName: '',
+
         // 表格选中数据
         selection: [],
         processData: [],
@@ -314,6 +321,11 @@
                 label: '固资编码',
                 prop: 'fixCode'
               },
+              {
+                label: '所属工厂',
+                prop: 'factoryName'
+              },
+
               {
                 label: '使用人',
                 prop: 'usePerson'
@@ -384,13 +396,14 @@
           pageNum: page,
           size: limit,
           categoryLevelId: this.categoryLevelId,
-          rootCategoryLevelId: this.rootId
+          rootCategoryLevelId: this.rootId,
+          factoryId: this.factoryId||''
         });
         console.log('res---------', res);
         this.categoryId = res.list[0]?.categoryId;
         return res;
       },
-      open(ruleIdList, ruleIdListIndex) {
+      open(ruleIdList, ruleIdListIndex, factoryId,factoryName) {
         let list = ruleIdList
           .map((item) => {
             return item.equipmentList;
@@ -403,6 +416,8 @@
         }
         this.ruleIdListIndex = ruleIdListIndex;
         this.visible = true;
+        this.factoryId = factoryId;
+        this.factoryName = factoryName;
         this.getTreeData();
       },
 

+ 22 - 2
src/views/rulesManagement/components/product-search.vue

@@ -14,13 +14,21 @@
       </el-col>
       <el-col v-bind="styleResponsive ? { md: 8 } : { span: 8 }">
         <el-form-item label="编号">
-          <el-input clearable v-model.trim="where.codeNumber" placeholder="请输入" />
+          <el-input
+            clearable
+            v-model.trim="where.codeNumber"
+            placeholder="请输入"
+          />
         </el-form-item>
       </el-col>
 
       <el-col v-bind="styleResponsive ? { md: 8 } : { span: 8 }">
         <el-form-item label="固资编码">
-          <el-input clearable v-model.trim="where.fixCode" placeholder="请输入" />
+          <el-input
+            clearable
+            v-model.trim="where.fixCode"
+            placeholder="请输入"
+          />
         </el-form-item>
       </el-col>
     </el-row>
@@ -43,6 +51,15 @@
           <DeptSelect v-model="where.postId" />
         </el-form-item>
       </el-col>
+      <el-col
+        v-bind="styleResponsive ? { md: 8 } : { span: 8 }"
+        v-if="factoryName"
+      >
+        <el-form-item label="所属工厂">
+          <el-input disabled :value="factoryName" />
+        </el-form-item>
+      </el-col>
+
       <el-col v-bind="styleResponsive ? { md: 8 } : { span: 8 }">
         <div class="ele-form-actions">
           <el-button
@@ -86,6 +103,9 @@
         treeData: []
       };
     },
+    props: {
+      factoryName: ''
+    },
     computed: {
       // 是否开启响应式布局
       styleResponsive() {

+ 78 - 9
src/views/rulesManagement/components/programRulesDialog.vue

@@ -84,6 +84,29 @@
           </el-form-item>
         </el-col>
 
+        <el-col
+          :span="8"
+          v-if="dispatchType && !dialogTitle.includes('量具送检')"
+        >
+          <el-form-item label="所属工厂" prop="factoryId">
+            <el-select
+              v-model="addForm.factoryId"
+              :disabled="isBindPlan"
+              size="small"
+              @change="factoryChange"
+              style="width: 100%"
+              clearable
+            >
+              <el-option
+                :value="item.id"
+                :label="item.name"
+                v-for="item in factoryList"
+                :key="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+
         <el-col
           :span="8"
           v-if="
@@ -95,11 +118,10 @@
           <el-form-item label="班组" prop="teamId">
             <el-select
               v-model="addForm.teamId"
-              :disabled="isBindPlan"
+              :disabled="isBindPlan || !addForm.factoryId"
               size="small"
               @change="teamChange"
               :key="'teamId'"
-
               style="width: 100%"
             >
               <el-option
@@ -498,6 +520,7 @@
     getByTaskId
   } from '@/api/material/BOM';
   import { getteampage } from '@/api/workforceManagement/team';
+  import { getFactoryarea } from '@/api/factoryModel';
 
   import { getFile } from '@/api/system/file';
   import { deepClone } from 'ele-admin/lib/utils/core';
@@ -605,6 +628,10 @@
           urgent: [
             { required: true, message: '请选择紧急程度', trigger: 'change' }
           ],
+          factoryId: [
+            { required: true, message: '请选择所属工厂', trigger: 'change' }
+          ],
+
           type: [{ required: true, message: '请选择', trigger: 'change' }]
         },
 
@@ -698,7 +725,8 @@
         hasCategoryId: false,
         getByIdData: {},
         modelType: '',
-        teamAllList: []
+        teamAllList: [],
+        factoryList: []
       };
     },
     computed: {
@@ -734,6 +762,7 @@
       }
     },
     mounted() {
+      this.getFactoryList();
       this.getAllTeamList();
       this.getUserList({ groupId: '1' });
     },
@@ -765,7 +794,8 @@
             remark: '', // 备注
             urgent: '1',
             teamId: '', // 班组id
-            executeUsers: [] // 执行人
+            executeUsers: [], // 执行人
+            factoryId: '' // 所属工厂id
           };
           this.ruleIdList = [];
           this.isBindPlan = false;
@@ -773,13 +803,17 @@
           //   this.matterRulesList = [];
         }
       },
-      async getAllTeamList() {
-        const { list } = await getteampage({
+      async getAllTeamList(factoryId) {
+        const params = {
           pageNum: 1,
           size: -1
-        });
+        };
+        if (factoryId) {
+          params.factoryId = factoryId;
+        }
+        const { list } = await getteampage(params);
         console.log('teamAllList 班组', list);
-        this.teamAllList = list;
+        this.teamAllList = list || [];
       },
       teamChange() {
         console.log('this.addForm.teamId', this.addForm.teamId);
@@ -810,6 +844,33 @@
 
         this.$forceUpdate();
       },
+      // 获取工厂列表
+      async getFactoryList() {
+        const { list } = await getFactoryarea({
+          pageNum: 1,
+          size: 9999,
+          type: 1,
+          enable: 1
+        });
+        this.factoryList = list || [];
+      },
+      // 工厂切换
+      factoryChange(factoryId) {
+        // 清空班组
+        this.$set(this.addForm, 'teamId', '');
+        this.$set(this.addForm, 'executeUsers', []);
+        this.teamAllList = [];
+        // 清空设备列表
+        if (this.ruleIdList && this.ruleIdList.length > 0) {
+          this.ruleIdList.forEach((item) => {
+            item.equipmentList = [];
+          });
+        }
+        // 重新获取班组列表(带工厂ID)
+        if (factoryId) {
+          this.getAllTeamList(factoryId);
+        }
+      },
       ruleChange(item) {
         this.ruleObj.name = item.name;
         this.ruleObj.code = item.code;
@@ -1191,7 +1252,15 @@
       },
 
       handleAdd(ruleIdList, ruleIdListIndex) {
-        this.$refs.productRefs.open(ruleIdList, ruleIdListIndex);
+        if (!this.addForm.factoryId) {
+          return this.$message.error('请先选择工厂');
+        }
+        this.$refs.productRefs.open(
+          ruleIdList,
+          ruleIdListIndex,
+          this.addForm.factoryId,
+          this.factoryList.find((item) => item.id == this.addForm.factoryId)?.name
+        );
       },
 
       /* 更新visible */

文件差异内容过多而无法显示
+ 730 - 565
src/views/rulesManagement/releaseRules/components/templateDiv/customTableNew.vue


+ 51 - 15
src/views/technology/productParam/components/product-search.vue

@@ -7,22 +7,49 @@
     @submit.native.prevent
   >
     <el-row :gutter="10">
-      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+      <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
         <el-form-item label="编码">
           <el-input clearable v-model.trim="where.code" placeholder="请输入" />
         </el-form-item>
       </el-col>
-      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+      <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
         <el-form-item label="名称">
           <el-input clearable v-model.trim="where.name" placeholder="请输入" />
         </el-form-item>
       </el-col>
 
-      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+      <el-col v-bind="styleResponsive ? { md: 3 } : { span: 3 }">
         <el-form-item label="型号">
-          <el-input clearable v-model.trim="where.modelType" placeholder="请输入" />
+          <el-input
+            clearable
+            v-model.trim="where.modelType"
+            placeholder="请输入"
+          />
         </el-form-item>
       </el-col>
+      <el-col
+        v-bind="styleResponsive ? { md: 3 } : { span: 3 }"
+        v-if="factoryName"
+      >
+        <el-form-item label="状态">
+          <el-select v-model="where.hasWorkstation">
+            <el-option :value="0" label="未占用"></el-option>
+            <el-option :value="1" label="已占用"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col
+        v-bind="styleResponsive ? { md: 3 } : { span: 3 }"
+        v-if="factoryName"
+      >
+        <el-form-item label="所属工厂">
+          <el-input
+            clearable
+            :value="factoryName"
+            placeholder="请输入"
+            disabled
+        /></el-form-item>
+      </el-col>
       <el-col v-bind="styleResponsive ? { md: 4 } : { md: 4 }">
         <div class="ele-form-actions">
           <el-button
@@ -48,46 +75,55 @@
 </template>
 
 <script>
+  import elSelect from '@/components/FormGenerator/components/render/slots/el-select';
+
   export default {
-    data () {
+    data() {
       // 默认表单数据
       const defaultWhere = {
         name: '',
         code: '',
-        modelType: ''
+        modelType: '',
+        hasWorkstation: 0
       };
       return {
         defaultWhere,
         // 表单数据
         where: { ...defaultWhere },
-        treeData:[]
+        treeData: []
       };
     },
+    props: {
+      factoryName: {
+        type: String,
+        default: ''
+      }
+    },
     computed: {
       // 是否开启响应式布局
-      styleResponsive () {
+      styleResponsive() {
         return this.$store.state.theme.styleResponsive;
       }
     },
-    created() {
-    },
+    created() {},
     methods: {
-
       /* 搜索 */
-      search () {
+      search() {
         if (this.where.appType === 0) {
           this.where.appType = '';
         }
+        if (!this.factoryName) {
+          delete this.where.hasWorkstation;
+        }
         this.$emit('search', this.where);
       },
       /*  重置 */
-      reset () {
+      reset() {
         this.where = { ...this.defaultWhere };
         this.search();
       },
-      reset2 () {
+      reset2() {
         this.where = { ...this.defaultWhere };
-
       }
     }
   };

+ 102 - 116
src/views/workforceManagement/team/components/search.vue

@@ -1,124 +1,92 @@
 <!-- 搜索表单 -->
 <template>
-  <el-form
-    label-width="80px"
-    class="ele-form-search"
-    @keyup.enter.native="search"
-    @submit.native.prevent
-  >
-    <el-row>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="名称:">
-          <el-input clearable v-model.trim="where.name" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="所属工厂:">
-          <el-select
-            style="width: 100%"
-            clearable
-            v-model="where.factoryId"
-            @change="change_factoryId"
-            filterable
-            placeholder="请选择所属工厂"
-          >
-            <el-option
-              v-for="item in factoryList"
-              :label="item.name"
-              :value="item.id"
-              :key="item.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="所属厂房:">
-          <el-select
-            style="width: 100%"
-            clearable
-            v-model="where.workshopPlanId"
-            filterable
-            placeholder="请选择所属厂房"
-          >
-            <el-option
-              v-for="item in workshopPlanList"
-              :label="item.name"
-              :value="item.id"
-              :key="item.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-
-      <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
-        <el-form-item label="工作中心:">
-          <el-select
-            style="width: 100%"
-            clearable
-            v-model="where.workCenterId"
-            filterable
-            placeholder="请选择工作中心"
-          >
-            <el-option
-              v-for="item in workCenterList"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-col>
-
-      <el-col v-bind="styleResponsive ? { lg: 3, md: 6 } : { span: 3 }">
-        <div class="ele-form-actions">
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            class="ele-btn-icon"
-            @click="search"
-          >
-            查询
-          </el-button>
-          <el-button @click="reset">重置</el-button>
-        </div>
-      </el-col>
-    </el-row>
-  </el-form>
+  <seekPage ref="seekPageRef" :seekList="seekList" :formLength="4" @search="search"></seekPage>
 </template>
 
 <script>
   import { getFactoryarea } from '@/api/factoryModel';
   import work from '@/api/technology/work';
+  import { getUserPage } from '@/api/system/organization';
   export default {
     data() {
-      // 默认表单数据
-      const defaultWhere = {
-        name: '',
-        factoryId: '',
-        workshopPlanId: '',
-        workCenterId: ''
-      };
       return {
-        // 表单数据
-        where: { ...defaultWhere },
-
         factoryList: [],
         workshopPlanList: [],
-        workCenterList: []
+        workCenterList: [],
+        leaderList: []
       };
     },
-
+    computed: {
+      seekList() {
+        return [
+          {
+            label: '名称:',
+            value: 'name',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '编码:',
+            value: 'code',
+            type: 'input',
+            placeholder: '请输入'
+          },
+          {
+            label: '所属工厂:',
+            value: 'factoryId',
+            type: 'select',
+            planList: this.factoryList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择所属工厂'
+          },
+          {
+            label: '所属厂房:',
+            value: 'workshopPlanId',
+            type: 'select',
+            planList: this.workshopPlanList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择所属厂房'
+          },
+          {
+            label: '工作中心:',
+            value: 'workCenterId',
+            type: 'select',
+            planList: this.workCenterList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择工作中心'
+          },
+          {
+            label: '班组长:',
+            value: 'leaderUserId',
+            type: 'select',
+            planList: this.leaderList.map((item) => ({
+              label: item.name,
+              value: item.id
+            })),
+            placeholder: '请选择班组长'
+          }
+        ];
+      }
+    },
+    watch: {
+      factoryList: {
+        handler() {
+          this.$nextTick(() => {
+            this.watchFactoryChange();
+          });
+        }
+      }
+    },
     created() {
       this.getFactoryList();
       this.getListWorkCenter();
-    },
-    computed: {
-      // 是否开启响应式布局
-      styleResponsive() {
-        return this.$store.state.theme.styleResponsive;
-      }
+      this.getLeaderList();
     },
     methods: {
       async getFactoryList() {
@@ -130,18 +98,34 @@
         this.factoryList = list || [];
       },
 
+      // 监听工厂切换
+      watchFactoryChange() {
+        if (!this.$refs.seekPageRef) return;
+        const seekPage = this.$refs.seekPageRef;
+        if (!seekPage._watcherFactoryId) {
+          seekPage._watcherFactoryId = this.$watch(
+            () => seekPage.defaultWhere.factoryId,
+            (newVal) => {
+              if (newVal) {
+                this.change_factoryId(newVal);
+              } else {
+                this.workshopPlanList = [];
+              }
+            }
+          );
+        }
+      },
+
       // 获取厂房
-      change_factoryId() {
-        this.where.workshopPlanId = '';
+      change_factoryId(factoryId) {
         this.workshopPlanList = [];
-
         let par = {
           type: 2,
-          parentId: this.where.factoryId,
+          parentId: factoryId,
           size: 9999
         };
         getFactoryarea(par).then((res) => {
-          this.workshopPlanList = res.list;
+          this.workshopPlanList = res.list || [];
         });
       },
 
@@ -151,14 +135,16 @@
         });
       },
 
-      /* 搜索 */
-      search() {
-        this.$emit('search', this.where);
+      // 获取班组长列表
+      getLeaderList() {
+        getUserPage({ size: 999 }).then((res) => {
+          this.leaderList = res.list || [];
+        });
       },
-      /*  重置 */
-      reset() {
-        this.where = { ...this.defaultWhere };
-        this.search();
+
+      /* 搜索 */
+      search(where) {
+        this.$emit('search', where);
       }
     }
   };

部分文件因为文件数量过多而无法显示