houyaf 3 years ago
parent
commit
b12c06f860

+ 14 - 0
src/api/model/modelObjectOAMApi.ts

@@ -28,6 +28,20 @@ export function getObjectOAMById(modelId: number, objectId: number, oamId: numbe
 }
 
 /**
+ * 根据Id获取ObjectOAM列表
+ * @param modelId
+ * @param objectId
+ * @returns
+ */
+export function getObjectOAMListById(modelId: number, objectId: number) {
+  return apiRequest({
+    url: `/model/object/oam/${modelId}/${objectId}`,
+    method: 'GET',
+  })
+}
+
+
+/**
  * 添加ObjectOAM
  * @param data
  * @returns

+ 1 - 1
src/router/modules/model.ts

@@ -15,7 +15,7 @@ const routes: RouteRecordRaw[] = [
     children: [
       {
         path: 'index',
-        name: 'model_object_list',
+        name: 'model_object_List',
         component: () => import('@/views/model/model/index.vue'),
         meta: {
           title: '对象定义',

+ 11 - 33
src/views/biz/oam/components/ObjectOAM.vue

@@ -137,44 +137,22 @@ defineExpose({
 
         <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 :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 :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>
 

+ 1 - 1
src/views/model/model/index.vue

@@ -3,7 +3,7 @@ meta:
   enabled: false
 </route>
 
-<script lang="ts" setup>
+<script lang="ts" setup name="model_object_List">
 import { ElMessage, ElMessageBox } from 'element-plus'
 import ModelObjectComponent from '../object/components/ModelObject.vue'
 import ModelComponent from './components/Model.vue'

+ 52 - 54
src/views/model/oam/components/objectOAM.vue

@@ -112,59 +112,57 @@ defineExpose({
 
 <template>
   <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <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>
-
-          <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="3" placeholder="请输入SQL" />
-          </el-form-item>
-
-          <el-form-item label="Select" prop="sqlSelect">
-            <el-input v-model="state.formData.sqlSelect" type="textarea" rows="3" placeholder="请输入SQL" />
-          </el-form-item>
-
-          <el-form-item label="From" prop="sqlFrom">
-            <el-input v-model="state.formData.sqlFrom" type="textarea" rows="3" placeholder="请输入SQL" />
-          </el-form-item>
-
-          <el-form-item label="Where" prop="sqlWhere">
-            <el-input v-model="state.formData.sqlWhere" type="textarea" rows="3" placeholder="请输入SQL" />
-          </el-form-item>
-
-          <el-form-item label="Order" prop="sqlOrder">
-            <el-input v-model="state.formData.sqlOrder" type="textarea" rows="3" 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>
-        </el-form>
-      </div>
+    <el-drawer v-model="state.dialogVisible" :title="state.title" size="45%">
+      <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>
+
+        <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="3" placeholder="请输入SQL" />
+        </el-form-item>
+
+        <el-form-item label="Select" prop="sqlSelect">
+          <el-input v-model="state.formData.sqlSelect" type="textarea" rows="3" placeholder="请输入SQL" />
+        </el-form-item>
+
+        <el-form-item label="From" prop="sqlFrom">
+          <el-input v-model="state.formData.sqlFrom" type="textarea" rows="3" placeholder="请输入SQL" />
+        </el-form-item>
+
+        <el-form-item label="Where" prop="sqlWhere">
+          <el-input v-model="state.formData.sqlWhere" type="textarea" rows="3" placeholder="请输入SQL" />
+        </el-form-item>
+
+        <el-form-item label="Order" prop="sqlOrder">
+          <el-input v-model="state.formData.sqlOrder" type="textarea" rows="3" 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>
+      </el-form>
 
       <template #footer>
         <el-button size="large" @click="onCancel">
@@ -174,6 +172,6 @@ defineExpose({
           保存
         </el-button>
       </template>
-    </el-dialog>
+    </el-drawer>
   </div>
 </template>

+ 138 - 47
src/views/model/oam/index.vue

@@ -3,14 +3,19 @@ meta:
   enabled: false
 </route>
 
-<script lang="ts" setup name="PagesExampleTable">
+<script lang="ts" setup name="modelObjectOAM">
 import type { FormInstance } from 'element-plus'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import ObjectOAMComponent from './components/objectOAM.vue'
 import useSettingsStore from '@/store/modules/settings'
 import { getObjectById } from '@/api/model/modelObjectApi'
-import { deleteObjectOAMById, getObjectOAMById, getObjectOAMByList } from '@/api/model/modelObjectOAMApi'
-import { oamType } from '@/utils/tool'
+import {
+  deleteObjectOAMById,
+  getObjectOAMById,
+  getObjectOAMByList,
+  getObjectOAMListById,
+} from '@/api/model/modelObjectOAMApi'
+import {oamType, sqlType} from '@/utils/tool'
 
 const settingsStore = useSettingsStore()
 const route = useRoute()
@@ -24,6 +29,7 @@ interface TreeNode {
   label: string
   isLeaf: boolean
   oamId: number
+  oamCode: string
   children?: TreeNode[]
 }
 
@@ -86,12 +92,14 @@ const getObjectOAMData = async () => {
 }
 
 const getOAMTree = async () => {
-  const { data } = await getObjectOAMByList(state.search)
+  const { modelId, objectId } = state.search
+  const { data } = await getObjectOAMListById(modelId, objectId)
   const children: TreeNode[] = []
   data.forEach((item: any) => {
     return children.push({
       label: item.oamTitle,
       oamId: item.oamId,
+      oamCode: item.oamCode,
       isLeaf: true,
     })
   })
@@ -100,6 +108,7 @@ const getOAMTree = async () => {
       label: '对象行为',
       isLeaf: false,
       oamId: -1,
+      oamCode: '',
       children,
     },
   ]
@@ -154,13 +163,15 @@ const onSuccess = () => {
   getOAMTree()
 }
 
+const activeName = ref('first')
+
 // 返回列表页
 function goBack() {
   if (settingsStore.settings.tabbar.enable && settingsStore.settings.tabbar.mergeTabsBy !== 'activeMenu') {
-    tabbar.close({ name: 'modelList' })
+    tabbar.close({ name: 'model_object_List' })
   }
   else {
-    router.push({ name: 'modelList' })
+    router.push({ name: 'model_object_List' })
   }
 }
 </script>
@@ -185,14 +196,14 @@ function goBack() {
               <template #default="{ node, data }">
                 <div class="custom-tree-node">
                   <div class="label" :title="node.label">
-                    <el-icon v-if="data.isLeaf" size="16px" style="margin-right: 5px;">
-                      <svg-icon name="uim:box" />
-                    </el-icon>
                     <div class="text">
-                      {{ data.label }}
+                      <el-icon v-if="data.isLeaf" size="16px" style="margin:0 5px 5px 0;">
+                        <svg-icon name="ant-design:api-outlined" />
+                      </el-icon>
+                      <span>{{ data.label }}</span>
                     </div>
                     <div class="code">
-                      {{ oamType(data.oamType) }}
+                      {{ data.oamCode }}
                     </div>
                   </div>
                 </div>
@@ -201,25 +212,73 @@ function goBack() {
           </el-scrollbar>
         </template>
 
-        <div class="form">
-          <tool-header>
-            <template #right>
-              <el-button type="primary" @click="onObjectOAMAdd">添加</el-button>
-              <el-button type="primary" @click="onObjectOAMEdit">编辑</el-button>
-            </template>
-          </tool-header>
-          <page-main title="SQL">
-            <div class="question">
-              <ol class="answer">
-                <li><span>Sql</span><br>{{ state.oam.sqlStatement }}</li>
-                <li><span>Select</span><br>{{ state.oam.sqlSelect }}</li>
-                <li><span>From </span><br>{{ state.oam.sqlFrom }}</li>
-                <li><span>Where</span><br>{{ state.oam.sqlWhere }}</li>
-                <li><span>Order</span><br>{{ state.oam.sqlOrder }}</li>
-                <li><span>说明</span><br>{{ state.oam.oamDesc }}</li>
-              </ol>
-            </div>
-          </page-main>
+        <div class="container">
+          <el-tabs v-model="activeName" class="demo-tabs">
+            <el-tab-pane label="行为定义" name="first">
+              <el-descriptions
+                :title="state.oam.oamTitle"
+                direction="horizontal"
+                :column="1"
+                size="small"
+                border
+              >
+                <template #extra>
+                  <el-button type="primary" @click="onObjectOAMEdit">编辑</el-button>
+                  <el-button type="primary" @click="onObjectOAMDelete">删除</el-button>
+                </template>
+
+                <el-descriptions-item
+                  label-align="right"
+                  label="编码"
+                  width="150px"
+                >
+                  {{ state.oam.oamCode }}
+                </el-descriptions-item>
+
+                <el-descriptions-item
+                  label="行为类型"
+                  width="150px"
+                  label-align="right"
+                >
+                  {{ oamType(state.oam.oamType) }}
+                </el-descriptions-item>
+
+                <el-descriptions-item
+                  label-align="right"
+                  width="150px"
+                  label="操作类型"
+                >
+                  {{ sqlType(state.oam.sqlType) }}
+                </el-descriptions-item>
+
+                <el-descriptions-item
+                  v-if="state.oam.sqlType === 1"
+                  label-align="right"
+                  width="150px"
+                  label="Sql"
+                >
+                  {{ state.oam.sqlStatement }}
+                </el-descriptions-item>
+
+                <el-descriptions-item
+                  v-if="state.oam.oamType === 3"
+                  label-align="right"
+                  width="150px"
+                  label="Count"
+                >
+                  {{ state.oam.sqlCount }}
+                </el-descriptions-item>
+
+                <el-descriptions-item
+                  label-align="right"
+                  width="150px"
+                  label="说明"
+                >
+                  {{ state.oam.oamDesc }}
+                </el-descriptions-item>
+              </el-descriptions>
+            </el-tab-pane>
+          </el-tabs>
         </div>
       </LayoutContainer>
     </div>
@@ -229,10 +288,45 @@ function goBack() {
 
 <style lang="scss" scoped>
 .absolute-container {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .page-header {
+    margin-bottom: 0;
+  }
+
+  .page-main {
+    // 让 page-main 的高度自适应
+    flex: 1;
+    overflow: auto;
+    display: flex;
+    flex-direction: column;
+
+    .flex-container {
+      position: static;
+    }
+  }
+}
+
+.flex-container{
   :deep(.left-side) {
     display: flex;
     flex-direction: column;
     height: 100%;
+    .search{
+      margin: 15px 0;
+    }
+    .btns {
+      display: inline-flex;
+      width: 100%;
+
+      .add {
+        width: 100%;
+      }
+    }
 
     .tree {
       flex: 1;
@@ -240,7 +334,7 @@ function goBack() {
 
       .el-tree {
         .el-tree-node__content {
-          height: 40px;
+          height: 60px;
         }
 
         .is-current > .el-tree-node__content {
@@ -257,33 +351,30 @@ function goBack() {
           justify-content: center;
 
           .label {
-            display: inline-flex;
-            align-items: center;
             width: calc(100% - 10px);
             color: var(--el-text-color-primary);
+            padding: 10px;
 
-            .text {
-              @include text-overflow;
+            @include text-overflow;
+
+            .el-icon {
+              padding-top: 5px;
             }
           }
 
+          .code {
+            padding-left: 20px;
+            width: calc(100% - 10px);
+            color: var(--el-text-color-placeholder);
+
+            @include text-overflow;
+          }
+
           &:hover {
             .actions {
               display: block;
             }
           }
-
-          .actions {
-            display: none;
-            position: absolute;
-            right: 10px;
-            top: 50%;
-            transform: translateY(-50%);
-
-            .el-button {
-              padding: 5px 8px;
-            }
-          }
         }
       }
     }