houyaf 3 tahun lalu
induk
melakukan
336ae2dd4d

+ 14 - 0
src/api/api/apiGatewayApi.ts

@@ -15,6 +15,20 @@ export function getX(objectCode: string, oamCode: string, data: any) {
 }
 
 /**
+ * 查询
+ * @param objectCode
+ * @param oamCode
+ * @returns
+ */
+export function generateParams(objectCode: string, oamCode: string) {
+  return apiRequest({
+    url: `/x/GenerateParams/${objectCode}/${oamCode}`,
+    method: 'GET',
+  })
+}
+
+
+/**
  * 添加
  * @param objectCode
  * @param oamCode

+ 14 - 0
src/api/biz/bizObjectAttrApi.ts

@@ -20,6 +20,20 @@ export function getObjectAttrByList(data: any) {
  * @param attrId
  * @returns
  */
+export function getObjectAttrListById(bizId: number, objectId: number) {
+  return apiRequest({
+    url: `/biz/object/attr/${bizId}/${objectId}`,
+    method: 'GET',
+  })
+}
+
+/**
+ * 根据Id获取ObjectAttr
+ * @param bizId
+ * @param objectId
+ * @param attrId
+ * @returns
+ */
 export function getObjectAttrById(bizId: number, objectId: number, attrId: number) {
   return apiRequest({
     url: `/biz/object/attr/${bizId}/${objectId}/${attrId}`,

+ 68 - 0
src/api/biz/bizObjectMappingApi.ts

@@ -0,0 +1,68 @@
+import apiRequest from '@/network/http/apiRequest'
+
+/**
+ * 获取ObjectAttr列表
+ * @param data
+ * @returns
+ */
+export function getObjectMappingByList(data: any) {
+  return apiRequest({
+    url: '/biz/object/mapping',
+    method: 'GET',
+    params: data,
+  })
+}
+
+/**
+ * 根据Id获取ObjectAttr
+ * @param bizId
+ * @param objectId
+ * @returns
+ */
+export function getObjectAttrListById(bizId: number, objectId: number) {
+  return apiRequest({
+    url: `/biz/object/mapping/${bizId}/${objectId}`,
+    method: 'GET',
+  })
+}
+
+/**
+ * 根据Id获取ObjectAttr
+ * @param bizId
+ * @param objectId
+ * @param mappingId
+ * @returns
+ */
+export function getObjectMappingById(bizId: number, objectId: number, mappingId: number) {
+  return apiRequest({
+    url: `/biz/object/mapping/${bizId}/${objectId}/${mappingId}`,
+    method: 'GET',
+  })
+}
+
+/**
+ * 添加ObjectAttr
+ * @param data
+ * @returns
+ */
+export function createObjectMapping(data: any) {
+  return apiRequest({
+    url: '/biz/object/mapping/add',
+    method: 'POST',
+    data,
+  })
+}
+
+/**
+ * 删除ObjectAttr
+ * @param bizId
+ * @param objectId
+ * @param mappingId
+ * @returns
+ */
+export function deleteObjectMappingById(bizId: number, objectId: number, mappingId: number) {
+  return apiRequest({
+    url: `/biz/object/mapping/${bizId}/${objectId}/${mappingId}`,
+    method: 'DELETE',
+  })
+}

+ 9 - 10
src/views/api/trans/index.vue

@@ -9,7 +9,7 @@ import type { FormInstance } from 'element-plus'
 import ObjectSelector from './components/ObjectOAMSelector.vue'
 import useSettingsStore from '@/store/modules/settings'
 import { getApiById } from '@/api/api/apiApi'
-import { createX, deleteX, getX, patchX, updateX } from '@/api/api/apiGatewayApi'
+import { createX, deleteX, getX, patchX, updateX, generateParams } from '@/api/api/apiGatewayApi'
 import { apiMethod } from '@/utils/tool'
 
 const settingsStore = useSettingsStore()
@@ -33,6 +33,7 @@ const state = reactive({
     apiId,
     keywords: '',
   },
+  params: {},
   viewData: {
     apiTitle: '',
     apiMethod: 1,
@@ -110,8 +111,10 @@ const bindObjectOAM = () => {
 }
 
 const onGenerateParams = async () => {
-  // const { data } = await generateParamsByCode(state.apiCode)
-  // state.params = JSON.stringify(data)
+  const objectCode = state.viewData.objectCode
+  const oamCode = state.viewData.oamCode
+  const { data } = await generateParams(objectCode, oamCode)
+  state.formData.apiBody = JSON.stringify(data)
 }
 
 const onExecute = async () => {
@@ -129,6 +132,7 @@ const onExecute = async () => {
     state.result = JSON.stringify(data)
   }
   else if (apiMethod === 2) {
+    console.log(apiMethod)
     const { data } = await createX(objectCode, oamCode, apiBody)
     state.result = JSON.stringify(data)
   }
@@ -223,13 +227,8 @@ function goBack() {
             </el-form-item>
 
             <div class="action-bottom">
-              <el-button type="primary" @click="onGenerateParams">
-                生成参数
-              </el-button>
-
-              <el-button type="primary" @click="onExecute">
-                立即执行
-              </el-button>
+              <el-button type="primary" @click="onGenerateParams">生成参数</el-button>
+              <el-button type="primary" @click="onExecute">立即执行</el-button>
             </div>
           </el-form>
         </div>

+ 12 - 1
src/views/biz/attr/index.vue

@@ -21,6 +21,7 @@ interface ObjectAttr {
   attrId: number
   attrTitle: string
   attrCode: string
+  mappingCode: string
   attrType: number
   attrLength: number
   attrDecimals: number
@@ -32,7 +33,10 @@ interface ObjectAttr {
 const dataType = [
   { dataType: 1, dataName: '整数' },
   { dataType: 2, dataName: '字符串' },
-  { dataType: 3, dataName: '小数' }]
+  { dataType: 3, dataName: '浮点小数' },
+  { dataType: 4, dataName: '日期' },
+  { dataType: 5, dataName: '日期时间' },
+]
 
 // 数据
 const state = reactive({
@@ -85,6 +89,7 @@ function onAttrAdd() {
     attrId: 0,
     attrTitle: '', // 名称
     attrCode: '', // 代码
+    mappingCode: '',
     attrType: 0, // 类型
     attrLength: 0, // 长度
     attrDecimals: 0, // 小数位数
@@ -279,6 +284,12 @@ function goBack() {
               </template>
             </el-table-column>
 
+            <el-table-column label="模型代码" width="120">
+              <template #default="scope">
+                <el-input v-model="scope.row.mappingCode" />
+              </template>
+            </el-table-column>
+
             <el-table-column label="类型" width="120">
               <template #default="scope">
                 <el-select v-model="scope.row.attrType">

+ 52 - 0
src/views/biz/oam/components/ObjectAttrSelector.vue

@@ -0,0 +1,52 @@
+<script lang="ts" setup name="AppCatSelector">
+import { getObjectAttrListById } from '@/api/biz/bizObjectAttrApi'
+const props = withDefaults(defineProps<{
+  modelValue: number,
+  bizId: number,
+  objectId: number,
+}>(), {
+  modelValue: 0,
+  bizId: 0,
+  objectId: 0,
+})
+
+const emit = defineEmits(['update:modelValue'])
+interface BizObjectAttr {
+  attrId: number
+  attrTitle: string
+}
+const ruleId = computed({
+  get: () => {
+    return props.modelValue
+  },
+  set: (val) => {
+    emit('update:modelValue', val)
+  },
+})
+const state = reactive({
+  loading: false,
+  dataList: [] as BizObjectAttr[],
+})
+
+const getData = async () => {
+  state.loading = true
+  const { data } = await getObjectAttrListById(props.bizId, props.objectId)
+  state.loading = false
+  state.dataList = data
+}
+onMounted(() => {
+  getData ()
+})
+</script>
+
+<template>
+  <el-select v-model="ruleId" v-loading="state.loading" style="width: 100%" filterable placeholder="请选择业务规则" value-key="attrId">
+    <el-option key="0" label="请选择" :value="0" disabled />
+    <el-option
+      v-for="item in state.dataList"
+      :key="item.attrId"
+      :label="item.attrTitle"
+      :value="item.attrId"
+    />
+  </el-select>
+</template>

+ 0 - 0
src/views/biz/oam/components/objectOAM.vue → src/views/biz/oam/components/ObjectOAM.vue


+ 17 - 59
src/views/biz/oam/components/objectOAMRule.vue → src/views/biz/oam/components/ObjectOAMRule.vue

@@ -6,6 +6,8 @@ meta:
 <script lang="ts" setup>
 import type { FormInstance, FormRules } from 'element-plus'
 import { createObjectOAMRule, getObjectOAMRuleById, updateObjectOAMRule } from '@/api/biz/bizObjectOAMRuleApi'
+import RuleSelector from '@/views/biz/oam/components/RuleSelector.vue'
+import ObjectAttrSelector from '@/views/biz/oam/components/ObjectAttrSelector.vue'
 const emit = defineEmits(['success'])
 
 const formRef = ref<FormInstance>()
@@ -93,19 +95,21 @@ function resetFormData() {
 defineExpose({
   showAddModel(bizId: number, objectId: number, oamId: number) {
     resetFormData()
-    state.title = '新增对象行为'
+    state.title = '新增业务规则'
     state.actionType = 1
     state.formData.bizId = bizId
     state.formData.objectId = objectId
+    state.formData.oamId = oamId
     state.dialogVisible = true
   },
 
   showEditModel(bizId: number, objectId: number, oamId: number, orId: number) {
     resetFormData()
-    state.title = '编辑对象行为'
+    state.title = '编辑业务规则'
     state.actionType = 2
     state.formData.bizId = bizId
     state.formData.objectId = objectId
+    state.formData.oamId = oamId
     state.formData.orId = orId
     state.dialogVisible = true
     getData()
@@ -118,67 +122,21 @@ defineExpose({
     <el-drawer v-model="state.dialogVisible" :title="state.title" size="30%">
       <div v-loading="state.loading">
         <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="行为名称" prop="oamTitle">
-            <el-input v-model="state.formData.oamTitle" placeholder="请输入标题" />
+          <el-form-item label="目标属性" prop="ruleCode">
+            <ObjectAttrSelector
+              v-model="state.formData.targetAttrId"
+              :biz-id="state.formData.bizId"
+              :object-id="state.formData.objectId"
+              placeholder="请输入行为代码"
+            />
           </el-form-item>
 
-          <el-form-item label="行为代码" prop="oamCode">
-            <el-input v-model="state.formData.oamCode" placeholder="请输入行为代码" />
+          <el-form-item label="业务规则" prop="ruleId">
+            <RuleSelector v-model="state.formData.ruleId" />
           </el-form-item>
 
-          <el-form-item label="类型" prop="oamType">
-            <el-radio-group v-model="state.formData.oamType">
-              <el-radio :label="1">
-                基于Pk查询
-              </el-radio>
-              <el-radio :label="2">
-                多笔查询
-              </el-radio>
-              <el-radio :label="3">
-                分页查询
-              </el-radio>
-              <el-radio :label="4">
-                新增
-              </el-radio>
-              <el-radio :label="5">
-                修改
-              </el-radio>
-              <el-radio :label="6">
-                删除
-              </el-radio>
-              <el-radio :label="7">
-                非Pk单笔查询
-              </el-radio>
-            </el-radio-group>
-          </el-form-item>
-
-          <el-form-item label="类型" prop="sqlType">
-            <el-radio-group v-model="state.formData.sqlType">
-              <el-radio :label="1">
-                DQL(数据查询)
-              </el-radio>
-              <el-radio :label="2">
-                DML(数据操纵)
-              </el-radio>
-              <el-radio :label="3">
-                DDL(数据定义)
-              </el-radio>
-              <el-radio :label="4">
-                DCL(数据控制)
-              </el-radio>
-            </el-radio-group>
-          </el-form-item>
-
-          <el-form-item label="SQL" prop="sqlStatement">
-            <el-input v-model="state.formData.sqlStatement" type="textarea" rows="5" placeholder="请输入SQL" />
-          </el-form-item>
-
-          <el-form-item v-if="state.formData.oamType === 3" label="Count" prop="sqlCount">
-            <el-input v-model="state.formData.sqlCount" type="textarea" rows="5" placeholder="请输入SQL" />
-          </el-form-item>
-
-          <el-form-item label="简要说明" prop="oamDesc">
-            <el-input v-model="state.formData.oamDesc" type="textarea" rows="3" placeholder="请输入标题" />
+          <el-form-item label="规则代码" prop="ruleCode">
+            <el-input v-model="state.formData.ruleCode" placeholder="请输入行为代码" />
           </el-form-item>
         </el-form>
       </div>

+ 0 - 0
src/views/biz/oam/components/ruleSelector.vue → src/views/biz/oam/components/RuleSelector.vue


+ 21 - 7
src/views/biz/oam/index.vue

@@ -6,12 +6,12 @@ meta:
 <script lang="ts" setup name="PagesExampleTable">
 import type { TabsPaneContext } from 'element-plus'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import ObjectOAMComponent from './components/objectOAM.vue'
-import ObjectOAMRuleComponent from './components/objectOAMRule.vue'
+import ObjectOAMComponent from './components/ObjectOAM.vue'
+import ObjectOAMRuleComponent from './components/ObjectOAMRule.vue'
 import useSettingsStore from '@/store/modules/settings'
 import { getObjectById } from '@/api/biz/bizObjectApi'
 import { deleteObjectOAMById, getObjectOAMById, getObjectOAMByList } from '@/api/biz/bizObjectOAMApi'
-import { getObjectOAMRuleListByOamId } from '@/api/biz/bizObjectOAMRuleApi'
+import { getObjectOAMRuleListByOamId, deleteObjectOAMRuleById } from '@/api/biz/bizObjectOAMRuleApi'
 import { oamType, sqlType } from '@/utils/tool'
 
 const settingsStore = useSettingsStore()
@@ -130,6 +130,7 @@ const onTreeNodeClick = (node: TreeNode) => {
   if (node.isLeaf) {
     state.curOamId = node.oamId
     getObjectOAMData()
+    getObjectOAMRuleList()
   }
 }
 
@@ -162,7 +163,7 @@ const onSuccess = () => {
 const activeName = ref('first')
 
 const handleClick = (tab: TabsPaneContext, event: Event) => {
-  console.log(tab, event)
+  // console.log(tab, event)
 }
 
 const objectOAMRuleRef = ref()
@@ -178,8 +179,16 @@ const onObjectOAMRuleEdit = (row: { orId: number }) => {
   objectOAMRuleRef.value.showEditModel(bizId, objectId, state.curOamId, row.orId)
 }
 
-const onObjectOAMRuleDelete = (row: { }) => {
-
+const onObjectOAMRuleDelete = (row: { bizId: number; objectId: number; oamId: number; orId: number; ruleTitle: string }) => {
+  const { bizId, objectId, oamId, orId, ruleTitle } = row
+  ElMessageBox.confirm(`确认删除「${ruleTitle}」吗?`, '确认信息').then(async () => {
+    await deleteObjectOAMRuleById(bizId, objectId, oamId, orId)
+    await getObjectOAMRuleList()
+    ElMessage.success({
+      message: '删除成功',
+      center: true,
+    })
+  })
 }
 // 返回列表页
 function goBack() {
@@ -304,8 +313,13 @@ function goBack() {
                   </template>
                 </el-table-column>
 
-                <el-table-column prop="ruleTitle" label="规则" header-align="center" align="center" width="150" />
+                <el-table-column prop="attrTitle" label="属性" header-align="center" align="center" width="250">
+                  <template #default="scope">
+                    <span> {{ scope.row.targetAttrTitle }}-{{ scope.row.targetAttrCode }}</span>
+                  </template>
+                </el-table-column>
 
+                <el-table-column prop="ruleTitle" label="规则" header-align="center" align="center" width="150" />
 
                 <el-table-column label="操作" header-align="center" align="center" width="230">
                   <template #default="scope">