user.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. <template>
  2. <div class="container">
  3. <div class="content">
  4. <div class="left">
  5. <div class="title">
  6. 部门管理
  7. </div>
  8. <div class="main">
  9. <my-tree
  10. :data="treeData"
  11. :formConfig="treeformConfig"
  12. :ruleValidate="treeRuleValidate"
  13. @handleEvent="treeHandle"
  14. @check="treeCheck"></my-tree>
  15. </div>
  16. </div>
  17. <div class="right">
  18. <div class="title">
  19. 用户管理
  20. </div>
  21. <div class="main">
  22. <my-table
  23. :data="data"
  24. :columns="columns"
  25. :table-filter="tableFilter"
  26. :table-page="params"
  27. @event-handle="eventHandle"
  28. @on-change="changePage"></my-table>
  29. <my-modal-form v-model="show" width="50vw" :title="title" :config="formConfig" :rule-validate="ruleValidate" :data="formData" :type="formType" @confirm="cfm"></my-modal-form>
  30. <my-modal-form v-model="updPwdshow" width="50vw" title="修改密码" :config="updPwdFormConfig" :rule-validate="updPwdRuleValidate" @confirm="upfPwdCfm"></my-modal-form>
  31. </div>
  32. </div>
  33. </div>
  34. <Modal v-model="refreshModal" width="360">
  35. <p slot="header" style="color:#f60;text-align:center">
  36. <Icon type="ios-information-circle"></Icon>
  37. <span>警告提示!</span>
  38. </p>
  39. <div style="text-align:center">
  40. <p>{{refresText}}</p>
  41. </div>
  42. <div slot="footer">
  43. <Button type="error" size="large" long :loading="loading" @click="del">确认</Button>
  44. </div>
  45. </Modal>
  46. <Modal
  47. v-model="tipModal"
  48. title="提示"
  49. >
  50. <div style="font-size: 16px;">
  51. <p>重置成功</p>
  52. <p>新密码为:{{tipText}}</p>
  53. <p>请妥善保管</p>
  54. </div>
  55. </Modal>
  56. </div>
  57. </template>
  58. <script>
  59. import {
  60. GetDeptZTreeChildren,
  61. DepartmentAdd,
  62. DepartmentUpdate,
  63. DepartmentDelete,
  64. GetUserPageList,
  65. UserAdd,
  66. UserUpdate,
  67. UserDelete,
  68. ResetPassword,
  69. GetRolePageList
  70. } from '@/api/user'
  71. import { GetMaterialCategoryZTree } from '@/api/baseData'
  72. import MyTable from '_c/my-table/my-table'
  73. import MyTree from '_c/my-tree/my-tree'
  74. import MyModalForm from '_c/my-modal-form/my-modal-form'
  75. import axios from 'axios'
  76. export default {
  77. name: 'user_manage',
  78. components: {
  79. MyTree,
  80. MyTable,
  81. MyModalForm
  82. },
  83. data () {
  84. return {
  85. tipModal:false,
  86. tipText:null,
  87. refreshModal:false,
  88. refresText:'您确定重置所有账号密码么!',
  89. loading:false,
  90. title: '',
  91. currentId: '',
  92. updPwdshow: false,
  93. show: false,
  94. // 树相关数据
  95. treeRuleValidate: {
  96. name: [
  97. { required: true, message: '部门名称不能为空', trigger: 'blur' }
  98. ]
  99. },
  100. treeformConfig: [
  101. {
  102. type: 'input',
  103. label: '部门名称',
  104. key: 'name',
  105. placeholder: '请输入分类名称'
  106. },
  107. {
  108. type: 'selectSearch',
  109. label: '选择物料类型',
  110. key: 'materialCategoryId',
  111. placeholder: '选择物料分类',
  112. list: []
  113. },
  114. {
  115. type: 'input',
  116. label: '备注',
  117. key: 'remark',
  118. placeholder: '请输入备注'
  119. }
  120. ],
  121. updPwdRuleValidate: {
  122. password: [
  123. { required: true, message: '重置密码不能为空', trigger: 'blur' }
  124. ]
  125. },
  126. ruleValidate: {
  127. mobile: [
  128. { required: true, message: '手机号不能为空', trigger: 'blur' }
  129. ],
  130. roleKey: [
  131. { required: true, message: '角色不能为空', trigger: 'blur' }
  132. ],
  133. realName: [
  134. { required: true, message: '姓名不能为空', trigger: 'blur' }
  135. ],
  136. accountNo: [
  137. { required: true, message: '登录账户不能为空', trigger: 'blur' }
  138. ]
  139. },
  140. formType: '',
  141. formData: {},
  142. updPwdFormConfig: [
  143. {
  144. type: 'input',
  145. label: '重置密码',
  146. key: 'password',
  147. placeholder: '请输入密码'
  148. }
  149. ],
  150. formConfig: [
  151. {
  152. type: 'input',
  153. label: '工号',
  154. key: 'jobNo',
  155. placeholder: '请输入工号',
  156. span: 12
  157. },
  158. {
  159. type: 'input',
  160. label: '姓名',
  161. key: 'realName',
  162. placeholder: '请输入姓名',
  163. span: 12
  164. },
  165. {
  166. type: 'select',
  167. label: '性别',
  168. key: 'sex',
  169. placeholder: '请选择性别',
  170. list: [
  171. { label: '男', value: 1 },
  172. { label: '女', value: 2 }
  173. ],
  174. span: 12
  175. },
  176. {
  177. type: 'input',
  178. comType: 'number',
  179. label: '手机号码',
  180. key: 'mobile',
  181. placeholder: '请输入手机号码',
  182. span: 12
  183. },
  184. {
  185. type: 'select',
  186. label: '角色',
  187. key: 'roleKey',
  188. placeholder: '请输入选择角色',
  189. span: 12
  190. },
  191. {
  192. type: 'input',
  193. label: '登录账户',
  194. key: 'accountNo',
  195. placeholder: '请输入登录账户',
  196. span: 12
  197. },
  198. {
  199. type: 'select',
  200. label: '部门',
  201. key: 'departmentId',
  202. placeholder: '请输入选择角色',
  203. span: 12
  204. },
  205. // {
  206. // type: 'input',
  207. // comType: 'number',
  208. // label: '初始密码',
  209. // key: 'unit',
  210. // placeholder: '123456',
  211. // span: 12,
  212. // disabled: true
  213. // }
  214. ],
  215. columns: [
  216. {
  217. title: '序号',
  218. type: 'index',
  219. width: 60,
  220. align: 'center'
  221. },
  222. {
  223. title: '姓名',
  224. key: 'realName',
  225. minWidth: 150
  226. },
  227. {
  228. title: '工号',
  229. key: 'jobNo',
  230. minWidth: 150
  231. },
  232. {
  233. title: '性别',
  234. key: 'sexCode',
  235. minWidth: 150,
  236. render: (h, params) => {
  237. return h('span', params.row.sexCode === 1 ? '男' : '女')
  238. }
  239. },
  240. {
  241. title: '角色',
  242. key: 'roleName',
  243. minWidth: 150
  244. }, {
  245. title: '登录账户',
  246. key: 'accountNo',
  247. minWidth: 200
  248. },
  249. {
  250. title: '操作',
  251. key: 'action',
  252. align: 'center',
  253. fixed: 'right',
  254. width: '200px',
  255. render: (h, params) => {
  256. return h('div', [
  257. h(
  258. 'Button',
  259. {
  260. props: {
  261. type: 'primary',
  262. size: 'small'
  263. },
  264. style: {
  265. marginRight: '.5vw'
  266. },
  267. on: {
  268. click: () => {
  269. for (const key in params.row) {
  270. this.formData[key] = params.row[key]
  271. }
  272. this.formData.sex = params.row.sexCode
  273. this.title = '修改'
  274. this.formType = 'edit'
  275. this.show = true
  276. }
  277. }
  278. },
  279. '修改'
  280. ),
  281. h(
  282. 'Button',
  283. {
  284. props: {
  285. type: 'success',
  286. size: 'small'
  287. },
  288. style: {
  289. marginRight: '.5vw'
  290. },
  291. on: {
  292. click: () => {
  293. this.currentId = params.row.id
  294. this.refreshModal = true
  295. this.refresText = '您确定重置"'+ params.row.realName +'"密码么!'
  296. }
  297. }
  298. },
  299. '重置密码'
  300. ),
  301. h(
  302. 'Button',
  303. {
  304. props: {
  305. type: 'error',
  306. size: 'small'
  307. },
  308. style: {
  309. },
  310. on: {
  311. click: () => {
  312. this.$MyModal.show({ text: '是否删除?' }).$on('confirm', () => {
  313. UserDelete({
  314. id: params.row.id
  315. }).then(res => {
  316. if (res.code === 0) {
  317. this.$Message.info(res.msg)
  318. this.getList()
  319. }
  320. })
  321. })
  322. }
  323. }
  324. },
  325. '删除'
  326. )
  327. ])
  328. }
  329. }
  330. ],
  331. tableFilter: [
  332. {
  333. name: 'Input',
  334. value: 'key',
  335. placeholder: '请输入关键字'
  336. },
  337. {
  338. name: 'Select',
  339. value: 'roleKey',
  340. placeholder: '请选择角色',
  341. list: []
  342. },
  343. {
  344. name: 'Button',
  345. type: 'primary',
  346. text: '查询',
  347. e: 'search'
  348. },
  349. {
  350. name: 'Button',
  351. type: 'primary',
  352. text: '添加',
  353. align: 'right',
  354. e: 'add'
  355. },
  356. {
  357. name: 'Button',
  358. type: 'primary',
  359. text: '重置密码',
  360. align: 'right',
  361. e: 'refreshPassword'
  362. }
  363. ],
  364. params: {
  365. pageIndex: 1,
  366. pageSize: 20,
  367. total: 0
  368. },
  369. data: [],
  370. treeData: [],
  371. }
  372. },
  373. methods: {
  374. del(){
  375. const v = this
  376. if(this.currentId == null){
  377. window.open('http://120.79.80.64:8050/cloudApi/accAccount/refreshPasswordTest')
  378. this.refreshModal = false
  379. this.$Message.info({
  380. content:'重置成功开始下载表格',
  381. duration:3,
  382. });
  383. }else{
  384. axios.post('/cloudApi/accAccount/updatePassword',{id:this.currentId}).then(res=>{
  385. this.refreshModal = false
  386. if(res.data.code == 200){
  387. this.tipModal = true
  388. this.tipText = res.data.data
  389. this.getList()
  390. }
  391. })
  392. }
  393. // axios.get('/cloudApi/accAccount/refreshPasswordTest').then(res=>{
  394. // window.open(res.data)
  395. // })
  396. },
  397. upfPwdCfm (type, data) {
  398. ResetPassword({
  399. ...data,
  400. id: this.currentId
  401. }).then(res => {
  402. if (res.code === 0) {
  403. this.updPwdshow = false
  404. this.$Message.info('修改成功')
  405. this.getList()
  406. }
  407. })
  408. },
  409. cfm (type, data) {
  410. if (type === 'add') {
  411. UserAdd({
  412. ...data,
  413. departmentId: data.departmentId || this.departmentId
  414. }).then(res => {
  415. if (res.code === 0) {
  416. this.show = false
  417. this.$Message.info('新增用户成功,请点击列表重置按钮,初始化用户密码')
  418. this.getList()
  419. }
  420. })
  421. } else if (type === 'edit') {
  422. UserUpdate({
  423. ...data,
  424. departmentId: data.departmentId || this.departmentId
  425. }).then(res => {
  426. if (res.code === 0) {
  427. this.show = false
  428. this.$Message.info(res.msg)
  429. this.getList()
  430. }
  431. })
  432. }
  433. },
  434. /* 获取物料分类 */
  435. getMaterialType () {
  436. let arr = []
  437. GetMaterialCategoryZTree().then(res => {
  438. res.result.forEach(item => {
  439. let tempArr = item.children.map(data => {
  440. return {
  441. label: data.name,
  442. value: data.value
  443. }
  444. })
  445. arr.push(...tempArr)
  446. })
  447. this.treeformConfig[1].list = arr
  448. console.log(arr)
  449. })
  450. },
  451. // 角色下拉框
  452. getRoleSelectItem () {
  453. GetRolePageList().then(res => {
  454. if (res.code === 0) {
  455. let arr = res.result.map(item => {
  456. return {
  457. label: item.name,
  458. value: item.key
  459. }
  460. })
  461. this.formConfig[4].list = arr
  462. this.tableFilter[1].list = arr
  463. }
  464. })
  465. },
  466. getTree () {
  467. GetDeptZTreeChildren().then(res => {
  468. if (res.code === 0) {
  469. this.treeData = res.result
  470. // let arr = []
  471. // arr.push({
  472. // label: res.result[0].name,
  473. // value: res.result[0].value
  474. // })
  475. // res.result[0].children.forEach(item => {
  476. // arr.push({
  477. // label: item.name,
  478. // value: item.value
  479. // })
  480. // })
  481. this.formConfig[6].list = this.handleDeptData(this.treeData)
  482. }
  483. })
  484. },
  485. /* 处理部门树形数据 */
  486. handleDeptData (data) {
  487. let arr = []
  488. data.forEach(item => {
  489. arr.push({
  490. label: item.name,
  491. value: item.value
  492. })
  493. if (item.children) {
  494. arr.push(...this.handleDeptData(item.children))
  495. }
  496. })
  497. return arr
  498. },
  499. getList () {
  500. GetUserPageList(this.params).then(res => {
  501. if (res.code === 0) {
  502. this.data = res.result.list
  503. this.params.total = res.result.totalCount
  504. }
  505. })
  506. },
  507. changePage (pageIndex) {
  508. this.params.pageIndex = pageIndex
  509. this.getList()
  510. },
  511. // 检索条件事件处理
  512. eventHandle (option) {
  513. switch (option._evnet) {
  514. case 'search':
  515. this.params.pageIndex = 1
  516. this.params.key = option.key
  517. this.params.roleKey = option.roleKey
  518. this.getList()
  519. break
  520. case 'add':
  521. if (!this.departmentId) {
  522. return this.$Message.error('请选择部门!')
  523. }
  524. this.title = '添加用户'
  525. this.formType = 'add'
  526. this.show = true
  527. break
  528. case 'refreshPassword':
  529. this.currentId = null
  530. this.refreshModal = true
  531. break
  532. }
  533. },
  534. // 选择物料分类 显示物料列表
  535. treeCheck (data) {
  536. this.departmentId = data.value
  537. this.params.departmentId = data.value
  538. this.getList()
  539. },
  540. // 提交树操作
  541. treeHandle (type, data, target) {
  542. if (type === 'add') {
  543. DepartmentAdd({
  544. ...data,
  545. parentId: target.value || ''
  546. }).then(res => {
  547. if (res.code === 0) {
  548. this.$Message.info(res.msg)
  549. this.getTree()
  550. }
  551. })
  552. } else if (type === 'edit') {
  553. DepartmentUpdate({
  554. ...data,
  555. id: data.value
  556. }).then(res => {
  557. if (res.code === 0) {
  558. this.$Message.info(res.msg)
  559. this.getTree()
  560. }
  561. })
  562. } else if (type === 'del') {
  563. DepartmentDelete({ id: target.value }).then(res => {
  564. if (res.code === 0) {
  565. this.$Message.info(res.msg)
  566. this.getTree()
  567. }
  568. })
  569. }
  570. }
  571. },
  572. mounted () {
  573. this.getList()
  574. this.getTree()
  575. this.getRoleSelectItem()
  576. this.getMaterialType()
  577. }
  578. }
  579. </script>
  580. <style lang="less" scoped>
  581. .container {
  582. height: 100%;
  583. overflow: hidden;
  584. .content {
  585. padding: 10px;
  586. display: flex;
  587. justify-content: space-between;
  588. height: 100%;
  589. .left, .right {
  590. height: 100%;
  591. overflow: auto;
  592. box-shadow: 3px 3px 5px rgb(127, 127, 127, .35);
  593. background-color: #FFFFFF;
  594. .title {
  595. padding: 5px 0;
  596. background-color: #539DFA;
  597. font-size: 18px;
  598. font-weight: bold;
  599. text-align: center;
  600. color: #FFFFFF;
  601. }
  602. .main {
  603. box-sizing: border-box;
  604. padding: 10px;
  605. height: ~"calc(100% - 48px)";
  606. }
  607. }
  608. .left {
  609. margin-right: 15px;
  610. flex: 1;
  611. min-width: 320px;
  612. }
  613. .right {
  614. flex: 3;
  615. min-width: 680px;
  616. }
  617. }
  618. }
  619. </style>