objectOAM.vue 5.5 KB

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