|
|
@@ -1,291 +0,0 @@
|
|
|
-<route lang="yaml">
|
|
|
-meta:
|
|
|
- enabled: false
|
|
|
-</route>
|
|
|
-
|
|
|
-<script lang="ts" setup>
|
|
|
-import { getModelByList } from '@/api/model/modelApi'
|
|
|
-import { getObjectByList } from '@/api/model/modelObjectApi'
|
|
|
-import { getObjectOAMByList } from '@/api/model/modelObjectOAMApi'
|
|
|
-import { createAtu } from '@/api/api/apiTransUnitApi'
|
|
|
-
|
|
|
-interface TreeNode {
|
|
|
- label: string
|
|
|
- isLeaf: boolean
|
|
|
- modelId: number
|
|
|
- children?: TreeNode[]
|
|
|
-}
|
|
|
-
|
|
|
-interface Object {
|
|
|
- modelId: number
|
|
|
- objectId: number
|
|
|
- objectTitle: string
|
|
|
- objectCode: string
|
|
|
- comment: string
|
|
|
-}
|
|
|
-
|
|
|
-const emit = defineEmits(['onSuccess'])
|
|
|
-
|
|
|
-const state = reactive({
|
|
|
- loading: false,
|
|
|
- keywords: '',
|
|
|
- title: '',
|
|
|
- models: [] as TreeNode[],
|
|
|
- curModelId: 0,
|
|
|
- curObjectId: 0,
|
|
|
- objectList: [] as Object[],
|
|
|
- objectOAMList: [] as Object[],
|
|
|
- dialogState: 1,
|
|
|
- search: {
|
|
|
- apiId: 0,
|
|
|
- keywords: '',
|
|
|
- },
|
|
|
- formData: {
|
|
|
- moduleId: 0,
|
|
|
- apiId: 0,
|
|
|
- modelId: 0,
|
|
|
- objectId: 0,
|
|
|
- oamId: 1,
|
|
|
- },
|
|
|
- objectOAMDetail: {},
|
|
|
-})
|
|
|
-
|
|
|
-const leftTreeRef = ref()
|
|
|
-const getObjectOAMData = async () => {
|
|
|
- const curModelId = state.curModelId
|
|
|
- const curObjectId = state.curObjectId
|
|
|
- if (curModelId > 0 && curObjectId > 0) {
|
|
|
- state.loading = true
|
|
|
- const { data } = await getObjectOAMByList({ modelId: curModelId })
|
|
|
- state.objectOAMList = data
|
|
|
- state.loading = false
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-const getObjectData = async () => {
|
|
|
- const curModelId = state.curModelId
|
|
|
- if (curModelId > 0) {
|
|
|
- state.loading = true
|
|
|
- const { data } = await getObjectByList({ modelId: curModelId })
|
|
|
- state.objectList = data
|
|
|
- state.loading = false
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-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()
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- getModelData()
|
|
|
-})
|
|
|
-
|
|
|
-// 模型选择
|
|
|
-const onTreeNodeClick = (node: TreeNode) => {
|
|
|
- if (node.isLeaf) {
|
|
|
- state.curModelId = node.modelId
|
|
|
- getObjectData()
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-const objectTableRef = ref()
|
|
|
-const dialogVisible = ref(false)
|
|
|
-const onObjectSel = async (row: { objectId: any }) => {
|
|
|
- state.curObjectId = row.objectId
|
|
|
- await getObjectOAMData()
|
|
|
-}
|
|
|
-
|
|
|
-const objectOAMTableRef = ref()
|
|
|
-const onObjectOAMSel = async (row: { modelId: any; objectId: any; oamId: any }) => {
|
|
|
- state.formData.modelId = row.modelId
|
|
|
- state.formData.objectId = row.objectId
|
|
|
- state.formData.oamId = row.oamId
|
|
|
- state.objectOAMDetail = row
|
|
|
-}
|
|
|
-
|
|
|
-const onSave = async () => {
|
|
|
- await createAtu(state.formData)
|
|
|
- emit('onSuccess')
|
|
|
- dialogVisible.value = false
|
|
|
-}
|
|
|
-
|
|
|
-const onCancel = () => {
|
|
|
- dialogVisible.value = false
|
|
|
-}
|
|
|
-
|
|
|
-// 点击选择
|
|
|
-defineExpose({
|
|
|
- showModel(moduleId: number, apiId: number) {
|
|
|
- state.search.apiId = apiId
|
|
|
- state.formData.moduleId = moduleId
|
|
|
- state.formData.apiId = apiId
|
|
|
- dialogVisible.value = true
|
|
|
- },
|
|
|
-})
|
|
|
-</script>
|
|
|
-
|
|
|
-<template>
|
|
|
- <el-drawer v-model="dialogVisible" :title="state.title" size="100%">
|
|
|
- <el-row :gutter="10" style="height:100%">
|
|
|
- <el-col :xs="24" :span="5" class="small-row">
|
|
|
- <el-card style="height:100%">
|
|
|
- <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>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- <el-col :xs="24" :span="5" class="objectListtable lg-row">
|
|
|
- <el-card style="height:100%">
|
|
|
- <el-table
|
|
|
- v-if="state.objectList && state.objectList.length > 0"
|
|
|
- ref="objectTableRef"
|
|
|
- v-loading="state.loading"
|
|
|
- class="list-table"
|
|
|
- :data="state.objectList" border :show-header="false"
|
|
|
- stripe highlight-current-row height="100%" @row-click="onObjectSel"
|
|
|
- >
|
|
|
- <el-table-column prop="objectTitle" label="名称" header-align="center" align="center" minwidth="200" />
|
|
|
- <el-table-column prop="objectCode" label="代码" header-align="center" align="center" minwidth="150" />
|
|
|
- <el-table-column prop="objectType" label="类型" header-align="center" align="center" minwidth="150">
|
|
|
- <template #default="scope">
|
|
|
- <span v-if="scope.row.objectType === 1">实体对象</span>
|
|
|
- <span v-else>视图对象</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="comment" label="说明" header-align="center" align="left" />
|
|
|
- </el-table>
|
|
|
- <el-Empty v-else />
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- <el-col :xs="24" :span="5" class="objectOAMTableRef small-row">
|
|
|
- <el-card style="height:100%">
|
|
|
- <el-table
|
|
|
- v-if="state.objectOAMList && state.objectOAMList.length > 0"
|
|
|
- ref="objectOAMTableRef"
|
|
|
- v-loading="state.loading"
|
|
|
- class="list-table"
|
|
|
- :data="state.objectOAMList"
|
|
|
- border :show-header="false"
|
|
|
- stripe highlight-current-row height="100%" @row-click="onObjectOAMSel"
|
|
|
- >
|
|
|
- <el-table-column prop="oamTitle" label="名称" header-align="center" align="center" minwidth="200" />
|
|
|
- <el-table-column prop="oamType" label="类型" header-align="center" align="center" minwidth="150" />
|
|
|
- <el-table-column prop="oamDesc" label="说明" header-align="center" align="left" />
|
|
|
- </el-table>
|
|
|
- <el-Empty v-else />
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- <el-col :xs="24" :span="9" class="objectOAMTableRef">
|
|
|
- <el-card style="height:100%">
|
|
|
- <ul v-if="state.objectOAMDetail" class="result-container">
|
|
|
- <li v-for="(value, key) in state.objectOAMDetail" :key="key">
|
|
|
- <h3> {{ key }}</h3>
|
|
|
- <p>{{ value }}</p>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- <el-Empty v-else />
|
|
|
-
|
|
|
- <el-button type="success" @click="onSave">
|
|
|
- 保存
|
|
|
- </el-button>
|
|
|
- <el-button type="info" @click="onCancel">
|
|
|
- 取消
|
|
|
- </el-button>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-drawer>
|
|
|
-</template>
|
|
|
-
|
|
|
-<style lang="scss" scoped>
|
|
|
-:deep(.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>
|