createForm.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <ContentWrap>
  3. <!-- 顶部新增表单-->
  4. <el-form ref="formRef" v-loading="formLoading" :model="formData" label-width="100px">
  5. <el-form-item label="角色">
  6. <el-select v-model="formData.roleId" placeholder="请选择角色" style="width: 300px">
  7. <el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id" />
  8. </el-select>
  9. </el-form-item>
  10. <el-form-item label="页面" prop="pageType">
  11. <el-select v-model="formData.pageType" placeholder="请选择页面" style="width: 300px">
  12. <el-option
  13. v-for="dict in getIntDictOptions(DICT_TYPE.COCKPIT_PAGE_TYPE)"
  14. :key="dict.value"
  15. :value="dict.value"
  16. :label="dict.label"
  17. />
  18. </el-select>
  19. </el-form-item>
  20. <el-button
  21. type="primary"
  22. style="margin-left: 500px"
  23. @click="submitForm"
  24. v-if="!isUpdate"
  25. :disabled="isSuccess"
  26. >保 存
  27. </el-button>
  28. <el-button type="primary" style="margin-left: 500px" @click="submitForm" v-else
  29. >修改
  30. </el-button>
  31. <el-button @click="goBack">取 消</el-button>
  32. </el-form>
  33. </ContentWrap>
  34. <ContentWrap v-if="showTable">
  35. <!-- 底部数据表格和预览-->
  36. <el-radio-group v-model="tabPosition" class="mb-15px" @change="handleTabChange">
  37. <el-radio-button label="first">表格视图</el-radio-button>
  38. <el-radio-button label="second">预览视图</el-radio-button>
  39. </el-radio-group>
  40. <ContentWrap>
  41. <TableView v-if="tabPosition == 'first'" :page-id="formData.id" />
  42. <LookView v-else :page-id="formData.id" />
  43. </ContentWrap>
  44. </ContentWrap>
  45. </template>
  46. <script setup lang="ts">
  47. import TableView from './TableView.vue'
  48. import LookView from './LookView.vue'
  49. import * as rolePageApi from '@/api/system/rolePage/index'
  50. import * as RoleApi from '@/api/system/role'
  51. import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
  52. import { useTagsViewStoreWithOut } from '@/store/modules/tagsView'
  53. const { t } = useI18n() // 国际化
  54. const message = useMessage() // 消息弹窗
  55. const router = useRouter()
  56. const route = useRoute()
  57. const roleList = ref([] as RoleApi.RoleVO[]) // 角色的列表
  58. const formLoading = ref(false) // 表单的加载中
  59. const tabPosition = ref('first')
  60. const formData = reactive({
  61. id: undefined,
  62. roleId: undefined,
  63. pageType: undefined
  64. })
  65. const showTable = ref(false) //是否展示底部表格区
  66. const isUpdate = route.query.id
  67. const isSuccess = ref(false) // 新增成功后禁用按钮
  68. // 监听数据变化,设置未保存标记
  69. watch(
  70. () => ({
  71. roleId: formData.roleId
  72. }),
  73. { deep: true }
  74. )
  75. onMounted(() => {
  76. getRoleData() //角色下拉数据
  77. if (isUpdate) {
  78. editData()
  79. showTable.value = true
  80. }
  81. })
  82. // 角色下拉数据
  83. const getRoleData = async () => {
  84. const data = await RoleApi.getSimpleRoleList()
  85. roleList.value = data
  86. console.log(data, '数据格式')
  87. }
  88. // 方法定义
  89. const handleTabChange = (newTab: string) => {
  90. tabPosition.value = newTab
  91. }
  92. // 编辑时数据渲染
  93. const editData = async () => {
  94. const data = await rolePageApi.selectRolePageById(route.query.id)
  95. formData.id = data.id
  96. formData.roleId = data.roleId
  97. formData.pageType = data.pageType
  98. console.log(data, 'hnudhiahauihasihi')
  99. }
  100. // 提交表单
  101. const submitForm = async () => {
  102. try {
  103. let data
  104. let successMessage
  105. if (isUpdate) {
  106. // 有 id,调用修改接口
  107. data = await rolePageApi.updateRolePage(formData)
  108. successMessage = t('common.updateSuccess')
  109. } else {
  110. // 没有 id,调用新增接口
  111. console.log(formData, '数据格式')
  112. data = await rolePageApi.insertRolePage(formData)
  113. successMessage = t('common.createSuccess')
  114. showTable.value = true //新增成功后显示下发列表
  115. isSuccess.value = true //新增成功后保存按钮不显示
  116. // 新增成功后,将返回的 id 保存到 formData 中
  117. if (data) {
  118. formData.id = data
  119. }
  120. }
  121. if (data) {
  122. message.success(successMessage)
  123. }
  124. } catch (error) {
  125. console.error('保存失败:', error)
  126. message.error('保存失败,请稍后重试')
  127. }
  128. }
  129. //退出页面
  130. const goBack = () => {
  131. // 获取 tagsView store
  132. const tagsViewStore = useTagsViewStoreWithOut()
  133. // 获取当前路由对象
  134. const currentRoute = router.currentRoute.value
  135. // 方法1:精确删除当前标签(推荐)
  136. tagsViewStore.delVisitedView(currentRoute)
  137. router.push('/system/rolePage');
  138. (formData.id = undefined), (formData.roleId = undefined), (formData.pageType = undefined)
  139. }
  140. </script>
  141. <style scoped lang="scss"></style>