jabin 3 年之前
父节点
当前提交
cd64f1c018

+ 179 - 156
src/views/factoryModel/station/components/edit.vue

@@ -10,168 +10,185 @@
     width="1200px"
   >
     <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-      <el-row>
-        <el-col :span="8">
-          <el-form-item label="工位编码:" prop="code">
-            <el-input
-              clearable
-              :maxlength="20"
-              v-model="form.code"
-              placeholder="请输入"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="工位名称:" prop="name">
-            <el-input
-              clearable
-              :maxlength="20"
-              v-model="form.name"
-              placeholder="请输入"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="所属工厂:" prop="extInfo.factoryId">
-            <el-select
-              v-model="form.extInfo.factoryId"
-              placeholder="请选择"
-              @change="change_factoryId"
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item in options_factory"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="所属车间:" prop="parentId">
-            <el-select
-              v-model="form.parentId"
-              placeholder="请选择"
-              style="width: 100%"
-              @change="change_workshop"
-            >
-              <el-option
-                v-for="item in options.workshop"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="所属产线:" prop="parentId">
-            <el-select
-              v-model="form.parentId"
-              placeholder="请选择"
-              style="width: 100%"
-              @change="change_workshop"
-            >
-              <el-option
-                v-for="item in options.workshop"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="负责人部门:" prop="extInfo.principalDep">
-            <ele-tree-select
-              clearable
-              :data="options.principalDep"
-              v-model="form.extInfo.principalDep"
-              valueKey="id"
-              labelKey="name"
-              placeholder="请选择"
-              @change="change_principalDep"
-              default-expand-all
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="负责人:" prop="extInfo.principal">
-            <el-select
-              v-model="form.extInfo.principal"
-              placeholder="请选择"
-              @change="change_principal"
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item in options.principal"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-
-        <el-col :span="8">
-          <el-form-item label="节拍时间:" prop="extInfo.meterTime">
-            <div class="workMeter-warp">
+      <el-card
+        shadow="never"
+        header="基本信息"
+        body-style="padding: 22px 22px 0 22px;"
+      >
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="工位编码:" prop="code">
+              <el-input
+                clearable
+                :maxlength="20"
+                v-model="form.code"
+                placeholder="请输入"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="工位名称:" prop="name">
               <el-input
-                class="s1"
                 clearable
                 :maxlength="20"
-                v-model="form.extInfo.meterTime"
+                v-model="form.name"
                 placeholder="请输入"
               />
-              <el-select class="s2" v-model="form.enabled" placeholder="请选择">
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="所属工厂:" prop="extInfo.factoryId">
+              <el-select
+                v-model="form.extInfo.factoryId"
+                placeholder="请选择"
+                @change="change_factoryId"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in options_factory"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="所属车间:" prop="extInfo.workshopId">
+              <el-select
+                v-model="form.workshopId"
+                placeholder="请选择"
+                style="width: 100%"
+                @change="change_workshop"
+              >
+                <el-option
+                  v-for="item in options.workshopId"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="所属产线:" prop="parentId">
+              <el-select
+                v-model="form.productionLineId"
+                placeholder="请选择"
+                style="width: 100%"
+                @change="change_productionLineId"
+              >
                 <el-option
-                  v-for="item in options.meterTimeUnit"
+                  v-for="item in options.productionLine"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="负责人部门:" prop="extInfo.principalDep">
+              <ele-tree-select
+                clearable
+                :data="options.principalDep"
+                v-model="form.extInfo.principalDep"
+                valueKey="id"
+                labelKey="name"
+                placeholder="请选择"
+                @change="change_principalDep"
+                default-expand-all
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="负责人:" prop="extInfo.principal">
+              <el-select
+                v-model="form.leaderId"
+                placeholder="请选择"
+                @change="change_principal"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in options.principal"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="8">
+            <el-form-item label="节拍时间:" prop="extInfo.meterTime">
+              <div class="workMeter-warp">
+                <el-input
+                  class="s1"
+                  clearable
+                  :maxlength="20"
+                  v-model="form.extInfo.meterTime"
+                  placeholder="请输入"
+                />
+                <el-select
+                  class="s2"
+                  v-model="form.enabled"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in options.meterTimeUnit"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+                <span class="s3">/次</span>
+              </div>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="8">
+            <el-form-item label="状态:" prop="enabled">
+              <el-select
+                v-model="form.enabled"
+                placeholder="请选择"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in options.enabled"
                   :key="item.value"
                   :label="item.label"
                   :value="item.value"
                 >
                 </el-option>
               </el-select>
