Role.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <style lang="scss">
  2. .preview{
  3. .el-form-item{
  4. margin-bottom:15px;
  5. }
  6. label,p{
  7. line-height: 25px !important;
  8. }
  9. }
  10. </style>
  11. <template>
  12. <section>
  13. <p><span>系统管理></span>角色管理</p>
  14. <div class="content">
  15. <div class="filter">
  16. <el-form size="small" label-width="70px" :inline="true" label-position="left">
  17. <el-form-item label="">
  18. <el-input clearable placeholder="请输入角色名称" v-model="form.name"></el-input>
  19. </el-form-item>
  20. <el-form-item>
  21. <el-button type="primary" @click="search">搜索</el-button>
  22. </el-form-item>
  23. <el-form-item style="float:right" >
  24. <el-button @click="dialogVisible=true,dialogTitle='新增角色'" type="primary">新增角色</el-button>
  25. </el-form-item>
  26. </el-form>
  27. </div>
  28. <el-table
  29. class="table"
  30. :data="list" height="57vh"
  31. border v-loading="loading"
  32. default-expand-all row-key="id"
  33. style="width: 100%">
  34. <el-table-column
  35. prop="name" width="300"
  36. label="角色名称">
  37. </el-table-column>
  38. <el-table-column
  39. prop="permstr"
  40. label="角色权限">
  41. </el-table-column>
  42. <!-- <el-table-column
  43. prop="username"
  44. label="角色描述">
  45. </el-table-column> -->
  46. <el-table-column
  47. prop="zip" width="150"
  48. label="操作">
  49. <template slot-scope="scope">
  50. <el-button class="edit" type="text" @click="edit(scope.row.id)">编辑</el-button>
  51. <el-button class="del" @click="del(scope.row.id)" type="text">删除</el-button>
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. <Page ref="pageButton" :current='form.page' :page_size='form.page_size' :total='total' @pageChange='gopage'/>
  56. </div>
  57. <el-dialog
  58. :title="dialogTitle" :close-on-click-modal='false'
  59. :visible.sync="dialogVisible">
  60. <el-form size="small" class="preview" :inline='false' label-width="80px">
  61. <el-form-item label="角色名称">
  62. <el-input v-model="form1.name"></el-input>
  63. </el-form-item>
  64. <el-form-item label="角色权限">
  65. <!-- <el-input placeholder="请输入内容" v-model="input" class="input-with-select">
  66. <el-button slot="append" icon="el-icon-search"></el-button>
  67. </el-input> -->
  68. <el-tree
  69. ref="tree"
  70. :data="data"
  71. show-checkbox
  72. node-key="id" default-expand-all
  73. :props="defaultProps"
  74. @check-change="handleCheckChange">
  75. </el-tree>
  76. </el-form-item>
  77. <!-- <el-form-item label="角色描述">
  78. <el-input v-model="form1.desc"></el-input>
  79. </el-form-item> -->
  80. </el-form>
  81. <span slot="footer" class="dialog-footer">
  82. <el-button size="small" type="primary" @click="save">确 定</el-button>
  83. </span>
  84. </el-dialog>
  85. </section>
  86. </template>
  87. <script>
  88. import Page from '../../components/Page';
  89. export default {
  90. components:{
  91. Page
  92. },
  93. data(){
  94. return{
  95. form:{name:'',page:1,page_size:20},
  96. form1:{},
  97. total:1,
  98. list:[{name:'2333'}],
  99. loading:false,
  100. input:'',
  101. dialogVisible:false,
  102. dialogTitle:"",
  103. defaultProps:{},
  104. data: [],
  105. selected:[]
  106. }
  107. },
  108. methods:{
  109. getPermissions(){
  110. this.$api.getUserPermissions().then(res=>{
  111. this.data = res.data.data
  112. })
  113. },
  114. handleCheckChange(data, checked, indeterminate) {
  115. this.selected = this.$refs.tree.getCheckedNodes()
  116. },
  117. search(){
  118. let parm = this.form
  119. this.getData()
  120. },
  121. getData(){
  122. var parm=this.form;
  123. this.loading=true
  124. this.$api.getRoleList(parm).then(res=>{
  125. let list = res.data.data.list;
  126. list.forEach(item => {
  127. let perms = []
  128. let permissions = JSON.parse(item.permissions)
  129. if(permissions){
  130. permissions.forEach(iitem=>{
  131. perms.push(iitem.label)
  132. })
  133. item.permstr = perms.join(",")
  134. }
  135. });
  136. this.list = list
  137. this.total = res.data.data.total
  138. this.loading = false
  139. })
  140. },
  141. edit(id){
  142. this.getData()
  143. this.$api.getRoleInfo({id:id}).then((res)=>{
  144. this.form1 = res.data.data
  145. let perms = JSON.parse(res.data.data.permissions)
  146. this.$refs.tree.setCheckedNodes(perms)
  147. this.selected = perms
  148. })
  149. this.dialogVisible = true;
  150. },
  151. del(id){
  152. this.$confirm('确定删除吗', '提示', {
  153. type: 'warning'
  154. }).then(() => {
  155. this.$api.delRole({id:id}).then((res)=>{
  156. this.$message({
  157. message: '删除成功',
  158. type: 'success'
  159. })
  160. this.getData()
  161. })
  162. })
  163. },
  164. save(){
  165. let parm = this.form1
  166. parm.permissions = JSON.stringify(this.selected)
  167. if(parm.id){
  168. this.$api.editRole(parm).then(res=>{
  169. if(res.data.code==0){
  170. this.$message({
  171. type:"success",
  172. message:"保存成功!"
  173. })
  174. this.getData()
  175. }else{
  176. this.$message.error("失败!");
  177. }
  178. })
  179. }else{
  180. this.$api.addRole(parm).then(res=>{
  181. if(res.data.code==0){
  182. this.$message({
  183. type:"success",
  184. message:"保存成功!"
  185. })
  186. this.getData()
  187. }else{
  188. this.$message.error("失败!");
  189. }
  190. })
  191. }
  192. this.dialogVisible = false;
  193. }
  194. },
  195. created(){
  196. this.getPermissions()
  197. this.getData()
  198. }
  199. }
  200. </script>