index.tsx 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. import SaveForm from '@/components/save-form'
  2. import Pagination from '@/components/pagination'
  3. import {
  4. NButton,
  5. NCascader,
  6. NDataTable,
  7. NFormItem,
  8. NInput,
  9. NModal,
  10. NSpace,
  11. NTag,
  12. useDialog,
  13. useMessage
  14. } from 'naive-ui'
  15. import { defineComponent, onMounted, reactive, ref } from 'vue'
  16. import { sysApplicationPage, sysRolePage, sysRoleRemove } from '../api'
  17. import RoleOperation from './role-operation'
  18. import { formatDataList } from '@/utils/urlUtils'
  19. export default defineComponent({
  20. name: 'subsidy-list',
  21. setup() {
  22. const state = reactive({
  23. loading: false,
  24. pagination: {
  25. page: 1,
  26. rows: 10,
  27. pageTotal: 0
  28. },
  29. searchForm: {
  30. appId: null,
  31. roleName: null
  32. },
  33. dataList: [] as any,
  34. applyList: [] as any,
  35. visiableRole: false,
  36. roleOperation: 'add',
  37. roleData: {} as any
  38. })
  39. const dialog = useDialog()
  40. const message = useMessage()
  41. const columns = () => {
  42. return [
  43. {
  44. title: '编号',
  45. key: 'id'
  46. },
  47. {
  48. title: '应用名',
  49. key: 'appName'
  50. },
  51. {
  52. title: '角色名称',
  53. key: 'roleName'
  54. },
  55. {
  56. title: '角色状态',
  57. key: 'enable',
  58. render(row: any) {
  59. return row.enable ? <NTag type="primary">开启</NTag> : <NTag type="default">关闭</NTag>
  60. }
  61. },
  62. {
  63. title: '角色描述',
  64. key: 'roleDesc'
  65. },
  66. {
  67. title: '创建时间',
  68. key: 'createTime'
  69. },
  70. {
  71. title: '操作',
  72. key: 'operation',
  73. render(row: any) {
  74. return (
  75. <NSpace>
  76. <NButton
  77. type="primary"
  78. size="small"
  79. text
  80. //v-auth="sysRole/update1597890274151223298"
  81. onClick={() => {
  82. state.visiableRole = true
  83. state.roleOperation = 'edit'
  84. state.roleData = row
  85. }}
  86. >
  87. 修改
  88. </NButton>
  89. <NButton
  90. type="primary"
  91. size="small"
  92. text
  93. onClick={() => onRemove(row)}
  94. //v-auth="sysRole/remove1597890339439759362"
  95. >
  96. 删除
  97. </NButton>
  98. </NSpace>
  99. )
  100. }
  101. }
  102. ]
  103. }
  104. const onRemove = (row: any): void => {
  105. console.log(row, 'row')
  106. dialog.warning({
  107. title: '警告',
  108. content: `删除"${row.roleName}",是否继续?`,
  109. positiveText: '确定',
  110. negativeText: '取消',
  111. onPositiveClick: async () => {
  112. try {
  113. await sysRoleRemove({ id: row.id })
  114. getList()
  115. message.success('删除成功')
  116. } catch {}
  117. }
  118. })
  119. }
  120. const getList = async () => {
  121. try {
  122. state.loading = true
  123. const { data } = await sysRolePage({ ...state.pagination, ...state.searchForm })
  124. state.loading = false
  125. state.pagination.pageTotal = Number(data.total)
  126. state.dataList = data.rows || []
  127. } catch {
  128. state.loading = false
  129. }
  130. }
  131. const getApplyList = async (parentId = 0) => {
  132. try {
  133. const { data } = await sysApplicationPage({
  134. page: 1,
  135. rows: 999,
  136. leafQuery: true,
  137. parentId
  138. })
  139. state.applyList = formatDataList(data.rows || [], 'bizApps')
  140. } catch {}
  141. }
  142. const saveForm = ref()
  143. const onSubmit = () => {
  144. state.pagination.page = 1
  145. getList()
  146. }
  147. const onSearch = () => {
  148. saveForm.value?.submit()
  149. }
  150. const onBtnReset = () => {
  151. saveForm.value?.reset()
  152. }
  153. onMounted(() => {
  154. getList()
  155. getApplyList()
  156. })
  157. return () => (
  158. <div class="system-menu-container">
  159. <SaveForm
  160. ref={saveForm}
  161. model={state.searchForm}
  162. onSubmit={onSubmit}
  163. onSetModel={(val: any) => (state.searchForm = val)}
  164. >
  165. <NFormItem label="应用分类" path="appId">
  166. <NCascader
  167. v-model:value={state.searchForm.appId}
  168. options={state.applyList}
  169. showPath={true}
  170. allowCheckingNotLoaded={false}
  171. checkStrategy="child"
  172. valueField="id"
  173. labelField="appName"
  174. childrenField="bizApps"
  175. expandTrigger="hover"
  176. placeholder="请选择应用分类"
  177. clearable
  178. ></NCascader>
  179. </NFormItem>
  180. <NFormItem label="角色名称" path="roleName">
  181. <NInput v-model:value={state.searchForm.roleName} placeholder="请输入角色名称" />
  182. </NFormItem>
  183. <NFormItem>
  184. <NSpace>
  185. <NButton type="primary" onClick={onSearch}>
  186. 搜索
  187. </NButton>
  188. <NButton type="default" onClick={onBtnReset}>
  189. 重置
  190. </NButton>
  191. </NSpace>
  192. </NFormItem>
  193. </SaveForm>
  194. <div class={['section-container']}>
  195. <NSpace style={{ paddingBottom: '12px' }}>
  196. <NButton
  197. type="primary"
  198. //v-auth="sysRole/save1597890178735001601"
  199. onClick={() => {
  200. state.visiableRole = true
  201. state.roleData = {}
  202. state.roleOperation = 'add'
  203. }}
  204. >
  205. 添加角色
  206. </NButton>
  207. </NSpace>
  208. <NDataTable
  209. loading={state.loading}
  210. columns={columns()}
  211. data={state.dataList}
  212. ></NDataTable>
  213. <Pagination
  214. v-model:page={state.pagination.page}
  215. v-model:pageSize={state.pagination.rows}
  216. v-model:pageTotal={state.pagination.pageTotal}
  217. onList={getList}
  218. sync
  219. ></Pagination>
  220. </div>
  221. <NModal
  222. v-model:show={state.visiableRole}
  223. preset="dialog"
  224. showIcon={false}
  225. title={state.roleOperation === 'add' ? '新增角色' : '修改角色'}
  226. style={{ width: '600px' }}
  227. >
  228. <RoleOperation
  229. type={state.roleOperation}
  230. data={state.roleData}
  231. applyList={state.applyList}
  232. onClose={() => (state.visiableRole = false)}
  233. onGetList={getList}
  234. />
  235. </NModal>
  236. </div>
  237. )
  238. }
  239. })