-              <span class="s3">/次</span>
-            </div>
-          </el-form-item>
-        </el-col>
+            </el-form-item>
+          </el-col>
 
-        <el-col :span="8">
-          <el-form-item label="状态:" prop="enabled">
-            <el-select
-              v-model="form.enabled"
-              placeholder="请选择"
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item in options.enabled"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-
-        <el-col :span="24">
-          <el-form-item label="备注:" prop="remark">
-            <el-input
-              clearable
-              :maxlength="100"
-              type="textarea"
-              v-model="form.remark"
-              placeholder="请输入"
-            />
-          </el-form-item>
-        </el-col>
-      </el-row>
+          <el-col :span="24">
+            <el-form-item label="备注:" prop="remark">
+              <el-input
+                clearable
+                :maxlength="100"
+                type="textarea"
+                v-model="form.remark"
+                placeholder="请输入"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-card>
+      <el-card
+        shadow="never"
+        header="关联设备"
+        body-style="padding: 22px 22px 0 22px;"
+      >
+        <equipmentTable ref="equipmentTable"></equipmentTable>
+      </el-card>
     </el-form>
     <template v-slot:footer>
       <el-button @click="handleClose">取消</el-button>
@@ -185,7 +202,11 @@
 <script>
 import { listWorkshopByParentId } from '@/api/factoryModel';
 import { getUserPage } from '@/api/system/organization';
+import equipmentTable from './equipmentTable.vue';
 export default {
+  components: {
+    equipmentTable
+  },
   props: {
     options_groupId: {
       type: Array,
@@ -211,14 +232,13 @@ export default {
       code: '',
       name: '',
       extInfo: {
-        factoryId: '',
-        principal: '', // 负责人
+        factoryId: '', // 工厂
+        workshopId: '', // 车间
         principalDep: '', // 负责人部门
-        locationDetail: '', // 详细地址
-        location: [], // 省市区
         meterTimeUnit: '时', // 节拍时间单位
         meterTime: '' // 节拍时间
       },
+      leaderId: '', // 负责人
       enabled: 1,
       productionLineId: '',
       remark: ''
@@ -251,7 +271,7 @@ export default {
       options: {
         principalDep: [],
         principal: [],
-        workshop: [],
+        workshopId: [],
         enabled: [
           {
             label: '生效',
@@ -279,7 +299,8 @@ export default {
             value: '日',
             label: '日'
           }
-        ]
+        ],
+        productionLine: []
       }
     };
   },
@@ -402,7 +423,9 @@ export default {
         (n) => n.id == this.form.extInfo.principal
       );
       this.form.extInfo.phone = result.phone;
-    }
+    },
+    // 选择产线
+    change_productionLineId() {}
   }
 };
 </script>

+ 159 - 0
src/views/factoryModel/station/components/equipmentTable.vue

