index.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <div class="main animate__animated animate__backInRight" v-loading="loading">
  3. <el-row style="padding: 5px">
  4. <el-col :span="24" style="text-align: right">
  5. <el-button type="primary" @click="toAdd" v-method="'add'">{{ $t('common.create') }}</el-button>
  6. </el-col>
  7. </el-row>
  8. <el-row>
  9. <el-col :span="24">
  10. <role-table></role-table>
  11. </el-col>
  12. </el-row>
  13. <el-row justify="end" style="margin-top: 10px; height: 5vh">
  14. <el-pagination background layout="total, prev, pager, next" :page-size="limit" :total="total" v-model:current-page="currentPage" @current-change="changePage" />
  15. </el-row>
  16. <el-dialog v-model="dialog" :title="$t('pages.role.dialogTitle')" :destroy-on-close="true" @close="toClose">
  17. <role-form></role-form>
  18. </el-dialog>
  19. </div>
  20. </template>
  21. <script setup>
  22. import roleTable from './parts/table.vue'
  23. import roleForm from './parts/form.vue'
  24. import { RoleStore } from '@/store/api/system/role'
  25. import { MenusStore } from '@/store/api/system/menus'
  26. import { cloneDeep, get } from 'lodash-es'
  27. const store = RoleStore()
  28. const menuStore = MenusStore()
  29. const $checkRes = inject('$checkRes')
  30. const limit = inject('limit')
  31. const currentPage = ref(1)
  32. onMounted(() => {
  33. searchMenus()
  34. search({ skip: 0, limit })
  35. })
  36. const menuList = ref([])
  37. const searchMenus = async () => {
  38. const res = await menuStore.query()
  39. if ($checkRes(res)) {
  40. menuList.value = res.data
  41. }
  42. }
  43. const data = ref([])
  44. const total = ref(0)
  45. const search = async (e = { skip: 0, limit }) => {
  46. const { skip, limit } = e
  47. let info = { limit: limit, skip: skip }
  48. let res = await store.query(info)
  49. if ($checkRes(res)) {
  50. data.value = res.data
  51. total.value = res.total
  52. }
  53. }
  54. const form = ref({})
  55. const dialog = ref(false)
  56. const toEdit = async (data) => {
  57. let res = await store.fetch(data.id)
  58. if ($checkRes(res)) {
  59. form.value = res.data
  60. dialog.value = true
  61. }
  62. }
  63. const toDelete = async (data) => {
  64. ElMessageBox.confirm('您确定删除该数据?', '提示', {
  65. confirmButtonText: '确定',
  66. cancelButtonText: '取消',
  67. type: 'warning'
  68. }).then(async () => {
  69. const res = await store.del(data.id)
  70. if ($checkRes(res, true)) {
  71. search({ skip: 0, limit })
  72. }
  73. })
  74. }
  75. const onSubmit = async () => {
  76. const data = cloneDeep(form.value)
  77. let res
  78. if (get(data, 'id')) res = await store.update(data)
  79. else res = await store.create(data)
  80. if ($checkRes(res, true)) {
  81. search({ skip: 0, limit })
  82. toClose()
  83. }
  84. }
  85. const changeUse = async (data) => {
  86. let is_use = '1'
  87. if (data.is_use === '1') is_use = '0'
  88. const res = await store.update({ id: data.id, is_use })
  89. if ($checkRes(res, true)) {
  90. search({ skip: 0, limit })
  91. }
  92. }
  93. const toAdd = () => {
  94. dialog.value = true
  95. form.value = { is_use: '0', menu: ['home'] }
  96. }
  97. const toClose = () => {
  98. dialog.value = false
  99. form.value = { menu: {} }
  100. }
  101. // 加载中
  102. const loading = ref(false)
  103. // 请求
  104. onMounted(async () => {
  105. loading.value = true
  106. loading.value = false
  107. })
  108. const changePage = (page = currentPage.value) => {
  109. const obj = { skip: (page - 1) * limit, limit: limit }
  110. search(obj)
  111. }
  112. // provide
  113. provide('data', data)
  114. provide('total', total)
  115. provide('menuList', menuList)
  116. provide('form', form)
  117. provide('dialog', dialog)
  118. provide('toAdd', toAdd)
  119. provide('toEdit', toEdit)
  120. provide('onSubmit', onSubmit)
  121. provide('changeUse', changeUse)
  122. provide('toDelete', toDelete)
  123. </script>
  124. <style scoped lang="scss"></style>