Bladeren bron

修改设备工艺 人员管理等界面

pm 10 maanden geleden
bovenliggende
commit
c6219efed4

+ 60 - 0
src/api/mes/sop/sopindex-booz.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// sop信息分页查询
+export function getIsSopPage(query) {
+    return request({
+        url: '/iscs/sop/getIsSopPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 新增sop信息 /iscs/sop/insertIsSop
+export function addinsertIsSop(data) {
+    return request({
+        url: '/iscs/sop/insertIsSop',
+        method: 'post',
+        data: data
+    })
+}
+// 新增sop 开启人员选择功能 获取人员选项
+export function SopUser(query) {
+  return request({
+    url: '/system/role/authUser/allocatedListByRoleKey',
+    method: 'get',
+    params: query
+  })
+}
+// 修改sop信息 /dev-api/iscs/sop/updateIsSop
+export function updateIsSop(data) {
+    return request({
+        url: '/iscs/sop/updateIsSop',
+        method: 'post',
+        data: data
+    })
+}
+
+// 删除sop信息 /dev-api/iscs/sop/deleteIsSopBySopIds
+export function deleteIsSopBySopIds(data) {
+    return request({
+        url: '/iscs/sop/deleteIsSopBySopIds?sopIds=' + data,
+        method: 'post',
+    })
+}
+
+// 获取SOP详细信息/dev-api/iscs/sop/selectIsSopById
+export function selectIsSopById(query) {
+    return request({
+        url: '/iscs/sop/selectIsSopById?sopId=' + query,
+        method: 'get',
+    })
+}
+
+// 修改SOP信息排序/dev-api/iscs/sop/selectIsSopById
+export function updateIsSopIndexAPI(query) {
+  return request({
+    url: '/iscs/sop/updateIsSopIndex' ,
+    method: 'post',
+    data: query
+  })
+}

+ 34 - 40
src/api/mes/sop/sopindex.js

@@ -1,60 +1,54 @@
 import request from '@/utils/request'
 
 // sop信息分页查询
-export function getIsSopPage(query) {
-    return request({
-        url: '/iscs/sop/getIsSopPage',
-        method: 'get',
-        params: query
-    })
-}
-
-// 新增sop信息 /iscs/sop/insertIsSop
-export function addinsertIsSop(data) {
-    return request({
-        url: '/iscs/sop/insertIsSop',
-        method: 'post',
-        data: data
-    })
-}
-// 新增sop 开启人员选择功能 获取人员选项
-export function SopUser(query) {
+export function getIsMarsSopPage(query) {
   return request({
-    url: '/system/role/authUser/allocatedListByRoleKey',
+    url: '/iscs/mars/sop/getIsMarsSopPage',
     method: 'get',
     params: query
   })
 }
-// 修改sop信息 /dev-api/iscs/sop/updateIsSop
-export function updateIsSop(data) {
-    return request({
-        url: '/iscs/sop/updateIsSop',
-        method: 'post',
-        data: data
-    })
+
+// 新增sop信息 /iscs/sop/insertIsMarsMarsSop
+export function addinsertIsMarsSop(data) {
+  return request({
+    url: '/iscs/mars/sop/insertIsMarsSop',
+    method: 'post',
+    data: data
+  })
 }
 
-// 删除sop信息 /dev-api/iscs/sop/deleteIsSopBySopIds
-export function deleteIsSopBySopIds(data) {
-    return request({
-        url: 'iscs/sop/deleteIsSopBySopIds?sopIds=' + data,
-        method: 'post',
-    })
+// 修改sop信息
+export function updateIsMarsSop(data) {
+  return request({
+    url: '/iscs/mars/sop/updateIsSop',
+    method: 'post',
+    data: data
+  })
 }
 
-// 获取SOP详细信息/dev-api/iscs/sop/selectIsSopById
-export function selectIsSopById(query) {
-    return request({
-        url: '/iscs/sop/selectIsSopById?sopId=' + query,
-        method: 'get',
-    })
+// 删除sop信息 /dev-api/iscs/sop/deleteIsMarsMarsSopByMarsMarsSopIds
+export function deleteIsMarsSopByMarsSopIds(data) {
+  return request({
+    url: '/iscs/mars/sop/deleteIsMarsSopBySopIds?sopIds=' + data,
+    method: 'post',
+  })
+}
+
+// 获取SOP详细信息/dev-api/iscs/sop/selectIsMarsMarsSopById
+export function selectIsMarsSopById(query) {
+  return request({
+    url: '/iscs/mars/sop/selectIsMarsSopById?sopId=' + query,
+    method: 'get',
+  })
 }
 
 // 修改SOP信息排序/dev-api/iscs/sop/selectIsSopById
-export function updateIsSopIndexAPI(query) {
+export function updateIsMarsSopIndexAPI(query) {
   return request({
-    url: '/iscs/sop/updateIsSopIndex' ,
+    url: '/iscs/mars/sop/updateIsSop' ,
     method: 'post',
     data: query
   })
 }
+

+ 1 - 1
src/components/separationPoint/workshop.vue

@@ -43,7 +43,7 @@
 <script>
 import { listAllWorkshop } from '@/api/mes/md/workshop'
 import { getMapDataApi } from '@/api/mes/wa/workarea'
-import { selectIsSopById } from '@/api/mes/sop/sopindex'
+import { selectIsSopById } from '@/api/mes/sop/sopindex-booz'
 import { mapActions, mapGetters } from 'vuex'
 import { listWorkarea } from '@/api/mes/wa/workarea'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'

+ 1 - 1
src/components/separationPoint/workshop1.vue

@@ -77,7 +77,7 @@
 <script>
 import { listAllWorkshop } from "@/api/mes/md/workshop";
 import { getIsWorkareaList, getMapData } from "@/api/mes/wa/workarea";
-import { selectIsSopById } from "@/api/mes/sop/sopindex";
+import { selectIsSopById } from "@/api/mes/sop/sopindex-booz";
 import { mapActions, mapGetters } from "vuex";
 
 export default {

+ 1 - 1
src/views/mes/job/jobm/NewOperation1.vue

@@ -434,7 +434,7 @@ import { mapGetters, mapActions } from "vuex";
 
 import { listWorkshop } from "@/api/mes/md/workshop";
 import { listWorkarea } from "@/api/mes/wa/workarea";
-import { getIsSopPage } from "@/api/mes/sop/sopindex";
+import { getIsSopPage } from "@/api/mes/sop/sopindex-booz";
 import { listUser } from "@/api/system/user";
 import { listDept } from "@/api/system/dept";
 import IsolationLeftVue from "@/components/separationPoint/index1.vue";

+ 2 - 2
src/views/mes/job/jobm/NewOperations.vue

@@ -449,9 +449,9 @@ import {
   deleteIsJobTicket,
   getworkareaList
 } from '@/api/mes/job/job'
-import { selectIsSopById, SopUser } from '@/api/mes/sop/sopindex'
+import { selectIsSopById, SopUser } from '@/api/mes/sop/sopindex-booz'
 import { mapGetters, mapActions } from 'vuex'
-import { getIsSopPage } from '@/api/mes/sop/sopindex'
+import { getIsSopPage } from '@/api/mes/sop/sopindex-booz'
 import { genCode } from '@/api/system/autocode/rule'
 
 export default {

+ 2 - 2
src/views/mes/job/jobm/lookWork.vue

@@ -478,9 +478,9 @@ import {
   deleteIsJobTicket,
   getworkareaList,
 } from "@/api/mes/job/job";
-import { selectIsSopById, SopUser } from "@/api/mes/sop/sopindex";
+import { selectIsSopById, SopUser } from "@/api/mes/sop/sopindex-booz";
 import { mapGetters, mapActions } from "vuex";
-import { getIsSopPage } from "@/api/mes/sop/sopindex";
+import { getIsSopPage } from "@/api/mes/sop/sopindex-booz";
 import { genCode } from "@/api/system/autocode/rule";
 import { listWorkarea } from "@/api/mes/wa/workarea";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";

+ 1 - 1
src/views/mes/sop/sopm/NewSop-booz.vue

@@ -448,7 +448,7 @@ import {
   addinsertIsSop,
   updateIsSop,
   selectIsSopById, SopUser
-} from '@/api/mes/sop/sopindex'
+} from '@/api/mes/sop/sopindex-booz'
 import { mapActions, mapGetters } from 'vuex'
 
 export default {

+ 586 - 0
src/views/mes/sop/sopm/index-booz.vue

@@ -0,0 +1,586 @@
+<template>
+  <div class="app-container">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="100px"
+    >
+      <el-form-item label="SOP编号" prop="sopCode">
+        <el-input
+          v-model="queryParams.sopCode"
+          placeholder="请输入SOP编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="SOP名称" prop="sopName">
+        <el-input
+          v-model="queryParams.sopName"
+          placeholder="请输入SOP名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="sopStatus">
+        <el-select v-model="queryParams.sopStatus" placeholder="状态">
+          <el-option
+            v-for="dict in dict.type.sop_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <!--      <el-form-item label="车间名称" prop="workshopId">-->
+      <!--        <el-select-->
+      <!--          v-model="queryParams.workshopId"-->
+      <!--          placeholder="请选择车间名称"-->
+      <!--          @change="workShopChange"-->
+      <!--        >-->
+      <!--          <el-option-->
+      <!--            v-for="item in this.workshopList"-->
+      <!--            :key="item.key"-->
+      <!--            :label="item.label"-->
+      <!--            :value="item.value"-->
+      <!--          />-->
+      <!--        </el-select>-->
+      <!--      </el-form-item>-->
+      <el-form-item label="作业区域" prop="workareaId">
+          <treeselect
+            style="width: 318px"
+            v-model="queryParams.workareaId"
+            :options="deptOptions"
+            :normalizer="normalizer"
+            placeholder="选择作业区域"
+          />
+
+      </el-form-item>
+      <el-form-item label="创建时间">
+        <el-date-picker
+          style="width: 218px"
+          v-model="createTime"
+          type="daterange"
+          align="right"
+          unlink-panels
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :picker-options="pickerOptions"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="SOP类型" prop="sopType">
+        <el-select v-model="queryParams.sopType" placeholder="请选择SOP类型">
+          <el-option
+            v-for="dict in dict.type.sop_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button
+          v-no-more-click
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button
+          v-no-more-click
+          icon="el-icon-refresh"
+          size="mini"
+          @click="resetQuery"
+          >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          v-no-more-click
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['mes:sop:sopm:add']"
+          >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-no-more-click
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['mes:sop:sopm:batchremove']"
+          >批量删除
+        </el-button>
+      </el-col>
+      <!--      <el-col :span="1.5">-->
+      <!--        <el-button v-no-more-click-->
+      <!--          type="warning"-->
+      <!--          plain-->
+      <!--          icon="el-icon-download"-->
+      <!--          size="mini"-->
+      <!--          @click="handleExport"-->
+      <!--          v-hasPermi="['mes:cal:team:export']"-->
+      <!--        >导出</el-button>-->
+      <!--      </el-col>-->
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-loading="loading"
+      :data="sopList"
+      @selection-change="handleSelectionChange"
+    >
+
+      <el-table-column type="selection" width="55" align="center" />
+      <!-- 此处sopId为了实现编辑 误删除 -->
+      <!-- <el-table-column
+        label="SOPID"
+        align="center"
+        prop="sopId"
+        v-if="(showId = false)"
+      /> -->
+      <el-table-column
+        label="序号"
+        align="center"
+        prop="sopIndex"
+      >
+        <template slot-scope="scope">
+          <el-button v-no-more-click
+                     type="text"
+                     @click="handleByOrder(scope.row)"
+          >{{scope.row.sopIndex?scope.row.sopIndex:'-'}}</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="SOP编号" align="center" prop="sopCode">
+      </el-table-column>
+      <el-table-column label="SOP名称" align="center" prop="sopName" />
+      <el-table-column label="状态" align="center" prop="sopStatus">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.sop_status"
+            :value="scope.row.sopStatus"
+          />
+        </template>
+      </el-table-column>
+      <!--      <el-table-column label="车间名称" align="center" prop="workshopName">-->
+      <!--      </el-table-column>-->
+
+      <el-table-column label="SOP类型" align="center" prop="sopType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sop_type" :value="scope.row.sopType" />
+        </template>
+      </el-table-column>
+      <el-table-column label="作业区域" align="center" prop="workareaName">
+      </el-table-column>
+      <el-table-column label="隔离点数量" align="center" prop="pointCount">
+      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime">
+      </el-table-column>
+      <el-table-column
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
+        <template slot-scope="scope">
+          <el-button
+            v-no-more-click
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['mes:sop:sopm:edit']"
+            >编辑
+          </el-button>
+          <el-button
+            v-no-more-click
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="handleLook(scope.row)"
+            v-hasPermi="['mes:sop:sopm:progress']"
+            >查看
+          </el-button>
+          <el-button
+            v-no-more-click
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['mes:sop:sopm:remove']"
+            >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+    <!-- 添加或修改外部人员对话框 -->
+    <el-dialog
+      :visible.sync="open"
+      width="450px"
+      append-to-body
+      style="margin-top: 13%"
+    >
+      <div slot="title" class="dialog-title">
+        <i></i>
+        <span class="title">sop排序</span>
+      </div>
+      <el-form
+        ref="dialogForm"
+        :model="dialogForm"
+        label-width="70px"
+      >
+        <el-form-item label="选择排序" prop="sopIndex" >
+          <el-input-number v-model="dialogForm.sopIndex"></el-input-number>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <!--  内部人员确认-->
+        <el-button v-no-more-click type="primary" @click="ByOrderconfirm" >确认</el-button>
+        <el-button v-no-more-click @click="ByOrdercancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  workshoplistAll,
+  getIsWorkareaList,
+} from "@/api/mes/spm/segregationPoint";
+import {
+  getIsSopPage,
+  updateIsSop,
+  deleteIsSopBySopIds,
+  selectIsSopById,
+  updateIsSopIndexAPI
+} from "@/api/mes/sop/sopindex-booz";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { listWorkarea } from "@/api/mes/wa/workarea";
+
+import { mapActions } from "vuex";
+export default {
+  name: "Team",
+  components: { Treeselect },
+  dicts: ["sop_status", "sop_type"],
+  data() {
+    return {
+      //自动生成编码
+      autoGenFlag: false,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      codes: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 班组表格数据
+      sopList: [],
+      // 弹出层标题
+      title: "",
+      // 新增或修改
+      sopId: null,
+      // 车间数据
+      workshopList: [],
+      // 作业区域数据
+      workareaList: [],
+      // 部门树选项
+      deptOptions: [],
+      // 查询参数
+      createTime: "",
+      queryParams: {
+        current: 1,
+        size: 10,
+        sopCode: null,
+        sopName: null,
+        sopStatus: null,
+        workshopName: null,
+        workshopId: null,
+        workareaId: null,
+        workareaName: null,
+        startTime: "",
+        endTime: "",
+      },
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "最近一周",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "最近一个月",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "最近三个月",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
+      },
+      // 表单参数
+      form: {},
+      noShow: false,
+      open:false,//排序弹窗
+      dialogForm:{}
+    };
+  },
+  created() {
+    this.getList();
+    this.getworkShop();
+  },
+
+  methods: {
+    ...mapActions("sopSelectPoints", [
+      "setSopEdit",
+      "setSopLook",
+      "setMapData",
+    ]),
+    // sop序号排序函数
+    handleByOrder(row){
+    this.dialogForm.sopId=row.sopId
+    this.dialogForm.sopIndex=row.sopIndex
+    this.open=true
+    },
+    // 取消按钮
+    ByOrdercancel() {
+      this.open = false
+    },
+    // 排序函数确认
+    ByOrderconfirm(){
+      updateIsSopIndexAPI(this.dialogForm).then(res => {
+        console.log(res)
+        this.open=false
+        this.getList()
+      })
+    },
+    // 格式化日期查询数据
+    formatDate(date) {
+      if (date && date instanceof Date && !isNaN(date)) {
+        // 使用本地时间
+        return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(
+          2,
+          "0"
+        )}-${String(date.getDate()).padStart(2, "0")}`;
+      }
+      return null;
+    },
+    /** 查询sop列表 */
+    getList() {
+      this.loading = true;
+      // 格式化日期并更新queryParams
+      if (Array.isArray(this.createTime) && this.createTime.length === 2) {
+        this.queryParams.startTime = this.formatDate(this.createTime[0]);
+        this.queryParams.endTime = this.formatDate(this.createTime[1]);
+      }
+      getIsSopPage(this.queryParams).then((response) => {
+        // console.log(response, "接口返回结果");
+        this.sopList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+      const data = {
+        current: 1,
+        size: -1,
+      };
+      listWorkarea(data).then((response) => {
+        this.deptOptions = this.handleTree(
+          response.data.records,
+          "workareaId",
+          "parentId",
+          "children"
+        );
+        console.log(this.deptOptions, "作业区域下拉树形结构");
+      });
+    },
+    /** 转换工作区域数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.workareaId,
+        label: node.workareaName,
+        children: node.children,
+      };
+    },
+    // 获取车间数据
+    getworkShop() {
+      workshoplistAll().then((response) => {
+        // console.log(response, "获取车间数据");
+        this.workshopList = response.data.map((item) => {
+          return {
+            label: item.workshopName,
+            value: item.workshopId,
+            key: item.workshopCode,
+          };
+        });
+        console.log(this.workshopList[0].value, "数据拿到了吗");
+      });
+    },
+    // 所属车间下拉改变作业区域内容
+    workShopChange() {
+      // console.log("我被切换了内容");
+      this.queryParams.workareaId = "";
+      this.getworkArea();
+      // console.log(this.workareaList, "数据拿到了吗");
+    },
+    // 获取作业区域数据
+    getworkArea() {
+      const workshopId = this.queryParams.workshopId;
+      // const workshopId = this.workshopList.map((workshop) => workshop.value);
+      console.log(workshopId, "数据格式");
+      console.log(workshopId, "workshopId");
+      if (workshopId) {
+        getIsWorkareaList(workshopId).then((response) => {
+          // console.log(response, "获取作业区域数据");
+          this.workareaList = response.data.map((item) => {
+            return {
+              label: item.workareaName,
+              value: item.workareaId,
+              key: item.workareaCode,
+            };
+          });
+          console.log(this.workareaList, "数据吗");
+        });
+      }
+    },
+    // 取消按钮
+    cancel() {
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        sopCode: null,
+        sopName: null,
+        sopStatus: null,
+        workshopName: null,
+        workareaName: null,
+        pointCount: null,
+        sopType: null,
+        createTime: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.createTime = "";
+      (this.queryParams.startTime = ""),
+        (this.queryParams.endTime = ""),
+        this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.sopId);
+      this.codes = selection.map((item) => item.sopCode);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作a */
+    handleAdd() {
+      this.reset();
+      this.setMapData(null);
+      this.setSopLook(false);
+      this.$router.push("/mes/sop/sopm/NewSop?sopId=null");
+      this.title = "添加隔离点";
+      // 新增或修改
+      this.sopId = null;
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.setSopLook(false);
+      this.$router.push(`/mes/sop/sopm/NewSopEdit?sopId=${row.sopId}`);
+    },
+    // 查看操作
+    handleLook(row) {
+      // 设置为true表示作业票里查看不可以点击隔离点
+      this.setSopLook(true);
+      this.$router.push(`/mes/sop/sopm/sopmLook?sopId=${row.sopId}`);
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const sopIds = row.sopId || this.ids;
+      const sopCodes = row.sopCode || this.codes;
+      this.$modal
+        .confirm('是否确认删除SOP编号为"' + sopCodes + '"的数据项?')
+        .then(function () {
+          return deleteIsSopBySopIds(sopIds);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    // handleExport() {
+    //   this.download(
+    //     "cal/team/export",
+    //     {
+    //       ...this.queryParams,
+    //     },
+    //     `team_${new Date().getTime()}.xlsx`
+    //   );
+    // },
+  },
+};
+</script>
+<style lang="scss" src="@/assets/styles/dialog-title.scss" scoped>
+.el-input-width {
+  width: 380px !important;
+}
+</style>

+ 301 - 475
src/views/mes/sop/sopm/index.vue

@@ -1,13 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      size="small"
-      :inline="true"
-      v-show="showSearch"
-      label-width="100px"
-    >
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
       <el-form-item label="SOP编号" prop="sopCode">
         <el-input
           v-model="queryParams.sopCode"
@@ -19,250 +12,163 @@
       <el-form-item label="SOP名称" prop="sopName">
         <el-input
           v-model="queryParams.sopName"
-          placeholder="请输入SOP名称"
+          placeholder="请输入sop名称"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="状态" prop="sopStatus">
-        <el-select v-model="queryParams.sopStatus" placeholder="状态">
-          <el-option
-            v-for="dict in dict.type.sop_status"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <!--      <el-form-item label="车间名称" prop="workshopId">-->
-      <!--        <el-select-->
-      <!--          v-model="queryParams.workshopId"-->
-      <!--          placeholder="请选择车间名称"-->
-      <!--          @change="workShopChange"-->
-      <!--        >-->
-      <!--          <el-option-->
-      <!--            v-for="item in this.workshopList"-->
-      <!--            :key="item.key"-->
-      <!--            :label="item.label"-->
-      <!--            :value="item.value"-->
-      <!--          />-->
-      <!--        </el-select>-->
-      <!--      </el-form-item>-->
-      <el-form-item label="作业区域" prop="workareaId">
-          <treeselect
-            style="width: 318px"
-            v-model="queryParams.workareaId"
-            :options="deptOptions"
-            :normalizer="normalizer"
-            placeholder="选择作业区域"
-          />
-
-      </el-form-item>
-      <el-form-item label="创建时间">
-        <el-date-picker
-          style="width: 218px"
-          v-model="createTime"
-          type="daterange"
-          align="right"
-          unlink-panels
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :picker-options="pickerOptions"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="SOP类型" prop="sopType">
-        <el-select v-model="queryParams.sopType" placeholder="请选择SOP类型">
-          <el-option
-            v-for="dict in dict.type.sop_type"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
 
       <el-form-item>
-        <el-button
-          v-no-more-click
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >搜索</el-button
-        >
-        <el-button
-          v-no-more-click
-          icon="el-icon-refresh"
-          size="mini"
-          @click="resetQuery"
-          >重置</el-button
-        >
+        <el-button v-no-more-click type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索
+        </el-button>
+        <el-button v-no-more-click icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          v-no-more-click
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['mes:sop:sopm:add']"
-          >新增
+        <el-button v-no-more-click
+                   type="primary"
+                   plain
+                   icon="el-icon-plus"
+                   size="mini"
+                   @click="handleAdd"
+                   v-hasPermi="['iscs:sop:add']"
+        >新增
         </el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          v-no-more-click
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['mes:sop:sopm:batchremove']"
-          >批量删除
+        <el-button v-no-more-click
+                   type="info"
+                   plain
+                   icon="el-icon-sort"
+                   size="mini"
+                   @click="toggleExpandAll"
+        >展开/折叠
         </el-button>
       </el-col>
-      <!--      <el-col :span="1.5">-->
-      <!--        <el-button v-no-more-click-->
-      <!--          type="warning"-->
-      <!--          plain-->
-      <!--          icon="el-icon-download"-->
-      <!--          size="mini"-->
-      <!--          @click="handleExport"-->
-      <!--          v-hasPermi="['mes:cal:team:export']"-->
-      <!--        >导出</el-button>-->
-      <!--      </el-col>-->
-      <right-toolbar
-        :showSearch.sync="showSearch"
-        @queryTable="getList"
-      ></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table
+      v-if="refreshTable"
       v-loading="loading"
-      :data="sopList"
-      @selection-change="handleSelectionChange"
+      :data="deptList"
     >
-
-      <el-table-column type="selection" width="55" align="center" />
-      <!-- 此处sopId为了实现编辑 误删除 -->
-      <!-- <el-table-column
-        label="SOPID"
-        align="center"
-        prop="sopId"
-        v-if="(showId = false)"
-      /> -->
-      <el-table-column
-        label="序号"
-        align="center"
-        prop="sopIndex"
-      >
+<!--      <el-table-column prop="sopIndex" label="SOP序号" ></el-table-column>-->
+      <el-table-column prop="sopName" label="SOP名称" ></el-table-column>
+      <el-table-column prop="sopType" label="SOP类型" >
         <template slot-scope="scope">
-          <el-button v-no-more-click
-                     type="text"
-                     @click="handleByOrder(scope.row)"
-          >{{scope.row.sopIndex?scope.row.sopIndex:'-'}}</el-button>
+          <dict-tag :options="dict.type.sop_type" :value="scope.row.sopType"/>
         </template>
       </el-table-column>
-      <el-table-column label="SOP编号" align="center" prop="sopCode">
-      </el-table-column>
-      <el-table-column label="SOP名称" align="center" prop="sopName" />
-      <el-table-column label="状态" align="center" prop="sopStatus">
+      <el-table-column prop="workstationName" label="所属岗位" >
         <template slot-scope="scope">
-          <dict-tag
-            :options="dict.type.sop_status"
-            :value="scope.row.sopStatus"
-          />
+          <span>{{ scope.row.workstationName }}</span>
         </template>
       </el-table-column>
-      <!--      <el-table-column label="车间名称" align="center" prop="workshopName">-->
-      <!--      </el-table-column>-->
 
-      <el-table-column label="SOP类型" align="center" prop="sopType">
+      <el-table-column prop="machineryName" label="设备/工艺" >
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.sop_type" :value="scope.row.sopType" />
+          {{ scope.row.machineryName }}
         </template>
       </el-table-column>
-      <el-table-column label="作业区域" align="center" prop="workareaName">
-      </el-table-column>
-      <el-table-column label="隔离点数量" align="center" prop="pointCount">
-      </el-table-column>
-      <el-table-column label="创建时间" align="center" prop="createTime">
+      <el-table-column label="创建时间" align="center" prop="createTime" width="200">
+        <template slot-scope="scope">
+          <span>{{ scope.row.createTime }}</span>
+        </template>
       </el-table-column>
-      <el-table-column
-        label="操作"
-        align="center"
-        class-name="small-padding fixed-width"
-      >
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button
-            v-no-more-click
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['mes:sop:sopm:edit']"
-            >编辑
-          </el-button>
-          <el-button
-            v-no-more-click
-            size="mini"
-            type="text"
-            icon="el-icon-view"
-            @click="handleLook(scope.row)"
-            v-hasPermi="['mes:sop:sopm:progress']"
-            >查看
+          <el-button v-no-more-click
+                     size="mini"
+                     type="text"
+                     icon="el-icon-edit"
+                     @click="handleUpdate(scope.row)"
+                     v-hasPermi="['iscs:sop:edit']"
+          >修改
           </el-button>
-          <el-button
-            v-no-more-click
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['mes:sop:sopm:remove']"
-            >删除
+
+          <!--          v-if="scope.row.parentId != 0"-->
+          <el-button v-no-more-click
+
+                     size="mini"
+                     type="text"
+                     icon="el-icon-delete"
+                     @click="handleDelete(scope.row)"
+                     v-hasPermi="['iscs:sop:remove']"
+          >删除
           </el-button>
         </template>
       </el-table-column>
     </el-table>
 
-    <pagination
-      v-show="total > 0"
-      :total="total"
-      :page.sync="queryParams.current"
-      :limit.sync="queryParams.size"
-      @pagination="getList"
-    />
-    <!-- 添加或修改外部人员对话框 -->
-    <el-dialog
-      :visible.sync="open"
-      width="450px"
-      append-to-body
-      style="margin-top: 13%"
-    >
-      <div slot="title" class="dialog-title">
-        <i></i>
-        <span class="title">sop排序</span>
-      </div>
-      <el-form
-        ref="dialogForm"
-        :model="dialogForm"
-        label-width="70px"
-      >
-        <el-form-item label="选择排序" prop="sopIndex" >
-          <el-input-number v-model="dialogForm.sopIndex"></el-input-number>
+    <!-- 添加或修改部门对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="470px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+<!--        <el-form-item label="权重序号" prop="sopIndex">-->
+<!--          <el-input v-model="form.sopIndex" placeholder="请输入权重序号"/>-->
+<!--        </el-form-item>-->
+
+<!--        <el-form-item label="SOP名称" prop="sopName">-->
+<!--          <el-input v-model="form.sopName" placeholder="请输入SOP名称"/>-->
+<!--        </el-form-item>-->
+<!--        <el-row>-->
+<!--          <el-col :span="18">-->
+<!--            <el-form-item label="SOP编号" prop="sopCode">-->
+<!--              <el-input-->
+<!--                v-model="form.sopCode"-->
+<!--                placeholder="请输入SOP编号"-->
+<!--              />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="6">-->
+<!--            <el-form-item label-width="30">-->
+<!--              <el-switch-->
+<!--                v-model="autoGenFlag"-->
+<!--                active-color="#13ce66"-->
+<!--                active-text="自动生成"-->
+<!--                @change="handleAutoGenChange(autoGenFlag)"-->
+<!--              >-->
+<!--              </el-switch>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+
+        <el-form-item label="所属岗位" prop="workstationId" >
+          <treeselect v-model="form.workstationId" :options="marsOptions"  :normalizer="Marsnormalizer" placeholder="选择岗位"/>
+        </el-form-item>
+<!--        <el-form-item label="所属电柜" prop="lotoId">-->
+<!--          <el-select-->
+<!--            style="width: 300px"-->
+<!--            v-model="form.lotoId"-->
+<!--            placeholder="请选择所属电柜"-->
+<!--          >-->
+<!--            <el-option-->
+<!--              v-for="dict in LotoOptions"-->
+<!--              :key="dict.value"-->
+<!--              :label="dict.label"-->
+<!--              :value="dict.value"-->
+<!--            />-->
+<!--          </el-select>-->
+<!--        </el-form-item>-->
+        <el-form-item label="设备/工艺" prop="machineryId" >
+          <treeselect v-model="form.machineryId" :options="machineryOptions"  :normalizer="machinerynormalizer" placeholder="选择设备/工艺"/>
+        </el-form-item>
+
+        <el-form-item label="SOP类型" prop="sopType">
+          <el-select v-model="form.sopType"  placeholder="请选择SOP类型" clearable>
+            <el-option
+              v-for="dict in dict.type.sop_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <!--  内部人员确认-->
-        <el-button v-no-more-click type="primary" @click="ByOrderconfirm" >确认</el-button>
-        <el-button v-no-more-click @click="ByOrdercancel">取 消</el-button>
+        <el-button v-no-more-click type="primary" @click="submitForm">确 定</el-button>
+        <el-button v-no-more-click @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
   </div>
@@ -270,317 +176,237 @@
 
 <script>
 import {
-  workshoplistAll,
-  getIsWorkareaList,
-} from "@/api/mes/spm/segregationPoint";
-import {
-  getIsSopPage,
-  updateIsSop,
-  deleteIsSopBySopIds,
-  selectIsSopById,
-  updateIsSopIndexAPI
-} from "@/api/mes/sop/sopindex";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import { listWorkarea } from "@/api/mes/wa/workarea";
+  getIsMarsSopPage, addinsertIsMarsSop, updateIsMarsSop, deleteIsMarsSopByMarsSopIds, selectIsMarsSopById,updateIsMarsSopIndexAPI
+} from '@/api/mes/sop/sopindex'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import { genCode } from '@/api/system/autocode/rule'
+import { listMarsDept } from '@/api/system/marsdept'
+import {listLoto} from '@/api/mes/lotoStation/lotoStation'
+import { listTechnology } from '@/api/system/machinery'
+import Template from '@/views/print/printtemplate/list.vue'
 
-import { mapActions } from "vuex";
 export default {
-  name: "Team",
-  components: { Treeselect },
-  dicts: ["sop_status", "sop_type"],
+  name: 'Dept',
+  dicts: ['sys_normal_disable','sop_type'],
+  components: { Template, Treeselect },
   data() {
     return {
-      //自动生成编码
-      autoGenFlag: false,
       // 遮罩层
       loading: true,
-      // 选中数组
-      ids: [],
-      codes: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
+      //自动生成编码
+      autoGenFlag: false,
       // 显示搜索条件
       showSearch: true,
-      // 总条数
-      total: 0,
-      // 班组表格数据
-      sopList: [],
+      // 表格树数据
+      deptList: [],
+      // mars树选项
+      marsOptions: [],
+      //工艺树
+      sopOptions:[],
+      // 电柜
+      lotoOptions:[],
+      // 设备/工艺
+      machineryOptions:[],
       // 弹出层标题
-      title: "",
-      // 新增或修改
-      sopId: null,
-      // 车间数据
-      workshopList: [],
-      // 作业区域数据
-      workareaList: [],
-      // 部门树选项
-      deptOptions: [],
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 是否展开,默认全部展开
+      isExpandAll: true,
+      // 重新渲染表格状态
+      refreshTable: true,
       // 查询参数
-      createTime: "",
       queryParams: {
-        current: 1,
-        size: 10,
-        sopCode: null,
-        sopName: null,
-        sopStatus: null,
-        workshopName: null,
-        workshopId: null,
-        workareaId: null,
-        workareaName: null,
-        startTime: "",
-        endTime: "",
-      },
-      pickerOptions: {
-        shortcuts: [
-          {
-            text: "最近一周",
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-              picker.$emit("pick", [start, end]);
-            },
-          },
-          {
-            text: "最近一个月",
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
-              picker.$emit("pick", [start, end]);
-            },
-          },
-          {
-            text: "最近三个月",
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
-              picker.$emit("pick", [start, end]);
-            },
-          },
-        ],
+        pages:1,
+        size:-1,
+        sopName: undefined,
+        sopCode: undefined
       },
+      LotoOptions:[],//电柜绑定
       // 表单参数
       form: {},
-      noShow: false,
-      open:false,//排序弹窗
-      dialogForm:{}
-    };
+      // 表单校验
+      rules: {
+        sopCode: [
+          { required: true, message: 'SOP编码不能为空', trigger: 'blur' }
+        ],
+        sopName: [
+          { required: true, message: 'SOP名称不能为空', trigger: 'blur' }
+        ],
+        workstationId:[
+          { required: true, message: '岗位不能为空', trigger: 'blur' }
+        ],
+        lotoId:[
+          { required: true, message: '电柜不能为空', trigger: 'blur' }
+        ],
+        machineryId:[
+          { required: true, message: '设备/工艺不能为空', trigger: 'blur' }
+        ]
+      }
+    }
   },
   created() {
-    this.getList();
-    this.getworkShop();
+    this.getList()
+  },
+  watch:{
+    "form.workstationId":function(newVal,oldVal){
+      if(newVal){
+        const data={
+          pasge:1,
+          size:-1,
+          workstationId:this.form.workstationId
+        }
+        listTechnology(data).then(response => {
+          this.machineryOptions = this.handleTree(response.data.records,"machineryId","parentId")
+        })
+      }
+    }
   },
-
   methods: {
-    ...mapActions("sopSelectPoints", [
-      "setSopEdit",
-      "setSopLook",
-      "setMapData",
-    ]),
-    // sop序号排序函数
-    handleByOrder(row){
-    this.dialogForm.sopId=row.sopId
-    this.dialogForm.sopIndex=row.sopIndex
-    this.open=true
-    },
-    // 取消按钮
-    ByOrdercancel() {
-      this.open = false
-    },
-    // 排序函数确认
-    ByOrderconfirm(){
-      updateIsSopIndexAPI(this.dialogForm).then(res => {
-        console.log(res)
-        this.open=false
-        this.getList()
+    /** 查询部门列表 */
+    getList() {
+      this.loading = true
+      getIsMarsSopPage(this.queryParams).then(response => {
+        debugger;
+        this.deptList = response.data.records
+        this.loading = false
       })
-    },
-    // 格式化日期查询数据
-    formatDate(date) {
-      if (date && date instanceof Date && !isNaN(date)) {
-        // 使用本地时间
-        return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(
-          2,
-          "0"
-        )}-${String(date.getDate()).padStart(2, "0")}`;
+      const data={
+        pasge:1,
+        size:-1
       }
-      return null;
+      listMarsDept(data).then(response => {
+        this.marsOptions = this.handleTree(response.data.records,"workstationId","parentId")
+      })
+      listLoto(data).then(response => {
+        this.LotoOptions = response.data.records.map(item => {
+          return {
+            value: item.lotoId,
+            label: item.lotoName
+          }
+        })
+      })
+      listTechnology(data).then(response => {
+        this.machineryOptions = this.handleTree(response.data.records,"machineryId","parentId")
+      })
     },
-    /** 查询sop列表 */
-    getList() {
-      this.loading = true;
-      // 格式化日期并更新queryParams
-      if (Array.isArray(this.createTime) && this.createTime.length === 2) {
-        this.queryParams.startTime = this.formatDate(this.createTime[0]);
-        this.queryParams.endTime = this.formatDate(this.createTime[1]);
+    /** 转换mars岗位数据结构 */
+    Marsnormalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.workstationId,
+        label: node.workstationName,
+        children: node.children
       }
-      getIsSopPage(this.queryParams).then((response) => {
-        // console.log(response, "接口返回结果");
-        this.sopList = response.data.records;
-        this.total = response.data.total;
-        this.loading = false;
-      });
-      const data = {
-        current: 1,
-        size: -1,
-      };
-      listWorkarea(data).then((response) => {
-        this.deptOptions = this.handleTree(
-          response.data.records,
-          "workareaId",
-          "parentId",
-          "children"
-        );
-        console.log(this.deptOptions, "作业区域下拉树形结构");
-      });
     },
-    /** 转换工作区域数据结构 */
-    normalizer(node) {
+    /** 转换mars岗位数据结构 */
+    machinerynormalizer(node) {
       if (node.children && !node.children.length) {
-        delete node.children;
+        delete node.children
       }
       return {
-        id: node.workareaId,
-        label: node.workareaName,
-        children: node.children,
-      };
-    },
-    // 获取车间数据
-    getworkShop() {
-      workshoplistAll().then((response) => {
-        // console.log(response, "获取车间数据");
-        this.workshopList = response.data.map((item) => {
-          return {
-            label: item.workshopName,
-            value: item.workshopId,
-            key: item.workshopCode,
-          };
-        });
-        console.log(this.workshopList[0].value, "数据拿到了吗");
-      });
-    },
-    // 所属车间下拉改变作业区域内容
-    workShopChange() {
-      // console.log("我被切换了内容");
-      this.queryParams.workareaId = "";
-      this.getworkArea();
-      // console.log(this.workareaList, "数据拿到了吗");
-    },
-    // 获取作业区域数据
-    getworkArea() {
-      const workshopId = this.queryParams.workshopId;
-      // const workshopId = this.workshopList.map((workshop) => workshop.value);
-      console.log(workshopId, "数据格式");
-      console.log(workshopId, "workshopId");
-      if (workshopId) {
-        getIsWorkareaList(workshopId).then((response) => {
-          // console.log(response, "获取作业区域数据");
-          this.workareaList = response.data.map((item) => {
-            return {
-              label: item.workareaName,
-              value: item.workareaId,
-              key: item.workareaCode,
-            };
-          });
-          console.log(this.workareaList, "数据吗");
-        });
+        id: node.machineryId,
+        label: node.machineryName,
+        children: node.children
       }
     },
+
     // 取消按钮
     cancel() {
-      this.reset();
+      this.open = false
+      this.reset()
     },
     // 表单重置
     reset() {
       this.form = {
-        sopCode: null,
-        sopName: null,
-        sopStatus: null,
-        workshopName: null,
-        workareaName: null,
-        pointCount: null,
-        sopType: null,
-        createTime: null,
-      };
-      this.resetForm("form");
+        sopId: undefined,
+        parentId: undefined,
+        sopName: undefined,
+      }
+      this.autoGenFlag = false;
+      this.resetForm('form')
+    },
+    //自动生成编码
+    handleAutoGenChange(autoGenFlag) {
+      if (autoGenFlag) {
+        genCode("SOP_CODE").then((response) => {
+          console.log(response,'设备工艺编码');
+          this.form.sopCode = response;
+        });
+      } else {
+        this.form.sopCode = null;
+      }
     },
+
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.current = 1;
-      this.getList();
+      this.getList()
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.createTime = "";
-      (this.queryParams.startTime = ""),
-        (this.queryParams.endTime = ""),
-        this.resetForm("queryForm");
-      this.handleQuery();
+      this.resetForm('queryForm')
+      this.handleQuery()
     },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.sopId);
-      this.codes = selection.map((item) => item.sopCode);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
+
+    /** 展开/折叠操作 */
+    toggleExpandAll() {
+      this.refreshTable = false
+      this.isExpandAll = !this.isExpandAll
+      this.$nextTick(() => {
+        this.refreshTable = true
+      })
     },
-    /** 新增按钮操作a */
-    handleAdd() {
-      this.reset();
-      this.setMapData(null);
-      this.setSopLook(false);
-      this.$router.push("/mes/sop/sopm/NewSop?sopId=null");
-      this.title = "添加隔离点";
-      // 新增或修改
-      this.sopId = null;
+    /** 新增按钮操作 */
+    handleAdd(row) {
+      this.reset()
+      this.open = true
+      this.title = '添加SOP'
+
+
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-      this.reset();
-      this.setSopLook(false);
-      this.$router.push(`/mes/sop/sopm/NewSopEdit?sopId=${row.sopId}`);
+      this.reset()
+      selectIsMarsSopById(row.sopId).then(response => {
+        this.form = response.data
+        this.open = true
+        this.title = '修改SOP'
+
+      })
     },
-    // 查看操作
-    handleLook(row) {
-      // 设置为true表示作业票里查看不可以点击隔离点
-      this.setSopLook(true);
-      this.$router.push(`/mes/sop/sopm/sopmLook?sopId=${row.sopId}`);
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.sopId != undefined) {
+            updateIsMarsSop(this.form).then(response => {
+              this.$modal.msgSuccess('修改成功')
+              this.open = false
+              this.getList()
+            })
+          } else {
+            addinsertIsMarsSop(this.form).then(response => {
+              this.$modal.msgSuccess('新增成功')
+              this.open = false
+              this.getList()
+            })
+          }
+        }
+      })
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const sopIds = row.sopId || this.ids;
-      const sopCodes = row.sopCode || this.codes;
-      this.$modal
-        .confirm('是否确认删除SOP编号为"' + sopCodes + '"的数据项?')
-        .then(function () {
-          return deleteIsSopBySopIds(sopIds);
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("删除成功");
-        })
-        .catch(() => {});
-    },
-    /** 导出按钮操作 */
-    // handleExport() {
-    //   this.download(
-    //     "cal/team/export",
-    //     {
-    //       ...this.queryParams,
-    //     },
-    //     `team_${new Date().getTime()}.xlsx`
-    //   );
-    // },
-  },
-};
-</script>
-<style lang="scss" src="@/assets/styles/dialog-title.scss" scoped>
-.el-input-width {
-  width: 380px !important;
+      this.$modal.confirm('是否确认删除名称为"' + row.sopName + '"的数据项?').then(function() {
+        return deleteIsMarsSopByMarsSopIds(row.sopId)
+      }).then(() => {
+        this.getList()
+        this.$modal.msgSuccess('删除成功')
+      }).catch(() => {
+      })
+    }
+  }
 }
-</style>
+</script>

+ 1 - 1
src/views/mes/sop/sopm/sopmLook.vue

@@ -463,7 +463,7 @@ import {
   updateIsSop,
   selectIsSopById,
   SopUser,
-} from "@/api/mes/sop/sopindex";
+} from "@/api/mes/sop/sopindex-booz";
 import { mapActions, mapGetters } from "vuex";
 import { listWorkarea } from "@/api/mes/wa/workarea";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";