@@ -0,0 +1,159 @@
+<template>
+  <div>
+    <ele-pro-table
+      ref="table"
+      :needPage="false"
+      :columns="columns"
+      :datasource="datasource"
+      cache-key="systemRoleTable"
+    >
+      <!-- 表头工具栏 -->
+      <template v-slot:toolbar>
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-plus"
+          class="ele-btn-icon"
+          @click="handlAdd"
+        >
+          新增
+        </el-button>
+      </template>
+      <!-- 操作列 -->
+      <template v-slot:action="{ row }">
+        <el-popconfirm
+          class="ele-action"
+          title="确定要删除此角色吗?"
+          @confirm="remove(row)"
+        >
+          <template v-slot:reference>
+            <el-link type="danger" :underline="false" icon="el-icon-delete">
+              删除
+            </el-link>
+          </template>
+        </el-popconfirm>
+
+        <el-link :underline="false" v-if="row.isLeader"> 已设为班组长 </el-link>
+        <el-link
+          type="primary"
+          :underline="false"
+          v-else
+          @click="setLeader(row)"
+        >
+          设为班组长
+        </el-link>
+      </template>
+    </ele-pro-table>
+    <staffSelection
+      ref="staffSelection"
+      @confirm="confirmStaffSelection"
+    ></staffSelection>
+  </div>
+</template>
+<script>
+import staffSelection from './staffSelection.vue';
+export default {
+  components: {
+    staffSelection
+  },
+  data() {
+    return {
+      columns: [
+        {
+          width: 45,
+          type: 'index',
+          columnKey: 'index',
+          align: 'center'
+        },
+        {
+          prop: 'name',
+          label: '姓名'
+        },
+        {
+          prop: 'jobNumber',
+          label: '工号'
+        },
+        {
+          prop: 'phone',
+          label: '电话'
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 220,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true
+        }
+      ],
+      datasource: []
+    };
+  },
+  methods: {
+    remove(row) {
+      let index = this.datasource.findIndex((n) => n.id == row.id);
+      if (index !== -1) {
+        this.datasource.splice(index, 1);
+      }
+    },
+    handlAdd() {
+      this.$refs.staffSelection.open(
+        JSON.parse(JSON.stringify(this.datasource))
+      );
+    },
+    confirmStaffSelection(data) {
+      data.forEach((element) => {
+        if (!('isLeader' in element)) {
+          // isLeader 是否为班组长
+          element.isLeader = false;
+        }
+      });
+      this.datasource = data;
+      this.setDefaultLeader();
+    },
+    // 设置默认班组长
+    setDefaultLeader() {
+      if (this.datasource.length <= 0) {
+        return;
+      }
+      let result = this.datasource.find((n) => n.isLeader == true);
+      if (!result) {
+        this.datasource[0].isLeader = true;
+      }
+    },
+    // 设置班组长
+    setLeader(row) {
+      console.log(row);
+      this.datasource.forEach((n) => {
+        n.isLeader = false;
+      });
+      row.isLeader = true;
+    },
+    // 设置班组长(id)
+    setLeaderId(id) {
+      let result = this.datasource.find((n) => id == n.id);
+
+      if (result) {
+        this.datasource.forEach((n) => {
+          n.isLeader = false;
+        });
+        result.isLeader = true;
+      }
+    },
+    // 清空表格
+    restTable() {
+      this.datasource = [];
+    },
+    // 获取班组长id
+    getTwi() {
+      let result = this.datasource.find((n) => n.isLeader == true);
+      if (result) {
+        return result.id;
+      } else {
+        return null;
+      }
+    }
+  }
+};
+</script>

+ 340 - 0
src/views/factoryModel/station/components/staffSelection.vue

