Browse Source

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

zhulu 2 years ago
parent
commit
4614430350

+ 1 - 1
package.json

@@ -46,7 +46,7 @@
     "element-ui": "2.15.12",
     "file-saver": "2.0.5",
     "fuse.js": "6.4.3",
-    "highlight.js": "9.18.5",
+    "highlight.js": "10.7.3",
     "js-beautify": "1.13.0",
     "js-cookie": "3.0.1",
     "jsencrypt": "3.0.0-rc.1",

+ 7 - 1
src/api/system/user.js

@@ -18,7 +18,13 @@ export function dictionListUser(query) {
     params: query
   })
 }
-
+export function selectrolesByOrgId(query) {
+  return request({
+    url: '/system/user/selectrolesByOrgId',
+    method: 'get',
+    params: query
+  })
+}
 
 // 查询用户详细
 export function getUser(userId) {

+ 6 - 2
src/components/elDialog/dialog.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-dialog v-bind="$attrs" v-on="$listeners" :close-on-click-modal="false">
+    <el-dialog :close="close" v-bind="$attrs" v-on="$listeners" :close-on-click-modal="false">
       <slot></slot>
       <slot name="footer" class="dialog-footer"></slot>
     </el-dialog>
@@ -16,7 +16,11 @@ export default {
 
   mounted() {},
 
-  methods: {},
+  methods: {
+    close(){
+      this.$emit("close");
+    }
+  },
 };
 </script>
 <style lang="scss">

+ 99 - 84
src/components/orgTreeSelect/index.vue

@@ -34,7 +34,7 @@
             v-for="dict in dict.type.sys_org_type"
             :key="dict.value"
             :label="dict.label"
-            :value="`${dict.value}`"
+            :value="parseInt(dict.value)"
           ></el-option>
         </el-select>
       </el-col>
@@ -63,7 +63,7 @@
 </template>
 
 <script>
-import { deptTreeSelect } from "@/api/system/public";
+import {deptTreeSelect} from "@/api/system/public";
 
 export default {
   dicts: ["sys_org_type"],
@@ -77,6 +77,11 @@ export default {
       default: false,
       required: false,
     },
+    queryData: {
+      type: Number,
+      default: null,
+      required: false,
+    },
   },
   data() {
     return {
@@ -128,97 +133,107 @@ export default {
         }
       },
     },
-    // queryForm: {
-    //   deep: true,
-    //   handler(n, o) {
+    queryData: {
+      handler(n) {
+        if (n) {
+          this.queryForm.type = parseInt(n);
+          this.serchTreeHandler();
+        }
+      },
+      // queryForm: {
+      //   deep: true,
+      //   handler(n, o) {
 
-    //     if(!n.value&&!n.type){
-    //       this.$refs.tree.filter({});
-    //     }else{
+      //     if(!n.value&&!n.type){
+      //       this.$refs.tree.filter({});
+      //     }else{
 
-    //       this.$refs.tree.filter(n);
-    //     }
-    //   },
-    // },
-  },
-  // computed: {
-  //   defaultNode:
-  //   //pv: sync("value"),
-  // },
-  model: {
-    prop: "defaultNode",
-    event: "change",
-  },
-  methods: {
-    clear() {
-      this.sNodeList = [];
-      this.$refs.tree.setCheckedKeys([]);
-      this.$refs.tree.setCurrentKey(null);
-      this.$emit("selectNode", JSON.stringify(this.sNodeList));
-    },
-    //筛选条件变化
-    serchTreeHandler() {
-      this.$refs.tree.filter(this.queryForm);
+      //       this.$refs.tree.filter(n);
+      //     }
+      //   },
+      // },
     },
-    /** 查询机构树 */
-    getDeptTree() {
-      deptTreeSelect().then((response) => {
-        this.orgTree = response.data;
-      });
-    },
-    filterNode(value, data, node) {
-      if (this.queryForm.value && this.queryForm.type) {
-        return (
-          data.name.indexOf(this.queryForm.value) !== -1 &&
-          data.type == this.queryForm.type
-        );
-      }
-      if (this.queryForm.value) {
-        return data.name.indexOf(this.queryForm.value) !== -1;
-      }
-      if (this.queryForm.type) {
-        return data.type == this.queryForm.type;
-      }
-      return true;
+    // computed: {
+    //   defaultNode:
+    //   //pv: sync("value"),
+    // },
+    model: {
+      prop: "defaultNode",
+      event: "change",
     },
+  },
+    methods: {
+      clear() {
+        this.sNodeList = [];
+        this.$refs.tree.setCheckedKeys([]);
+        this.$refs.tree.setCurrentKey(null);
+        this.$emit("selectNode", JSON.stringify(this.sNodeList));
+      },
+      //筛选条件变化
+      serchTreeHandler() {
+        this.$refs.tree.filter(this.queryForm);
+      },
+      /** 查询机构树 */
+      getDeptTree() {
+        deptTreeSelect().then((response) => {
+          this.orgTree = response.data;
+        });
+      },
+      filterNode(value, data, node) {
+        if (this.queryForm.value && this.queryForm.type) {
+          return (
+            data.name.indexOf(this.queryForm.value) !== -1 &&
+            data.type == this.queryForm.type
+          );
+        }
+        if (this.queryForm.value) {
+          return data.name.indexOf(this.queryForm.value) !== -1;
+        }
+        if (this.queryForm.type) {
+          return data.type == this.queryForm.type;
+        }
+        return true;
+      },
 
-    handleNodeClick() {},
-    onCheck(data, checked, tree) {
-      if (this.checked) {
-        //当前按过滤机构类型勾选
-
-        //递归查询
-        this.recursionTreeHandler(this.queryForm.type, [data]);
-      }
-      // debugger;
-      this.sNodeList = this.$refs.tree.getCheckedNodes();
-      this.$emit("selectNode", JSON.stringify(this.sNodeList));
-    },
-    recursionTreeHandler(type, tree) {
-      tree.forEach((item) => {
-        if (type == item.type) {
-          this.$refs.tree.setCheckedKeys([item.id])
+      handleNodeClick() {
+      },
+      onCheck(data, checked, tree) {
+        if (this.checked) {
+          //当前按过滤机构类型勾选
 
+          //递归查询
+          this.recursionTreeHandler(this.queryForm.type, [data]);
         }
-      });
-      if (tree.children && tree.children.length > 0) {
-        this.recursionTreeHandler(type,tree.children)
-      } else {
-        return;
-      }
-    },
-    getSubOrgIdsByOrgType(topOrg, orgType, orgIdList) {
-      if (!topOrg) return;
-      if (topOrg.type == orgType) {
-        orgIdList.push(topOrg);
-      }
-      if (topOrg.children && topOrg.children.length > 0) {
-        topOrg.children.forEach((item) => {
-          this.getSubOrgIdsByOrgType(item, orgType, orgIdList);
+        // debugger;
+        this.sNodeList = this.$refs.tree.getCheckedNodes();
+        this.$emit("selectNode", JSON.stringify(this.sNodeList));
+      },
+      recursionTreeHandler(type, tree) {
+        tree.forEach((item) => {
+          if (type == item.type) {
+            this.$refs.tree.setCheckedKeys([item.id])
+
+          }
         });
-      }
+        if (tree.children && tree.children.length > 0) {
+          this.recursionTreeHandler(type, tree.children)
+        } else {
+          return;
+        }
+      },
+      getSubOrgIdsByOrgType(topOrg, orgType, orgIdList) {
+        if (!topOrg) return;
+        if (topOrg.type == orgType) {
+          orgIdList.push(topOrg);
+        }
+        if (topOrg.children && topOrg.children.length > 0) {
+          topOrg.children.forEach((item) => {
+            this.getSubOrgIdsByOrgType(item, orgType, orgIdList);
+          });
+        }
+      },
     },
-  },
+
 };
 </script>
 

+ 1 - 2
src/directive/permission/hasPermi.js

@@ -18,10 +18,9 @@ export default {
       const hasPermissions = permissions.some(permission => {
         return all_permission === permission || permissionFlag.includes(permission)
       })
-
       if (!hasPermissions) {
+        //console.log(el.parentNode,'el')
         el.parentNode && el.parentNode.removeChild(el);
-        //console.log(el,'el.parentNode')
       }
     } else {
       throw new Error(`请设置操作权限标签值`)

+ 13 - 14
src/views/core/accessPlan/index.vue

@@ -53,7 +53,7 @@
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
             <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-              v-hasPermi="['system:plan:add']">新增计划</el-button>
+              v-hasPermi="['core:accessPlan:add']">新增计划</el-button>
           </el-col>
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
         </el-row>
@@ -88,11 +88,11 @@
           <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
             <template slot-scope="scope">
               <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:plan:edit']">修改</el-button>
+                v-hasPermi="['core:accessPlan:edit']">修改</el-button>
               <el-button size="mini" type="text" v-if="scope.row.isDistribute == 0" icon="el-icon-add"
-                @click="handDistribute(scope.row)" v-hasPermi="['system:plan:add']">下发</el-button>
+                @click="handDistribute(scope.row)" v-hasPermi="['core:accessPlan:add']">下发</el-button>
               <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-                v-hasPermi="['system:device:remove']">删除</el-button>
+                v-hasPermi="['core:accessPlan:remove']">删除</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -152,7 +152,7 @@
           </el-date-picker>
         </el-form-item> -->
         <el-form-item prop="endTime" v-if="form.planCycle == 0" label="结束日期">
-          <el-date-picker v-model="form.endTime"  align="right" type="date"
+          <el-date-picker v-model="form.endTime"  :picker-options="endDatepickerOptions" align="right" type="date"
             placeholder="选择结束日期">
           </el-date-picker>
         </el-form-item>
@@ -202,7 +202,7 @@ export default {
         },
       },
       endDatepickerOptions: {
-        disabledDate: this.disabledDate,
+        disabledDate:this.disabledDate
       },
       // 遮罩层
       loading: true,
@@ -321,22 +321,21 @@ export default {
       this.handleQuery();
     },
     startDateChanged(time) {
-      debugger
-      console.log(time + "*********************")
+  
       if (this.form.startTime > this.form.endTime) {
         this.form.endTime = this.form.startTime;
       }
     },
     disabledDate(time) {
       //小于开始日期禁止选择
-      let startTiem = new Date();
-      startTime.setTime(startTiem.getTime() - 3600 * 1000 * 24);
+      let startTime = new Date();
+      startTime.setTime(startTime.getTime() - 3600 * 1000 * 24);
       if (this.form.startTime) {
-        startTiem = new Date(this.formatTime(this.form.startTiem, 'YYYY-MM-DD'));
-        startTiem.setTime(startTiem.getTime() - 3600 * 1000 * 24);
+        
+        startTime = new Date(this.formatTime(this.form.startTime, 'YYYY-MM-DD'));
+        startTime.setTime(startTime.getTime() - 3600 * 1000 * 24);
       }
-      debugger
-      return time.getTime() < new Date(startTiem).getTime()
+      return time.getTime() < new Date(startTime).getTime()
     },
     /** 搜索按钮操作 */
     handleQuery() {

+ 1 - 1
src/views/core/drill/task/index.vue

@@ -140,7 +140,7 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        checkSub: false,
+        checkSub: true,
         title: null,
         orgId: this.$store.getters.orgId,
         type: null,

+ 27 - 16
src/views/core/edu/plan/index.vue

@@ -135,7 +135,7 @@
       </el-col>
     </el-row>
     <!-- 添加或修改教育培训计划对话框 -->
-    <DialogCom :title="title" :visible.sync="open" width="800px" height="800px" append-to-body>
+    <DialogCom :title="title" :visible.sync="open" width="800px" height="800px" append-to-body @close="clear">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
           <el-col :span="12">
@@ -213,10 +213,14 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
+            <!--            <el-form-item label="培训机构" prop="planExecOrgIdList">
+                          <tree-select v-model="form.planExecOrgIdList" :options="deptOptions" :show-count="true"
+                                       :normalizer="tenantIdnormalizer" :props="{ checkStrictly: true, label: 'name' }"
+                                       placeholder="请选择培训机构"/>
+                        </el-form-item>-->
             <el-form-item label="培训机构" prop="planExecOrgIdList">
-              <tree-select v-model="form.planExecOrgIdList" :options="deptOptions" :show-count="true"
-                           :normalizer="tenantIdnormalizer" :props="{ checkStrictly: true, label: 'name' }"
-                           placeholder="请选择培训机构"/>
+              <org-tree-select :queryData="form.execOrgType" ref="orgTreeSelect" @selectNode="queryNode"
+                               placeholder="请选择培训机构"></org-tree-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -267,6 +271,7 @@ import {
   roleList,
   updatePlan
 } from "@/api/core/edu/plan";
+import OrgTreeSelect from '@/components/orgTreeSelect'
 import tableList from "@/mixins/tableList";
 import OrgTree from "@/components/orgTree";
 import {deptTreeSelect} from "@/api/system/public";
@@ -276,7 +281,7 @@ import DialogSelectFile from "./dialog.select.file.vue";
 export default {
   name: "Plan",
   dicts: ['plan_cycle', 'sys_org_type', 'plan_status', 'edu_plan_cycle'],
-  components: {OrgTree, KFileUpload, DialogSelectFile},
+  components: {OrgTreeSelect, OrgTree, KFileUpload, DialogSelectFile},
   mixins: [tableList],
   data() {
     return {
@@ -301,6 +306,7 @@ export default {
       isUnfold: false,
       defaultSelect: [],
       orgId: null,
+      type:null,
       // 查询参数
       queryParams: {
         execOrgType: null,
@@ -311,7 +317,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         belongOrgId: null,
-        checkSub:true
+        checkSub: true
 
       },
       formFileListDefualtValue:[],
@@ -360,6 +366,14 @@ export default {
     this.orgId = this.$store.getters.orgId;
   },
   methods: {
+    clear() {
+      this.$refs['orgTreeSelect'].clear();
+    },
+    queryNode(nodes) {
+      this.form.planExecOrgIdList = JSON.parse(nodes).map(v => {
+        return v.id
+      });
+    },
     /** 查询教育培训计划列表 */
     getList() {
       this.loading = true;
@@ -410,7 +424,7 @@ export default {
     },
     checkCanDel(row) {
       //计划创建机构为当前机构且不是顶级机构创建的计划才显示“删除”按钮
-      return row.belongOrgId == this.$store.getters.orgId && row.createByTopOrg == 1 && row.issue == 0 || row.done !=1
+      return row.belongOrgId == this.$store.getters.orgId && row.createByTopOrg == 1 && row.issue == 0 || row.done != 1
     },
     //省联社下发的计划不显示“删除”按钮
     checkCreateByTopOrg(row) {
@@ -430,6 +444,7 @@ export default {
     cancel() {
       this.open = false;
       this.reset();
+      this.$refs['orgTreeSelect'].clear();
     },
     // 表单重置
     reset() {
@@ -440,7 +455,7 @@ export default {
         execTimes: null,
         planStatus: null,
         execOrgType: null,
-        planExecOrgIdList: null,
+        planExecOrgIdList: [],
         startDate: null,
         endDate: null,
         buildTaskNow: null,
@@ -498,7 +513,6 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.initRoleList();
-      this.getDeptTree()
       this.reset();
       this.open = true;
       this.title = "添加教育培训计划";
@@ -506,7 +520,6 @@ export default {
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.initRoleList();
-      this.getDeptTree()
       this.reset();
       const id = row.id || this.ids
       getPlan(id).then(response => {
@@ -520,12 +533,11 @@ export default {
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
-          let request={...this.form};
-          if(this.form.planExecOrgIdList){
+          let request = {...this.form};
+          if (this.form.planExecOrgIdList) {
             const list = Array.isArray(this.form.planExecOrgIdList) ? this.form.planExecOrgIdList : [this.form.planExecOrgIdList];
-          request.planExecOrgIdList = list;
-        }
-          else{
+            request.planExecOrgIdList = list;
+          } else {
             request.planExecOrgIdList = [];
           }
           if (request.id != null) {
@@ -578,7 +590,6 @@ export default {
       this.$refs["DialogSelectFile"].show();
     },
     fileSelected(list) {
-      console.log("fileSelected", list);
       if (!list) return;
       list.forEach(x => {
         this.form.fileList = this.form.fileList.concat(x.fileList);

+ 2 - 2
src/views/core/edu/task/index.vue

@@ -11,7 +11,7 @@
       <el-form-item label="培训主题" prop="title">
         <el-input
           v-model="queryParams.title"
-          placeholder="请输入培训岗位"
+          placeholder="请输入培训主题"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -25,7 +25,7 @@
         </el-date-picker>
       </el-form-item>
       <el-form-item label="培训类型" prop="type">
-        <el-select v-model="queryParams.type" placeholder="请选择执行机构类型" clearable>
+        <el-select v-model="queryParams.type" placeholder="请选择培训类型" clearable>
             <el-option
               v-for="dict in dict.type.edu_type"
               :key="dict.value"

+ 2 - 1
src/views/core/materials/index.vue

@@ -20,7 +20,7 @@
 
 
           <el-form-item label="公开状态" prop="isOpen">
-            <el-select v-model="queryParams.isOpen" placeholder="请选择资料类型" clearable>
+            <el-select v-model="queryParams.isOpen" placeholder="请选择公开状态" clearable>
               <el-option v-for="item in openOption" :key="item.value" :label="item.label"
                          :value="item.value"></el-option>
             </el-select>
@@ -248,6 +248,7 @@ export default {
       formFileListDefualtValue:{},
       // 查询参数
       queryParams: {
+        checkSub:true,
         pageNum: 1,
         pageSize: 10,
         title: null,

+ 6 - 0
src/views/system/area/index.vue

@@ -183,6 +183,12 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        name: [
+          { required: true, message: '请输入区域名称', trigger: 'blur' },
+        ],
+        orgType: [
+          { required: true, message: '请选择机构类型', trigger: 'change' },
+        ],
       }
     };
   },

+ 2 - 2
src/views/system/bind/index.vue

@@ -266,9 +266,9 @@ export default {
       this.handleQuery();
     },
     changeSelectArea(val){
-    
       getAreaByOrg(val).then(response =>{
       this.roleOptions  = response.data;
+    this.  form.areaId=null
       })
     },
     
@@ -317,7 +317,7 @@ export default {
       this.form = {
         id: null,
         areaId: null,
-        enable: "1",
+        enable: "0",
         code: null,
         createTime: null,
         updateId: null,

+ 10 - 8
src/views/system/check/index.vue

@@ -88,7 +88,13 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="110px">
         <el-row>
           <el-col :span="16">
-            <el-form-item label="区域名称" prop="areaId">
+            <el-form-item label="归属部门" prop="orgId">
+              <treeselect v-model="form.orgId" :options="deptOptions" :show-count="true" :normalizer="tenantIdnormalizer"
+                :props="{ checkStrictly: true, label: 'name' }" placeholder="请选择归属部门" @select="changeSelectArea"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="16">
+            <el-form-item label="区域名称" v-if="form.orgId!=null" prop="areaId">
               <el-select v-model="form.areaId" placeholder="请选择区域名称">
                 <el-option v-for="item in roleOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
               </el-select>
@@ -99,12 +105,7 @@
           <el-input v-model="form.checkName" placeholder="请输入采集点名称" />
         </el-form-item>
         <el-row>
-          <el-col :span="16">
-            <el-form-item label="归属部门" prop="orgId">
-              <treeselect v-model="form.orgId" :options="deptOptions" :show-count="true" :normalizer="tenantIdnormalizer"
-                :props="{ checkStrictly: true, label: 'name' }" placeholder="请选择归属部门" />
-            </el-form-item>
-          </el-col>
+ 
         </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -121,7 +122,7 @@ import { listCheck, getCheck, delCheck, addCheck, updateCheck } from "@/api/syst
 import treeselect from '@riophae/vue-treeselect'
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import { deptTreeSelect } from "@/api/system/public";
-import { listArea } from "@/api/system/area";
+import { listArea,getAreaByOrg } from "@/api/system/area";
 export default {
   name: "Check",
   /** 引入基础minxins*/
@@ -228,6 +229,7 @@ export default {
 
       getAreaByOrg(val).then(response => {
         this.roleOptions = response.data;
+        this.form.areaId=null;
       })
     },
     /** 查询区域采集点列表 */

+ 10 - 6
src/views/system/device/index.vue

@@ -25,7 +25,7 @@
           </el-form-item>
           <el-form-item label="资产类别" prop="assetType">
 
-            <el-select style="width: 100%;" v-model="queryParams.assetType" placeholder="请选择">
+            <el-select style="width: 100%;" v-model="queryParams.assetType" placeholder="请选择" @change="changeSelectDevice">
               <el-option v-for="dict in dict.type.sys_asset_type" :key="dict.value" :label="dict.label"
                 :value="`${dict.value}`"></el-option>
             </el-select>
@@ -34,10 +34,10 @@
           <el-form-item label="设备分类" prop="deviceType">
 
             <el-select style="width: 100%;" v-model="queryParams.deviceType" placeholder="请选择">
-              <el-option v-for="dict in dict.type.sys_device_type" :key="dict.value" :label="dict.label"
-                :value="`${dict.value}`"></el-option>
+                <el-option v-for="item in devices" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
             </el-select>
-          </el-form-item>
+          </el-form-item> 
+
           <el-form-item>
             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -63,7 +63,7 @@
         <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="55" align="center" />
           <el-table-column label="所属机构" align="center" prop="orgName" />
-
+          <el-table-column label="设备品牌" align="center" prop="deviceName" />
           <el-table-column label="资产类别" align="center" key="assetType" prop="assetType" width="80">
             <template slot-scope="scope">
               <dict-tag :options="dict.type.sys_asset_type" :value="scope.row.assetType" />
@@ -244,6 +244,7 @@ export default {
       showSearch: true,
       // 总条数
       total: 0,
+      inparm: 0,
       // 【请填写功能名称】表格数据
       deviceList: [],
       devices: null,
@@ -292,6 +293,7 @@ export default {
   created() {
     this.getDeptTree();
     //this.getList();
+   
   },
   watch: {
     // 根据名称筛选部门树
@@ -417,7 +419,7 @@ export default {
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
-    handleAdd() {
+    handleAdd(val) {
       this.open = true;
       this.title = "新增";
       this.form.orgId = this.selectOrgId;
@@ -425,6 +427,8 @@ export default {
     changeSelectDevice(val) {
       getDeviceType(val).then(response => {
         this.devices = response.data;
+        this.form.deviceType=null;
+        this.queryParams.deviceType=null;
       })
     },
     /** 修改按钮操作 */

+ 54 - 29
src/views/system/user/index.vue

@@ -296,34 +296,44 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
           <el-col :span="10">
-            <el-form-item label="用户名称" prop="username"  >
+            <el-form-item label="用户名称" prop="username">
               <el-input
                 v-model="form.username"
                 placeholder="请输入用户名"
                 maxlength="30"
-              :readonly="form.source==1"/>
+                :readonly="form.source == 1"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="10">
-            <el-form-item label="用户昵称" prop="name" >
+            <el-form-item label="用户昵称" prop="name">
               <el-input
                 v-model="form.name"
                 placeholder="请输入用户昵称"
                 maxlength="30"
-              :readonly="form.source==1"/>
+                :readonly="form.source == 1"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="10">
-            <el-form-item label="所属机构" prop="orgId" >
-              <tree-select v-model="form.orgId" :options="deptOptions" :show-count="true" :normalizer="tenantIdnormalizer"
-                :props="{ checkStrictly: true, label: 'name' }" placeholder="请选择归属机构" :disabled="form.source==1"/>
+            <el-form-item label="所属机构" prop="orgId">
+              <tree-select
+                v-model="form.orgId"
+                :options="deptOptions"
+                :show-count="true"
+                :normalizer="tenantIdnormalizer"
+                :props="{ checkStrictly: true, label: 'name' }"
+                placeholder="请选择归属机构"
+                :disabled="form.source == 1"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="10">
             <el-form-item label="用户角色" prop="roleIds">
               <el-select
+              @visible-change="selectRoles"
                 style="width: 100%"
                 v-model="form.roleIds"
                 multiple
@@ -342,21 +352,22 @@
         </el-row>
         <el-row>
           <el-col :span="10">
-            <el-form-item label="手机号码" prop="phone" >
+            <el-form-item label="手机号码" prop="phone">
               <el-input
                 v-model="form.phone"
                 placeholder="请输入手机号码"
                 maxlength="11"
-              :readonly="form.source==1"/>
+                :readonly="form.source == 1"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="10">
-            <el-form-item label="用户性别" >
+            <el-form-item label="用户性别">
               <el-select
                 style="width: 100%"
                 v-model="form.gender"
                 placeholder="请选择性别"
-                :disabled="form.source==1"
+                :disabled="form.source == 1"
               >
                 <el-option
                   v-for="dict in dict.type.sys_user_sex"
@@ -393,12 +404,13 @@
         </el-row>
         <el-row>
           <el-col :span="14">
-            <el-form-item label="状态" >
+            <el-form-item label="状态">
               <el-radio-group v-model="form.isLock">
                 <el-radio
                   v-for="dict in dict.type.sys_normal_disable"
                   :key="`${dict.value}`"
-                  :label="dict.value" :disabled="form.source==1"
+                  :label="dict.value"
+                  :disabled="form.source == 1"
                   >{{ dict.label }}</el-radio
                 >
               </el-radio-group>
@@ -466,6 +478,7 @@ import {
   updateUser,
   resetUserPwd,
   changeUserStatus,
+  selectrolesByOrgId,
 } from "@/api/system/user";
 import { getToken } from "@/utils/auth";
 import { deptTreeSelect } from "@/api/system/public";
@@ -568,17 +581,21 @@ export default {
           { required: true, message: "用户角色不能为空", trigger: "blur" },
         ],
         password: [
-          { required: true, message: '密码不能为空', trigger: 'blur' },
-          { min: 8, message: '密码至少为8位', trigger: 'blur' },
+          { required: true, message: "密码不能为空", trigger: "blur" },
+          { min: 8, message: "密码至少为8位", trigger: "blur" },
           {
             validator: (rule, value, callback) => {
-              if (!/[a-z]/.test(value) || !/[A-Z]/.test(value) || !/\d/.test(value)) {
-                callback(new Error('密码必须包含大小写字母和数字'));
+              if (
+                !/[a-z]/.test(value) ||
+                !/[A-Z]/.test(value) ||
+                !/\d/.test(value)
+              ) {
+                callback(new Error("密码必须包含大小写字母和数字"));
               } else {
                 callback();
               }
             },
-            trigger: 'blur',
+            trigger: "blur",
           },
         ],
         orgId: [
@@ -614,6 +631,12 @@ export default {
   },
   mounted() {},
   methods: {
+    selectRoles(){
+      selectrolesByOrgId({orgId:this.form.orgId}).then((res)=>{
+        // console.log(res);
+        this.roleOptions=res.data;
+      })
+    },
     /** 查询机构树数据 */
     getDeptTree() {
       deptTreeSelect().then((response) => {
@@ -778,8 +801,8 @@ export default {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         closeOnClickModal: false,
-        inputPattern: /^.{5,20}$/,
-        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
+        inputPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,16}$/,
+        inputErrorMessage: "用户密码长度介于8和16之间,必须包含大小写字母和数字",
       })
         .then(({ value }) => {
           let data = {
@@ -821,12 +844,16 @@ export default {
     handleDelete(row) {
       console.log(row);
       const userIds = row.id || this.ids;
-      this.$modal.confirm('是否确认删除用户昵称为"' + row.name + '"的数据项?').then(function () {
-        return delUser(userIds);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("删除成功");
-      }).catch(() => { });
+      this.$modal
+        .confirm('是否确认删除用户昵称为"' + row.name + '"的数据项?')
+        .then(function () {
+          return delUser(userIds);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -877,6 +904,4 @@ export default {
 };
 </script>
 <style lang="scss"></style>
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss" scoped></style>

+ 8 - 1
src/views/system/workTimeSet/dialog.add.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="question-infos">
     <DialogCom title="新增作息" @close="handleClose" :visible.sync="isShow" :close-on-click-modal="false"
-      custom-class="gxDialog" width="75%" append-to-body>
+      custom-class="gxDialog" width="80%" append-to-body>
 <!--      <div class="p-5 work-time">-->
         <el-form label-width="90px" label-suffix=":" label-position="right">
 
@@ -19,6 +19,7 @@
                   <el-date-picker
                     style="width: 100%"
                     v-model="r.row.ymdDate"
+                    size="mini"
                     :clearable=false
                     popper-class="no-atTheMoment"
                     :picker-options="startDatepickerOptions"
@@ -56,6 +57,7 @@
                 <template slot-scope="r">
                   <el-time-select
                     style="width: 100%"
+                    size="mini"
                     :picker-options="pickerOptions"
                     :disabled="r.row.disabled || !r.row.isEnable"
                     v-model="r.row.workTime"/>
@@ -65,6 +67,7 @@
                 <template slot-scope="r">
                   <el-time-select
                     style="width: 100%"
+                    size="mini"
                     :picker-options="pickerOptions"
                     :disabled="r.row.disabled || !r.row.isEnable"
                     v-model="r.row.openTime"/>
@@ -74,6 +77,7 @@
                 <template slot-scope="r">
                   <el-time-select
                     style="width: 100%"
+                    size="mini"
                     :picker-options="pickerOptions"
                     :disabled="r.row.disabled || !r.row.isEnable"
                     v-model="r.row.noonbreakStart"/>
@@ -83,6 +87,7 @@
                 <template slot-scope="r">
                   <el-time-select
                     style="width: 100%"
+                    size="mini"
                     :picker-options="pickerOptions"
                     :disabled="r.row.disabled || !r.row.isEnable"
                     v-model="r.row.noonbreakEnd"/>
@@ -92,6 +97,7 @@
                 <template slot-scope="r">
                   <el-time-select
                     style="width: 100%"
+                    size="mini"
                     :picker-options="pickerOptions"
                     :disabled="r.row.disabled || !r.row.isEnable"
                     v-model="r.row.closeTime"/>
@@ -101,6 +107,7 @@
                 <template slot-scope="r">
                   <el-time-select
                     style="width: 100%"
+                    size="mini"
                     :picker-options="pickerOptions"
                     :disabled="r.row.disabled || !r.row.isEnable"
                     v-model="r.row.workOffTime"/>

+ 6 - 0
src/views/system/workTimeSet/dialog.template.vue

@@ -57,6 +57,7 @@
                   <template slot-scope="r">
                     <el-time-select
                       style="width: 100%"
+                      size="mini"
                       :picker-options="pickerOptions"
                       :disabled="!r.row.isWorkday || !r.row.isWorkday"
                       v-model="r.row.workTime"/>
@@ -66,6 +67,7 @@
                   <template slot-scope="r">
                     <el-time-select
                       style="width: 100%"
+                      size="mini"
                       :picker-options="pickerOptions"
                       :disabled="!r.row.isWorkday ||!r.row.isWorkday"
                       v-model="r.row.openTime"/>
@@ -75,6 +77,7 @@
                   <template slot-scope="r">
                     <el-time-select
                       style="width: 100%"
+                      size="mini"
                       :picker-options="pickerOptions"
                       :disabled="!r.row.isWorkday || !r.row.isWorkday"
                       v-model="r.row.noonbreakStart"/>
@@ -84,6 +87,7 @@
                   <template slot-scope="r">
                     <el-time-select
                       style="width: 100%"
+                      size="mini"
                       :picker-options="pickerOptions"
                       :disabled="!r.row.isWorkday || !r.row.isWorkday"
                       v-model="r.row.noonbreakEnd"/>
@@ -93,6 +97,7 @@
                   <template slot-scope="r">
                     <el-time-select
                       style="width: 100%"
+                      size="mini"
                       :picker-options="pickerOptions"
                       :disabled="!r.row.isWorkday || !r.row.isWorkday"
                       v-model="r.row.closeTime"/>
@@ -102,6 +107,7 @@
                   <template slot-scope="r">
                     <el-time-select
                       style="width: 100%"
+                      size="small"
                       :picker-options="pickerOptions"
                       :disabled="!r.row.isWorkday || !r.row.isWorkday"
                       v-model="r.row.workOffTime"/>

+ 1 - 1
src/views/system/workTimeSet/index.vue

@@ -5,7 +5,7 @@
       <el-tab-pane label="作息配置" name="作息配置">
         <work-time></work-time>
       </el-tab-pane>
-      <el-tab-pane v-hasPermi="['system:time:query']" label="按周配置作息" name="按周配置作息">
+      <el-tab-pane v-hasPermi="['system:time:week']" label="按周配置作息" name="按周配置作息" lazy>
         <work-time-week ></work-time-week>
       </el-tab-pane>
     </el-tabs>

+ 2 - 2
src/views/system/workTimeSet/workTime.vue

@@ -78,7 +78,7 @@
               size="mini"
               icon="el-icon-thumb"
               @click="clickAdd"
-              v-hasPermi="['system:user:add']"
+              v-hasPermi="['system:time:add']"
             >指定日期配置</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -122,7 +122,7 @@
           </el-table-column>
           <el-table-column v-if="columns[8].visible" label="操作列表" width="100" >
             <template slot-scope="r">
-              <el-button type="text"  v-hasPermi="['system:user:edit']" @click="onEditTime(r.row)">编辑</el-button>
+              <el-button type="text"  v-hasPermi="['system:time:edit']" @click="onEditTime(r.row)">编辑</el-button>
             </template>
           </el-table-column>
         </el-table>