+ 30 - 9
src/views/system/mars/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
-      <el-form-item label="部门编码" prop="workstationCode">
+      <el-form-item label="岗位编码" prop="workstationCode">
         <el-input
           v-model="queryParams.workstationCode"
           placeholder="请输入部门编码"
@@ -10,7 +10,7 @@
         />
 
       </el-form-item>
-      <el-form-item label="部门名称" prop="workstationName">
+      <el-form-item label="岗位名称" prop="workstationName">
         <el-input
           v-model="queryParams.workstationName"
           placeholder="请输入部门名称"
@@ -33,7 +33,7 @@
                    icon="el-icon-plus"
                    size="mini"
                    @click="handleAdd"
-                   v-hasPermi="['system:mars:add']"
+                   v-hasPermi="['iscs:mars:add']"
         >新增
         </el-button>
       </el-col>
@@ -58,10 +58,14 @@
       :default-expand-all="isExpandAll"
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
-      <el-table-column prop="workstationCode" label="岗位编码" width="260"></el-table-column>
+<!--      <el-table-column prop="workstationCode" label="岗位编码" width="260"></el-table-column>-->
       <el-table-column prop="workstationName" label="岗位名称" width="260"></el-table-column>
       <el-table-column prop="workstationType" label="岗位类型" width="260"></el-table-column>
-
+      <el-table-column prop="workstationType" label="岗位人员" width="260">
+        <template slot-scope="scope">
+          <el-button type="text" @click="HandleLookWorkStation(scope.row)">查看</el-button>
+        </template>
+      </el-table-column>
       <el-table-column label="创建时间" align="center" prop="createTime" width="200">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -74,7 +78,7 @@
                      type="text"
                      icon="el-icon-edit"
                      @click="handleUpdate(scope.row)"
-                     v-hasPermi="['system:mars:edit']"
+                     v-hasPermi="['iscs:mars:edit']"
           >修改
           </el-button>
           <el-button v-no-more-click
@@ -82,16 +86,17 @@
                      type="text"
                      icon="el-icon-plus"
                      @click="handleAdd(scope.row)"
-                     v-hasPermi="['system:mars:add']"
+                     v-hasPermi="['iscs:mars:add']"
           >新增
           </el-button>
+<!--          v-if="scope.row.parentId != 0"-->
           <el-button v-no-more-click
-                     v-if="scope.row.parentId != 0"
+
                      size="mini"
                      type="text"
                      icon="el-icon-delete"
                      @click="handleDelete(scope.row)"
-                     v-hasPermi="['system:mars:remove']"
+                     v-hasPermi="['iscs:mars:remove']"
           >删除
           </el-button>
         </template>
@@ -154,6 +159,7 @@ import {
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 import { genCode } from '@/api/system/autocode/rule'
+import { listUnit } from '@/api/system/unit'
 
 export default {
   name: 'Dept',
@@ -199,7 +205,18 @@ export default {
       }
     }
   },
+watch: {
+  "$route.query.userId": {
+    immediate: true,
+    handler(val) {
+      this.queryParams.userId = val;
+      this.getList();
+    }
+  }
+},
+
   created() {
+
     this.getList()
   },
   methods: {
@@ -224,6 +241,10 @@ export default {
         children: node.children
       }
     },
+    // 岗位人员查看页面跳转
+    HandleLookWorkStation(row){
+      this.$router.push('/user/user?workstationId='+row.workstationId)
+    },
     // 取消按钮
     cancel() {
       this.open = false

+ 15 - 10
src/views/system/unit/index.vue

@@ -52,6 +52,7 @@
 
       <el-table-column prop="unitName" label="单位名称" width="260"></el-table-column>
       <el-table-column prop="unitType" label="单位类型" width="260"></el-table-column>
+      <el-table-column prop="remark" label="备注" width="260"></el-table-column>
       <el-table-column label="创建时间" align="center" prop="createTime" width="200">
         <template slot-scope="scope">
           <span>{{ scope.row.createTime }}</span>
@@ -89,8 +90,8 @@
       </el-table-column>
     </el-table>
 
-    <!-- 添加或修改部门对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+    <!-- 添加或修改单位对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="400px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
 
         <el-form-item label="上级" prop="parentId" v-if="form.parentId !== 0">
@@ -100,7 +101,10 @@
           <el-input v-model="form.unitName" placeholder="请输入单位名称"/>
         </el-form-item>
         <el-form-item label="单位类型" prop="unitType">
-          <el-input v-model="form.unitType" placeholder="请输入单位类型" maxlength="20"/>
+          <el-input v-model="form.unitType" placeholder="请输入单位类型" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -133,7 +137,7 @@ export default {
       showSearch: true,
       // 表格树数据
       deptList: [],
-      // 部门树选项
+      // 单位树选项
       deptOptions: [],
       // 弹出层标题
       title: '',
@@ -148,7 +152,7 @@ export default {
         pages:1,
         size:-1,
         unitName: undefined,
-
+        userId:undefined,
       },
       // 表单参数
       form: {},
@@ -158,16 +162,17 @@ export default {
         //   { required: true, message: '上级不能为空', trigger: 'blur' }
         // ],
         unitName: [
-          { required: true, message: '部门名称不能为空', trigger: 'blur' }
+          { required: true, message: '单位名称不能为空', trigger: 'blur' }
         ],
       }
     }
   },
+
   created() {
     this.getList()
   },
   methods: {
-    /** 查询部门列表 */
+    /** 查询单位列表 */
     getList() {
       this.loading = true
       listUnit(this.queryParams).then(response => {
@@ -177,7 +182,7 @@ export default {
         this.loading = false
       })
     },
-    /** 转换部门数据结构 */
+    /** 转换单位数据结构 */
     normalizer(node) {
       if (node.children && !node.children.length) {
         delete node.children
@@ -222,7 +227,7 @@ export default {
         this.form.parentId = 0;
       }
       this.open = true
-      this.title = '添加部门'
+      this.title = '添加单位'
       listUnit(this.queryParams).then(response => {
         this.deptOptions = this.handleTree(response.data.records,"unitId","parentId")
       })
@@ -244,7 +249,7 @@ export default {
           this.form.parentId = undefined
         }
         this.open = true
-        this.title = '修改部门'
+        this.title = '修改单位'
       })
 
     },

+ 126 - 55
src/views/system/user/index.vue

@@ -2,36 +2,45 @@
   <div class="app-container">
     <el-row :gutter="20">
       <!--部门数据-->
-      <el-col :span="4" :xs="24">
-        <div class="head-container">
-          <el-input
-            v-model="deptName"
-            placeholder="请输入部门名称"
-            clearable
-            size="small"
-            prefix-icon="el-icon-search"
-            style="margin-bottom: 20px"
-          />
-        </div>
-        <div class="head-container">
-          <el-tree
-            :data="deptOptions"
-            :props="defaultProps"
-            :expand-on-click-node="false"
-            :filter-node-method="filterNode"
-            ref="tree"
-            default-expand-all
-            @node-click="handleNodeClick"
-          />
-        </div>
-      </el-col>
+<!--      <el-col :span="4" :xs="24">-->
+<!--        <div class="head-container">-->
+<!--          <el-input-->
+<!--            v-model="deptName"-->
+<!--            placeholder="请输入部门名称"-->
+<!--            clearable-->
+<!--            size="small"-->
+<!--            prefix-icon="el-icon-search"-->
+<!--            style="margin-bottom: 20px"-->
+<!--          />-->
+<!--        </div>-->
+<!--        <div class="head-container">-->
+<!--          <el-tree-->
+<!--            :data="deptOptions"-->
+<!--            :props="defaultProps"-->
+<!--            :expand-on-click-node="false"-->
+<!--            :filter-node-method="filterNode"-->
+<!--            ref="tree"-->
+<!--            default-expand-all-->
+<!--            @node-click="handleNodeClick"-->
+<!--          />-->
+<!--        </div>-->
+<!--      </el-col>-->
       <!--用户数据-->
-      <el-col :span="20" :xs="24">
+      <el-col :span="24" :xs="24">
         <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-          <el-form-item label="用户名称" prop="userName">
+          <el-form-item label="工号" prop="userId">
+            <el-input
+              v-model="queryParams.userId"
+              placeholder="请输入工号"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="姓名" prop="userName">
             <el-input
               v-model="queryParams.userName"
-              placeholder="请输入用户名称"
+              placeholder="请输入姓名"
               clearable
               style="width: 240px"
               @keyup.enter.native="handleQuery"
@@ -46,6 +55,15 @@
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
+          <el-form-item label="登录名" prop="nickName">
+            <el-input
+              v-model="queryParams.nickName"
+              placeholder="请输入登录名"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
           <el-form-item label="状态" prop="status">
             <el-select
               v-model="queryParams.status"
@@ -61,17 +79,41 @@
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="创建时间">
-            <el-date-picker
-              v-model="dateRange"
-              style="width: 240px"
-              value-format="yyyy-MM-dd"
-              type="daterange"
-              range-separator="-"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-            ></el-date-picker>
+          <el-form-item label="单位" prop="unitId">
+            <treeselect style="width:240px" v-model="queryParams.unitId" :options="UnitOptions" :normalizer="Unitnormalizer" :show-count="true" placeholder="请选择单位" />
+          </el-form-item>
+          <el-form-item label="角色" prop="roleId">
+            <el-select style="width:240px" v-model="queryParams.roleId"  clearable placeholder="请选择角色">
+              <el-option
+                v-for="item in roleOptions"
+                :key="item.roleId"
+                :label="item.roleName"
+                :value="item.roleId"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+<!--          这里查询的是玛氏岗位-->
+          <el-form-item label="岗位" prop="workstationId">
+            <el-select style="width: 240px" v-model="queryParams.workstationId" clearable placeholder="请选择岗位">
+              <el-option
+                v-for="item in MarsWordStationOptions"
+                :key="item.workstationId"
+                :label="item.workstationName"
+                :value="item.workstationId"
+              ></el-option>
+            </el-select>
           </el-form-item>
+<!--          <el-form-item label="创建时间">-->
+<!--            <el-date-picker-->
+<!--              v-model="dateRange"-->
+<!--              style="width: 240px"-->
+<!--              value-format="yyyy-MM-dd"-->
+<!--              type="daterange"-->
+<!--              range-separator="-"-->
+<!--              start-placeholder="开始日期"-->
+<!--              end-placeholder="结束日期"-->
+<!--            ></el-date-picker>-->
+<!--          </el-form-item>-->
           <el-form-item>
             <el-button v-no-more-click type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
             <el-button v-no-more-click icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -136,11 +178,18 @@
 
         <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="50" align="center" />
-          <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
-          <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
-          <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
-          <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
-          <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
+          <el-table-column label="工号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="姓名" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="联系电话" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
+          <el-table-column label="登录名" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="单位" align="center" key="unitName" prop="unitName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="角色" align="center" key="roleName" prop="roleName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="岗位" align="center" key="workstationName" prop="workstationName" v-if="columns[2].visible" :show-overflow-tooltip="true" >
+            <template slot-scope="scope">
+              <el-button type="text" @click="HandleLookWorkStation(scope.row)">查看</el-button>
+            </template>
+          </el-table-column>
+<!--          <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />-->
           <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
             <template slot-scope="scope">
               <el-switch
@@ -151,11 +200,11 @@
               ></el-switch>
             </template>
           </el-table-column>
-          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
-            <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.createTime) }}</span>
-            </template>
-          </el-table-column>
+<!--          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">-->
+<!--            <template slot-scope="scope">-->
+<!--              <span>{{ parseTime(scope.row.createTime) }}</span>-->
+<!--            </template>-->
+<!--          </el-table-column>-->
           <el-table-column
             label="操作"
             align="center"
