index.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <div class="permission-page">
  3. <!-- 顶部 Tabs -->
  4. <el-tabs v-model="activeTab">
  5. <el-tab-pane label="提示词用户权限" name="user" />
  6. <el-tab-pane label="提示词角色权限" name="role" />
  7. </el-tabs>
  8. <!-- 搜索栏 -->
  9. <el-form :inline="true" class="search-form">
  10. <el-form-item>
  11. <el-input style="width: 1400px" v-model="search.keyword" placeholder="请输入用户名称、角色名称" clearable />
  12. </el-form-item>
  13. <el-form-item label="类型">
  14. <el-select v-model="search.role" placeholder="全部" clearable>
  15. <el-option label="全部角色" value="" />
  16. <el-option label="admin" value="admin" />
  17. <el-option label="editor" value="editor" />
  18. </el-select>
  19. </el-form-item>
  20. <el-button type="plain" @click="handleReset">重置</el-button>
  21. <el-button type="primary" @click="handleSearch">搜索</el-button>
  22. </el-form>
  23. <!-- 用户表格 -->
  24. <el-table :data="userList" border style="width: 100%">
  25. <el-table-column type="selection" width="50" />
  26. <el-table-column prop="name" label="名称" />
  27. <el-table-column prop="type" label="类型" />
  28. <el-table-column label="权限数量">
  29. <template #default="{ row }">
  30. <el-tag type="success">读权限: {{ row.readpermission }}</el-tag>
  31. <el-tag type="warning">写权限: {{ row.writepermission }}</el-tag>
  32. <el-tag type="danger">管理权限: {{ row.managepermission }}</el-tag>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="操作">
  36. <template #default="{ row }">
  37. <el-button size="small" @click="handleAssign(row)" type="primary">查看权限</el-button>
  38. <el-button size="small" >编辑权限</el-button>
  39. </template>
  40. </el-table-column>
  41. </el-table>
  42. <!-- 权限分配面板 -->
  43. <div v-if="showAssignPanel" class="assign-panel">
  44. <div class="assign-header">
  45. 权限分配矩阵-<b>{{ currentRole.name }}对象</b>
  46. <div style="margin-left: auto">
  47. <el-switch v-model="ifDisplaysinheritedpermissions" active-text="显示继承权限" inactive-text="不显示继承权限" ></el-switch>
  48. </div>
  49. </div>
  50. <el-divider style="margin-top: 1px"></el-divider>
  51. <div style="display: flex; align-items: center; gap: 10px;">
  52. <el-select v-model="value" placeholder="选择分类" style="width: 150px">
  53. <!-- <el-option-->
  54. <!-- v-for="item in options"-->
  55. <!-- :key="item.value"-->
  56. <!-- :label="item.label"-->
  57. <!-- :value="item.value"-->
  58. <!-- />-->
  59. </el-select>
  60. <el-button type="plain">全选</el-button>
  61. <el-button type="plain">全不选</el-button>
  62. </div>
  63. <div class="inheritanceSettings">
  64. <span>权限继承设置</span><br/>
  65. <el-checkbox-group v-model="inheritanceoptions" size="large">
  66. <el-checkbox label="0" style="color: black">从父分类继承权限</el-checkbox>
  67. <el-checkbox label="1"style="color: black" >从角色继承权限</el-checkbox>
  68. </el-checkbox-group>
  69. <div style="color: #777777;font-size: small">继承的权限显示为灰色,不可直接修改,如需修改,请到源头权限处修改</div>
  70. </div>
  71. <!-- 权限树结构 -->
  72. <div>
  73. <el-table :data="tableData" style="width: 100%">
  74. <el-table-column type="expand">
  75. <template #default="props">
  76. <el-tree :data="props.row.children" show-checkbox node-key="id"></el-tree>
  77. </template>
  78. </el-table-column>
  79. <el-table-column prop="name" label="提示词分组/名称"></el-table-column>
  80. <el-table-column prop="readPermission" label="读权限">
  81. <template #default="scope">
  82. <el-select v-model="scope.row.readPermission" placeholder="请选择">
  83. <el-option label="无权限" value="无权限"></el-option>
  84. <el-option label="只读" value="只读"></el-option>
  85. <el-option label="可编辑" value="可编辑"></el-option>
  86. <el-option label="管理" value="管理"></el-option>
  87. </el-select>
  88. </template>
  89. </el-table-column>
  90. <el-table-column prop="writePermission" label="写权限">
  91. <template #default="scope">
  92. <el-select v-model="scope.row.writePermission" placeholder="请选择">
  93. <el-option label="无权限" value="无权限"></el-option>
  94. <el-option label="只读" value="只读"></el-option>
  95. <el-option label="可编辑" value="可编辑"></el-option>
  96. <el-option label="管理" value="管理"></el-option>
  97. </el-select>
  98. </template>
  99. </el-table-column>
  100. <el-table-column prop="deletePermission" label="删除权限">
  101. <template #default="scope">
  102. <el-select v-model="scope.row.deletePermission" placeholder="请选择">
  103. <el-option label="无权限" value="无权限"></el-option>
  104. <el-option label="只读" value="只读"></el-option>
  105. <el-option label="可编辑" value="可编辑"></el-option>
  106. <el-option label="管理" value="管理"></el-option>
  107. </el-select>
  108. </template>
  109. </el-table-column>
  110. <el-table-column prop="managePermission" label="管理权限">
  111. <template #default="scope">
  112. <el-select v-model="scope.row.managePermission" placeholder="请选择">
  113. <el-option label="无权限" value="无权限"></el-option>
  114. <el-option label="只读" value="只读"></el-option>
  115. <el-option label="可编辑" value="可编辑"></el-option>
  116. <el-option label="管理" value="管理"></el-option>
  117. </el-select>
  118. </template>
  119. </el-table-column>
  120. </el-table>
  121. </div>
  122. </div>
  123. </div>
  124. </template>
  125. <script setup>
  126. import { ref } from 'vue'
  127. const ifDisplaysinheritedpermissions=ref(false)
  128. const inheritanceoptions=ref([])
  129. const search = ref({
  130. keyword: '',
  131. role: ''
  132. })
  133. const tableData=ref([
  134. {
  135. name: '内容创作',
  136. readPermission: '',
  137. writePermission: '',
  138. deletePermission: '',
  139. managePermission: '',
  140. children: [
  141. { id: 1, label: '文章撰写' },
  142. { id: 2, label: '创意写作模板' }
  143. ]
  144. },{
  145. name: '知识问答',
  146. readPermission: '',
  147. writePermission: '',
  148. deletePermission: '',
  149. managePermission: '',
  150. children: [
  151. { id: 1, label: '文章撰写' },
  152. { id: 2, label: '创意写作模板' }
  153. ]
  154. }
  155. // 更多行...
  156. ])
  157. const userList = ref([
  158. { name: 'admin', type: '角色', readpermission: 12, writepermission: 5, managepermission: 3 },
  159. { name: 'editor', type: '角色', readpermission: 8, writepermission: 2, managepermission: 1 },
  160. { name: 'zhangan', type: '用户', readpermission: 6, writepermission: 1, managepermission: 0 },
  161. { name: 'test', type: '用户', readpermission: 2, writepermission: 0, managepermission: 1 }
  162. ])
  163. const currentRole = ref({})
  164. const showAssignPanel = ref(false)
  165. const directAssign = ref(true)
  166. const inheritFrom = ref('user')
  167. const handleSearch = () => {
  168. // 模拟过滤
  169. console.log('搜索:', search.value)
  170. }
  171. const handleAssign = (row) => {
  172. currentRole.value = row
  173. showAssignPanel.value = true
  174. }
  175. // 模拟分类树结构(扁平结构简化展示)
  176. const treeData = ref([
  177. {
  178. id: 1,
  179. label: '内容创作',
  180. view: 'manage',
  181. edit: 'readonly',
  182. write: 'readonly'
  183. },
  184. {
  185. id: 2,
  186. label: 'creative-writing-template',
  187. view: 'manage',
  188. edit: 'manage',
  189. write: 'manage'
  190. },
  191. {
  192. id: 3,
  193. label: '文章创意',
  194. view: 'readonly',
  195. edit: 'none',
  196. write: 'readonly'
  197. },
  198. {
  199. id: 4,
  200. label: '写作方法论',
  201. view: 'manage',
  202. edit: 'manage',
  203. write: 'manage'
  204. }
  205. ])
  206. const savePermission = () => {
  207. console.log('保存权限:', treeData.value)
  208. }
  209. </script>
  210. <style scoped>
  211. .inheritanceSettings{
  212. background-color: #F5F7FA;
  213. margin-top: 30px;
  214. }
  215. .permission-page {
  216. padding: 20px;
  217. }
  218. .search-form {
  219. margin: 20px 0;
  220. }
  221. .assign-panel {
  222. margin-top: 30px;
  223. border: 1px solid #ebeef5;
  224. padding: 20px;
  225. background: #fafafa;
  226. }
  227. .assign-header {
  228. display: flex;
  229. font-weight: bold;
  230. margin-bottom: 20px;
  231. }
  232. .assign-body {
  233. margin-top: 10px;
  234. }
  235. .assign-footer {
  236. margin-top: 20px;
  237. text-align: right;
  238. }
  239. </style>