华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

723 lines
25 KiB

  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
  4. <el-form-item :label="$t('page.system.role.name')+':'" prop="roleName">
  5. <el-input
  6. v-model="queryParams.roleName"
  7. :placeholder="$t('form.placeholderInput')"
  8. clearable
  9. style="width: 240px"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item :label="$t('page.system.role.key')+':'" prop="roleKey">
  14. <el-input
  15. v-model="queryParams.roleKey"
  16. :placeholder="$t('form.placeholderInput')"
  17. clearable
  18. style="width: 240px"
  19. @keyup.enter.native="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item :label="$t('page.system.role.status')+':'" prop="status">
  23. <el-select
  24. v-model="queryParams.status"
  25. :placeholder="$t('form.placeholderSelect')"
  26. clearable
  27. style="width: 240px"
  28. >
  29. <el-option key="0" :label="$t('page.system.role.statusEnable')" value="0" />
  30. <el-option key="1" :label="$t('page.system.role.statusDisable')" value="1" />
  31. </el-select>
  32. </el-form-item>
  33. <!-- <el-form-item label="创建时间">
  34. <el-date-picker
  35. v-model="dateRange"
  36. style="width: 240px"
  37. value-format="yyyy-MM-dd"
  38. type="daterange"
  39. range-separator="-"
  40. start-placeholder="开始日期"
  41. end-placeholder="结束日期"
  42. ></el-date-picker>
  43. </el-form-item> -->
  44. <el-form-item>
  45. <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('form.search')}}</el-button>
  46. <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('form.reset')}}</el-button>
  47. </el-form-item>
  48. </el-form>
  49. <el-row :gutter="10" class="mb8">
  50. <el-col :span="1.5">
  51. <el-button
  52. type="primary"
  53. plain
  54. icon="el-icon-plus"
  55. @click="handleAdd"
  56. v-hasPermi="['system:role:add']"
  57. >{{$t('form.add')}}</el-button>
  58. </el-col>
  59. <!-- <el-col :span="1.5">
  60. <el-button
  61. type="success"
  62. plain
  63. icon="el-icon-edit"
  64. :disabled="single"
  65. @click="handleUpdate"
  66. v-hasPermi="['system:role:edit']"
  67. >修改</el-button>
  68. </el-col>
  69. <el-col :span="1.5">
  70. <el-button
  71. type="danger"
  72. plain
  73. icon="el-icon-delete"
  74. :disabled="multiple"
  75. @click="handleDelete"
  76. v-hasPermi="['system:role:remove']"
  77. >删除</el-button>
  78. </el-col>
  79. <el-col :span="1.5">
  80. <el-button
  81. type="warning"
  82. plain
  83. icon="el-icon-download"
  84. @click="handleExport"
  85. v-hasPermi="['system:role:export']"
  86. >导出</el-button>
  87. </el-col>
  88. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
  89. </el-row>
  90. <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
  91. <!-- <el-table-column type="selection" width="55" align="center" /> -->
  92. <!-- <el-table-column label="角色编号" prop="roleId" width="120" /> -->
  93. <el-table-column :label="$t('page.system.role.name')" prop="roleName" :show-overflow-tooltip="true" width="250" />
  94. <el-table-column :label="$t('page.system.role.key')" prop="roleKey" :show-overflow-tooltip="true" width="250" />
  95. <el-table-column :label="$t('page.system.role.remark')" prop="remark" :show-overflow-tooltip="true" />
  96. <!-- <el-table-column label="显示顺序" prop="roleSort" width="100" /> -->
  97. <el-table-column :label="$t('page.system.role.status')" prop="status" :show-overflow-tooltip="true" width="150">
  98. <template slot-scope="scope">
  99. <span v-if="scope.row.status==='0'">{{$t('page.system.role.statusEnable')}}</span>
  100. <span v-if="scope.row.status==='1'">{{$t('page.system.role.statusDisable')}}</span>
  101. </template>
  102. </el-table-column>
  103. <!-- <el-table-column label="状态" align="center" width="100">
  104. <template slot-scope="scope">
  105. <el-switch
  106. v-model="scope.row.status"
  107. active-value="0"
  108. inactive-value="1"
  109. @change="handleStatusChange(scope.row)"
  110. ></el-switch>
  111. </template>
  112. </el-table-column>
  113. <el-table-column label="创建时间" align="center" prop="createTime" width="180">
  114. <template slot-scope="scope">
  115. <span>{{ parseTime(scope.row.createTime) }}</span>
  116. </template>
  117. </el-table-column> -->
  118. <el-table-column :label="$t('form.operate')" align="center" class-name="small-padding fixed-width" width="200">
  119. <template slot-scope="scope" v-if="scope.row.roleId !== 1">
  120. <el-button
  121. type="text"
  122. @click="handleUpdate(scope.row,false)"
  123. v-hasPermi="['system:role:edit']"
  124. >{{$t('page.system.role.edit')}}</el-button>
  125. <el-button
  126. type="text"
  127. @click="handleStatusChange(scope.row)"
  128. v-hasPermi="['system:role:edit']"
  129. v-if="scope.row.status==='0'"
  130. >{{$t('page.system.role.disable')}}</el-button>
  131. <el-button
  132. type="text"
  133. @click="handleStatusChange(scope.row)"
  134. v-hasPermi="['system:role:edit']"
  135. v-if="scope.row.status==='1'"
  136. >{{$t('page.system.role.enable')}}</el-button>
  137. <el-button
  138. type="text"
  139. @click="transfer(scope.row)"
  140. v-hasPermi="['system:role:allocate']"
  141. >{{$t('page.system.role.allocate')}}</el-button>
  142. <el-button
  143. type="text"
  144. @click="handleUpdate(scope.row,true)"
  145. >{{$t('page.system.role.detail')}}</el-button>
  146. <!-- <el-button
  147. type="text"
  148. @click="handleDelete(scope.row)"
  149. v-hasPermi="['system:role:remove']"
  150. >删除</el-button>
  151. <el-dropdown @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
  152. <el-button type="text" icon="el-icon-d-arrow-right">更多</el-button>
  153. <el-dropdown-menu slot="dropdown">
  154. <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"
  155. v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item>
  156. <el-dropdown-item command="handleAuthUser" icon="el-icon-user"
  157. v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item>
  158. </el-dropdown-menu>
  159. </el-dropdown> -->
  160. <!-- <el-dropdown @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
  161. <el-button type="text" icon="el-icon-d-arrow-right">更多</el-button>
  162. <el-dropdown-menu slot="dropdown">
  163. <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"
  164. v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item>
  165. <el-dropdown-item command="handleAuthUser" icon="el-icon-user"
  166. v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item>
  167. </el-dropdown-menu>
  168. </el-dropdown> -->
  169. </template>
  170. </el-table-column>
  171. </el-table>
  172. <pagination
  173. v-show="total>0"
  174. :total="total"
  175. :page.sync="queryParams.pageNum"
  176. :limit.sync="queryParams.pageSize"
  177. @pagination="getList"
  178. />
  179. <!-- 添加或修改角色配置对话框 -->
  180. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="title" :visible.sync="open" width="800px" append-to-body>
  181. <el-form ref="form" :model="form" :rules="rules" label-width="150px">
  182. <el-form-item :label="$t('page.system.role.name')+':'" prop="roleName">
  183. <el-input v-model="form.roleName" :placeholder="$t('form.placeholderInput')" :readonly="readonly" />
  184. </el-form-item>
  185. <el-form-item prop="roleKey">
  186. <span slot="label">
  187. <!-- <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
  188. <i class="el-icon-question"></i>
  189. </el-tooltip> -->
  190. {{$t('page.system.role.key')}}
  191. </span>
  192. <el-input v-model="form.roleKey" :placeholder="$t('form.placeholderInput')" :readonly="readonly" />
  193. </el-form-item>
  194. <!-- <el-form-item label="角色顺序" prop="roleSort">
  195. <el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
  196. </el-form-item> -->
  197. <el-form-item :label="$t('page.system.role.status')+':'" prop="status">
  198. <el-select
  199. v-model="form.status"
  200. :placeholder="$t('form.placeholderSelect')"
  201. style="width:100%"
  202. :disabled="readonly"
  203. >
  204. <el-option key="0" :label="$t('page.system.role.statusEnable')" value="0" />
  205. <el-option key="1" :label="$t('page.system.role.statusDisable')" value="1" />
  206. </el-select>
  207. </el-form-item>
  208. <el-form-item :label="$t('page.system.role.remark')+':'">
  209. <el-input v-model="form.remark" type="textarea" :placeholder="$t('form.placeholderSelect')" :readonly="readonly"></el-input>
  210. </el-form-item>
  211. <el-form-item :label="$t('page.system.role.permit')+':'">
  212. <!-- <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
  213. <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
  214. <el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox> -->
  215. <el-tree
  216. class="tree-border"
  217. :data="menuOptions"
  218. show-checkbox
  219. ref="menu"
  220. node-key="id"
  221. :check-strictly="false"
  222. empty-text="loading"
  223. :props="defaultProps"
  224. ></el-tree>
  225. </el-form-item>
  226. </el-form>
  227. <div slot="footer" class="dialog-footer" v-if="!readonly">
  228. <el-button type="primary" @click="submitForm">{{$t('form.saveConfirm')}}</el-button>
  229. <el-button @click="cancel">{{$t('form.cancel')}}</el-button>
  230. </div>
  231. </el-dialog>
  232. <!-- 分配角色数据权限对话框 -->
  233. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="title" :visible.sync="openDataScope" width="500px" append-to-body>
  234. <el-form :model="form" label-width="80px">
  235. <el-form-item label="角色名称">
  236. <el-input v-model="form.roleName" :disabled="true" />
  237. </el-form-item>
  238. <el-form-item label="权限字符">
  239. <el-input v-model="form.roleKey" :disabled="true" />
  240. </el-form-item>
  241. <el-form-item label="权限范围">
  242. <el-select v-model="form.dataScope" @change="dataScopeSelectChange">
  243. <el-option
  244. v-for="item in dataScopeOptions"
  245. :key="item.value"
  246. :label="item.label"
  247. :value="item.value"
  248. ></el-option>
  249. </el-select>
  250. </el-form-item>
  251. <el-form-item label="数据权限" v-show="form.dataScope == 2">
  252. <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
  253. <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
  254. <el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
  255. <el-tree
  256. class="tree-border"
  257. :data="deptOptions"
  258. show-checkbox
  259. default-expand-all
  260. ref="dept"
  261. node-key="id"
  262. :check-strictly="!form.deptCheckStrictly"
  263. empty-text="加载中,请稍候"
  264. :props="defaultProps"
  265. ></el-tree>
  266. </el-form-item>
  267. </el-form>
  268. <div slot="footer" class="dialog-footer">
  269. <el-button type="primary" @click="submitDataScope"> </el-button>
  270. <el-button @click="cancelDataScope"> </el-button>
  271. </div>
  272. </el-dialog>
  273. <!-- 分配角色数据权限对话框 -->
  274. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="transferDialog.title" :visible.sync="transferDialog.visible" width="750px" append-to-body>
  275. <el-transfer class="role-transfer" v-model="transferDialog.selected" :data="transferDialog.list" :titles="[$t('page.system.role.unauthorized'), $t('page.system.role.authorized')]"
  276. filterable
  277. :filter-method="filterMethod"
  278. :filter-placeholder="$t('page.system.role.filterPlaceholder')">
  279. </el-transfer>
  280. <div slot="footer" class="dialog-footer">
  281. <el-button type="primary" @click="changRoleUser">{{$t('form.saveConfirm')}}</el-button>
  282. <el-button @click="transferDialog.visible = false">{{$t('form.cancel')}}</el-button>
  283. </div>
  284. </el-dialog>
  285. </div>
  286. </template>
  287. <script>
  288. import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect,allocatedUserList,authUserSetAll } from "@/api/system/role"
  289. import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"
  290. export default {
  291. name: "Role",
  292. dicts: ['sys_normal_disable'],
  293. data() {
  294. return {
  295. // 遮罩层
  296. loading: true,
  297. // 选中数组
  298. ids: [],
  299. // 非单个禁用
  300. single: true,
  301. // 非多个禁用
  302. multiple: true,
  303. // 显示搜索条件
  304. showSearch: true,
  305. // 总条数
  306. total: 0,
  307. // 角色表格数据
  308. roleList: [],
  309. // 弹出层标题
  310. title: "",
  311. // 是否显示弹出层
  312. open: false,
  313. // 是否显示弹出层(数据权限)
  314. openDataScope: false,
  315. menuExpand: false,
  316. menuNodeAll: false,
  317. deptExpand: true,
  318. deptNodeAll: false,
  319. // 日期范围
  320. dateRange: [],
  321. // 数据范围选项
  322. dataScopeOptions: [
  323. {
  324. value: "1",
  325. label: "全部数据权限"
  326. },
  327. {
  328. value: "2",
  329. label: "自定数据权限"
  330. },
  331. {
  332. value: "3",
  333. label: "本部门数据权限"
  334. },
  335. {
  336. value: "4",
  337. label: "本部门及以下数据权限"
  338. },
  339. {
  340. value: "5",
  341. label: "仅本人数据权限"
  342. }
  343. ],
  344. // 菜单列表
  345. menuOptions: [],
  346. // 部门列表
  347. deptOptions: [],
  348. // 查询参数
  349. queryParams: {
  350. pageNum: 1,
  351. pageSize: 10,
  352. roleName: undefined,
  353. roleKey: undefined,
  354. status: undefined
  355. },
  356. // 表单参数
  357. form: {},
  358. defaultProps: {
  359. children: "children",
  360. label: "label"
  361. },
  362. // 表单校验
  363. rules: {
  364. roleName: [
  365. { required: true, message: this.$t('form.placeholderInput'), trigger: "blur" }
  366. ],
  367. roleKey: [
  368. { required: true, message: this.$t('form.placeholderInput'), trigger: "blur" }
  369. ],
  370. status: [
  371. { required: true, message: this.$t('form.placeholderSelect'), trigger: "change" }
  372. ],
  373. },
  374. readonly:false,
  375. transferDialog:{
  376. title:this.$t('page.system.role.allocate'),
  377. visible:false,
  378. list:[],
  379. selected:[],
  380. roleId:''
  381. }
  382. }
  383. },
  384. created() {
  385. this.getList()
  386. },
  387. methods: {
  388. /** 查询角色列表 */
  389. getList() {
  390. this.loading = true
  391. listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
  392. this.roleList = response.rows
  393. this.total = response.total
  394. this.loading = false
  395. }
  396. )
  397. },
  398. /** 查询菜单树结构 */
  399. getMenuTreeselect() {
  400. menuTreeselect().then(response => {
  401. this.menuOptions = response.data
  402. })
  403. },
  404. // 所有菜单节点数据
  405. getMenuAllCheckedKeys() {
  406. // 目前被选中的菜单节点
  407. let checkedKeys = this.$refs.menu.getCheckedKeys()
  408. // 半选中的菜单节点
  409. let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys()
  410. checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
  411. return checkedKeys
  412. },
  413. // 所有部门节点数据
  414. getDeptAllCheckedKeys() {
  415. // 目前被选中的部门节点
  416. let checkedKeys = this.$refs.dept.getCheckedKeys()
  417. // 半选中的部门节点
  418. let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys()
  419. checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
  420. return checkedKeys
  421. },
  422. /** 根据角色ID查询菜单树结构 */
  423. getRoleMenuTreeselect(roleId) {
  424. return roleMenuTreeselect(roleId).then(response => {
  425. this.menuOptions = response.menus
  426. this.setDisabled(this.menuOptions)
  427. return response
  428. })
  429. },
  430. setDisabled(arr) {
  431. for (var i = 0; i < arr.length; i++) {
  432. arr[i]['disabled'] = this.readonly
  433. if (arr[i].children && arr[i].children.length > 0) {
  434. this.setDisabled(arr[i].children)
  435. }
  436. }
  437. },
  438. /** 根据角色ID查询部门树结构 */
  439. getDeptTree(roleId) {
  440. return deptTreeSelect(roleId).then(response => {
  441. this.deptOptions = response.depts
  442. return response
  443. })
  444. },
  445. // 角色状态修改
  446. handleStatusChange(row) {
  447. changeRoleStatus(row.roleId, row.status === "0"?'1':'0').then(response => {
  448. this.getList()
  449. })
  450. // let text = row.status === "0" ? "启用" : "停用"
  451. // this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function() {
  452. // return changeRoleStatus(row.roleId, row.status)
  453. // }).then(() => {
  454. // this.$modal.msgSuccess(text + "成功")
  455. // }).catch(function() {
  456. // row.status = row.status === "0" ? "1" : "0"
  457. // })
  458. },
  459. // 取消按钮
  460. cancel() {
  461. this.open = false
  462. this.reset()
  463. },
  464. // 取消按钮(数据权限)
  465. cancelDataScope() {
  466. this.openDataScope = false
  467. this.reset()
  468. },
  469. // 表单重置
  470. reset() {
  471. if (this.$refs.menu != undefined) {
  472. this.$refs.menu.setCheckedKeys([])
  473. }
  474. this.menuExpand = false,
  475. this.menuNodeAll = false,
  476. this.deptExpand = true,
  477. this.deptNodeAll = false,
  478. this.form = {
  479. roleId: undefined,
  480. roleName: undefined,
  481. roleKey: undefined,
  482. roleSort: 0,
  483. status: "0",
  484. menuIds: [],
  485. deptIds: [],
  486. menuCheckStrictly: true,
  487. deptCheckStrictly: true,
  488. remark: undefined
  489. }
  490. this.resetForm("form")
  491. },
  492. /** 搜索按钮操作 */
  493. handleQuery() {
  494. this.queryParams.pageNum = 1
  495. this.getList()
  496. },
  497. /** 重置按钮操作 */
  498. resetQuery() {
  499. this.dateRange = []
  500. this.resetForm("queryForm")
  501. this.handleQuery()
  502. },
  503. // 多选框选中数据
  504. handleSelectionChange(selection) {
  505. this.ids = selection.map(item => item.roleId)
  506. this.single = selection.length!=1
  507. this.multiple = !selection.length
  508. },
  509. // 更多操作触发
  510. handleCommand(command, row) {
  511. switch (command) {
  512. case "handleDataScope":
  513. this.handleDataScope(row)
  514. break
  515. case "handleAuthUser":
  516. this.handleAuthUser(row)
  517. break
  518. default:
  519. break
  520. }
  521. },
  522. // 树权限(展开/折叠)
  523. handleCheckedTreeExpand(value, type) {
  524. if (type == 'menu') {
  525. let treeList = this.menuOptions
  526. for (let i = 0; i < treeList.length; i++) {
  527. this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value
  528. }
  529. } else if (type == 'dept') {
  530. let treeList = this.deptOptions
  531. for (let i = 0; i < treeList.length; i++) {
  532. this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value
  533. }
  534. }
  535. },
  536. // 树权限(全选/全不选)
  537. handleCheckedTreeNodeAll(value, type) {
  538. if (type == 'menu') {
  539. this.$refs.menu.setCheckedNodes(value ? this.menuOptions: [])
  540. } else if (type == 'dept') {
  541. this.$refs.dept.setCheckedNodes(value ? this.deptOptions: [])
  542. }
  543. },
  544. // 树权限(父子联动)
  545. handleCheckedTreeConnect(value, type) {
  546. if (type == 'menu') {
  547. this.form.menuCheckStrictly = value ? true: false
  548. } else if (type == 'dept') {
  549. this.form.deptCheckStrictly = value ? true: false
  550. }
  551. },
  552. /** 新增按钮操作 */
  553. handleAdd() {
  554. this.readonly = false
  555. this.reset()
  556. this.getMenuTreeselect()
  557. this.open = true
  558. this.title = this.$t('page.system.role.addRole')
  559. },
  560. /** 修改按钮操作 */
  561. handleUpdate(row,readonly) {
  562. this.readonly = readonly
  563. this.reset()
  564. const roleId = row.roleId || this.ids
  565. const roleMenu = this.getRoleMenuTreeselect(roleId)
  566. getRole(roleId).then(response => {
  567. this.form = response.data
  568. this.open = true
  569. this.$nextTick(() => {
  570. roleMenu.then(res => {
  571. let checkedKeys = res.checkedKeys
  572. checkedKeys.forEach((v) => {
  573. this.$nextTick(()=>{
  574. this.$refs.menu.setChecked(v, true ,false)
  575. })
  576. })
  577. })
  578. })
  579. })
  580. this.title = this.$t('page.system.role.modifyRole')
  581. },
  582. /** 选择角色权限范围触发 */
  583. dataScopeSelectChange(value) {
  584. if(value !== '2') {
  585. this.$refs.dept.setCheckedKeys([])
  586. }
  587. },
  588. /** 分配数据权限操作 */
  589. handleDataScope(row) {
  590. this.reset()
  591. const deptTreeSelect = this.getDeptTree(row.roleId)
  592. getRole(row.roleId).then(response => {
  593. this.form = response.data
  594. this.openDataScope = true
  595. this.$nextTick(() => {
  596. deptTreeSelect.then(res => {
  597. this.$refs.dept.setCheckedKeys(res.checkedKeys)
  598. })
  599. })
  600. })
  601. this.title = "分配数据权限"
  602. },
  603. /** 分配用户操作 */
  604. handleAuthUser: function(row) {
  605. const roleId = row.roleId
  606. this.$router.push("/system/role-auth/user/" + roleId)
  607. },
  608. /** 提交按钮 */
  609. submitForm: function() {
  610. this.$refs["form"].validate(valid => {
  611. if (valid) {
  612. if (this.form.roleId != undefined) {
  613. this.form.menuIds = this.getMenuAllCheckedKeys()
  614. updateRole(this.form).then(response => {
  615. this.$modal.msgSuccess("修改成功")
  616. this.open = false
  617. this.getList()
  618. })
  619. } else {
  620. this.form.menuIds = this.getMenuAllCheckedKeys()
  621. addRole(this.form).then(response => {
  622. this.$modal.msgSuccess("新增成功")
  623. this.open = false
  624. this.getList()
  625. })
  626. }
  627. }
  628. })
  629. },
  630. /** 提交按钮(数据权限) */
  631. submitDataScope: function() {
  632. if (this.form.roleId != undefined) {
  633. this.form.deptIds = this.getDeptAllCheckedKeys()
  634. dataScope(this.form).then(response => {
  635. this.$modal.msgSuccess("修改成功")
  636. this.openDataScope = false
  637. this.getList()
  638. })
  639. }
  640. },
  641. /** 删除按钮操作 */
  642. handleDelete(row) {
  643. const roleIds = row.roleId || this.ids
  644. this.$modal.confirm(this.$t('form.confirmDelete')).then(function() {
  645. return delRole(roleIds)
  646. }).then(() => {
  647. this.getList()
  648. }).catch(() => {})
  649. },
  650. /** 导出按钮操作 */
  651. handleExport() {
  652. this.download('system/role/export', {
  653. ...this.queryParams
  654. }, `role_${new Date().getTime()}.xlsx`)
  655. },
  656. transfer(row){
  657. allocatedUserList({roleId:row.roleId}).then(response => {
  658. let list = []
  659. _.forEach(response.list,(item)=>{
  660. list.push({
  661. key:item.userId,
  662. label:`${item.nickName}(${item.phonenumber})`
  663. })
  664. })
  665. this.transferDialog.selected = response.selected
  666. this.transferDialog.list = list
  667. this.transferDialog.roleId = row.roleId
  668. this.transferDialog.visible = true
  669. }
  670. )
  671. },
  672. filterMethod(query, item){
  673. return item.label.indexOf(query) > -1;
  674. },
  675. changRoleUser(){
  676. authUserSetAll({ roleId: this.transferDialog.roleId, userIdList: this.transferDialog.selected && this.transferDialog.selected.length>0 ? this.transferDialog.selected:[] }).then(res => {
  677. this.transferDialog.visible = false
  678. })
  679. }
  680. }
  681. }
  682. </script>
  683. <style lang="scss">
  684. .role-transfer{
  685. .el-transfer-panel{
  686. width: 250px;
  687. }
  688. }
  689. </style>