Commit 6b6ed61d authored by 何远江's avatar 何远江

资源库接口对接

parent e1972d67
...@@ -6,11 +6,20 @@ import type { ResourceFieldDto, ResourceRepositoryTreeDto } from './model/reposi ...@@ -6,11 +6,20 @@ import type { ResourceFieldDto, ResourceRepositoryTreeDto } from './model/reposi
export type ResourceSaveParamsDto = Omit<ResourceRepositoryTreeDto, 'childNode'> export type ResourceSaveParamsDto = Omit<ResourceRepositoryTreeDto, 'childNode'>
enum Api { enum Api {
/*查询全部资源 */
REPOSITORY_LIST = '/resource/findList', REPOSITORY_LIST = '/resource/findList',
/*根据资源类型id,查询资源字段 */
GET_RESOURCE_FIELD = '/resourceField/getResourceField', GET_RESOURCE_FIELD = '/resourceField/getResourceField',
/*根据资源类型id,获取资源值 */
GET_RESOURCE_FIELD_VALUE = '/resourceField/getResourceFieldValue', GET_RESOURCE_FIELD_VALUE = '/resourceField/getResourceFieldValue',
/* 新增资源类型时,根据对象的父类表名,返回父类和超类及所属的字段 */
FIND_PARENT_RESOURCE = '/resource/findParentResourceTypeAndFields', FIND_PARENT_RESOURCE = '/resource/findParentResourceTypeAndFields',
RESOURCE_SAVE = '/resource/save' /* 保存资源库 */
RESOURCE_SAVE = '/resource/save',
/*修改-查看资源类型时,根据当前表名,返回自己和父类和超类及所属的字段 */
FIND_RESOURCE_TYPE_FIELDS = '/resource/findResourceTypeAndFields',
/*根据id删除资源库 */
DELETE_RESOURCE = '/resource/delete'
} }
export const apiGetRepositoryList = () => { export const apiGetRepositoryList = () => {
...@@ -58,3 +67,23 @@ export const apiResourceSave = (data: ResourceSaveParamsDto) => { ...@@ -58,3 +67,23 @@ export const apiResourceSave = (data: ResourceSaveParamsDto) => {
data data
}) })
} }
export const apiFindResourceTypeFields = (tableName: string) => {
return defHttp.get<ApiResult<ResourceRepositoryTreeDto>>({
url: Api.FIND_RESOURCE_TYPE_FIELDS,
params: { tableName },
headers: {
'Content-Type': ContentTypeEnum.FORM_URLENCODED
}
})
}
export const apiDeleteResource = (id: string) => {
return defHttp.delete<ApiResult<Recordable>>({
url: Api.DELETE_RESOURCE,
params: { id },
headers: {
'Content-Type': ContentTypeEnum.FORM_URLENCODED
}
})
}
<template> <template>
<Modal v-bind="getBindValue" @cancel="handleCancel" @ok="confirmFrom"> <Modal v-bind="getBindValue" @cancel="handleCancel">
<!-- 模态框内容 --> <!-- 模态框内容 -->
<Form ref="formRef" :model="formState" :label-col="{ style: { width: '5em' } }"> <Form ref="formRef" :model="formState" :label-col="{ style: { width: '5em' } }">
<Row :gutter="24"> <Row :gutter="24">
...@@ -73,17 +73,35 @@ ...@@ -73,17 +73,35 @@
</template> </template>
</el-select> </el-select>
</template> </template>
<template #sortNum="{row}">
<el-input placeholder="排序" size="small" v-model="row.sortNum" />
</template>
<template #action="{ row, $rowIndex }"> <template #action="{ row, $rowIndex }">
<el-button v-if="!row.resourceFieldId" size="small" @click="removeRow($rowIndex)" type="danger" :icon="Delete" circle /> <el-button
v-if="!row.resourceFieldId"
size="small"
@click="removeRow($rowIndex)"
type="danger"
:icon="Delete"
circle
/>
</template> </template>
</vxe-grid> </vxe-grid>
<template #footer>
<el-button @click="handleCancel">取消</el-button>
<el-button type="primary" @click="confirmFrom">确认</el-button>
</template>
</Modal> </Modal>
</template> </template>
<script lang="ts"> <script lang="ts">
import { Delete } from '@element-plus/icons-vue' import { Delete } from '@element-plus/icons-vue'
import { apiDictFindById, apiGetDictByCode, apiGetDictList } from '@/api/common/dict' import { apiDictFindById, apiGetDictByCode, apiGetDictList } from '@/api/common/dict'
import { apiFindParentResource, apiResourceSave } from '@/api/resource/repository' import {
apiFindParentResource,
apiResourceSave,
type ResourceSaveParamsDto
} from '@/api/resource/repository'
import { Row, Col, Modal, Form, FormItem, Input, Select, Button, Tooltip } from 'ant-design-vue' import { Row, Col, Modal, Form, FormItem, Input, Select, Button, Tooltip } from 'ant-design-vue'
import { onMounted, reactive } from 'vue' import { onMounted, reactive } from 'vue'
import { watch } from 'vue' import { watch } from 'vue'
...@@ -119,10 +137,12 @@ export default defineComponent({ ...@@ -119,10 +137,12 @@ export default defineComponent({
default: () => ({}) default: () => ({})
} }
}, },
emits: ['update:open'], emits: ['update:open', 'onSuccess'],
setup(props, { emit }) { setup(props, { emit }) {
const xGrid = ref() const xGrid = ref()
const formRef = ref() const formRef = ref()
const loadding = ref(false)
const btnLoadding = ref(false)
const searchLoading = ref(false) const searchLoading = ref(false)
const visibleRef = ref(false) const visibleRef = ref(false)
const formState = reactive({ const formState = reactive({
...@@ -184,6 +204,13 @@ export default defineComponent({ ...@@ -184,6 +204,13 @@ export default defineComponent({
default: 'resourceFieldShow' default: 'resourceFieldShow'
} }
}, },
{
field: 'sortNum',
title: '排序',
slots: {
default: 'sortNum'
}
},
{ {
field: 'action', field: 'action',
title: '操作', title: '操作',
...@@ -214,6 +241,7 @@ export default defineComponent({ ...@@ -214,6 +241,7 @@ export default defineComponent({
) )
const getResourceDetail = async () => { const getResourceDetail = async () => {
if (!props.resNode.resourceTableName) return
const { result } = await apiFindParentResource(props.resNode.resourceTableName) const { result } = await apiFindParentResource(props.resNode.resourceTableName)
formState.parentTableName = result.parentTableName formState.parentTableName = result.parentTableName
formState.parentTableTitle = result.parentTableTitle formState.parentTableTitle = result.parentTableTitle
...@@ -255,7 +283,13 @@ export default defineComponent({ ...@@ -255,7 +283,13 @@ export default defineComponent({
...unref(formState), ...unref(formState),
resourceFileds: gridOptions.data resourceFileds: gridOptions.data
} }
const {result} = await apiResourceSave(params) try {
btnLoadding.value = true
const { result } = await apiResourceSave(params as ResourceSaveParamsDto)
handleCancel()
emit('onSuccess', result)
} catch {}
btnLoadding.value = false
} }
const resetModalState = () => { const resetModalState = () => {
......
<template> <template>
<el-card shadow="never" header="资源分类" style="height: 100%;"> <el-card shadow="never" header="资源分类" style="height: 100%">
<el-input v-model="searchText" placeholder="请输入要搜索的内容" :prefix-icon="Search" style="margin-bottom: 10px;"></el-input> <el-space style="margin-bottom: 10px">
<el-input
v-model="searchText"
placeholder="请输入要搜索的内容"
:prefix-icon="Search"
></el-input>
<el-button type="primary" :icon="Plus" @click="onContextMenuClick('add', {})" />
</el-space>
<el-tree <el-tree
ref="treeRef" ref="treeRef"
:data="treeList" :data="treeList"
...@@ -25,9 +32,9 @@ ...@@ -25,9 +32,9 @@
<p style="width: 100%">{{ node.label }}</p> <p style="width: 100%">{{ node.label }}</p>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item>添加资源分类</el-dropdown-item> <el-dropdown-item command="add">添加资源分类</el-dropdown-item>
<el-dropdown-item>修改资源分类</el-dropdown-item> <el-dropdown-item command="update">修改资源分类</el-dropdown-item>
<el-dropdown-item>删除资源分类</el-dropdown-item> <el-dropdown-item command="del">删除资源分类</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
...@@ -35,11 +42,17 @@ ...@@ -35,11 +42,17 @@
</el-tree> </el-tree>
</el-card> </el-card>
<RepositoryModal v-model:open="open" width="700px" :res-node="openNode" title="添加资源分类" /> <RepositoryModal
@on-success="onSuccess"
v-model:open="open"
width="700px"
:res-node="openNode"
title="添加资源分类"
/>
</template> </template>
<script lang="ts"> <script lang="ts">
import { Search } from '@element-plus/icons-vue' import { Search, Plus } from '@element-plus/icons-vue'
import { Tree, Dropdown, Menu, MenuItem } from 'ant-design-vue' import { Tree, Dropdown, Menu, MenuItem } from 'ant-design-vue'
import RepositoryModal from './RepositoryModal.vue' import RepositoryModal from './RepositoryModal.vue'
import { defineComponent, ref } from 'vue' import { defineComponent, ref } from 'vue'
...@@ -55,6 +68,7 @@ export default defineComponent({ ...@@ -55,6 +68,7 @@ export default defineComponent({
setup() { setup() {
const repositoryState = useRepositoryTree() const repositoryState = useRepositoryTree()
return { return {
Plus,
Search, Search,
...repositoryState ...repositoryState
} }
......
import type { ResourceRepositoryTreeDto } from '@/api/resource/model/repositoryModel' import type { ResourceRepositoryTreeDto } from '@/api/resource/model/repositoryModel'
import { apiGetRepositoryList } from '@/api/resource/repository' import { apiDeleteResource, apiGetRepositoryList } from '@/api/resource/repository'
import { onMounted, reactive, ref, unref, watch } from 'vue' import { onMounted, reactive, ref, unref, watch } from 'vue'
import mitter from '@/utils/eventBus' import mitter from '@/utils/eventBus'
import type { ElTree, TreeNode } from 'element-plus' import { ElMessage, type ElTree, type TreeNode } from 'element-plus'
export function useRepositoryTree() { export function useRepositoryTree() {
const open = ref(false)
const searchText = ref('')
const treeLoading = ref(false)
const selectedKey = ref<string | number>('')
const treeRef = ref<InstanceType<typeof ElTree>>()
const treeList = ref<ResourceRepositoryTreeDto[]>([])
const selectedNodeData = reactive<Recordable>({})
const openNode = reactive<Recordable>({})
const fieldNames = reactive({ const fieldNames = reactive({
children: 'childNode', children: 'childNode',
title: 'resourceTableTitle', title: 'resourceTableTitle',
key: 'resourceTypeId' key: 'resourceTypeId'
}) })
const treeLoading = ref(false)
const treeRef = ref<InstanceType<typeof ElTree>>()
const searchText = ref('')
const selectedNodeData = reactive<Recordable>({})
const openNode = reactive<Recordable>({})
const selectedKey = ref<(string | number)>('')
const treeList = ref<ResourceRepositoryTreeDto[]>([])
const open = ref(false)
watch(searchText, (val) => { watch(searchText, (val) => {
treeRef.value?.filter(val) treeRef.value?.filter(val)
}) })
const treeAddNode = (data: any) => treeRef.value?.append(data, openNode.resourceTypeId)
const treeRemoveNode = async (data: any) => {
try {
await apiDeleteResource(data.resourceTypeId)
treeRef.value?.remove(data)
ElMessage.success('删除成功!')
} catch {}
}
const filterNode = (value: string, data: Recordable) => { const filterNode = (value: string, data: Recordable) => {
if (!value) return true if (!value) return true
return data.resourceTableTitle.includes(value) return data.resourceTableTitle.includes(value)
...@@ -35,9 +44,9 @@ export function useRepositoryTree() { ...@@ -35,9 +44,9 @@ export function useRepositoryTree() {
onSelect([result[0]]) onSelect([result[0]])
} }
// const onSelect = (keys: (string | number)[], e?: any) => { const onSuccess = (data) => treeAddNode(data)
const onSelect = (node: any) => {
const onSelect = (node: any) => {
node && Object.assign(selectedNodeData, unref(node)) node && Object.assign(selectedNodeData, unref(node))
selectedKey.value = node.resourceTypeId selectedKey.value = node.resourceTypeId
// 触发 表格 查询 // 触发 表格 查询
...@@ -48,9 +57,18 @@ export function useRepositoryTree() { ...@@ -48,9 +57,18 @@ export function useRepositoryTree() {
} }
const onContextMenuClick = (key: any, data: any) => { const onContextMenuClick = (key: any, data: any) => {
console.log('data', data) switch (key) {
Object.assign(openNode, unref(data)) case 'add':
Object.assign(unref(openNode), unref(data))
open.value = true open.value = true
break
case 'del':
treeRemoveNode(data)
break
case 'update':
open.value = true
break
}
} }
onMounted(async () => { onMounted(async () => {
...@@ -68,6 +86,7 @@ export function useRepositoryTree() { ...@@ -68,6 +86,7 @@ export function useRepositoryTree() {
fieldNames, fieldNames,
treeList, treeList,
selectedKey, selectedKey,
onSuccess,
onSelect, onSelect,
filterNode, filterNode,
onContextMenuClick onContextMenuClick
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment