Kaynağa Gözat

Merge branch 'V0.0.2' of http://10.87.10.227:4000/jzyd_yyds/soc_web into V0.0.2

zhulu 2 yıl önce
ebeveyn
işleme
cb583769bc

+ 6 - 2
src/components/table/gx.search.table.vue

@@ -30,7 +30,7 @@
               @sort-change="onSort"
               v-if="$slots['columns']"
               :data="dataList"
-              max-height="400"
+              :max-height="tableHeight"
               border
               stripe
               :row-key="rowKey"
@@ -110,6 +110,10 @@ export default {
         return []
       },
     },
+    tableHeight:{
+      type:Number,
+      default:400
+    }
   },
   model: {
     prop: 'data',
@@ -200,7 +204,7 @@ export default {
   mounted() {
     //console.log("gx mounted",this.list,this.manual)
     // this.list &&
-    if ( !this.manual) {
+    if (!this.manual) {
       this.load(this.searchData)
     }
   },

+ 7 - 2
src/components/table/mix.search.js

@@ -45,7 +45,9 @@ export default {
       deep: true,
       handler: debounce(
         function () {
-          this.search();
+          if(!this.manual){
+            this.search();
+          }         
         },
         300,
         { leading: true }
@@ -77,6 +79,7 @@ export default {
      * @param params
      */
     async load(params) {
+      // debugger
       params = params || {};
       params.pageNum = this.pageIndex<1?1:this.pageIndex;
       params.pageSize = this.pageSize;
@@ -95,7 +98,9 @@ export default {
       // this.$emit("select-all", []);
       // this.$emit("handleSelectionChange", []);
       this.$emit("load", data);
-      
+      if(data.data){
+        data=data.data
+      }
       if (data.length) {
         this.dataList = this.checkSelect(data);
         this.total = data.length;

+ 219 - 0
src/components/userSelector/index.vue

@@ -0,0 +1,219 @@
+<template>
+  <DialogCom
+    title="选择人员"
+    :visible.sync="isShow"
+    class="g-dialog-select-safe-check"
+    :close-on-click-modal="false"
+    width="1100px"
+    top="10vh"
+    append-to-body
+  >
+    <div class="el-dialog-div">
+      <el-row :gutter="20">
+        <!--机构数据-->
+        <el-col :span="6" :xs="24">
+          <org-tree
+            v-model="search.orgId"
+            @defaultKey="getDefaultKey"
+            @checkChange="checkChange"
+            @click="clickTreeNode"
+          ></org-tree>
+        </el-col>
+        <el-col :span="18" :xs="24">
+          <g-search-table
+            ref="searchTable"
+            url="/system/user/list"
+            method="get"
+            :search-data="search"
+            :manual="true"
+            :pageable="true"
+            :select="true"
+            :select-default="selectList"
+            :drag="false"
+            :tableHeight="500"
+            :selectLimit="selectLimit"
+            @select="onSelect"
+          >
+            <!-- 搜索 -->
+            <template slot="searchs">
+              <el-form-item  prop="ruleId" label="用户账号">
+                <el-input v-model="search.username"></el-input>
+              </el-form-item>
+              <el-form-item prop="name" label="用户姓名">
+                <el-input v-model="search.name"></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  icon="el-icon-search"
+                  size="mini"
+                  @click="refresh"
+                  >搜索</el-button
+                >
+                <el-button
+                  icon="el-icon-refresh"
+                  size="mini"
+                  @click="resetQuery"
+                  >重置</el-button
+                >
+              </el-form-item>
+            </template>
+
+            <!-- 表格 -->
+            <template slot="columns">
+              <el-table-column                
+                label="序号"
+                type="index"
+                align="center"
+                width="50"
+              ></el-table-column>
+              <el-table-column
+                label="用户账号"
+                align="center"
+                key="username"
+                prop="username"
+                width="120"
+              />
+              <el-table-column
+                label="用户姓名"
+                align="center"
+                key="name"
+                prop="name"
+                :show-overflow-tooltip="true"
+              />
+              <el-table-column
+                label="所属机构"
+                align="left"
+                key="orgName"
+                prop="orgName"
+                :show-overflow-tooltip="true"
+              />
+              <el-table-column
+                label="状态"
+                align="center"
+                key="isLock"
+                prop="isLock"
+                width="80"
+              >
+              <template slot-scope="scope">
+                {{ getLabel(dict.type.sys_user_is_lock,scope.row.isLock) }}
+              </template>
+              </el-table-column>
+            </template>
+          </g-search-table>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="onHide">关闭</el-button>
+      <el-button type="primary" @click="onSubmit">确定</el-button>
+    </div>
+  </DialogCom>
+</template>
+<script>
+import GSearchTable from "@/components/table/gx.search.table.vue";
+import OrgTree from "@/components/orgTree";
+import { mapGetters } from 'vuex'
+import {getLabel} from '@/views/commonOption.js'
+export default {
+  components: { GSearchTable,OrgTree },
+  data() {
+    return {
+      isShow: false,
+      selectList: [],
+      search: this.emptySearch(),
+    };
+  },
+  dicts:["sys_user_is_lock"],
+  computed: {
+    ...mapGetters(["orgId"])
+  },
+  watch: {},
+  props: {
+    selectLimit: {
+      type: Number,
+      default: 0,
+    },
+  },
+  methods: {
+    getLabel,
+    // show(defaultSelect) {
+    //   this.search = this.emptySearch();
+    //   this.isShow = true;
+    //   if (defaultSelect && defaultSelect.map) {
+    //     this.selectList = defaultSelect.map((s) => ({ id: s }));
+    //   }
+    // },
+    /**
+     * 还没有调试默认选中
+     * @param {} defaultSelect 
+     */
+    show(defaultSelect) {
+      this.search = this.emptySearch();      
+      this.isShow = true;   
+      this.refresh()   
+    },
+    resetQuery() {
+      this.resetForm("search");
+      // this.queryParams.orgId = undefined;
+      // this.$refs.tree.setCurrentKey(null);
+      this.refresh();
+    },
+    onHide() {
+      this.isShow = false;
+    },
+    onSelect(item) {
+      this.selectList = item;
+    },
+    refresh(){
+        this.$nextTick(()=>{
+            this.$refs.searchTable.refresh();
+        })
+    },
+    getList() {
+        this.$nextTick(()=>{
+            this.$refs.searchTable.search();
+        })
+    },
+    onSubmit() {     
+      this.$emit("select", this.selectList);
+      this.onHide();
+    },
+    getDefaultKey(key) {
+        // debugger
+      this.search.orgId = key;      
+    },
+    //单选框状态改变
+    checkChange(state) {
+      this.search.checkSub = state;
+      this.refresh();
+    },
+    clickTreeNode(data) {
+      this.search.orgId = data.id;
+      this.refresh();
+    },
+    emptySearch() {
+      return {
+        orgId: this.orgId,
+        checkSub: true,
+        username: null,
+        name: null,
+      };
+    },
+  },
+  mounted() {
+
+  },
+};
+</script>
+<style lang="scss" scoped>
+
+.el-dialog-div{
+    height: 600px;
+
+    ::v-deep .tree-container{
+        height: 500px;
+    }
+}
+</style>

+ 15 - 1
src/router/index.js

@@ -204,7 +204,21 @@ export const dynamicRoutes = [
         meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
       }
     ]
-  }
+  },
+  {
+    path: '/core/safetycheck',
+    component: Layout,
+    hidden: true,
+    permissions: ['safetycheck:register:register'],
+    children: [
+      {
+        path: 'register/:taskId(\\d+)',
+        component: () => import('@/views/safetycheck/taskManager/components/register.vue'),
+        name: 'safetyCheckRegister',
+        meta: { title: '检查任务', activeMenu: '/safetycheck/taskmanager' }
+      }
+    ]
+  },
 ]
 
 // 防止连续点击多次路由报错

+ 2 - 3
src/views/resumption/ruleManager/dialog.select.point.vue

@@ -97,10 +97,9 @@ export default {
       }
       console.info("selectList0",this.selectList);
       ruleListForOrg({ orgType: this.orgType }).then((r) => {
-        this.ruleList = r.data;
+        this.ruleList = r.data;        
         if (r.data && r.data.length > 0) {
-          this.search.ruleId = r.data[0].id;
-          // this.$refs.st.search();
+          this.search.ruleId = r.data[0].id;          
         }
       });
     },

+ 1 - 0
src/views/safetycheck/ruleManager/dialog.select.point.vue

@@ -97,6 +97,7 @@ export default {
       
       ruleListForOrg({ orgType: this.orgType }).then((r) => {
         this.ruleList = r.data;
+        
         if (r.data && r.data.length > 0) {
           this.search.ruleId = r.data[0].id;
           // this.$refs.st.search();

+ 191 - 66
src/views/safetycheck/taskManager/components/register.vue

@@ -1,12 +1,6 @@
 <template>
-  <el-dialog
-    :title="检查任务"
-    :visible.sync="dialogVisible"
-    width="50%"
-    :show-close="true"
-    @close="onHide"
-  >
-    <el-descriptions>
+  <div class="app-container">
+    <el-descriptions title="检查任务">
       <el-descriptions-item label="检查名称">{{
         info.taskName
       }}</el-descriptions-item>
@@ -30,6 +24,7 @@
       </el-descriptions-item>
       <el-descriptions-item label="检查组成员"
         ><el-input
+          style="width: 80%; margin-top: -8px"
           placeHolder="请输入检查组成员"
           v-model="info.checkTeam"
         ></el-input>
@@ -39,54 +34,84 @@
       </el-descriptions-item>
     </el-descriptions>
     <div>
-      <span>巡检区域</span>
-      <el-button type="primary" @click="onAddPoint()">新增检查内容</el-button>
+      <span style="margin-right: 20px">巡检区域</span>
+      <el-button type="primary" size="mini" @click="onAddPoint()"
+        >新增检查内容</el-button
+      >
     </div>
-    <div class="content" v-for="area in info.areaList">
-      <div>
-        {{ area.areaName }}
-      </div>
-      <div>
-        <div v-for="(item, index) in area.itemList">
-          <span>{{ index + 1 }}、{{ item.itemName }}</span>
-          <div v-for="point in item.pointList">
-            <div>
-              <span><i class="circle" /> {{ point.pointName }}</span>
-              <el-radio-group v-model="point.status">
-                <el-radio :value="0">正常</el-radio>
-                <el-radio :label="1">异常</el-radio>
-              </el-radio-group>
-            </div>
-            <div v-if="point.status == 1">
-              <el-form
-                :ref="'form_' + point.pointId"
-                :model="point"
-                :rule="exceptionRules"
-              >
-                <el-form-item label="情况描述" prop="remark">
-                  <el-input v-model="point.remark"></el-input>
-                </el-form-item>
-                <el-form-item label="异常图片" prop="image"> </el-form-item>
-                <el-form-item label="整改期限" prop="rectificationDeadline">
-                  <el-select
-                    v-model="point.rectificationDeadline"
-                    placeHolder="请选择整改期限"
-                  >
-                    <el-option
-                      v-for="item in dict.type.rectification_deadline"
-                      :key="item.value"
-                      :value="item.value"
-                      :label="item.label"
-                    ></el-option>
-                  </el-select>
-                </el-form-item>
-              </el-form>
+    <div class="content">
+      <div class="area_content" v-for="area in info.areaList">
+        <div>
+          {{ area.areaName }}
+        </div>
+        <div>
+          <div class="safetycheck_item" v-for="(item, index) in area.itemList">
+            <span>{{ index + 1 }}、{{ item.itemName }}</span>
+            <div class="safetycheck_point" v-for="point in item.pointList">
+              <div>
+                <span class="pointName"
+                  ><i class="circle" /> {{ point.pointName }}</span
+                >
+                <el-radio-group v-model="point.status">
+                  <el-radio :label="0">正常</el-radio>
+                  <el-radio :label="1">异常</el-radio>
+                </el-radio-group>
+                <el-button
+                  type="danger"
+                  size="mini"
+                  v-if="point.isAdd"
+                  style="margin-left: 50px"
+                  @click="onDeletePoint(area, item, point)"
+                  >移除</el-button
+                >
+              </div>
+              <div v-if="point.status == 1">
+                <el-form
+                  :ref="'point_' + point.pointId"
+                  :model="point"
+                  :rules="exceptionRules"
+                  label-width="100px"
+                >
+                  <el-form-item label="情况描述" prop="remark">
+                    <el-input
+                      v-model="point.remark"
+                      style="width: 250px"
+                      placeholder="请输入情况描述"
+                    ></el-input>
+                  </el-form-item>
+                  <el-form-item label="异常图片" prop="image">
+                    <imgUpload
+                      type="more"
+                      :value="
+                        point.imgData
+                          ? point.imgData.map((d) => d.imgPath).join(',')
+                          : ''
+                      "
+                      @input="onImageChanged(point, $event)"
+                    ></imgUpload>
+                  </el-form-item>
+                  <el-form-item label="整改期限" prop="rectificationDeadline">
+                    <el-select
+                      v-model="point.rectificationDeadline"
+                      placeholder="请选择整改期限"
+                    >
+                      <el-option
+                        v-for="item in dict.type.rectification_deadline"
+                        :key="item.value"
+                        :value="item.value"
+                        :label="item.label"
+                      ></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-form>
+              </div>
             </div>
           </div>
         </div>
       </div>
     </div>
-    <div slot="footer" class="dialog-footer">
+
+    <div class="dialog-footer">
       <el-button @click="dialogVisible = false">取消</el-button>
       <el-button @click="onGrant">授权</el-button>
       <el-button @click="onSave">保存</el-button>
@@ -97,13 +122,21 @@
       :orgType="info.beCheckOrgType"
       @select="onSelectPoint"
     ></SelectPoint>
-  </el-dialog>
+    <UserSelector ref ="UserSelector"
+        @select="onUserSelect"
+        :selectLimit="1"
+    ></UserSelector>
+  </div>
 </template>
 <script>
 import * as api from "@/api/safetycheck/register.js";
 import dayjs from "dayjs";
 import SelectPoint from "../../ruleManager/dialog.select.point.vue";
+import imgUpload from "@/components/ImageUpload/index.vue";
+import UserSelector from "@/components/userSelector/index.vue"
+
 export default {
+  name: "safetyCheckRegister",
   data() {
     return {
       info: {},
@@ -114,14 +147,16 @@ export default {
       pointIdsWhenAdd: [],
     };
   },
-  dicts: ["rectification_deadline"],
-  components: { SelectPoint },
+  dicts: ["rectification_deadline","sys_user_is_lock"],
+  components: { SelectPoint, imgUpload,UserSelector },
   mounted() {
+    let id = this.$route.params.taskId;
     api.info(id).then((r) => {
       this.info = r.data;
     });
   },
   methods: {
+    dayjs,
     onAddPoint() {
       this.pointIdsWhenAdd = [];
       this.info.areaList.forEach((a) => {
@@ -131,11 +166,12 @@ export default {
           });
         });
       });
-      this.$ref.SelectPoint.show(this.pointIdsWhenAdd);
+      this.$refs.SelectPoint.show(this.pointIdsWhenAdd);
     },
     onSelectPoint(selectedList) {
       let hasNew = false;
-      for (let p in selectedList) {
+      for (let index in selectedList) {
+        let p = selectedList[index];
         if (this.pointIdsWhenAdd.indexOf(p.id) >= 0) {
           continue;
         }
@@ -146,7 +182,7 @@ export default {
           info.areaList.push(area);
         }
 
-        let item = area.itemList((i) => i.itemId == p.itemId);
+        let item = area.itemList.find((i) => i.itemId == p.itemId);
         if (!item) {
           item = { itemId: p.itemId, itemName: p.itemName, pointList: [] };
           area.itemList.push(item);
@@ -171,22 +207,49 @@ export default {
           hasNew = true;
         }
       }
+
       if (!hasNew) {
         this.$message.info("没有可新增的检查内容");
       }
     },
-    onDeletePoint(item, point) {
+    onDeletePoint(area, item, point) {
       if (point.isAdd === 0) {
         this.$message.warning("不可删除计划的检查内容");
         return;
       }
 
-      let index = item.indexOf(point);
+      let index = item.pointList.indexOf(point);
       if (index >= 0) {
         item.pointList.splice(index, 1);
       }
+
+      if (item.pointList.length === 0) {
+        index = area.itemList.indexOf(item);
+        area.itemList.splice(index, 1);
+      }
+
+      if (area.itemList.length === 0) {
+        index = this.info.areaList.indexOf(area);
+        this.info.areaList.splice(index, 1);
+      }
+    },
+    onImageChanged(point, value) {
+      point.imgData = value
+        .split(",")
+        .map((img) => ({ id: null, imgPath: img }));
+    },
+    onUserSelect(selected){
+        if(!selected || selected.length===0){
+            this.$message.warning("请选择要授权的人员")
+            return;
+        }
+
+        debugger
+        //调用授权
+    },
+    onGrant() {
+        this.$refs.UserSelector.show();
     },
-    onGrant() {},
     onSave() {
       this.info.isSubmit = false;
       api.submit(this.info).then((r) => {
@@ -195,8 +258,16 @@ export default {
     },
     async onSubmit() {
       let isOk = true;
-      for (let p in this.$ref.forms) {
-        isOk &= await this.$ref.forms[p].validate();
+      let r = this.$refs;
+      for (let p in this.$refs) {
+        if (p.startsWith("point")) {
+          try {
+            isOk &= await this.$refs[p][0].validate();
+          } catch (e) {
+            isOk &= false;
+            console.error(e);
+          }
+        }
       }
       if (isOk) {
         this.info.isSubmit = true;
@@ -206,14 +277,68 @@ export default {
   },
 };
 </script>
-<style lan="scss" scoped>
+<style lang="scss" scoped>
 .content {
-  border: black 1px solid;
+  max-height: calc(100% - 300px);
+  overflow-y: auto;
+  margin-bottom: 20px;
+  margin-top: 20px;
 }
-.content:first-child {
-  background-color: #c4c4c4;
+.area_content {
+  border: #797979 1px solid;
+  display: flex;
+  flex-direction: row;
+}
+
+.content > .area_content:first-child {
+  border-bottom: none;
+}
+
+.content > .area_content:last-child {
+  border-bottom: #797979 1px solid;
+}
+
+.area_content > div:nth-child(1) {
+  background-color: #f7f7f7;
+  border-right: #797979 1px solid;
   padding-top: auto;
-  padding-bottom: auto;
+  width: 15%;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  text-align: center;
+}
+
+.area_content > div:nth-child(2) {
+  width: 80%;
+  padding-left: 10px;
+}
+
+.safetycheck_item {
+  margin: 10px;
+  margin-bottom: 20px;
+}
+
+.safetycheck_point {
+  padding-top: 10px;
+  padding-left: 30px;
+}
+// .safetycheck_point > div:nth-child(1) {
+//   margin-bottom: 15px;
+// }
+.pointName {
+  width: 200px;
+  display: inline-block;
+}
+.dialog-footer {
+  width: 100%;
+  text-align: right;
+  border-top: #797979 1px solid;
+  padding-top: 10px;
+  padding-right: 30px;
+  position: absolute;
+  bottom: 30px;
+  right: 0px;
 }
 .circle {
   display: inline-block;