Browse Source

Merge branch 'dev' of http://10.87.10.227:4000/jzyd_yyds/soc_web into dev

jiawuxian 2 years ago
parent
commit
3d0efb7053

+ 5 - 3
.env.development

@@ -6,11 +6,13 @@ ENV = 'development'
 
 # 开发环境
 #测试地址
-#VUE_APP_BASE_API = 'http://10.87.10.55:8081/'
+#VUE_APP_BASE_API = 'http://10.87.10.55:8081'
 #罗俊
-VUE_APP_BASE_API = 'http://10.87.10.49:8080/'
+VUE_APP_BASE_API = 'http://10.87.10.49:8080'
 #罗伟
-# VUE_APP_BASE_API = 'http://10.87.11.94:8080/'
+#VUE_APP_BASE_API = 'http://10.87.10.47:8080'
+#高雄
+#VUE_APP_BASE_API = 'http://10.87.11.94:8080'
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 

+ 5 - 2
package.json

@@ -10,7 +10,8 @@
     "build:prod": "vue-cli-service build",
     "build:stage": "vue-cli-service build --mode staging",
     "preview": "node build/index.js --preview",
-    "lint": "eslint --ext .js,.vue src"
+    "lint": "eslint --ext .js,.vue src",
+    "webpack": "webpack --version"
   },
   "husky": {
     "hooks": {
@@ -74,6 +75,7 @@
     "connect": "3.6.6",
     "eslint": "7.15.0",
     "eslint-plugin-vue": "7.2.0",
+    "html-webpack-plugin": "^5.5.3",
     "lint-staged": "10.5.3",
     "runjs": "4.4.2",
     "sass": "1.32.13",
@@ -81,7 +83,8 @@
     "script-ext-html-webpack-plugin": "2.1.5",
     "svg-sprite-loader": "5.1.1",
     "vue-template-compiler": "2.6.12",
-    "webpack": "^5.88.2"
+    "webpack": "^5.88.2",
+    "webpack-cli": "^5.1.4"
   },
   "engines": {
     "node": ">= 10.0",

BIN
public/favicon.ico


+ 1 - 1
public/index.html

@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="renderer" content="webkit">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <link rel="icon" href="<%= BASE_URL %>favicon.png">
     <title><%= webpackConfig.name %></title>
     <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
 	  <style>

+ 0 - 44
src/api/system/BankPhysicalDefenseConstruction.js

@@ -1,44 +0,0 @@
-import request from '@/utils/request'
-
-// 查询银行物防建设列表
-export function listBankPhysicalDefenseConstruction(query) {
-  return request({
-    url: '/system/BankPhysicalDefenseConstruction/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询银行物防建设详细
-export function getBankPhysicalDefenseConstruction(id) {
-  return request({
-    url: '/system/BankPhysicalDefenseConstruction/' + id,
-    method: 'get'
-  })
-}
-
-// 新增银行物防建设
-export function addBankPhysicalDefenseConstruction(data) {
-  return request({
-    url: '/system/BankPhysicalDefenseConstruction',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改银行物防建设
-export function updateBankPhysicalDefenseConstruction(data) {
-  return request({
-    url: '/system/BankPhysicalDefenseConstruction',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除银行物防建设
-export function delBankPhysicalDefenseConstruction(id) {
-  return request({
-    url: '/system/BankPhysicalDefenseConstruction/' + id,
-    method: 'delete'
-  })
-}

+ 5 - 5
src/api/system/OrgPhysicalDefenseConstruction.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 查询机构物防建设列表
 export function listOrgPhysicalDefenseConstruction(query) {
   return request({
-    url: '/system/OrgPhysicalDefenseConstruction/list',
+    url: '/system/PhysicalDefenseConstruction/list',
     method: 'get',
     params: query
   })
@@ -12,7 +12,7 @@ export function listOrgPhysicalDefenseConstruction(query) {
 // 查询机构物防建设详细
 export function getOrgPhysicalDefenseConstruction(id) {
   return request({
-    url: '/system/OrgPhysicalDefenseConstruction/' + id,
+    url: '/system/PhysicalDefenseConstruction/' + id,
     method: 'get'
   })
 }
@@ -20,7 +20,7 @@ export function getOrgPhysicalDefenseConstruction(id) {
 // 新增机构物防建设
 export function addOrgPhysicalDefenseConstruction(data) {
   return request({
-    url: '/system/OrgPhysicalDefenseConstruction',
+    url: '/system/PhysicalDefenseConstruction',
     method: 'post',
     data: data
   })
@@ -29,7 +29,7 @@ export function addOrgPhysicalDefenseConstruction(data) {
 // 修改机构物防建设
 export function updateOrgPhysicalDefenseConstruction(data) {
   return request({
-    url: '/system/OrgPhysicalDefenseConstruction',
+    url: '/system/PhysicalDefenseConstruction',
     method: 'put',
     data: data
   })
@@ -38,7 +38,7 @@ export function updateOrgPhysicalDefenseConstruction(data) {
 // 删除机构物防建设
 export function delOrgPhysicalDefenseConstruction(id) {
   return request({
-    url: '/system/OrgPhysicalDefenseConstruction/' + id,
+    url: '/system/PhysicalDefenseConstruction/' + id,
     method: 'delete'
   })
 }

+ 58 - 0
src/api/system/information.js

@@ -0,0 +1,58 @@
+import request from '@/utils/request'
+
+// 查询【请填写功能名称】列表
+export function listInformation(query) {
+  return request({
+    url: '/system/information/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询【请填写功能名称】详细
+export function getInformation(id) {
+  return request({
+    url: '/system/information/' + id,
+    method: 'get'
+  })
+}
+
+export function getInformationByUserId(userId) {
+  return request({
+    url: '/system/information/getInformationByUserId/' + userId,
+    method: 'get'
+  })
+}
+
+// 新增【请填写功能名称】
+export function addInformation(data) {
+  return request({
+    url: '/system/information',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改【请填写功能名称】
+export function updateInformation(data) {
+  return request({
+    url: '/system/information',
+    method: 'put',
+    data: data
+  })
+}
+// 扩展
+export function extendUserInformation(data) {
+  return request({
+    url: '/system/information/extendUser',
+    method: 'put',
+    data: data
+  })
+}
+// 删除【请填写功能名称】
+export function delInformation(id) {
+  return request({
+    url: '/system/information/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/system/knowledge.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询列表知识库标签
+export function listKnowledge(query) {
+  return request({
+    url: '/system/knowledge/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询详细知识库标签
+export function getKnowledge(id) {
+  return request({
+    url: '/system/knowledge/' + id,
+    method: 'get'
+  })
+}
+
+// 新增知识库标签
+export function addKnowledge(data) {
+  return request({
+    url: '/system/knowledge',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改知识库标签
+export function updateKnowledge(data) {
+  return request({
+    url: '/system/knowledge',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除知识库标签
+export function delKnowledge(id) {
+  return request({
+    url: '/system/knowledge/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/system/materials.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询列表学习资料
+export function listMaterials(query) {
+  return request({
+    url: '/system/materials/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询详细学习资料
+export function getMaterials(id) {
+  return request({
+    url: '/system/materials/' + id,
+    method: 'get'
+  })
+}
+
+// 新增学习资料
+export function addMaterials(data) {
+  return request({
+    url: '/system/materials',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改学习资料
+export function updateMaterials(data) {
+  return request({
+    url: '/system/materials',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除学习资料
+export function delMaterials(id) {
+  return request({
+    url: '/system/materials/' + id,
+    method: 'delete'
+  })
+}

+ 17 - 2
src/api/system/public.js

@@ -1,8 +1,23 @@
 import request from '@/utils/request'
-// 查询机构下拉树结构
+// 查询部门下拉树结构
 export function deptTreeSelect() {
     return request({
       url: '/system/dept/deptTree',
       method: 'get'
     })
-  }
+  }
+// 查询文件
+export function getFile(code) {
+  return request({
+    url: '/file/file/getFile/' +code,
+    method: 'get'
+  })
+}
+
+  // 查询机构下拉树结构
+export function deptTreeList() {
+  return request({
+    url: '/system/dept/sysDeptTree',
+    method: 'get'
+  })
+}

+ 13 - 4
src/components/ImageUpload/index.vue

@@ -19,7 +19,7 @@
     >
       <i class="el-icon-plus"></i>
     </el-upload>
-    
+
     <!-- 上传提示 -->
     <div class="el-upload__tip" slot="tip" v-if="showTip">
       请上传
@@ -44,6 +44,7 @@
 
 <script>
 import { getToken } from "@/utils/auth";
+import {getFile} from "@/api/system/public";
 
 export default {
   props: {
@@ -76,7 +77,7 @@ export default {
       dialogImageUrl: "",
       dialogVisible: false,
       hideUpload: false,
-      uploadImgUrl: process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
+      uploadImgUrl: process.env.NODE_ENV === 'development'? '/dev-api'+ "/file/file/upload" : process.env.VUE_APP_BASE_API + "/file/file/upload", // 上传的图片服务器地址
       headers: {
         Authorization: "Bearer " + getToken(),
       },
@@ -136,7 +137,7 @@ export default {
       if (this.fileSize) {
         const isLt = file.size / 1024 / 1024 < this.fileSize;
         if (!isLt) {
-          this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
+          this.$modal.msgError(`上传图片大小不能超过 ${this.fileSize} MB!`);
           return false;
         }
       }
@@ -149,9 +150,16 @@ export default {
     },
     // 上传成功回调
     handleUploadSuccess(res, file) {
+      console.log(res,'res')
       if (res.code === 200) {
-        this.uploadList.push({ name: res.data.url, url: res.data.url });
+        let imgUrl = process.env.VUE_APP_BASE_API + res.data.url
+        this.uploadList.push({ name: res.data.name, url: imgUrl});
         this.uploadedSuccessfully();
+
+          // let str = res.data.code;
+          // let blob = new Blob([str],{type:'image/jpeg'});
+          // let imgUrl = window.URL.createObjectURL(blob);
+          // debugger
       } else {
         this.number--;
         this.$modal.closeLoading();
@@ -179,6 +187,7 @@ export default {
         this.fileList = this.fileList.concat(this.uploadList);
         this.uploadList = [];
         this.number = 0;
+        console.log(this.listToString(this.fileList),'ppppp')
         this.$emit("input", this.listToString(this.fileList));
         this.$modal.closeLoading();
       }

+ 95 - 0
src/components/orgTree/index.vue

@@ -0,0 +1,95 @@
+<template>
+  <div>
+    <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="tree-container">
+      <div style="margin-bottom: 10px;">
+        <el-checkbox v-model="checkSub" @change="changeCheckBox">是否关联下级机构</el-checkbox>
+      </div>
+      <el-tree
+        :data="treeList"
+        :props="defaultProps"
+        :expand-on-click-node="false"
+        :filter-node-method="filterNode"
+        ref="tree"
+        node-key="id"
+        :default-expanded-keys="defaultKeys"
+        :default-checked-keys="defaultKeys"
+        @node-click="handleNodeClick"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import tableListMixins from "@/mixins/tableList";
+import {deptTreeSelect} from "@/api/system/public";
+
+export default {
+  name: "orgTree",
+  mixins:[tableListMixins],
+  data(){
+    return {
+      //过滤信息
+      deptName:'',
+      //是否关联下级
+      checked: false,
+      // 机构树列表
+      treeList: [],
+      //默认选中节点
+      defaultKeys:[],
+      //自定义取值
+      defaultProps: {
+        children: "children",
+        label: "name"
+      },
+      checkSub:false,
+      defaultKey:null,
+    }
+  },
+  watch: {
+    // 根据名称筛选机构树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getDeptTree();
+  },
+  methods:{
+    /** 下穿状态改变*/
+    changeCheckBox(state){
+      this.$emit('checkChange',state);
+    },
+    /** 查询机构下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.treeList = response.data;
+        this.defaultKeys.push(response.data[0].id);
+        this.$emit('defaultKey',response.data[0].id);
+        this.defaultKey = response.data[0].id;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.$emit('click',data);
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 4 - 0
src/main.js

@@ -11,6 +11,7 @@ import plugins from './plugins' // plugins
 import { download } from '@/utils/request'
 import './assets/icons' // icon
 import './permission' // permission control
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import { getDicts } from "@/api/system/dict/data";
 import { getConfigKey } from "@/api/system/config";
 import {
@@ -40,6 +41,8 @@ import DictTag from '@/components/DictTag'
 import VueMeta from 'vue-meta'
 // 字典数据组件
 import DictData from '@/components/DictData'
+// 下拉tree组件
+import TreeSelect from "@riophae/vue-treeselect";
 
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
@@ -68,6 +71,7 @@ Vue.component('Editor', Editor)
 Vue.component('FileUpload', FileUpload)
 Vue.component('ImageUpload', ImageUpload)
 Vue.component('ImagePreview', ImagePreview)
+Vue.component('TreeSelect', TreeSelect)
 
 Vue.use(directive)
 Vue.use(plugins)

+ 31 - 0
src/router/index.js

@@ -41,6 +41,22 @@ export const constantRoutes = [
       }
     ]
   },
+
+    //用户管理扩展
+    {
+      path: '/system/user-information',
+      component: Layout,
+      hidden: true,
+      permissions: ['system:user:list'],
+      children: [
+        {
+          path: 'information/:id(\\d+)',
+          component: () => import('@/views/system/user/information'),
+          name: 'Data',
+          meta: { title: '用户信息管理', activeMenu: '/system/user' }
+        }
+      ]
+    },
 // {
   //   //自己添加的公开路由页面,不要添加在动态路由中!
   //   path: '/dept/extend',
@@ -61,6 +77,7 @@ export const constantRoutes = [
       }
     ]
   },
+
   {
     path: '/login',
     component: () => import('@/views/login'),
@@ -113,6 +130,20 @@ export const constantRoutes = [
 // 动态路由,基于用户权限动态去加载
 export const dynamicRoutes = [
   {
+    path: '/system/user-extend',
+    component: Layout,
+    hidden: true,
+    permissions: ['system:user:extend'],
+    children: [
+      {
+        path: 'extend/:userId(\\d+)',
+        component: () => import('@/views/system/user/extend'),
+        name: 'UserExtend',
+        meta: { title: '用户信息扩展', activeMenu: '/system/user' }
+      }
+    ]
+  },
+  {
     path: '/system/user-auth',
     component: Layout,
     hidden: true,

File diff suppressed because it is too large
+ 548 - 238
src/views/system/dept/extend.vue


+ 7 - 6
src/views/system/dept/index.vue

@@ -92,12 +92,13 @@
 
           <router-link :to="'/system/dept-extend/extend/'+ scope.row.id " class="link-type">
 
-            <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            >扩展</el-button
-          >
+              <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-edit"
+              v-hasPermi="['system:dept:extend']"
+              >扩展</el-button
+            >
           </router-link>
           <el-button
             size="mini"

+ 471 - 0
src/views/system/information/index.vue

@@ -0,0 +1,471 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="所属部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入所属部门ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="职务ID" prop="dutiesId">
+        <el-input
+          v-model="queryParams.dutiesId"
+          placeholder="请输入职务ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否专职0是1否" prop="isFullTime">
+        <el-input
+          v-model="queryParams.isFullTime"
+          placeholder="请输入是否专职0是1否"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最高学历" prop="highestEducation">
+        <el-input
+          v-model="queryParams.highestEducation"
+          placeholder="请输入最高学历"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否持证上岗" prop="certificateWork">
+        <el-input
+          v-model="queryParams.certificateWork"
+          placeholder="请输入是否持证上岗"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="初级以上相关专业技术职业资格" prop="professionalQualifications">
+        <el-input
+          v-model="queryParams.professionalQualifications"
+          placeholder="请输入初级以上相关专业技术职业资格"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="持证上岗未通过原因" prop="certificateFailReason">
+        <el-input
+          v-model="queryParams.certificateFailReason"
+          placeholder="请输入持证上岗未通过原因"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="参加工作时间" prop="workTime">
+        <el-date-picker clearable
+          v-model="queryParams.workTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择参加工作时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="入职现在公司的时间" prop="entryTime">
+        <el-date-picker clearable
+          v-model="queryParams.entryTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择入职现在公司的时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="出生时间" prop="bornTime">
+        <el-date-picker clearable
+          v-model="queryParams.bornTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择出生时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="分管领导名字" prop="responsibilitiesLeaderName">
+        <el-input
+          v-model="queryParams.responsibilitiesLeaderName"
+          placeholder="请输入分管领导名字"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分管领导职务" prop="responsibilitiesLeaderDuties">
+        <el-input
+          v-model="queryParams.responsibilitiesLeaderDuties"
+          placeholder="请输入分管领导职务"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="资格证" prop="qualificationCertificateUrl">
+        <el-input
+          v-model="queryParams.qualificationCertificateUrl"
+          placeholder="请输入资格证"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </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>
+      </el-form-item>
+    </el-form>
+
+    <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:information:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:information:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:information:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:information:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="informationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="${comment}" align="center" prop="id" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="所属部门ID" align="center" prop="deptId" />
+      <el-table-column label="职务ID" align="center" prop="dutiesId" />
+      <el-table-column label="用工形式" align="center" prop="workType" />
+      <el-table-column label="是否专职0是1否" align="center" prop="isFullTime" />
+      <el-table-column label="最高学历" align="center" prop="highestEducation" />
+      <el-table-column label="学历取得形式" align="center" prop="educationType" />
+      <el-table-column label="是否持证上岗" align="center" prop="certificateWork" />
+      <el-table-column label="初级以上相关专业技术职业资格" align="center" prop="professionalQualifications" />
+      <el-table-column label="持证上岗未通过原因" align="center" prop="certificateFailReason" />
+      <el-table-column label="参加工作时间" align="center" prop="workTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.workTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="入职现在公司的时间" align="center" prop="entryTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.entryTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="出生时间" align="center" prop="bornTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.bornTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="分管领导名字" align="center" prop="responsibilitiesLeaderName" />
+      <el-table-column label="分管领导职务" align="center" prop="responsibilitiesLeaderDuties" />
+      <el-table-column label="资格证" align="center" prop="qualificationCertificateUrl" />
+      <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:information:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:information:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改【请填写功能名称】对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="所属部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入所属部门ID" />
+        </el-form-item>
+        <el-form-item label="职务ID" prop="dutiesId">
+          <el-input v-model="form.dutiesId" placeholder="请输入职务ID" />
+        </el-form-item>
+        <el-form-item label="是否专职0是1否" prop="isFullTime">
+          <el-input v-model="form.isFullTime" placeholder="请输入是否专职0是1否" />
+        </el-form-item>
+        <el-form-item label="最高学历" prop="highestEducation">
+          <el-input v-model="form.highestEducation" placeholder="请输入最高学历" />
+        </el-form-item>
+        <el-form-item label="是否持证上岗" prop="certificateWork">
+          <el-input v-model="form.certificateWork" placeholder="请输入是否持证上岗" />
+        </el-form-item>
+        <el-form-item label="初级以上相关专业技术职业资格" prop="professionalQualifications">
+          <el-input v-model="form.professionalQualifications" placeholder="请输入初级以上相关专业技术职业资格" />
+        </el-form-item>
+        <el-form-item label="持证上岗未通过原因" prop="certificateFailReason">
+          <el-input v-model="form.certificateFailReason" placeholder="请输入持证上岗未通过原因" />
+        </el-form-item>
+        <el-form-item label="参加工作时间" prop="workTime">
+          <el-date-picker clearable
+            v-model="form.workTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择参加工作时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="入职现在公司的时间" prop="entryTime">
+          <el-date-picker clearable
+            v-model="form.entryTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择入职现在公司的时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="出生时间" prop="bornTime">
+          <el-date-picker clearable
+            v-model="form.bornTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择出生时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="分管领导名字" prop="responsibilitiesLeaderName">
+          <el-input v-model="form.responsibilitiesLeaderName" placeholder="请输入分管领导名字" />
+        </el-form-item>
+        <el-form-item label="分管领导职务" prop="responsibilitiesLeaderDuties">
+          <el-input v-model="form.responsibilitiesLeaderDuties" placeholder="请输入分管领导职务" />
+        </el-form-item>
+        <el-form-item label="资格证" prop="qualificationCertificateUrl">
+          <el-input v-model="form.qualificationCertificateUrl" placeholder="请输入资格证" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入${comment}" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listInformation, getInformation, delInformation, addInformation, updateInformation } from "@/api/system/information";
+
+export default {
+  name: "Information",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 【请填写功能名称】表格数据
+      informationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userId: null,
+        deptId: null,
+        dutiesId: null,
+        workType: null,
+        isFullTime: null,
+        highestEducation: null,
+        educationType: null,
+        certificateWork: null,
+        professionalQualifications: null,
+        certificateFailReason: null,
+        workTime: null,
+        entryTime: null,
+        bornTime: null,
+        responsibilitiesLeaderName: null,
+        responsibilitiesLeaderDuties: null,
+        qualificationCertificateUrl: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        userId: [
+          { required: true, message: "用户ID不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询【请填写功能名称】列表 */
+    getList() {
+      this.loading = true;
+      listInformation(this.queryParams).then(response => {
+        this.informationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        userId: null,
+        deptId: null,
+        dutiesId: null,
+        workType: null,
+        isFullTime: null,
+        highestEducation: null,
+        educationType: null,
+        certificateWork: null,
+        professionalQualifications: null,
+        certificateFailReason: null,
+        workTime: null,
+        entryTime: null,
+        bornTime: null,
+        responsibilitiesLeaderName: null,
+        responsibilitiesLeaderDuties: null,
+        qualificationCertificateUrl: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加【请填写功能名称】";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getInformation(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改【请填写功能名称】";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateInformation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addInformation(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除【请填写功能名称】编号为"' + ids + '"的数据项?').then(function() {
+        return delInformation(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/information/export', {
+        ...this.queryParams
+      }, `information_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 248 - 0
src/views/system/knowledge/index.vue

@@ -0,0 +1,248 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="标签名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入标签名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </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>
+      </el-form-item>
+    </el-form>
+
+    <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:knowledge:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:knowledge:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:knowledge:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:knowledge:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="knowledgeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="标签名称" align="center" prop="name" />
+      <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:knowledge:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:knowledge:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改知识库标签对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="标签名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入标签名称" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listKnowledge, getKnowledge, delKnowledge, addKnowledge, updateKnowledge } from "@/api/system/knowledge";
+
+export default {
+  name: "Knowledge",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 知识库标签表格数据
+      knowledgeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        deleted: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "标签名称不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询知识库标签列表 */
+    getList() {
+      this.loading = true;
+      listKnowledge(this.queryParams).then(response => {
+        this.knowledgeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加知识库标签";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getKnowledge(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改知识库标签";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateKnowledge(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addKnowledge(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除?').then(function() {
+        return delKnowledge(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/knowledge/export', {
+        ...this.queryParams
+      }, `knowledge_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 385 - 0
src/views/system/materials/index.vue

@@ -0,0 +1,385 @@
+<template>
+  <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="tree-container">
+          <div style="margin-bottom: 10px;">
+            <el-checkbox v-model="queryParams.checkSub" @change="changeCheckBox">是否关联下级机构</el-checkbox>
+          </div>
+          <el-tree
+            :data="deptOptions"
+            :props="defaultProps"
+            :expand-on-click-node="false"
+            :filter-node-method="filterNode"
+            ref="tree"
+            node-key="id"
+            :default-expanded-keys="defaultKeys"
+            :default-checked-keys="defaultKeys"
+            @node-click="handleNodeClick"
+          />
+        </div>
+      </el-col>
+      <!--用户数据-->
+      <el-col :span="20" :xs="24">
+
+      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="资料类型" prop="knowledgeId">
+        <el-input
+          v-model="queryParams.knowledgeId"
+          placeholder="请输入资料类型"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公开状态" prop="isOpen">
+        <el-input
+          v-model="queryParams.isOpen"
+          placeholder="请选择是否公开"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="资料标题" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入资料标题"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </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>
+      </el-form-item>
+    </el-form>
+    <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:materials:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:materials:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:materials:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:materials:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="materialsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="资料标题" align="center" prop="title" />
+      <el-table-column label="资料类型" align="center" prop="knowledgeId" />
+      <el-table-column label="机构名称" align="center" prop="orgName" />
+      <el-table-column label="公开状态" align="center" prop="isOpen" />
+      <el-table-column label="附件" align="center" prop="file" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <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:materials:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:materials:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+      </el-col>
+    </el-row>
+    <!-- 添加或修改学习资料对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="资料标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入资料标题" />
+        </el-form-item>
+        <el-form-item label="资料类型" prop="knowledgeId">
+          <el-input v-model="form.knowledgeId" placeholder="请选择资料类型" />
+        </el-form-item>
+        <el-form-item label="资料内容" prop="knowledgeId">
+          <el-input v-model="form.knowledgeId" placeholder="请选择资料类型" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="附件" prop="file">
+          <file-upload v-model="form.file"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listMaterials, getMaterials, delMaterials, addMaterials, updateMaterials } from "@/api/system/materials";
+import { deptTreeSelect } from "@/api/system/public";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+export default {
+  name: "Materials",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 学习资料表格数据
+      materialsList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 机构树选项
+      deptOptions: undefined,
+      // 机构名称
+      deptName: undefined,
+      //是否关联下级
+      checked: false,
+      defaultProps: {
+        children: "children",
+        label: "name"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        knowledgeId: null,
+        orgId: null,
+        orgName: null,
+        orgPath: null,
+        isOpen: null,
+        file: null,
+        deleted: null,
+        updateTime: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      //默认选中节点
+      defaultKeys:[]
+    };
+  },
+  watch: {
+    // 根据名称筛选机构树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+    this.getList();
+  },
+  methods: {
+    /** 查询学习资料列表 */
+    getList() {
+      this.loading = true;
+      listMaterials(this.queryParams).then(response => {
+        this.materialsList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 下穿状态改变*/
+    changeCheckBox(){
+      this.getList();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        title: null,
+        knowledgeId: null,
+        orgId: null,
+        orgName: null,
+        orgPath: null,
+        isOpen: null,
+        file: null,
+        remark: null,
+        deleted: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 查询机构下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+        console.log( this.deptOptions,' this.deptOptions')
+        this.defaultKeys.push(response.data[0].id);
+        this.queryParams.orgId = response.data[0].id;
+        this.handleQuery();
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.orgId = data.id;
+      this.handleQuery();
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加学习资料";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMaterials(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改学习资料";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateMaterials(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addMaterials(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除学习资料编号为"' + ids + '"的数据项?').then(function() {
+        return delMaterials(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/materials/export', {
+        ...this.queryParams
+      }, `materials_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 762 - 0
src/views/system/user/extend.vue

@@ -0,0 +1,762 @@
+<template>
+  <div class="app-container">
+    <h3 class="title">编辑管理人员信息</h3>
+    <div class="info-box">
+      <el-descriptions >
+        <el-descriptions-item v-for="v in dataInfo" :label="v.label" :key="v.key">{{ v.value }}</el-descriptions-item>
+        <el-descriptions-item label="角色">{{ roleName }}</el-descriptions-item>
+        <el-descriptions-item label="性别">{{ sex }}</el-descriptions-item>
+        <el-descriptions-item label="状态">{{ status }}</el-descriptions-item>
+        <!-- <el-descriptions-item label="机构类型">一级机构</el-descriptions-item> -->
+      </el-descriptions>
+    </div>
+    <div class="info-box">
+      <el-form inline  :model="formData" :rules="rules" ref="form"  label-position="left" label-width="140px">
+        <el-row>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="是否专职" prop="isFullTime">
+
+              <el-switch
+                v-model="formData.isFullTime"
+                active-text
+                inactive-text
+                active-value="1"
+                inactive-value="0"
+              ></el-switch>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="是否持证上岗" prop="certificateWork">
+              <el-switch
+                v-model="formData.certificateWork"
+                active-text
+                inactive-text
+                active-value="1"
+                inactive-value="0"
+              ></el-switch>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row  >
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="所属部门" prop="deptId">
+              <tree-select style="width:217px;" v-model="formData.deptId"  :options="deptList" :show-count="true" :normalizer="tenantIdnormalizer" placeholder="所属部门"> </tree-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="责任职务"  prop="duties">
+              <el-select v-model="formData.duties" placeholder="请选择">
+        <el-option
+                v-for="dict in dict.type.sys_duties"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="用工形式" prop="workType">
+              <el-select v-model="formData.workType" placeholder="请选择">
+        <el-option
+                v-for="dict in dict.type.sys_work_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="最高学历" prop="highestEducation">
+              <el-select v-model="formData.highestEducation" placeholder="请选择">
+        <el-option
+                v-for="dict in dict.type.sys_highest_education"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+              </el-select>
+              </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="学历取得方式" prop="educationType">
+              <el-select v-model="formData.educationType" placeholder="请选择">
+        <el-option
+                v-for="dict in dict.type.sys_education_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+              </el-select>
+
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="初级以上相关专业技术职业资格" prop="professionalQualifications">
+              <el-input v-model="formData.professionalQualifications" placeholder="请输入">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="持证上岗未通过原因" prop="certificateFailReason">
+              <el-input v-model="formData.certificateFailReason" placeholder="请输入">
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="参加工作时间" prop="workTime">
+              <el-date-picker
+                clearable
+                v-model="formData.workTime"
+                type="date"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="请选择时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="现任职时间"  prop="workTime">
+              <el-date-picker
+                clearable
+                v-model="formData.entryTime"
+                type="date"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="请选择时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="出生日期" prop="bornTime">
+              <el-date-picker
+                clearable
+                v-model="formData.bornTime"
+                type="date"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="请选择时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="分管领导姓名" prop="responsibilitiesLeaderName">
+              <el-input v-model="formData.responsibilitiesLeaderName" placeholder="请输入">
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="分管领导职务" prop="responsibilitiesLeaderDuties">
+              <el-select v-model="formData.responsibilitiesLeaderDuties" placeholder="请选择">
+              <el-option
+                v-for="dict in dict.type.sys_duties"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="上传相关证书">
+              <image-upload :limit="5" :fileSize="2"></image-upload>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" >
+            <el-form-item label="示例图">
+              <div style="width: 280px;">
+                <el-image :src="uplp"></el-image>
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <div style="margin-top: 50px; margin-left: 42%">
+      <el-button type="primary" @click="saveExtend" size="small">提交</el-button>
+      <el-button type="primary" @click="nosaveExtend" size="small">取消</el-button>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import uploadpng from "@/assets/images/upload.png";
+import uplpng from "@/assets/images/upl.png";
+import {getUser} from "@/api/system/user";
+import TreeSelect from '@riophae/vue-treeselect'
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { deptTreeList } from "@/api/system/public";
+
+import {extendUserInformation} from "@/api/system/information";
+
+export default {
+  props: [],
+  components: {TreeSelect},
+  dicts:['sys_highest_education',"sys_work_type","sys_duties","sys_education_type"],
+  data() {
+    return {
+      //基础信息key
+      infoKeys:[
+        {label:'用户姓名',key:'username'},
+        {label:'姓名',key:'name'},
+        {label:'工号',key:'jobNumber'},
+        {label:'部门',key:'orgName'},
+        {label:'手机',key:'phone'},
+        // {label:'性别',key:'gender'},
+        // {label:'状态',key:'isLock'},
+        {label:'机构',key:'orgName'},
+      ],
+      dataInfo:[],
+      //机构补充信息
+      // extendId: null,
+      // orgType: 1,
+      // weatherAreaCode: null,
+      // premisesArea: null,
+      // ownership: null,
+      // outsideArea: null,
+      // askari: 1,
+      // businessLibraryType: 1,
+      // dutyMode: 0,
+      // remoteControl: null,
+      // selfServiceBank: null,
+      // lobbyEquipment: 1,
+      // wallPenetratingEquipment: 2,
+      // platformBrand: null,
+      // platformSupplierBrand: null,
+      // constructionTime: null,
+      // lastUpdateTime: null,
+      formData:{
+        deptId: null,
+        duties: null,
+        workType: null,
+        isFullTime: '0',
+        highestEducation: null,
+        educationType: null,
+        certificateWork: '0',
+        professionalQualifications: null,
+        certificateFailReason: null,
+        workTime: null,
+        entryTime: null,
+        bornTime: null,
+        responsibilitiesLeaderName: null,
+        responsibilitiesLeaderDuties: null,
+        qualificationCertificateUrl: null,
+        userId: null,
+      },
+      rules: {
+         deptId: [
+            { required: true,message: '请选择组织机构', trigger: 'blur' },
+          ],
+          duties:[
+            { required: true,message: '请选择组织机构', trigger: 'blur' },
+          ],
+          workType:[
+            { required: true, message: '请选择组织机构',trigger: 'blur' },
+          ],
+          isFullTime:[
+            { required: true,message: '请选择组织机构', trigger: 'change' },
+          ],
+          highestEducation:[
+            { required: true,message: '请选择组织机构', trigger: 'blur' },
+          ],
+          educationType:[
+            { required: true,message: '请选择组织机构', trigger: 'blur' },
+          ],
+          certificateWork:[
+            { required: true,message: '请选择组织机构', trigger: 'blur' },
+          ],
+          workTime:[
+            { required: true,message: '请选择组织机构',trigger: 'blur' },
+          ],
+          entryTime: [
+            { required: true,message: '请选择组织机构', trigger: 'change' }
+          ],
+          bornTime: [
+            { required: true,message: '请选择组织机构', trigger: 'change' }
+          ],
+          responsibilitiesLeaderName: [
+            { required: true,message: '请选择组织机构', trigger: 'change' }
+          ],
+          responsibilitiesLeaderDuties: [
+            { required: true,message: '请选择组织机构', trigger: 'change' }
+          ],
+          qualificationCertificateUrl: [
+            { required: true,message: '请选择组织机构', trigger: 'change' }
+          ],
+          professionalQualifications:[
+            { required: true,message: '请选择组织机构', trigger: 'change' }
+          ],
+          date1: [
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
+          ],
+          date2: [
+            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
+          ],
+          type: [
+            { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
+          ],
+          resource: [
+            { required: true, message: '请选择活动资源', trigger: 'change' }
+          ],
+          desc: [
+            { required: true, message: '请填写活动形式', trigger: 'blur' }
+          ]
+      },
+      // 机构树选项
+      deptList: undefined,
+      // 遮罩层
+      orgloading: true,
+      // 选中数组
+      orgids: [],
+      // 选中数组
+      Bankids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 机构物防建设表格数据
+      constructionList: [],
+      // 银行物防建设表格数据
+      BankPhysicalDefenseConstructionList: [],
+      // 弹出层标题
+      orgtitle: "",
+      // 弹出层标题
+      Banktitle: "",
+      // 是否显示弹出层
+      Bankopen: false,
+      // 表单参数
+      Bankform: {},
+      // 是否显示弹出层
+      orgopen: false,
+      roleName: null,
+      sex: null,
+      status: null,
+      // 表单参数
+      orgform: {},
+      //2个图片信息
+      uploadp: uploadpng,
+      uplp: uplpng,
+      //下拉框生成信息
+      orgTypes: {
+        orgTyp1: { label: "营业网点", value: 0 },
+        orgTyp2: { label: "监控中心", value: 1 },
+      },
+
+      businessLibraryTypes: {
+        businessLibraryTyp1: { label: "1类业务库", value: 1 },
+        businessLibraryTyp2: { label: "2类业务库", value: 2 },
+        businessLibraryTyp3: { label: "3类业务库", value: 3 },
+      },
+      platformBrands: {
+        platformBrand1: { label: "品牌1", value: 0 },
+        platformBrand2: { label: "品牌2", value: 1 },
+      },
+      platformSupplierBrands: {
+        platformSupplierBrand1: { label: "品牌1", value: 0 },
+        platformSupplierBrand2: { label: "品牌2", value: 1 },
+      },
+      prop: "",
+      propItem: "",
+
+      row: "",
+    };
+  },
+
+  computed: {
+    switchModel: {
+      get() {
+        return this.switchValue === 1; // 将0转换为false,1转换为true
+      },
+      set(value) {
+        this.switchValue = value ? 1 : 0; // 将false转换为0,true转换为1
+      },
+    },
+  },
+  created() {
+    this.getInfo();
+    this.getDeptTreeList();
+  },
+  mounted() {},
+  methods: {
+    request() {},
+    handleChange(value) {},
+    //自定义数据
+    tenantIdnormalizer(node, instanceId) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.deptId,
+        label: node.deptName,
+        children: node.children
+      }
+    },
+    getInfo() {
+      getUser(this.$route.params.userId).then((data) => {
+        console.log(data,'userdata');
+        if (!data.data ) return;
+        let res = data.data;
+        this.dataInfo = this.infoKeys.map((v,i)=> {
+          v.value =  res[v.key];
+          return v
+        })
+        this.roleName=data.roleName;
+        this.sex=data.sex;
+        this.status=data.status;
+        this.formData=data.information;
+        console.log(this.formData, 'formData')
+      });
+    },
+    saveExtend(){
+      this.formData.userId = this.$route.params.userId;
+      this.$refs['form'].validate((valid) => {
+          if (valid) {
+            extendUserInformation(this.formData).then(res=>{
+                this.$message.success('保存成功!')
+                this.$router.go(-1)
+            })
+          }
+        });
+
+    },
+    getExtendInfo() {
+      getExtendByOrgId(this.$route.params.id).then((data) => {
+        console.log(data.data);
+        if (data.data != null) {
+          this.orgType = data.data.orgType;
+          this.weatherAreaCode = data.data.weatherAreaCode;
+          this.premisesArea = data.data.premisesArea;
+          this.ownership = data.data.ownership;
+          this.outsideArea = data.data.outsideArea;
+          this.askari = data.data.askari;
+          this.remoteControl = data.data.remoteControl;
+          this.selfServiceBank = data.data.selfServiceBank;
+          this.lobbyEquipment = data.data.lobbyEquipment;
+          this.wallPenetratingEquipment = data.data.wallPenetratingEquipment;
+          this.extendId = data.data.id;
+        }
+      });
+    },
+
+        /** 查询机构下拉树结构 */
+        getDeptTreeList() {
+      deptTreeList().then(response => {
+        this.deptList = response.data;
+        console.log(response.data,11111111)
+        this.defaultKeys = response.data[0];
+      });
+    },
+    getOrgPhysicalDefenseConstructionInfo() {
+      this.orgloading = true;
+      let dat = { orgId: this.$route.params.id };
+      listOrgPhysicalDefenseConstruction(dat).then((data) => {
+        // console.log(data);
+        this.constructionList = data.rows;
+        this.orgloading = false;
+      });
+    },
+    getBankPhysicalDefenseConstructionInfo() {
+      this.bankloading = true;
+      let dat = { orgId: this.$route.params.id };
+      listBankPhysicalDefenseConstruction(dat).then((data) => {
+        // console.log(data);
+        this.BankPhysicalDefenseConstructionList = data.rows;
+        this.bankloading = false;
+      });
+    },
+    // 取消按钮
+    Bankcancel() {
+      this.Bankopen = false;
+      this.Bankreset();
+    },
+    // 表单重置
+    Bankreset() {
+      this.Bankform = {
+        id: null,
+        standard: null,
+        dateOfCompliance: null,
+        certificateEvidence: null,
+        certificate: null,
+        evidence: null,
+        createTime: null,
+        updateTime: null,
+        createBy: null,
+        updateBy: null,
+        orgId: null,
+      };
+      this.resetForm("Bankform");
+    },
+    // 多选框选中数据
+    handleBankSelectionChange(selection) {
+      this.Bankids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleBankAdd() {
+      this.Bankreset();
+      this.Bankopen = true;
+      this.Banktitle = "添加银行物防建设";
+    },
+    /** 修改按钮操作 */
+    handleBankUpdate(row) {
+      this.Bankreset();
+      const id = row.id || this.Bankids;
+      getBankPhysicalDefenseConstruction(id).then((response) => {
+        this.Bankform = response.data;
+        this.Bankopen = true;
+        this.Banktitle = "修改银行物防建设";
+      });
+    },
+    /** 提交按钮 */
+    submitBankForm() {
+      this.Bankform.orgId = this.$route.params.id;
+      this.$refs["Bankform"].validate((valid) => {
+        if (valid) {
+          if (this.Bankform.id != null) {
+            updateBankPhysicalDefenseConstruction(this.Bankform).then(
+              (response) => {
+                this.$modal.msgSuccess("修改成功");
+                this.Bankopen = false;
+                this.getBankPhysicalDefenseConstructionInfo();
+              }
+            );
+          } else {
+            addBankPhysicalDefenseConstruction(this.Bankform).then(
+              (response) => {
+                this.$modal.msgSuccess("新增成功");
+                this.Bankopen = false;
+                this.getBankPhysicalDefenseConstructionInfo();
+              }
+            );
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleBankDelete(row) {
+      const Bankids = row.id || this.Bankids;
+      this.$modal
+        .confirm('是否确认删除银行物防建设编号为"' + Bankids + '"的数据项?')
+        .then(function () {
+          return delBankPhysicalDefenseConstruction(Bankids);
+        })
+        .then(() => {
+          this.getBankPhysicalDefenseConstructionInfo();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    // 表单重置
+    orgreset() {
+      this.orgform = {
+        id: null,
+        standard: null,
+        dateOfCompliance: null,
+        certificateEvidence: null,
+        certificate: null,
+        evidence: null,
+        createTime: null,
+        updateTime: null,
+        createBy: null,
+        updateBy: null,
+        orgId: null,
+      };
+      this.resetForm("orgform");
+    },
+    // 取消按钮
+    orgcancel() {
+      this.orgopen = false;
+      this.orgreset();
+    },
+    // 多选框选中数据
+    handleOrgSelectionChange(selection) {
+      this.orgids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleOrgAdd() {
+      this.orgreset();
+      this.orgopen = true;
+      this.orgtitle = "添加机构物防建设";
+    },
+    /** 修改按钮操作 */
+    handleOrgUpdate(row) {
+      this.orgreset();
+      const id = row.id || this.orgids;
+      getOrgPhysicalDefenseConstruction(id).then((response) => {
+        // console.log(response)
+        this.orgform = response.data;
+        this.orgopen = true;
+        this.orgtitle = "修改机构物防建设";
+      });
+    },
+    /** 提交按钮 */
+    submitOrgForm() {
+      this.orgform.orgId = this.$route.params.id;
+      this.$refs["orgform"].validate((valid) => {
+        if (valid) {
+          if (this.orgform.id != null) {
+            updateOrgPhysicalDefenseConstruction(this.orgform).then(
+              (response) => {
+                this.$modal.msgSuccess("修改成功");
+                this.orgopen = false;
+                this.getOrgPhysicalDefenseConstructionInfo();
+              }
+            );
+          } else {
+            addOrgPhysicalDefenseConstruction(this.orgform).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.orgopen = false;
+              this.getOrgPhysicalDefenseConstructionInfo();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleOrgDelete(row) {
+      const orgids = row.id || this.orgids;
+      this.$modal
+        .confirm('是否确认删除机构物防建设编号为"' + orgids + '"的数据项?')
+        .then(function () {
+          return delOrgPhysicalDefenseConstruction(orgids);
+        })
+        .then(() => {
+          this.getOrgPhysicalDefenseConstructionInfo();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    // saveExtend() {
+    //   let dat = {
+    //     deptId: this.deptId,
+    //     duties: this.duties,
+    //     workType: this.workType,
+    //     isFullTime: this.isFullTime,
+    //     highestEducation: this.highestEducation,
+    //     educationType: this.educationType,
+    //     certificateWork: this.certificateWork,
+    //     professionalQualifications: this.professionalQualifications,
+    //     certificateFailReason: this.certificateFailReason,
+    //     workTime: this.workTime,
+    //     entryTime: this.entryTime,
+    //     bornTime: this.bornTime,
+    //     responsibilitiesLeaderName: this.responsibilitiesLeaderName,
+    //     responsibilitiesLeaderDuties: this.responsibilitiesLeaderDuties,
+    //     qualificationCertificateUrl: this.qualificationCertificateUrl,
+
+    //     id: this.id,
+    //   };
+    //   if(this.extendId){
+    //     updateExtend(dat).then((res) => {
+    //       this.$modal.msgSuccess("保存成功");
+    //       this.$router.go(-1);
+    //     });
+    //   }else{
+    //     addExtend(dat).then((res) => {
+    //       this.$modal.msgSuccess("保存成功");
+    //       this.$router.go(-1);
+    //     });
+    //   }
+
+    // },
+    nosaveExtend() {
+      this.$router.go(-1);
+    },
+    triggerFileInput() {
+      this.$refs.fileInput.click();
+    },
+    async handleFileChange(event) {
+      const file = event.target.files[0];
+      if (!file) return;
+
+      // 创建 FormData 对象并添加文件
+      const formData = new FormData();
+      formData.append('file', file);
+
+      // // 发送文件到您的文件上传 API
+      try {
+        uploadFile(formData).then((res) => {
+          console.log(res);
+          // this.orgform.certificateEvidence = res.data;
+        });
+        // 处理上传成功的逻辑
+        console.log('上传成功');
+      } catch (error) {
+        // 处理上传失败的逻辑
+        console.log('上传失败');
+      }
+      // try {
+      //   const response = await request.post('http://localhost:9527/dev-api/file/file/upload', formData, {
+      //     headers: {
+      //       'Content-Type': 'multipart/form-data',
+      //     },
+      //   });
+      //   // 处理上传成功的逻辑
+      //   console.log('上传成功', response);
+      // } catch (error) {
+      //   // 处理上传失败的逻辑
+      //   console.log('上传失败', error);
+      // }
+      // 重置 input 元素,以便下次选择相同文件时仍能触发 change 事件
+      event.target.value = '';
+    },
+  },
+  fillter: {},
+};
+</script>
+
+<style scoped lang="scss">
+
+.title{
+  font-size: 18px;
+  text-align: left;
+  background: #4f9baabd;
+  color:#fff;
+  height: 36px;
+  line-height: 36px;
+  padding-left: 8px;
+  margin: 0;
+}
+.info-box{
+  margin: 30px;
+}
+.demo-form-inline {
+}
+.dialog-footer {
+}
+.container {
+}
+.image-container {
+  display: inline-block;
+  width: 200px;
+  margin-right: 20px; /* 设置与下一个div的水平间距 */
+}
+.zoom-image {
+  transition: transform 0.3s ease;
+}
+
+.zoom-image:hover {
+  transform: scale(1.02);
+}
+.border-color-change {
+  border: 1px solid #ccc;
+  transition: border-color 0.3s ease;
+}
+
+.border-color-change:hover {
+  border-color: #1ea8e9; /* 您可以将此颜色更改为所需的颜色 */
+}
+</style>

+ 153 - 256
src/views/system/user/index.vue

@@ -3,32 +3,7 @@
     <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="tree-container">
-          <div style="margin-bottom: 10px;">
-            <el-checkbox v-model="queryParams.checkSub" @change="changeCheckBox">是否关联下级机构</el-checkbox>
-          </div>
-          <el-tree
-            :data="deptOptions"
-            :props="defaultProps"
-            :expand-on-click-node="false"
-            :filter-node-method="filterNode"
-            ref="tree"
-            node-key="id"
-            :default-expanded-keys="defaultKeys"
-            :default-checked-keys="defaultKeys"
-            @node-click="handleNodeClick"
-          />
-        </div>
+        <org-tree v-model="queryParams.orgId" @defaultKey="getDefaultKey" @checkChange="checkChange" @click="clickTreeNode"></org-tree>
       </el-col>
       <!--用户数据-->
       <el-col :span="20" :xs="24">
@@ -36,48 +11,22 @@
         <!--    搜索条件    -->
         <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
           <el-form-item label="用户名称" prop="username">
-            <el-input
-              v-model="queryParams.username"
-              placeholder="请输入用户名称"
-              clearable
-              style="width: 240px"
-              @keyup.enter.native="handleQuery"
-            />
+            <el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable style="width: 240px"
+              @keyup.enter.native="handleQuery" />
           </el-form-item>
           <el-form-item label="手机号码" prop="phone">
-            <el-input
-              v-model="queryParams.phone"
-              placeholder="请输入手机号码"
-              clearable
-              style="width: 240px"
-              @keyup.enter.native="handleQuery"
-            />
+            <el-input v-model="queryParams.phone" placeholder="请输入手机号码" clearable style="width: 240px"
+              @keyup.enter.native="handleQuery" />
           </el-form-item>
           <el-form-item label="状态" prop="status">
-            <el-select
-              v-model="queryParams.status"
-              placeholder="用户状态"
-              clearable
-              style="width: 240px"
-            >
-              <el-option
-                v-for="dict in dict.type.sys_normal_disable"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
+            <el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
+              <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
+                :value="dict.value" />
             </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-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 type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -88,66 +37,49 @@
         <!--    按纽    -->
         <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:user:add']"
-            >新增</el-button>
+            <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+              v-hasPermi="['system:user:add']">新增</el-button>
           </el-col>
           <el-col :span="1.5">
-            <el-button
-              type="success"
-              plain
-              icon="el-icon-edit"
-              size="mini"
-              :disabled="single"
-              @click="handleUpdate"
-              v-hasPermi="['system:user:edit']"
-            >修改</el-button>
+            <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+              v-hasPermi="['system:user:edit']">修改</el-button>
           </el-col>
           <el-col :span="1.5">
-            <el-button
-              type="danger"
-              plain
-              icon="el-icon-delete"
-              size="mini"
-              :disabled="multiple"
-              @click="handleDelete"
-              v-hasPermi="['system:user:remove']"
-            >删除</el-button>
+            <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+              v-hasPermi="['system:user:remove']">删除</el-button>
           </el-col>
-<!--          <el-col :span="1.5">-->
-<!--            <el-button-->
-<!--              type="info"-->
-<!--              plain-->
-<!--              icon="el-icon-upload2"-->
-<!--              size="mini"-->
-<!--              @click="handleImport"-->
-<!--              v-hasPermi="['system:user:import']"-->
-<!--            >导入</el-button>-->
-<!--          </el-col>-->
-<!--          <el-col :span="1.5">-->
-<!--            <el-button-->
-<!--              type="warning"-->
-<!--              plain-->
-<!--              icon="el-icon-download"-->
-<!--              size="mini"-->
-<!--              @click="handleExport"-->
-<!--              v-hasPermi="['system:user:export']"-->
-<!--            >导出</el-button>-->
-<!--          </el-col>-->
+          <!--          <el-col :span="1.5">-->
+          <!--            <el-button-->
+          <!--              type="info"-->
+          <!--              plain-->
+          <!--              icon="el-icon-upload2"-->
+          <!--              size="mini"-->
+          <!--              @click="handleImport"-->
+          <!--              v-hasPermi="['system:user:import']"-->
+          <!--            >导入</el-button>-->
+          <!--          </el-col>-->
+          <!--          <el-col :span="1.5">-->
+          <!--            <el-button-->
+          <!--              type="warning"-->
+          <!--              plain-->
+          <!--              icon="el-icon-download"-->
+          <!--              size="mini"-->
+          <!--              @click="handleExport"-->
+          <!--              v-hasPermi="['system:user:export']"-->
+          <!--            >导出</el-button>-->
+          <!--          </el-col>-->
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
         </el-row>
 
         <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="id" prop="id" 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="name" prop="name" v-if="columns[2].visible" :show-overflow-tooltip="true" />
-          <el-table-column label="所属机构" align="center" key="orgName" prop="orgName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <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="name" prop="name" v-if="columns[2].visible"
+            :show-overflow-tooltip="true" />
+          <el-table-column label="所属机构" align="center" key="orgName" prop="orgName" v-if="columns[3].visible"
+            :show-overflow-tooltip="true" />
           <el-table-column label="手机号码" align="center" key="phone" prop="phone" v-if="columns[4].visible" width="120" />
           <!-- <el-table-column label="状态" align="center" key="isLock" v-if="columns[5].visible">
             <template slot-scope="scope">
@@ -159,9 +91,9 @@
               ></el-switch>
             </template>
           </el-table-column> -->
-          <el-table-column label="状态" align="center" key="isLock" prop="isLock" v-if="columns[5].visible" width="80" >
+          <el-table-column label="状态" align="center" key="isLock" prop="isLock" v-if="columns[5].visible" width="80">
             <template slot-scope="scope">
-              <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.isLock"/>
+              <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.isLock" />
             </template>
           </el-table-column>
           <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
@@ -180,6 +112,13 @@
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
+                @click="handleExtend(scope.row)"
+                v-hasPermi="['system:user:extend']"
+              >扩展</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
                 @click="handleUpdate(scope.row)"
                 v-hasPermi="['system:user:edit']"
               >修改</el-button>
@@ -203,13 +142,8 @@
           </el-table-column>
         </el-table>
 
-        <pagination
-          v-show="total>0"
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-        />
+        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+          @pagination="getList" />
       </el-col>
     </el-row>
 
@@ -224,13 +158,7 @@
           </el-col>
           <el-col :span="14">
             <el-form-item label="所属机构" prop="orgId">
-<!--              <el-cascader-->
-<!--                v-model="form.orgId"-->
-<!--                :options="deptOptions"-->
-<!--                :props="{checkStrictly: true, label:'name'}"-->
-<!--                placeholder="请选择归属机构">-->
-<!--              </el-cascader>-->
-              <treeselect
+              <tree-select
                 v-model="form.orgId"
                 :options="deptOptions"
                 :show-count="true"
@@ -249,13 +177,8 @@
           <el-col :span="14">
             <el-form-item label="用户角色">
               <el-select style="width: 100%;" v-model="form.roleIds" multiple placeholder="请选择角色">
-                <el-option
-                  v-for="item in roleOptions"
-                  :key="item.id"
-                  :label="item.roleName"
-                  :value="item.id"
-                  :disabled="item.status == 1"
-                ></el-option>
+                <el-option v-for="item in roleOptions" :key="item.id" :label="item.roleName" :value="item.id"
+                  :disabled="item.status == 1"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -273,7 +196,7 @@
           </el-col>
           <el-col :span="14">
             <el-form-item v-if="!form.id" label="用户密码" prop="password">
-              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
+              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password />
             </el-form-item>
           </el-col>
         </el-row>
@@ -281,49 +204,42 @@
           <el-col :span="10">
             <el-form-item label="用户性别">
               <el-select style="width: 100%;" v-model="form.gender" placeholder="请选择性别">
-                <el-option
-                  v-for="dict in dict.type.sys_user_sex"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="`${dict.value}`"
-                ></el-option>
+                <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
+                  :value="`${dict.value}`"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="14">
             <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"
-                >{{dict.label}}</el-radio>
+                <el-radio v-for="dict in dict.type.sys_normal_disable" :key="`${dict.value}`"
+                  :label="dict.value">{{ dict.label }}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
-<!--        <el-row>-->
-<!--          <el-col :span="12">-->
-<!--            <el-form-item label="岗位">-->
-<!--              <el-select v-model="form.orgId" multiple placeholder="请选择岗位">-->
-<!--                <el-option-->
-<!--                  v-for="item in postOptions"-->
-<!--                  :key="item.postId"-->
-<!--                  :label="item.postName"-->
-<!--                  :value="item.postId"-->
-<!--                  :disabled="item.status == 1"-->
-<!--                ></el-option>-->
-<!--              </el-select>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--        </el-row>-->
-<!--        <el-row>-->
-<!--          <el-col :span="24">-->
-<!--            <el-form-item label="备注">-->
-<!--              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>-->
-<!--            </el-form-item>-->
-<!--          </el-col>-->
-<!--        </el-row>-->
+        <!--        <el-row>-->
+        <!--          <el-col :span="12">-->
+        <!--            <el-form-item label="岗位">-->
+        <!--              <el-select v-model="form.orgId" multiple placeholder="请选择岗位">-->
+        <!--                <el-option-->
+        <!--                  v-for="item in postOptions"-->
+        <!--                  :key="item.postId"-->
+        <!--                  :label="item.postName"-->
+        <!--                  :value="item.postId"-->
+        <!--                  :disabled="item.status == 1"-->
+        <!--                ></el-option>-->
+        <!--              </el-select>-->
+        <!--            </el-form-item>-->
+        <!--          </el-col>-->
+        <!--        </el-row>-->
+        <!--        <el-row>-->
+        <!--          <el-col :span="24">-->
+        <!--            <el-form-item label="备注">-->
+        <!--              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>-->
+        <!--            </el-form-item>-->
+        <!--          </el-col>-->
+        <!--        </el-row>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -333,18 +249,9 @@
 
     <!-- 用户导入对话框 -->
     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-      <el-upload
-        ref="upload"
-        :limit="1"
-        accept=".xlsx, .xls"
-        :headers="upload.headers"
-        :action="upload.url + '?updateSupport=' + upload.updateSupport"
-        :disabled="upload.isUploading"
-        :on-progress="handleFileUploadProgress"
-        :on-success="handleFileSuccess"
-        :auto-upload="false"
-        drag
-      >
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
         <i class="el-icon-upload"></i>
         <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
         <div class="el-upload__tip text-center" slot="tip">
@@ -352,7 +259,8 @@
             <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
           </div>
           <span>仅允许导入xls、xlsx格式文件。</span>
-          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
+            @click="importTemplate">下载模板</el-link>
         </div>
       </el-upload>
       <div slot="footer" class="dialog-footer">
@@ -364,16 +272,16 @@
 </template>
 
 <script>
+import OrgTree from '@/components/orgTree'
 import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus } from "@/api/system/user";
-import { deptTreeSelect } from "@/api/system/public";
 import { getToken } from "@/utils/auth";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {deptTreeSelect} from "@/api/system/public";
+
 
 export default {
   name: "User",
   dicts: ['sys_normal_disable', 'sys_user_sex'],
-  components: { Treeselect },
+  components: { OrgTree },
   data() {
     return {
       // 遮罩层
@@ -392,14 +300,12 @@ export default {
       userList: null,
       // 弹出层标题
       title: "",
-      // 机构树选项
-      deptOptions: undefined,
       // 是否显示弹出层
       open: false,
       // 机构名称
-      deptName: undefined,
+      deptName: null,
       // 默认密码
-      initPassword: undefined,
+      initPassword: null,
       // 日期范围
       dateRange: [],
       // 岗位选项
@@ -408,12 +314,6 @@ export default {
       roleOptions: [],
       // 表单参数
       form: {},
-      //是否关联下级
-      checked: false,
-      defaultProps: {
-        children: "children",
-        label: "name"
-      },
       // 用户导入参数
       upload: {
         // 是否显示弹出层(用户导入)
@@ -437,7 +337,7 @@ export default {
         phone: null,
         status: null,
         orgId: null,
-        checkSub:false
+        checkSub: false
       },
       // 列信息
       columns: [
@@ -478,23 +378,38 @@ export default {
         ]
       },
       //默认选中节点
-      defaultKeys:[]
+      defaultKeys:null,
+      //修改新增中的机构树
+      deptOptions:[],
     };
   },
-  watch: {
-    // 根据名称筛选机构树
-    deptName(val) {
-      this.$refs.tree.filter(val);
-    }
-  },
   created() {
     this.getDeptTree();
     this.getConfigKey("sys.user.initPassword").then(response => {
       this.initPassword = response.msg;
     });
   },
+  mounted(){
+    console.log(this.queryParams,'aaaaaa')
+  },
   methods: {
-    //自定义数据
+    /** 查询机构树数据 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 节点单击事件
+    clickTreeNode(data) {
+      this.queryParams.orgId = data.id;
+      this.handleQuery();
+    },
+    /** 分配角色操作 */
+    handleExtend(row) {
+      const userId = row.id;
+      this.$router.push("/system/user-extend/extend/" + userId);
+    },
+    /** treeSelect组件自定义数据*/
     tenantIdnormalizer(node, instanceId) {
       if (node.children && !node.children.length) {
         delete node.children
@@ -505,56 +420,42 @@ export default {
         children: node.children
       }
     },
-    /** 下穿状态改变*/
-    changeCheckBox(){
-      this.getList();
-    },
-    /** 查询用户列表 */
+    /** 查询列表 */
     getList(id) {
       this.loading = true;
       listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          //兼容框架userId字段
-          response.rows.forEach(v=>{v.userId = v.id});
-          this.userList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      ).catch(err=>{
+        //兼容框架userId字段
+        response.rows.forEach(v => { v.userId = v.id });
+        this.userList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      }
+      ).catch(err => {
         this.loading = false;
       })
     },
-    /** 查询机构下拉树结构 */
-    getDeptTree() {
-      deptTreeSelect().then(response => {
-        this.deptOptions = response.data;
-        console.log( this.deptOptions,' this.deptOptions')
-        this.defaultKeys.push(response.data[0].id);
-        this.queryParams.orgId = response.data[0].id;
-        this.handleQuery();
-      });
-    },
-    // 筛选节点
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.name.indexOf(value) !== -1;
+
+    getDefaultKey(key){
+      this.queryParams.orgId = key;
+      this.getList();
     },
-    // 节点单击事件
-    handleNodeClick(data) {
-      this.queryParams.orgId = data.id;
+    //单选框状态改变
+    checkChange(state){
+      this.queryParams.checkSub = state;
       this.handleQuery();
     },
     // 用户状态修改
     handleStatusChange(row) {
       let text = row.status === "1" ? "启用" : "停用";
-      this.$modal.confirm( '确认要' + text + '"' + row.name + '"用户吗?').then(function() {
+      this.$modal.confirm('确认要' + text + '"' + row.name + '"用户吗?').then(function () {
         const data = {
-          id:row.id,
-          isLock:row.isLock
+          id: row.id,
+          isLock: row.isLock
         }
         return changeUserStatus(data);
       }).then(() => {
         this.$modal.msgSuccess(text + "成功");
-      }).catch(function() {
+      }).catch(function () {
         row.status = row.status === "0" ? "1" : "0";
       });
     },
@@ -630,7 +531,7 @@ export default {
       this.reset();
       const userId = row.id || this.ids;
       getUser(userId).then(response => {
-        console.log(response.data,'data')
+        console.log(response.data, 'data')
         this.form = response.data;
         this.postOptions = response.posts;
         this.roleOptions = response.roles;
@@ -643,7 +544,7 @@ export default {
     },
     /** 重置密码按钮操作 */
     handleResetPwd(row) {
-      console.log(row,'row')
+      console.log(row, 'row')
       this.$prompt('请输入"' + row.name + '"的新密码', "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
@@ -651,22 +552,22 @@ export default {
         inputPattern: /^.{5,20}$/,
         inputErrorMessage: "用户密码长度必须介于 5 和 20 之间"
       }).then(({ value }) => {
-          let data = {
-            id:row.userId,
-            password:value
-          }
-          resetUserPwd(data).then(response => {
-            this.$modal.msgSuccess("修改成功,新密码是:" + value);
-          });
-        }).catch(() => {});
+        let data = {
+          id: row.userId,
+          password: value
+        }
+        resetUserPwd(data).then(response => {
+          this.$modal.msgSuccess("修改成功,新密码是:" + value);
+        });
+      }).catch(() => { });
     },
     /** 分配角色操作 */
-    handleAuthRole: function(row) {
+    handleAuthRole: function (row) {
       const userId = row.id;
       this.$router.push("/system/user-auth/role/" + userId);
     },
     /** 提交按钮 */
-    submitForm: function() {
+    submitForm: function () {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != undefined) {
@@ -689,12 +590,12 @@ export default {
     handleDelete(row) {
       console.log(row);
       const userIds = row.id || this.ids;
-      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
         return delUser(userIds);
       }).then(() => {
         this.getList();
         this.$modal.msgSuccess("删除成功");
-      }).catch(() => {});
+      }).catch(() => { });
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -731,9 +632,5 @@ export default {
   }
 };
 </script>
-<style lang="scss">
-
-</style>
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss"></style>
+<style lang="scss" scoped></style>

+ 648 - 0
src/views/system/user/information.vue

@@ -0,0 +1,648 @@
+<template>
+  <div class="container" style="
+      min-height: 100%;
+      padding-bottom: 100px;
+      margin-left: 25px;
+      margin-top: 20px;
+    ">
+
+    <el-descriptions title="编辑管理人员信息">
+      <el-descriptions-item label="用户名">{{ username }}</el-descriptions-item>
+      <el-descriptions-item label="姓名">{{ name }}</el-descriptions-item>
+      <el-descriptions-item label="工号">{{
+        jobNumber
+      }}</el-descriptions-item>
+      <el-descriptions-item label="手机">{{
+        phone
+      }}</el-descriptions-item>
+      <el-descriptions-item label="性别">{{
+        gender > 0 ? (gender > 1 ? "未知" : "女") : "男"
+      }}</el-descriptions-item>
+      <el-descriptions-item label="状态">{{
+        isLock !== "0" ? "禁用" : "启用"
+      }}</el-descriptions-item>
+      <el-descriptions-item label="机构">{{ orgName }}</el-descriptions-item>
+
+      <el-descriptions-item label="角色">{{
+        roleName
+      }}</el-descriptions-item>
+
+      <!-- <el-descriptions-item label="机构类型">一级机构</el-descriptions-item> -->
+    </el-descriptions>
+
+    <el-descriptions title="补充基础信息"></el-descriptions>
+    <div class="info-box">
+      <el-form inline class="demo-form-inline" label-position="left" label-width="120px">
+        <el-row >
+          <!-- <el-col :span="8">
+            <el-form-item label="机构类型">
+              <el-select v-model="orgType" placeholder="机构类型">
+                <el-option
+                  v-for="(orgTyp, key) in deptList"
+                  :key="key"
+                  :label="orgTyp.label"
+                  :value="orgTyp.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col> -->
+
+        
+          <el-col :span="8">
+            <el-form-item label="归属部门" prop="deptId">
+              <treeselect v-model="deptId" :options="deptList" :show-count="true" :normalizer="tenantIdnormalizer"
+                :props="{ checkStrictly: true, label: 'deptName' }" placeholder="请选择归属部门" />
+            </el-form-item>
+          </el-col>
+     
+
+          <!-- <el-col :span="8">
+            <el-form-item  label="天气区域编码" >
+              <el-input
+                v-model="weatherAreaCode"
+                placeholder="天气区域编码"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item  label="营业场所面积">
+              <el-input v-model="premisesArea" placeholder="营业场所面积"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+           <el-form-item
+             
+             label="建设时间"
+             prop="constructionTime"
+           >
+             <el-date-picker
+               clearable
+               v-model="constructionTime"
+               type="date"
+               value-format="yyyy-MM-dd HH:mm:ss"
+               placeholder="请选择建设时间"
+             >
+             </el-date-picker>
+           </el-form-item>
+         </el-col>
+          <el-col :span="8">
+            <el-form-item
+              
+              label="最近一次更新"
+              prop="lastUpdateTime"
+            >
+              <el-date-picker
+                clearable
+                v-model="lastUpdateTime"
+                type="date"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="请选择更新日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item  label="平台品牌">
+              <el-select v-model="platformBrand" placeholder="平台品牌">
+                <el-option
+                  v-for="(platformB, key) in platformBrands"
+                  :key="key"
+                  :label="platformB.label"
+                  :value="platformB.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+            
+              label="平台供应商品牌">
+              <el-select
+                v-model="platformSupplierBrand"
+                placeholder="平台供应商品牌">
+                <el-option
+                  v-for="(platformSupplierB, key) in platformSupplierBrands"
+                  :key="key"
+                  :label="platformSupplierB.label"
+                  :value="platformSupplierB.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col> -->
+        </el-row>
+      </el-form>
+    </div>
+    
+    <div style="margin-top: 50px; margin-left: 42%">
+      <el-button type="primary" @click="saveExtend" size="small">提交</el-button>
+      <el-button type="primary" @click="nosaveExtend" size="small">取消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import uploadpng from "@/assets/images/upload.png";
+import uplpng from "@/assets/images/upl.png";
+import { deptTreeList } from "@/api/system/public";
+import {
+  getUser
+} from "@/api/system/user";
+import{ getInformationByUserId}from "@/api/system/information"
+import request from '@/utils/request'
+import treeselect from '@riophae/vue-treeselect'
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { deptTreeSelect } from "@/api/system/public";
+
+// import {
+//   listOrgPhysicalDefenseConstruction,
+//   getOrgPhysicalDefenseConstruction,
+//   addOrgPhysicalDefenseConstruction,
+//   updateOrgPhysicalDefenseConstruction,
+//   delOrgPhysicalDefenseConstruction,
+// } from "@/api/system/OrgPhysicalDefenseConstruction";
+// import {
+//   listBankPhysicalDefenseConstruction,
+//   getBankPhysicalDefenseConstruction,
+//   delBankPhysicalDefenseConstruction,
+//   addBankPhysicalDefenseConstruction,
+//   updateBankPhysicalDefenseConstruction,
+// } from "@/api/system/BankPhysicalDefenseConstruction";
+export default {
+  dicts:['sys_highest_education'],
+  props: [],
+
+  components: { treeselect },
+  data() {
+    return {
+      //个人信息回显的
+      username: null,
+      name: null,
+      jobNumber: null,
+      phone: null,
+      gender: null,
+      isLock: null,
+      orgName: null,
+      roleName: null,
+      id: null,
+      //机构补充信息
+      deptId: null,
+      dutiesId: null,
+      workType: null,
+      isFullTime: null,
+      highestEducation: null,
+      educationType: null,
+      certificateWork: null,
+      professionalQualifications: null,
+      certificateFailReason: null,
+      workTime: null,
+      entryTime: null,
+      bornTime: null,
+      responsibilitiesLeaderName: null,
+      responsibilitiesLeaderDuties: null,
+      qualificationCertificateUrl: null,
+          // 查询参数
+          queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        updateId: null,
+        orgType: null
+      },
+      // orgType: 1,
+      // weatherAreaCode: null,
+      // premisesArea: null,
+      // ownership: null,
+      // outsideArea: null,
+      // askari: 1,
+      // businessLibraryType: 1,
+      // dutyMode: 0,
+      // remoteControl: null,
+      // selfServiceBank: null,
+      // lobbyEquipment: 1,
+      // wallPenetratingEquipment: 2,
+      // platformBrand: null,
+      // platformSupplierBrand: null,
+      // constructionTime:null,
+      // lastUpdateTime:null,
+      //机构建设数据
+
+      // 遮罩层
+      orgloading: true,
+      // 选中数组
+      orgids: [],
+      // 选中数组
+      Bankids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 机构物防建设表格数据
+      constructionList: [],
+      // 银行物防建设表格数据
+      BankPhysicalDefenseConstructionList: [],
+      // 部门树选项
+      deptOptions: undefined,
+      // 机构树选项
+      deptList: undefined,
+      // 弹出层标题
+      orgtitle: "",
+      // 弹出层标题
+      Banktitle: "",
+      // 是否显示弹出层
+      Bankopen: false,
+      // 表单参数
+      Bankform: {},
+      // 是否显示弹出层
+      orgopen: false,
+      // 表单参数
+      orgform: {},
+      //2个图片信息
+      uploadp: uploadpng,
+      uplp: uplpng,
+      //下拉框生成信息
+      orgTypes: {
+        orgTyp1: { label: "营业网点", value: 0 },
+        orgTyp2: { label: "监控中心", value: 1 },
+      },
+      businessLibraryTypes: {
+        businessLibraryTyp1: { label: "1类业务库", value: 1 },
+        businessLibraryTyp2: { label: "2类业务库", value: 2 },
+        businessLibraryTyp3: { label: "3类业务库", value: 3 },
+      },
+      platformBrands: {
+        platformBrand1: { label: "品牌1", value: 0 },
+        platformBrand2: { label: "品牌2", value: 1 },
+      },
+      platformSupplierBrands: {
+        platformSupplierBrand1: { label: "品牌1", value: 0 },
+        platformSupplierBrand2: { label: "品牌2", value: 1 },
+      },
+      prop: "",
+      propItem: "",
+
+      row: "",
+    };
+  },
+  watch: {},
+  computed: {
+    switchModel: {
+      get() {
+        return this.switchValue === 1; // 将0转换为false,1转换为true
+      },
+      set(value) {
+        this.switchValue = value ? 1 : 0; // 将false转换为0,true转换为1
+      },
+    },
+  },
+  /** 查询机构下拉树结构 */
+  // getDeptTree() {
+  //     deptTreeSelect().then(response => {
+  //       this.deptOptions = response.data;
+  //       console.log(this.deptOptions, ' this.deptOptions')
+  //       this.defaultKeys.push(response.data[0].id);
+  //       this.queryParams.orgId = response.data[0].id;
+  //       this.handleQuery();
+  //     });
+  //   },
+
+
+  created() {
+    this.getOrgInfo();
+    this.getDeptTreeList();
+
+    // this.getOrgPhysicalDefenseConstructionInfo();
+    //this.getBankPhysicalDefenseConstructionInfo();
+  },
+  mounted() { },
+
+  methods: {
+
+    //自定义数据
+    tenantIdnormalizer(node, instanceId) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.deptId,
+        label: node.deptName,
+        children: node.children
+      }
+    },
+
+     /** 查询部门下拉树结构 */
+     getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+        console.log(this.deptOptions, ' this.deptOptions')
+        this.defaultKeys.push(response.data[0].id);
+        this.queryParams.orgId = response.data[0].id;
+        this.handleQuery();
+      });
+    },
+    tenantIdnormalizer(node, instanceId) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.children
+      }
+    },
+        // 表单重置
+        reset() {
+      this.form = {
+        id: null,
+        checkName: null,
+        areaId: null,
+        orgId: null,
+        createTime: null,
+        updateTime: null,
+        updateId: null,
+        createBy: null,
+        delFlag: null,
+        updateBy: null
+      };
+      this.resetForm("form");
+    },
+    request() { },
+    handleChange(value) { },
+    getOrgInfo() {
+      getUser(this.$route.params.id).then((data) => {
+        if (data.data != null) {
+          this.username = data.data.username;
+          this.name = data.data.name;
+          this.jobNumber = data.data.jobNumber;
+          this.phone = data.data.phone;
+          this.gender = data.data.gender;
+          this.isLock = data.data.isLock;
+          this.orgName = data.data.orgName;
+          this.roleName = data.roleName;
+
+        }
+      });
+    },
+    /** 查询机构下拉树结构 */
+    getDeptTreeList() {
+      deptTreeList().then(response => {
+        this.deptList = response.data;
+        this.defaultKeys.push(response.data[0].deptId);
+        this.queryParams.deptId = response.data[0].deptId;
+        this.handleQuery();
+      });
+    },
+
+    getInformation(){
+      getInformationByUserId(this.$route.params.id).then((data)=>{
+        if (data.data != null) {
+          this.deptId=data.data.deptId;
+          this.dutiesId=data.data.dutiesId;
+          this.workType=data.data.workType;
+          this.isFullTime=data.data.isFullTime;
+          this.highestEducation=data.data.highestEducation;
+          this.educationType=data.data.educationType;
+          this.certificateWork=data.data.certificateWork;
+          this.professionalQualifications=data.data.professionalQualifications;
+          this.certificateFailReason=data.data.certificateFailReason;
+          this.workTime=data.data.workTime;
+          this.entryTime=data.data.entryTime;
+          this.bornTime=data.data.bornTime;
+          this.responsibilitiesLeaderName=data.data.responsibilitiesLeaderName;
+          this.responsibilitiesLeaderDuties=data.data.responsibilitiesLeaderDuties;
+          this.qualificationCertificateUrl=data.data.qualificationCertificateUrl;
+        }
+      })
+    },
+    // getExtendInfo() {
+    //   getExtendByOrgId(this.$route.params.id).then((data) => {
+
+    //     if (data.data != null) {
+    //       this.orgType = data.data.orgType;
+    //       this.weatherAreaCode = data.data.weatherAreaCode;
+    //       this.premisesArea = data.data.premisesArea;
+    //       this.ownership = data.data.ownership;
+    //       this.outsideArea = data.data.outsideArea;
+    //       this.askari = data.data.askari;
+    //       this.remoteControl = data.data.remoteControl;
+    //       this.selfServiceBank = data.data.selfServiceBank;
+    //       this.lobbyEquipment = data.data.lobbyEquipment;
+    //       this.wallPenetratingEquipment = data.data.wallPenetratingEquipment;
+    //     }
+    //   });
+    // },
+    getOrgPhysicalDefenseConstructionInfo() {
+      this.orgloading = true;
+      let dat = { orgId: this.$route.params.id };
+      listOrgPhysicalDefenseConstruction(dat).then((data) => {
+        console.log(data);
+        this.constructionList = data.rows;
+        this.orgloading = false;
+      });
+    },
+
+
+    tenantIdnormalizer(node, instanceId) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.children
+      }
+    },
+    // 取消按钮
+    Bankcancel() {
+      this.Bankopen = false;
+      this.Bankreset();
+    },
+
+    // 多选框选中数据
+    handleBankSelectionChange(selection) {
+      this.Bankids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleBankAdd() {
+      this.Bankreset();
+      this.Bankopen = true;
+      this.Banktitle = "添加银行物防建设";
+    },
+    /** 修改按钮操作 */
+    handleBankUpdate(row) {
+      this.Bankreset();
+      const id = row.id || this.Bankids;
+      getBankPhysicalDefenseConstruction(id).then((response) => {
+        this.Bankform = response.data;
+        this.Bankopen = true;
+        this.Banktitle = "修改银行物防建设";
+      });
+    },
+    /** 提交按钮 */
+    submitBankForm() {
+      this.Bankform.orgId = this.$route.params.id;
+      this.$refs["Bankform"].validate((valid) => {
+        if (valid) {
+          if (this.Bankform.id != null) {
+            updateBankPhysicalDefenseConstruction(this.Bankform).then(
+              (response) => {
+                this.$modal.msgSuccess("修改成功");
+                this.Bankopen = false;
+                this.getBankPhysicalDefenseConstructionInfo();
+              }
+            );
+          } else {
+            addBankPhysicalDefenseConstruction(this.Bankform).then(
+              (response) => {
+                this.$modal.msgSuccess("新增成功");
+                this.Bankopen = false;
+                this.getBankPhysicalDefenseConstructionInfo();
+              }
+            );
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleBankDelete(row) {
+      const Bankids = row.id || this.Bankids;
+      this.$modal
+        .confirm('是否确认删除银行物防建设编号为"' + Bankids + '"的数据项?')
+        .then(function () {
+          return delBankPhysicalDefenseConstruction(Bankids);
+        })
+        .then(() => {
+          this.getBankPhysicalDefenseConstructionInfo();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => { });
+    },
+    // 表单重置
+    // orgreset() {
+    //   this.orgform = {
+    //     id: null,
+    //     standard: null,
+    //     dateOfCompliance: null,
+    //     certificateEvidence: null,
+    //     certificate: null,
+    //     evidence: null,
+    //     createTime: null,
+    //     updateTime: null,
+    //     createBy: null,
+    //     updateBy: null,
+    //     orgId: null,
+    //   };
+    //   this.resetForm("orgform");
+    // },
+    // 取消按钮
+    orgcancel() {
+      this.orgopen = false;
+      this.orgreset();
+    },
+    // 多选框选中数据
+    handleOrgSelectionChange(selection) {
+      this.orgids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleOrgAdd() {
+      this.orgreset();
+      this.orgopen = true;
+      this.orgtitle = "添加机构物防建设";
+    },
+    /** 修改按钮操作 */
+    handleOrgUpdate(row) {
+      this.orgreset();
+      const id = row.id || this.orgids;
+      getOrgPhysicalDefenseConstruction(id).then((response) => {
+        // console.log(response)
+        this.orgform = response.data;
+        this.orgopen = true;
+        this.orgtitle = "修改机构物防建设";
+      });
+    },
+    /** 提交按钮 */
+    submitOrgForm() {
+      this.orgform.orgId = this.$route.params.id;
+      this.$refs["orgform"].validate((valid) => {
+        if (valid) {
+          if (this.orgform.id != null) {
+            updateOrgPhysicalDefenseConstruction(this.orgform).then(
+              (response) => {
+                this.$modal.msgSuccess("修改成功");
+                this.orgopen = false;
+                this.getOrgPhysicalDefenseConstructionInfo();
+              }
+            );
+          } else {
+            addOrgPhysicalDefenseConstruction(this.orgform).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.orgopen = false;
+              this.getOrgPhysicalDefenseConstructionInfo();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleOrgDelete(row) {
+      const orgids = row.id || this.orgids;
+      this.$modal
+        .confirm('是否确认删除机构物防建设编号为"' + orgids + '"的数据项?')
+        .then(function () {
+          return delOrgPhysicalDefenseConstruction(orgids);
+        })
+        .then(() => {
+          this.getOrgPhysicalDefenseConstructionInfo();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => { });
+    },
+    saveExtend() {
+      let dat = {
+        deptId: this.deptId,
+        dutiesId: this.dutiesId,
+        workType: this.premisesArea,
+        ownership: this.ownership,
+        outsideArea: this.outsideArea,
+        askari: this.askari,
+        businessLibraryType: this.businessLibraryType,
+        dutyMode: this.dutyMode,
+        remoteControl: this.remoteControl,
+        selfServiceBank: this.selfServiceBank,
+        lobbyEquipment: this.lobbyEquipment,
+        wallPenetratingEquipment: this.wallPenetratingEquipment,
+        platformBrand: this.platformBrand,
+        platformSupplierBrand: this.platformSupplierBrand,
+        constructionTime: this.constructionTime,
+        lastUpdateTime: this.lastUpdateTime,
+      };
+      console.log(dat);
+    },
+    nosaveExtend() { },
+  },
+  fillter: {},
+};
+</script>
+
+<style scoped>
+.demo-form-inline {}
+
+.dialog-footer {}
+
+.container {}
+
+.image-container {
+  display: inline-block;
+  width: 200px;
+  height: 200px;
+  margin-right: 20px;
+  /* 设置与下一个div的水平间距 */
+}
+</style>

Some files were not shown because too many files changed in this diff