@@ -296,8 +345,8 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="玛氏岗位" prop="workstationId">
-              <el-select size="small" v-model="form.workstationIds" placeholder="请选择"   :popper-append-to-body="false" multiple
+            <el-form-item label="玛氏岗位" prop="workstationIds">
+              <el-select size="small" v-model="form.workstationIds" placeholder="请选择" value-key="workstationIds"  :popper-append-to-body="false" multiple
                          @remove-tag="removeTag" >
                 <el-option :value="selectTreeValue"  class="setstyle" disabled>
                   <el-input class="setinput" size="mini" placeholder="输入关键字进行过滤" clearable v-model="filterText"></el-input>
@@ -434,7 +483,8 @@ export default {
         userName: undefined,
         phonenumber: undefined,
         status: undefined,
-        deptId: undefined
+        deptId: undefined,
+        workstationId: undefined,
       },
       // 列信息
       columns: [
@@ -487,6 +537,14 @@ export default {
     },
     filterText(val) {
       this.$refs.treeRef.filter(val)
+    },
+    "$route.query.workstationId": {
+      immediate: true,
+      handler(val) {
+        console.log(val,'workstationId查询参数')
+        this.queryParams.workstationId = val;
+        this.getList();
+      }
     }
   },
   created() {
@@ -506,6 +564,9 @@ export default {
           this.loading = false;
         }
       );