@@ -0,0 +1,340 @@
+<template>
+  <div class="container">
+    <!-- 单据弹窗 -->
+    <el-dialog
+      title="员工"
+      :before-close="handleClose"
+      :visible.sync="dialogVisible"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      width="80%"
+    >
+      <el-row class="zw-page">
+        <el-col :span="6" class="zw-page-left">
+          <el-card>
+            <div class="zw-card-header" slot="header">
+              <span class="zw-header-title details-title">分类</span>
+            </div>
+            <div class="zw-page-left-tree">
+              <el-container class="zw-container">
+                <el-tree
+                  ref="tree"
+                  :data="treeList"
+                  highlight-current
+                  node-key="id"
+                  :props="{ label: 'name' }"
+                  :expand-on-click-node="false"
+                  :default-expand-all="true"
+                  @node-click="handleNodeClick"
+                >
+                </el-tree>
+              </el-container>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="9" class="zw-page-main">
+          <el-card>
+            <div class="zw-card-header" slot="header">
+              <span class="zw-header-title details-title">设备列表</span>
+            </div>
+            <div class="zw-page-main-list">
+              <el-container class="zw-container">
+                <el-table
+                  :data="staffList"
+                  tooltip-effect="dark"
+                  style="width: 100%"
+                  :header-cell-style="{
+                    background: '#F0F3F3',
+                    border: 'none'
+                  }"
+                >
+                  <el-table-column prop="code" label="姓名">
+                    <template slot-scope="{ row }">
+                      <div>{{ row.name }}</div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="工号">
+                    <template slot-scope="{ row }">
+                      <div>{{ row.jobNumber }}</div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column width="80" label="操作">
+                    <template slot-scope="{ row }">
+                      <el-button
+                        size="mini"
+                        type="primary"
+                        @click="choiceAsset(row)"
+                        :disabled="row.disabled"
+                        icon="el-icon-arrow-right"
+                        circle
+                      >
+                      </el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+                <div
+                  v-if="staffList.length !== 0 && isMore"
+                  class="zw-page-list-more"
+                >
+                  <el-link @click="getMore(page)" type="primary"
+                    >更多<i class="el-icon-caret-bottom"></i>
+                  </el-link>
+                </div>
+              </el-container>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="9" class="zw-page-right">
+          <el-card>
+            <div class="zw-card-header" slot="header">
+              <span class="zw-header-title">已选设备</span>
+            </div>
+            <div class="zw-page-right-list">
+              <el-container class="zw-container">
+                <el-table
+                  :data="selectStafflist"
+                  tooltip-effect="dark"
+                  style="width: 100%"
+                  :header-cell-style="{
+                    background: '#F0F3F3',
+                    border: 'none'
+                  }"
+                >
+                  <el-table-column prop="code" label="姓名">
+                    <template slot-scope="{ row }">
+                      <div>{{ row.name }}</div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="工号">
+                    <template slot-scope="{ row }">
+                      <div>{{ row.jobNumber }}</div>
+                    </template>
+                  </el-table-column>
+                  <el-table-column width="80" label="操作">
+                    <template slot-scope="scope">
+                      <el-button
+                        @click="deleteSelectStaff(scope.row, scope.$index)"
+                        size="mini"
+                        type="danger"
+                        >删除
+                      </el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-container>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+      <div slot="footer" class="dialog-footer">
+        <el-button size="small" @click="handleClose">关 闭</el-button>
+        <el-button size="small" @click="sumbit" type="primary">确 认</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+  <script>
+import { listOrganizations, getUserPage } from '@/api/system/organization';
+import { getAssetList } from '@/api/ledgerAssets';
+import { getTreeByType } from '@/api/classifyManage';
+export default {
+  data() {
+    return {
+      form: {
+        groupId: null
+      },
+      treeList: [],
+      staffList: [],
+      selectStafflist: [], //已选员工
+      defaultProps: {
+        children: 'children',
+        label: 'name',
+        value: 'code'
+      },
+      pageNum: 1, //设备当前页数
+      size: 10,
+      isMore: false,
+      dialogVisible: false
+    };
+  },
+  created() {},
+  methods: {
+    open(selectedList) {
+      this.dialogVisible = true;
+      this.selectStafflist = selectedList;
+      this.getInfo();
+    },
+    //初始数据
+    async getInfo() {
+      let res = await getTreeByType(1);
+      this.treeList = this.$util.toTreeData({
+        data: res.data,
+        idField: 'id',
+        parentIdField: 'parentId'
+      });
+      //this.treeList = res.data;
+    },
+    //选择分类
+    handleNodeClick(data) {
+      this.staffList = [];
+
+      this.form.groupId = data.id;
+      let params = {
+        pageNum: 1,
+        size: this.size,
+        groupId: this.form.groupId
+      };
+      this.getStaffList(params);
+    },
+    //获取员工列表
+    async getStaffList(params) {
+      let res = await getAssetList(params);
+      let list = res.list;
+      if (list.length < res.count) {
+        this.isMore = true;
+      } else {
+        this.isMore = false;
+      }
+      list.forEach((el) => {
+        let _index = this.selectStafflist.findIndex((n) => n.id == el.id);
+        if (_index !== -1) {
+          el.disabled = true;
+        } else {
+          el.disabled = false;
+        }
+      });
+      this.staffList = [...this.staffList, ...list];
+      this.pageNum = res.pageNum;
+    },
+    //查询更多员工
+    async getMore() {
+      this.pageNum += 1;
+      let params = {
+        pageNum: 1,
+        size: this.size,
+        groupId: this.form.groupId
+      };
+      this.getStaffList(params);
+    },
+    //选择员工
+    choiceAsset(info) {
+      let data = JSON.parse(JSON.stringify(info));
+      if (info.teamId) {
+        this.$confirm('当前员工已有所属班组, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+          .then(() => {
+            this.selectStafflist.push(data);
+            info.disabled = true;
+          })
+          .catch(() => {});
+      } else {
+        this.selectStafflist.push(data);
+        info.disabled = true;
+      }
+    },
+    //删除已选员工
+    deleteSelectStaff(info, index) {
+      this.staffList.forEach((el) => {
+        if (el.id == info.id) {
+          el.disabled = false;
+        }
+      });
+      this.selectStafflist.splice(index, 1);
+    },
+    //保存
+    sumbit() {
+      if (this.selectStafflist.length === 0) {
+        this.$message.warning('请选择员工');
+      } else {
+        this.$emit('confirm', JSON.parse(JSON.stringify(this.selectStafflist)));
+        this.handleClose();
+      }
+    },
+    handleClose() {
+      this.staffList = [];
+      this.selectStafflist = [];
+      this.dialogVisible = false;
+    }
+  }
+};
+</script>
+  
+  <style lang='scss' scoped>
+.container {
+  padding: 10px 0;
+}
+.zw-container {
+  height: 500px;
+}
+.zw-header-title {
+  display: inline-block;
+  margin-right: 10px;
+  font-weight: 600;
+}
+.details-title {
+  line-height: 32px;
+  height: 32px;
+}
+.zw-page-list-p {
+  font-size: 14px;
+  margin-bottom: 18px;
+  display: flex;
+  justify-content: space-between;
+  // align-items: center;
+  .zw-page-list-right {
+    display: flex;
+  }
+}
+.zw-page {
+  background: #fff;
+  //   padding: 20px 0;
+  .zw-page-left {
+    padding: 0 10px;
+  }
+  .zw-page-main {
+    padding: 0 10px;
+    .zw-page-main-list {
+      span {
+        margin-right: 10px;
+      }
+      .zw-page-span-num {
+        font-size: 12px;
+        color: #157a2c;
+      }
+      .zw-page-p-operation {
+        text-align: right;
+        // width: 200px;
+      }
+      .zw-page-operation-num {
+        width: 100px;
+        margin: 0 10px;
+      }
+    }
+    .zw-page-list-more {
+      text-align: center;
+    }
+  }
+  .zw-page-right {
+    .zw-card-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      height: 32px;
+    }
+    span {
+      margin-right: 10px;
+    }
+    .zw-page-span-num {
+      font-size: 12px;
+      color: #157a2c;
+    }
+  }
+}
+.notes {
+  font-size: 12px;
+  color: #909090;
+}
+</style>

+ 2 - 3
src/views/workforceManagement/team/components/edit.vue

@@ -234,15 +234,14 @@ export default {
         }
         saveteam(par)
           .then((msg) => {
+            this.loading = false;
             this.$message.success(msg);
             this.handleClose();
             this.$emit('done');
           })
           .catch((e) => {
-            this.$message.error(e.message);
-          })
-          .finally(() => {
             this.loading = false;
+            this.$message.error(e.message);
           });
       });
     },