objectOAM.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <route lang="yaml">
  2. meta:
  3. enabled: false
  4. </route>
  5. <script lang="ts" setup>
  6. import type { FormInstance, FormRules } from 'element-plus'
  7. import { createObjectOAM, getObjectOAMById, updateObjectOAM } from '@/api/model/ObjectOAMApi'
  8. const emit = defineEmits(['success'])
  9. const formRef = ref<FormInstance>()
  10. const formRules = ref<FormRules>({
  11. oamTitle: [
  12. { required: true, message: '请输入标题', trigger: 'blur' },
  13. ],
  14. oamDesc: [
  15. { required: false, message: '请输入描述', trigger: 'blur' },
  16. ],
  17. })
  18. const state = reactive({
  19. title: '',
  20. dialogVisible: false,
  21. loading: false,
  22. formData: {
  23. modelId: 0,
  24. objectId: 0,
  25. oamId: 0,
  26. oamTitle: '',
  27. oamType: 0,
  28. sqlType: 0,
  29. sqlStatement: '',
  30. sqlSelect: '',
  31. sqlFrom: '',
  32. sqlWhere: '',
  33. sqlOrder: '',
  34. oamDesc: '',
  35. },
  36. actionType: 1,
  37. })
  38. onMounted(() => {})
  39. const getData = async () => {
  40. const { modelId, objectId, oamId } = state.formData
  41. state.loading = true
  42. const { data } = await getObjectOAMById(modelId, objectId, oamId)
  43. state.loading = false
  44. state.formData = data
  45. }
  46. function onSubmit() {
  47. formRef.value && formRef.value.validate(async (valid) => {
  48. if (valid) {
  49. if (state.actionType === 1) {
  50. await createObjectOAM(state.formData)
  51. state.dialogVisible = false
  52. emit('success')
  53. }
  54. else {
  55. await updateObjectOAM(state.formData)
  56. state.dialogVisible = false
  57. emit('success')
  58. }
  59. }
  60. })
  61. }
  62. function onCancel() {
  63. state.dialogVisible = false
  64. }
  65. function resetFormData() {
  66. state.formData = {
  67. modelId: 0,
  68. objectId: 0,
  69. oamId: 0,
  70. oamType: 0,
  71. oamTitle: '',
  72. sqlType: 0,
  73. sqlStatement: '',
  74. sqlSelect: '',
  75. sqlFrom: '',
  76. sqlWhere: '',
  77. sqlOrder: '',
  78. oamDesc: '',
  79. }
  80. }
  81. defineExpose({
  82. showAddModel(modelId: number, objectId: number) {
  83. resetFormData()
  84. state.title = '新增对象行为'
  85. state.actionType = 1
  86. state.formData.modelId = modelId
  87. state.formData.objectId = objectId
  88. state.dialogVisible = true
  89. },
  90. showEditModel(modelId: number, objectId: number, oamId: number) {
  91. resetFormData()
  92. state.title = '编辑对象行为'
  93. state.formData.modelId = modelId
  94. state.formData.objectId = objectId
  95. state.formData.oamId = oamId
  96. state.actionType = 2
  97. state.dialogVisible = true
  98. getData()
  99. },
  100. })
  101. </script>
  102. <template>
  103. <div>
  104. <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
  105. <div v-loading="state.loading">
  106. <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
  107. <el-form-item label="行为名称" prop="oamTitle">
  108. <el-input v-model="state.formData.oamTitle" placeholder="请输入标题" />
  109. </el-form-item>
  110. <el-form-item label="类型" prop="oamType">
  111. <el-radio-group v-model="state.formData.oamType">
  112. <el-radio :label="1">基于Pk查询</el-radio>
  113. <el-radio :label="2">多笔查询</el-radio>
  114. <el-radio :label="3">分页查询</el-radio>
  115. <el-radio :label="4">新增</el-radio>
  116. <el-radio :label="5">修改</el-radio>
  117. <el-radio :label="6">删除</el-radio>
  118. <el-radio :label="7">非Pk单笔查询</el-radio>
  119. </el-radio-group>
  120. </el-form-item>
  121. <el-form-item label="类型" prop="sqlType">
  122. <el-radio-group v-model="state.formData.sqlType">
  123. <el-radio :label="1">DQL(数据查询)</el-radio>
  124. <el-radio :label="2">DML(数据操纵)</el-radio>
  125. <el-radio :label="3">DDL(数据定义)</el-radio>
  126. <el-radio :label="4">DCL(数据控制)</el-radio>
  127. </el-radio-group>
  128. </el-form-item>
  129. <el-form-item label="SQL" prop="sqlStatement">
  130. <el-input v-model="state.formData.sqlStatement" type="textarea" rows="3" placeholder="请输入SQL" />
  131. </el-form-item>
  132. <el-form-item label="Select" prop="sqlSelect">
  133. <el-input v-model="state.formData.sqlSelect" type="textarea" rows="3" placeholder="请输入SQL" />
  134. </el-form-item>
  135. <el-form-item label="From" prop="sqlFrom">
  136. <el-input v-model="state.formData.sqlFrom" type="textarea" rows="3" placeholder="请输入SQL" />
  137. </el-form-item>
  138. <el-form-item label="Where" prop="sqlWhere">
  139. <el-input v-model="state.formData.sqlWhere" type="textarea" rows="3" placeholder="请输入SQL" />
  140. </el-form-item>
  141. <el-form-item label="Order" prop="sqlOrder">
  142. <el-input v-model="state.formData.sqlOrder" type="textarea" rows="3" placeholder="请输入SQL" />
  143. </el-form-item>
  144. <el-form-item label="简要说明" prop="oamDesc">
  145. <el-input v-model="state.formData.oamDesc" type="textarea" rows="3" placeholder="请输入标题" />
  146. </el-form-item>
  147. </el-form>
  148. </div>
  149. <template #footer>
  150. <el-button size="large" @click="onCancel">
  151. 取消
  152. </el-button>
  153. <el-button type="primary" size="large" @click="onSubmit">
  154. 保存
  155. </el-button>
  156. </template>
  157. </el-dialog>
  158. </div>
  159. </template>