+      getUser().then(response => {
+        this.roleOptions = response.roles;
+      });
       const data={
         size:-1,
         pages:1
@@ -555,7 +616,8 @@ export default {
         status: "0",
         remark: undefined,
         postIds: [],
-        roleIds: []
+        roleIds: [],
+
       };
       this.resetForm("form");
     },
@@ -589,6 +651,10 @@ export default {
           break;
       }
     },
+    // 岗位查看页面跳转
+    HandleLookWorkStation(row){
+      this.$router.push('/user/mars?userId='+row.userId)
+    },
     // 树形结构
     transformDataToTree(data) {
       const map = {};
@@ -649,19 +715,23 @@ export default {
         const record = this.MarsWordStationOptions.find(record => record.workstationId === workstationId);
         return record ? { id: record.workstationId, label: record.workstationName } : null;
       }).filter(node => node !== null);
+
+      console.log(workstationNames, 'workstationNames');
+
       this.$nextTick(() => {
-        this.$refs.treeRef.setCheckedNodes(workstationNames);
+        const checkedNodes = workstationNames.map(node => node.id);  // 通过 id 作为唯一标识
+        this.$refs.treeRef.setCheckedNodes(checkedNodes);
       });
-        this.form.workstationIds = workstationNames.map(node => node.name);
+
+      // 确保这里绑定的是正确的 key 值
+      this.form.workstationIds = workstationNames.map(node => node.label); // 使用 id 而不是 name
     },
     // 节点选中
     handleCheckChange(data, checked, indeterminate) {
       if (checked) {
         this.addTag(data); // 调用 addTag 方法
-
       } else {
         this.removeTag(data.label); // 调用 removeTag 方法
-
       }
     },
 
@@ -724,6 +794,7 @@ export default {
 
       const userId = row.userId || this.ids;
       getUser(userId).then(response => {
+
         this.open = true;
         this.form = response.data;
         this.postOptions = response.posts;
@@ -772,7 +843,7 @@ export default {
               return record ? record.workstationId : null;
             }).filter(id => id !== null);
             this.form.workstationIds=workstationIds
-            this.form.unitIds=[this.form.unitIds]
+            this.form.unitIds=this.form.unitIds
             updateUser(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;