User.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. <template>
  2. <div>
  3. <el-main ref="elMain" style="padding: 0px;">
  4. <Split :gutterSize="2" style="height: calc(100vh - 120px);">
  5. <!-- 左侧树Start -->
  6. <SplitArea :size="leftSplitWidth" :minSize="240">
  7. <div>
  8. <el-checkbox v-model="containsSubDeptChecked">包含下级机构</el-checkbox>
  9. <el-divider></el-divider>
  10. <tree :setting="ztreeSetting" :nodes="ztreeNodes" @onClick="onZTreeClick" @onCreated="onZTreeCreated"/>
  11. </div>
  12. </SplitArea>
  13. <!-- 左侧树End -->
  14. <!-- 右侧列表页面Start -->
  15. <SplitArea :size="rightSplitWidth">
  16. <!-- 筛选区域Start -->
  17. <el-row class="queryFrom" >
  18. <el-form ref="queryFormRef" :model="queryFrom" label-width="80px">
  19. <el-row>
  20. <!-- <el-col :span="5">
  21. <el-form-item label="工号">
  22. <el-input clearable size="small" placeholder="工号" v-model="queryFrom.id" ></el-input>
  23. </el-form-item>
  24. </el-col> -->
  25. <el-col :span="5">
  26. <el-form-item label="姓名">
  27. <el-input clearable size="small" placeholder="姓名" v-model="queryFrom.name" ></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="5">
  31. <el-form-item label="手机号">
  32. <el-input clearable size="small" placeholder="手机号" v-model="queryFrom.tel" ></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="4" style="display: flex;align-items: center;justify-content: center;">
  36. <el-button size="small" @click="queryStaffInfo">查询</el-button>
  37. </el-col>
  38. </el-row>
  39. </el-form>
  40. </el-row>
  41. <!-- 筛选区域End -->
  42. <!-- 审核通过 -->
  43. <!-- <template v-if="pageRequest.columnFilters.status.value == '1'"> -->
  44. <kt-common-table permsEdit="sys:user:edit" :data="pageResult" :columns="columns" editButtonName="配置角色" :showBatchDelete="false" @findPage="findPage" @handleEdit="handleTableEdit">
  45. </kt-common-table>
  46. <!-- </template> -->
  47. </SplitArea>
  48. <!-- 右侧列表页面End -->
  49. </Split>
  50. </el-main>
  51. <!-- 新增修改界面 -->
  52. <el-dialog title="角色配置" width="800px" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="handleDialogBefore" @close="closeDialog" v-dialogDrag>
  53. <el-form :model="dataForm" ref="dataForm" @keyup.enter.native="submitForm()" label-width="120px" size="small" style="text-align:left;">
  54. <el-tabs>
  55. <el-row>
  56. <el-col :span="12">
  57. <el-form-item label="部门编码" prop="name">
  58. <el-input disabled v-model="dataForm.deptId"></el-input>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="12">
  62. <el-form-item label="部门名称" prop="name">
  63. <el-input disabled v-model="dataForm.deptName"></el-input>
  64. </el-form-item>
  65. </el-col>
  66. </el-row>
  67. <el-row>
  68. <el-col :span="12">
  69. <el-form-item label="员工工号" prop="id">
  70. <el-input disabled v-model="dataForm.id"></el-input>
  71. </el-form-item>
  72. </el-col>
  73. <el-col :span="12">
  74. <el-form-item label="姓名" prop="name">
  75. <el-input disabled v-model="dataForm.name"></el-input>
  76. </el-form-item>
  77. </el-col>
  78. </el-row>
  79. <el-row>
  80. <el-col :span="12">
  81. <el-form-item label="邮箱" prop="email">
  82. <el-input disabled v-model="dataForm.email"></el-input>
  83. </el-form-item>
  84. </el-col>
  85. <el-col :span="12">
  86. <el-form-item label="电话" prop="mobile">
  87. <el-input disabled v-model="dataForm.mobile"></el-input>
  88. </el-form-item>
  89. </el-col>
  90. </el-row>
  91. <el-row>
  92. <el-col :span="12">
  93. <el-form-item label="角色权限" prop="email">
  94. <el-select size="small" v-model="dataForm.remark" placeholder="请选择" @change="changeRole($event)" >
  95. <el-option :label="roleItem.name" :value="roleItem.id" v-for="(roleItem,roleIndex) in roleoptions" :key="roleIndex"></el-option>
  96. </el-select>
  97. </el-form-item>
  98. </el-col>
  99. </el-row>
  100. </el-tabs>
  101. </el-form>
  102. <span slot="footer" class="dialog-footer">
  103. <el-button size="small" @click="closeDialog">取消</el-button>
  104. <el-button size="small" type="primary" @click="submitForm">提交</el-button>
  105. </span>
  106. </el-dialog>
  107. </div>
  108. </template>
  109. <script>
  110. import Cookies from "js-cookie"
  111. import KtButton from "@/views/Core/KtButton"; // 按钮权限组件
  112. import tree from "@/components/ztree.vue"; // 机构树组件
  113. import KtCommonTable from "@/views/Core/KtCommonTable.vue";//表格组件
  114. import CommonUtil from "@/utils/comutil.js"
  115. export default {
  116. components: {
  117. KtButton,
  118. tree,
  119. KtCommonTable
  120. },
  121. data() {
  122. return {
  123. peopleid:"",
  124. peopledeptid:"",
  125. /**Split 开始 */
  126. leftSplitWidth: 20,
  127. rightSplitWidth: 80,
  128. /**Split 结束 */
  129. //----ztreeLeft begin---------
  130. containsSubDeptChecked: true, //是否包含下级机构
  131. ztreeObj: null,
  132. ztreeSetting: {
  133. check: {
  134. enable: false
  135. },
  136. data: {
  137. simpleData: {
  138. enable: true,
  139. pIdKey: "parentId"
  140. }
  141. },
  142. view: {
  143. showIcon: false
  144. }
  145. },
  146. ztreeNodes: [],
  147. currentTreeNode: null,
  148. //----ztreeLeft end---------
  149. // 右侧列表查询数据Start
  150. queryFrom:{},
  151. pageResult: {},
  152. pageRequest: { //查询的默认条件
  153. pageNum: 1,
  154. pageSize: 20,
  155. columnFilters: {
  156. "deptid": {
  157. "name": "deptid",
  158. "value": ''
  159. },
  160. "containsSubDept": {
  161. "name": "containsSubDept",
  162. "value": 1
  163. },
  164. "usertype": {
  165. "name": "usertype",
  166. "value": "A"
  167. },
  168. "status":{
  169. "name":"status",
  170. "value":"1"
  171. },
  172. "id":{
  173. "name":"id",
  174. "value":""
  175. },
  176. "name":{
  177. "name":"name",
  178. "value":""
  179. },
  180. "mobile":{
  181. "name":"mobile",
  182. "value":""
  183. }
  184. }
  185. },
  186. columns: [ // 数据列
  187. { prop: "deptId",label: "部门编码",minWidth: 80,sortable: false},
  188. { prop: "deptName",label: "部门名称",minWidth: 80,sortable: false},
  189. // { prop: "jobCode",label: "岗位",minWidth: 80,sortable: false,formatter: this.jobcodeFormatter},
  190. { prop: "id",label: "工号",minWidth: 80,sortable: false},
  191. { prop: "name",label: "姓名",minWidth: 80,sortable: false},
  192. // { prop: "sex",label: "性别",minWidth: 80,sortable: false,formatter: this.sexFormatter},
  193. { prop: "mobile",label: "联系电话",minWidth: 100,sortable: false},
  194. { prop: "email",label: "邮箱",minWidth: 100,sortable: false},
  195. { prop: "remark",label: "角色",minWidth: 100,sortable: false}
  196. ],
  197. // 右侧列表查询数据End
  198. // 新增或修改的弹出框Start
  199. dialogVisible: false, // 新增编辑界面是否显示
  200. dataForm:{ // 人员个人信息
  201. remark:""
  202. },
  203. // 新增或修改的弹出框End
  204. roleoptions: [],
  205. }
  206. },
  207. created() {
  208. this.peopleid = Cookies.get('user');
  209. if(this.peopleid!='admin'){
  210. this.peopledeptid = Cookies.get('user').split('D')[0];
  211. this.pageRequest.columnFilters.deptid.value = this.peopledeptid;
  212. }else{
  213. this.peopledeptid = '9';
  214. this.pageRequest.columnFilters.deptid.value = this.peopledeptid;
  215. }
  216. //获取所有下拉框数据(字典)
  217. this.getRoles();
  218. },
  219. mounted() {
  220. this.findLeftTreeData();// 获取机构树的数据
  221. //用像素初始化左边的split的宽度
  222. this.changeTreeWidth(240);// 初始化树的宽度
  223. },
  224. watch:{
  225. containsSubDeptChecked(){ // 监听是否包含下级
  226. this.pageRequest.columnFilters.containsSubDept.value = this.containsSubDeptChecked ? "1" : "0";
  227. this.findPage();
  228. }
  229. },
  230. methods: {
  231. getRoles(){
  232. this.$api.role.findAll().then((res) => {
  233. console.log(res.data)
  234. this.roleoptions = res.data
  235. }).catch((error)=>{
  236. this.roleoptions = [];
  237. })
  238. },
  239. changeRole(roleid){
  240. this.dataForm.roleId =roleid;
  241. },
  242. /**Split 开始 */
  243. changeTreeWidth(widthVal){
  244. // 初始化树的宽度
  245. this.leftSplitWidth = Math.ceil(widthVal/this.$refs.elMain.$el.clientWidth*100);
  246. this.rightSplitWidth = 100-(this.leftSplitWidth)
  247. },
  248. /**Split 结束 */
  249. //--left tree start-------
  250. findLeftTreeData: function() {
  251. // 获取数据
  252. this.$api.dept.findLeftDeptTree(this.peopledeptid).then(res => {
  253. this.ztreeNodes = res.data;
  254. });
  255. },
  256. onZTreeCreated: function(ztreeObj) {
  257. this.ztreeObj = ztreeObj;
  258. // onCreated 中操作ztreeObj对象展开第一个节点
  259. ztreeObj.expandNode(ztreeObj.getNodes()[0], true);
  260. this.currentTreeNode=ztreeObj.getNodes()[0];
  261. },
  262. onZTreeClick: function(evt, treeId, treeNode) {
  263. // 点击事件
  264. this.currentTreeNode = treeNode;
  265. this.pageRequest.columnFilters.deptid.value = this.currentTreeNode.id;
  266. this.findPage();
  267. },
  268. //--left tree end-------
  269. // 查询Start
  270. queryStaffInfo(val){
  271. this.pageRequest.columnFilters.id.value = this.queryFrom.id;
  272. this.pageRequest.columnFilters.name.value = this.queryFrom.name;
  273. this.pageRequest.columnFilters.mobile.value = this.queryFrom.tel;
  274. this.pageRequest.pageNum = 1;
  275. this.findPage();
  276. },
  277. // 查询End
  278. // 右侧列表的方法Start
  279. findPage(data) {
  280. // 获取分页数据
  281. if(data && data.pageRequest){
  282. this.pageRequest.pageNum = data.pageRequest.pageNum;
  283. this.pageRequest.pageSize = data.pageRequest.pageSize;
  284. }
  285. this.$api.user.userQueryPage(this.pageRequest).then((res) => {
  286. console.log(res.data)
  287. this.pageResult = res.data;
  288. }).then(data != null ? data.callback : '')
  289. },
  290. handleTableEdit(params) {
  291. // 编辑后线人员
  292. console.log(params.row)
  293. Object.assign(this.dataForm, params.row);
  294. this.dialogVisible = true
  295. },
  296. // 右侧列表的方法End
  297. // 新增或修改的弹出框Start
  298. getDictItems(typeName) {
  299. //--数据字典--
  300. this.$api.dict.findByLableName(typeName).then((response)=>{
  301. this[typeName + "options"] = response.data; // 把获取到的数据赋给this.data
  302. }).catch((error)=>{
  303. this[typeName + "options"] = [];
  304. })
  305. },
  306. handleDialogBefore(done) {
  307. // 退出对话框之前确认提示
  308. var that = this;
  309. this.$confirm('确认关闭?')
  310. .then(_ => {
  311. done();
  312. })
  313. .catch(_ => {});
  314. },
  315. closeDialog(){
  316. // 清空数据
  317. this.$refs['dataForm'].resetFields()
  318. for (let key in this.dataForm) {
  319. this.dataForm[key] = "";
  320. }
  321. this.dialogVisible=false
  322. },
  323. // 提交
  324. submitForm() {
  325. this.$confirm('确认提交吗?', '提示', {}).then(() => {
  326. let params = {
  327. roleId:this.dataForm.roleId,
  328. userId:this.dataForm.id,
  329. }
  330. this.$api.user.saveUserRole(params).then((res)=>{
  331. if(res.code == 200){
  332. this.$message({
  333. message: '操作成功',
  334. type: 'success'
  335. })
  336. this.findPage(null);
  337. this.dialogVisible = false
  338. }else{
  339. this.$message({
  340. message: '操作失败',
  341. type: 'error'
  342. })
  343. }
  344. })
  345. }).catch(() => {
  346. this.$message({
  347. type: 'info',
  348. message: '已取消提交'
  349. });
  350. });
  351. },
  352. // 新增或修改的弹出框End
  353. }
  354. }
  355. </script>
  356. <style scoped>
  357. .el-divider--horizontal {
  358. margin: 4px 0;
  359. }
  360. /* 顶部查询条件样式Start */
  361. .queryFrom .el-row {
  362. margin: 10px 0px;
  363. }
  364. .queryFrom .el-form-item {
  365. margin-bottom: 0px;
  366. }
  367. .queryFrom .queryButton .el-form-item__content {
  368. margin-left: 0px !important;
  369. }
  370. /* 顶部查询条件样式End */
  371. </style>