houyaf 3 éve
szülő
commit
8571bad85e

+ 0 - 310
src/views/model/manipulation/index.vue

@@ -1,310 +0,0 @@
-<route lang="yaml">
-meta:
-  enabled: false
-</route>
-
-<script lang="ts" setup>
-import { getModelByList } from '@/api/model/modelApi'
-import { getObjectByList } from '@/api/model/objectApi'
-import useSettingsStore from '@/store/modules/settings'
-
-const settingsStore = useSettingsStore()
-const router = useRouter()
-const tabbar = useTabbar()
-
-interface TreeNode {
-  label: string
-  isLeaf: boolean
-  modelId: number
-  children?: TreeNode[]
-}
-
-interface Object {
-  modelId: number
-  objectId: number
-  objectTitle: string
-  objectCode: string
-  comment: string
-}
-
-const state = reactive({
-  loading: false,
-  keywords: '',
-  objectList: [] as TreeNode[],
-  dataList: [],
-  models: [] as TreeNode[],
-  curModelId: 0,
-  objects: [] as Object[],
-  dialogState: 1,
-  objectSearch: {
-    keywords: '',
-  },
-})
-
-const leftTreeRef = ref()
-const modelRef = ref()
-const getObjectData = async () => {
-  const curModelId = state.curModelId
-  if (curModelId > 0) {
-    state.loading = true
-    const { data } = await getObjectByList({ modelId: curModelId })
-    state.loading = false
-    if (data.length > 0) {
-      const view = data.filter((item: { objectType: number }) => item.objectType === 1)
-      const entity_object = data.filter((item: { objectType: number }) => item.objectType === 2)
-      const treeData = [
-        {
-          objectTitle: '视图',
-          children: view,
-          disabled: true,
-        },
-        {
-          objectTitle: '实体类',
-          children: entity_object,
-          disabled: true,
-        },
-      ]
-      state.objectList = treeData as unknown as TreeNode[]
-    }
-  }
-}
-
-const getModelData = async () => {
-  const { data } = await getModelByList('')
-  const children: TreeNode[] = []
-  data.forEach((item: any) => {
-    return children.push({
-      label: item.modelTitle,
-      modelId: item.modelId,
-      isLeaf: true,
-    })
-  })
-  state.models = [
-    {
-      label: '模型库',
-      isLeaf: false,
-      modelId: -1,
-      children,
-    },
-  ]
-
-  if (data && data.length > 0) {
-    state.curModelId = data[0].modelId
-    nextTick(() => {
-      leftTreeRef.value.setCurrentKey(data[0].modelId)
-    })
-    await getObjectData()
-  }
-}
-const onModelAdd = () => {}
-onMounted(() => {
-  getModelData()
-})
-
-// 模型选择
-const onTreeNodeClick = (node: TreeNode) => {
-  if (node.isLeaf) {
-    state.curModelId = node.modelId
-    getObjectData()
-  }
-}
-
-// 检索对象
-const onObjectSearch = () => {
-  getObjectData()
-}
-
-// 选中对象
-const onObjectClick = () => { }
-</script>
-
-<template>
-  <div class="absolute-container">
-    <tool-header title="数据模型">
-      <template #right>
-        <el-button plain @click="onModelAdd">
-          <template #icon>
-            <el-icon>
-              <svg-icon name="i-ep:plus" />
-            </el-icon>
-          </template>
-          新增模型
-        </el-button>
-      </template>
-    </tool-header>
-
-    <div class="page-main">
-      <LayoutContainer left-side-width="200px" hide-left-side-toggle>
-        <template #leftSide>
-          <el-scrollbar class="tree">
-            <ElTree ref="leftTreeRef" :data="state.models" default-expand-all node-key="modelId" @node-click="onTreeNodeClick">
-              <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 }}
-                    </div>
-                  </div>
-                </div>
-              </template>
-            </ElTree>
-          </el-scrollbar>
-        </template>
-        <el-row class="right-conatiner" :gutter="20">
-          <el-col class="right-conatiner-tree" :lg="6" :md="24" :xs="24">
-            <tool-bar>
-              <template #center>
-                <el-input v-model="state.objectSearch.keywords" placeholder="请输入名称,支持模糊查询" style="padding-right: 10px;" clearable />
-                <el-button type="primary" @click="onObjectSearch">
-                  <template #icon>
-                    <el-icon>
-                      <svg-icon name="i-ep:search" />
-                    </el-icon>
-                  </template>
-                </el-button>
-              </template>
-            </tool-bar>
-            <el-scrollbar class="tree" style="margin-top: 15px;">
-              <ElTree ref="objectTreeRef" :data="state.objectList" default-expand-all @node-click="onObjectClick">
-                <template #default="{ node, data }">
-                  <div class="custom-tree-node">
-                    <div class="label" :title="node.title">
-                      {{ data.objectTitle }}
-                    </div>
-                  </div>
-                </template>
-              </ElTree>
-            </el-scrollbar>
-          </el-col>
-          <el-col class="container" :lg="18" :md="24" :xs="24">
-            <tool-bar>
-              <template #left>
-                <h2>属性</h2>
-              </template>
-              <template #right>
-                <el-input v-model="state.objectSearch.keywords" placeholder="请输入关键词筛选字典项" clearable style="width: 200px;" />
-                <el-button style="margin-left:10px" @click="getObjectData">
-                  <template #icon>
-                    <el-icon>
-                      <svg-icon name="i-ep:search" />
-                    </el-icon>
-                  </template>
-                </el-button>
-              </template>
-            </tool-bar>
-            <el-table :data="state.dataList" border stripe highlight-current-row height="100%" class="list-table">
-              <el-table-column type="selection" align="center" fixed />
-              <el-table-column prop="name" label="名称" />
-              <el-table-column label="键值" align="center" width="150">
-                <template #default="scope">
-                  <el-tag type="info">
-                    {{ scope.row.value }}
-                  </el-tag>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-col>
-        </el-row>
-      </LayoutContainer>
-    </div>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-.container {
-  height: 100%;
-  display: flex;
-  flex-direction: column;
-}
-
-.absolute-container {
-  h2{
-    padding: 0;
-    margin: 0;
-  }
-
-  .right-conatiner{
-      .right-conatiner-tree{
-        width: 350px;
-        box-sizing: border-box;
-      }
-
-      .container{
-        flex: 1;
-      }
-  }
-
-  :deep(.left-side) ,:deep(.right-conatiner-tree){
-    display: flex;
-    flex-direction: column;
-    height: 100%;
-
-    .btns {
-      display: inline-flex;
-      width: 100%;
-      margin-bottom: var(--container-padding);
-
-      .add {
-        width: 100%;
-      }
-    }
-
-    .tree {
-      flex: 1;
-      overflow-y: auto;
-
-      .el-tree {
-        .el-tree-node__content {
-          height: 40px;
-        }
-
-        .is-current > .el-tree-node__content {
-          background-color: var(--el-color-primary-light-9);
-        }
-
-        .custom-tree-node {
-          flex: 1;
-          position: relative;
-          width: 0;
-          height: 100%;
-          display: flex;
-          flex-direction: column;
-          justify-content: center;
-
-          .label {
-            display: inline-flex;
-            align-items: center;
-            width: calc(100% - 10px);
-            color: var(--el-text-color-primary);
-
-            .text {
-              @include text-overflow;
-            }
-          }
-
-          &:hover {
-            .actions {
-              display: block;
-            }
-          }
-
-          .actions {
-            display: none;
-            position: absolute;
-            right: 10px;
-            top: 50%;
-            transform: translateY(-50%);
-
-            .el-button {
-              padding: 5px 8px;
-            }
-          }
-        }
-      }
-    }
-  }
-}
-</style>

+ 5 - 10
src/views/model/object/index.vue

@@ -177,7 +177,7 @@ function goBack() {
 
 <template>
   <div class="absolute-container">
-    <page-header title="对象" content="为每个应用配置基于角色的权限。">
+    <page-header title="对象" content="创建元数据对象。">
       <el-button size="default" round @click="goBack">
         <template #icon>
           <el-icon>
@@ -324,14 +324,6 @@ function goBack() {
               </template>
             </el-table-column>
 
-            <el-table-column label="锁定" width="70">
-              <template #default="scope">
-                <el-checkbox v-model="scope.row.isFixed" :true-label="1" :false-label="0">
-                  {{ scope.row.isFixed === 1 ? '是' : '否' }}
-                </el-checkbox>
-              </template>
-            </el-table-column>
-
             <el-table-column label="注释">
               <template #default="scope">
                 <el-input v-model="scope.row.comment" />
@@ -367,6 +359,10 @@ function goBack() {
 </template>
 
 <style lang="scss" scoped>
+.page-header {
+  margin-bottom: 0;
+}
+
 .page-main {
   :deep(.left-side) {
     display: flex;
@@ -378,7 +374,6 @@ function goBack() {
   }
   :deep(.el-table) {
         height: 100%;
-        margin-top: 15px;
 
         .el-table__row {
           .index {

+ 12 - 8
src/views/paas/atu/components/ModelObjectSelector.vue

@@ -37,6 +37,12 @@ const state = reactive({
     apiId: 0,
     keywords: '',
   },
+  formData: {
+    apiId: 0,
+    modelId: 0,
+    objectId: 0,
+    objectOamType: 1,
+  },
 })
 
 const leftTreeRef = ref()
@@ -92,22 +98,20 @@ const onTreeNodeClick = (node: TreeNode) => {
 
 const objectTableRef = ref()
 
+const drawerModel = ref(false)
 const onObjectSel = async (row: { modelId: any; objectId: any }) => {
-  const data = {
-    apiId: state.search.apiId,
-    modelId: row.modelId,
-    objectId: row.objectId,
-  }
-  await createAtu(data)
+  state.formData.modelId = row.modelId
+  state.formData.objectId = row.objectId
+  await createAtu(state.formData)
   emit('onSuccess')
+  drawerModel.value = false
 }
 
 // 点击选择
-
-const drawerModel = ref(false)
 defineExpose({
   showModel(apiId: number) {
     state.search.apiId = apiId
+    state.formData.apiId = apiId
     drawerModel.value = true
   },
 })

+ 23 - 11
src/views/paas/atu/index.vue

@@ -5,10 +5,11 @@ meta:
 
 <script lang="ts" setup name="PagesExampleTable">
 import type { FormInstance } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus'
 import ModelObjectSelector from './components/ModelObjectSelector.vue'
 import useSettingsStore from '@/store/modules/settings'
 import { getApiById } from '@/api/paas/apiApi'
-import { getAtuByList } from '@/api/paas/apiTransUnitApi'
+import { deleteAtuById, getAtuByList } from '@/api/paas/apiTransUnitApi'
 
 const settingsStore = useSettingsStore()
 const route = useRoute()
@@ -56,15 +57,23 @@ onMounted(() => {
 const formRef = ref<FormInstance>()
 
 const onAdd = () => {
-  ModelObjectSelectorRef.value.showModel()
+  ModelObjectSelectorRef.value.showModel(apiId)
 }
 
 const onEdit = (data: { atuId: number }) => {
   window.console.log(data.atuId)
 }
 
-const onDelete = (data: { atuId: number }) => {
-  window.console.log(data.atuId)
+const onDelete = (data: { apiId: number; atuId: number; objectTitle: string }) => {
+  const { apiId, atuId, objectTitle } = data
+  ElMessageBox.confirm(`确认删除「${objectTitle}」吗?`, '确认信息').then(async () => {
+    await deleteAtuById(apiId, atuId)
+    await getData()
+    ElMessage.success({
+      message: '删除成功',
+      center: true,
+    })
+  })
 }
 
 const onGenerateData = () => {
@@ -79,10 +88,6 @@ const onObjectSelSuccess = () => {
   getData()
 }
 
-// function onCancel() {
-//   goBack()
-// }
-
 // 返回列表页
 function goBack() {
   if (settingsStore.settings.tabbar.enable && settingsStore.settings.tabbar.mergeTabsBy !== 'activeMenu') {
@@ -96,7 +101,7 @@ function goBack() {
 
 <template>
   <div class="absolute-container">
-    <page-header :title="state.apiTitle">
+    <page-header :title="state.apiTitle" :content="state.apiCode">
       <el-button size="default" round @click="goBack">
         <template #icon>
           <el-icon>
@@ -107,7 +112,7 @@ function goBack() {
       </el-button>
     </page-header>
     <div class="page-main">
-      <LayoutContainer left-side-width="520px" hide-left-side-toggle>
+      <LayoutContainer left-side-width="650px" hide-left-side-toggle>
         <template #leftSide>
           <el-space wrap>
             <el-button type="primary" size="default" @click="onAdd">
@@ -120,7 +125,14 @@ function goBack() {
           </el-space>
 
           <el-table v-loading="state.loading" class="list-table" :data="state.atuList" border stripe highlight-current-row height="100%">
-            <el-table-column prop="atuTitle" label="名称" min-width="150px" />
+            <el-table-column type="index" label="序号" header-align="center" align="center" width="70" />
+
+            <el-table-column prop="modelTitle" label="模型" header-align="center" align="center" min-width="150px" />
+
+            <el-table-column prop="objectTitle" label="对象" header-align="center" align="center" min-width="150px" />
+
+            <el-table-column prop="objectOamType" label="行为" header-align="center" align="center" />
+
             <el-table-column label="操作" width="140" align="center" fixed="right">
               <template #default="scope">
                 <el-button-group>