6df61bd0bfbc1f5826c95b25ca991e3025ebc349.svn-base 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <template>
  2. <a-card :bordered="false">
  3. <div class="table-page-search-wrapper">
  4. <a-form layout="inline">
  5. <a-row :gutter="48">
  6. <a-col :md="8" :sm="24">
  7. <a-form-item label="角色ID">
  8. <a-input placeholder="请输入"/>
  9. </a-form-item>
  10. </a-col>
  11. <a-col :md="8" :sm="24">
  12. <a-form-item label="状态">
  13. <a-select placeholder="请选择" default-value="0">
  14. <a-select-option value="0">全部</a-select-option>
  15. <a-select-option value="1">关闭</a-select-option>
  16. <a-select-option value="2">运行中</a-select-option>
  17. </a-select>
  18. </a-form-item>
  19. </a-col>
  20. <a-col :md="8" :sm="24">
  21. <span class="table-page-search-submitButtons">
  22. <a-button type="primary">查询</a-button>
  23. <a-button style="margin-left: 8px">重置</a-button>
  24. </span>
  25. </a-col>
  26. </a-row>
  27. </a-form>
  28. </div>
  29. <s-table :columns="columns" :data="loadData">
  30. <span slot="actions" slot-scope="text, record">
  31. <a-tag v-for="(action, index) in record.actionList" :key="index">{{ action.describe }}</a-tag>
  32. </span>
  33. <span slot="status" slot-scope="text">
  34. {{ text | statusFilter }}
  35. </span>
  36. <span slot="action" slot-scope="text, record">
  37. <a @click="handleEdit(record)">编辑</a>
  38. <a-divider type="vertical" />
  39. <a-dropdown>
  40. <a class="ant-dropdown-link">
  41. 更多 <a-icon type="down" />
  42. </a>
  43. <a-menu slot="overlay">
  44. <a-menu-item>
  45. <a href="javascript:;">详情</a>
  46. </a-menu-item>
  47. <a-menu-item>
  48. <a href="javascript:;">禁用</a>
  49. </a-menu-item>
  50. <a-menu-item>
  51. <a href="javascript:;">删除</a>
  52. </a-menu-item>
  53. </a-menu>
  54. </a-dropdown>
  55. </span>
  56. </s-table>
  57. <a-modal
  58. title="操作"
  59. :width="800"
  60. v-model="visible"
  61. @ok="handleOk"
  62. >
  63. <a-form :autoFormCreate="(form)=>{this.form = form}">
  64. <a-form-item
  65. :labelCol="labelCol"
  66. :wrapperCol="wrapperCol"
  67. label="唯一识别码"
  68. hasFeedback
  69. validateStatus="success"
  70. >
  71. <a-input placeholder="唯一识别码" v-model="mdl.id" id="no" disabled="disabled" />
  72. </a-form-item>
  73. <a-form-item
  74. :labelCol="labelCol"
  75. :wrapperCol="wrapperCol"
  76. label="权限名称"
  77. hasFeedback
  78. validateStatus="success"
  79. >
  80. <a-input placeholder="起一个名字" v-model="mdl.name" id="permission_name" />
  81. </a-form-item>
  82. <a-form-item
  83. :labelCol="labelCol"
  84. :wrapperCol="wrapperCol"
  85. label="状态"
  86. hasFeedback
  87. validateStatus="warning"
  88. >
  89. <a-select v-model="mdl.status">
  90. <a-select-option value="1">正常</a-select-option>
  91. <a-select-option value="2">禁用</a-select-option>
  92. </a-select>
  93. </a-form-item>
  94. <a-form-item
  95. :labelCol="labelCol"
  96. :wrapperCol="wrapperCol"
  97. label="描述"
  98. hasFeedback
  99. >
  100. <a-textarea :rows="5" v-model="mdl.describe" placeholder="..." id="describe"/>
  101. </a-form-item>
  102. <a-divider />
  103. <a-form-item
  104. :labelCol="labelCol"
  105. :wrapperCol="wrapperCol"
  106. label="赋予权限"
  107. hasFeedback
  108. >
  109. <a-select
  110. style="width: 100%"
  111. mode="multiple"
  112. v-model="mdl.actions"
  113. :allowClear="true"
  114. >
  115. <a-select-option v-for="(action, index) in permissionList" :key="index" :value="action.value">{{ action.label }}</a-select-option>
  116. </a-select>
  117. </a-form-item>
  118. </a-form>
  119. </a-modal>
  120. </a-card>
  121. </template>
  122. <script>
  123. import STable from '@/components/table/'
  124. export default {
  125. name: "TableList",
  126. components: {
  127. STable
  128. },
  129. data () {
  130. return {
  131. description: '列表使用场景:后台管理中的权限管理以及角色管理,可用于基于 RBAC 设计的角色权限控制,颗粒度细到每一个操作类型。',
  132. visible: false,
  133. labelCol: {
  134. xs: { span: 24 },
  135. sm: { span: 5 },
  136. },
  137. wrapperCol: {
  138. xs: { span: 24 },
  139. sm: { span: 16 },
  140. },
  141. form: null,
  142. mdl: {},
  143. // 高级搜索 展开/关闭
  144. advanced: false,
  145. // 查询参数
  146. queryParam: {},
  147. // 表头
  148. columns: [
  149. {
  150. title: '唯一识别码',
  151. dataIndex: 'id'
  152. },
  153. {
  154. title: '权限名称',
  155. dataIndex: 'name',
  156. },
  157. {
  158. title: '可操作权限',
  159. dataIndex: 'actions',
  160. scopedSlots: { customRender: 'actions' },
  161. },
  162. {
  163. title: '状态',
  164. dataIndex: 'status',
  165. scopedSlots: { customRender: 'status' },
  166. },
  167. {
  168. title: '操作',
  169. width: '150px',
  170. dataIndex: 'action',
  171. scopedSlots: { customRender: 'action' },
  172. }
  173. ],
  174. // 向后端拉取可以用的操作列表
  175. permissionList: null,
  176. // 加载数据方法 必须为 Promise 对象
  177. loadData: parameter => {
  178. return this.$http.get('/mock/api/permission', {
  179. params: Object.assign(parameter, this.queryParam)
  180. }).then(res => {
  181. let result = res.result
  182. result.data.map(permission => {
  183. permission.actionList = JSON.parse(permission.actionData)
  184. return permission
  185. })
  186. return result
  187. })
  188. },
  189. selectedRowKeys: [],
  190. selectedRows: []
  191. }
  192. },
  193. filters: {
  194. statusFilter(status) {
  195. const statusMap = {
  196. 1: '正常',
  197. 2: '禁用'
  198. }
  199. return statusMap[status]
  200. }
  201. },
  202. created () {
  203. this.loadPermissionList()
  204. },
  205. methods: {
  206. loadPermissionList () {
  207. // permissionList
  208. new Promise((resolve => {
  209. const data = [
  210. { label: '新增', value: 'add', defaultChecked: false },
  211. { label: '查询', value: 'get', defaultChecked: false },
  212. { label: '修改', value: 'update', defaultChecked: false },
  213. { label: '列表', value: 'query', defaultChecked: false },
  214. { label: '删除', value: 'delete', defaultChecked: false },
  215. { label: '导入', value: 'import', defaultChecked: false },
  216. { label: '导出', value: 'export', defaultChecked: false }
  217. ]
  218. setTimeout(resolve(data), 1500)
  219. })).then(res => {
  220. this.permissionList = res
  221. })
  222. },
  223. handleEdit (record) {
  224. this.mdl = Object.assign({}, record)
  225. console.log(this.mdl)
  226. this.visible = true
  227. },
  228. handleOk () {
  229. },
  230. onChange (selectedRowKeys, selectedRows) {
  231. this.selectedRowKeys = selectedRowKeys
  232. this.selectedRows = selectedRows
  233. },
  234. toggleAdvanced () {
  235. this.advanced = !this.advanced
  236. },
  237. },
  238. watch: {
  239. /*
  240. 'selectedRows': function (selectedRows) {
  241. this.needTotalList = this.needTotalList.map(item => {
  242. return {
  243. ...item,
  244. total: selectedRows.reduce( (sum, val) => {
  245. return sum + val[item.dataIndex]
  246. }, 0)
  247. }
  248. })
  249. }
  250. */
  251. }
  252. }
  253. </script>