61c64f38 by xukangle

Merge branch 'dev_20241202_xukangle' into develop

2 parents 56798cde 23cc819c
......@@ -53,6 +53,10 @@ VITE_API_DATA_SYNC = ms-swzl-data-sync-service
#消息接口
VITE_API_MESSAGE = ms-swzl-message-notification-service
#新门户接口
VITE_API_NEW_PORTAL = ms-daop-zcgl-asset-dam-service
# 是否在打包时生成 sourcemap
VITE_BUILD_SOURCEMAP = false
# 是否在打包时开启压缩,支持 gzip 和 brotli
......
......@@ -55,6 +55,7 @@
"@iconify-json/ep": "^1.1.10",
"@iconify/vue": "^4.1.1",
"@types/md5": "^2.3.2",
"@types/moment": "^2.13.0",
"@types/nprogress": "^0.2.0",
"@types/path-browserify": "^1.0.0",
"@types/qs": "^6.9.7",
......
......@@ -2,81 +2,81 @@ import request from "@/utils/request";
/** 获取首页组织机构信息 */
export const getHomeServiceInfo = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/company/service-info`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/company/service-info`,
method: 'get',
})
/** 获取首页资产统计信息 */
export const getStatisticsInfo = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/company/statistics-info`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/company/statistics-info`,
method: 'get',
})
/** 获取首页资产登记情况 */
export const getRegisterInfo = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/company/register-info`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/company/register-info`,
method: 'post',
data: params
})
/** 获取首页资产质量情况 */
export const getQualityInfo = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/company/quality-info`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/company/quality-info`,
method: 'get',
})
/** 获取首页资产交易情况 */
export const getDaTradeInfo = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/da-trade/page-list`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/da-trade/page-list`,
method: 'post',
data: params
})
/** 获取资产融资情况 */
export const getFinanceInfo = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/da-financing/page-list`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/da-financing/page-list`,
method: 'post',
data: params
})
/** 获取资产证件照url */
export const getRegisterUrl = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/company/list-doc-url`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/company/list-doc-url`,
method: 'get',
})
/** 获取资产行业类型分布 */
export const getIndustryInfo = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/platform/industry-statistics`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/platform/industry-statistics`,
method: 'get',
})
/** 获取平台授信主体金额分布 */
export const getCreditMoneyInfo = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/platform/credit-money-statistics`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/platform/credit-money-statistics`,
method: 'get',
})
/** 获取平台资产统计信息 */
export const getPlatformStatisticsInfo = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/platform/statistics-info`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/platform/statistics-info`,
method: 'get',
})
/** 获取平台服务企业地区分布 */
export const getPlatformService = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/platform/service-statistics`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/platform/service-statistics`,
method: 'get',
})
/** 获取平台服务企业地区分布-按省 */
export const getPlatformProvinceService = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/platform/service-statistics-province`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/platform/service-statistics-province`,
method: 'get',
})
/** 获取平台数据资产登记趋势 */
export const getPlatformMonth = () => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/home/platform/register-month-statistics`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/home/platform/register-month-statistics`,
method: 'get',
})
......
......@@ -175,10 +175,14 @@ const rowClassName = (rowObj) => {
return "edit_row";
}
const row = rowObj.row;
let className = "";
if (row.ROWID && row.STATUS === "edit" && row.STATE === "Running") {
className = "edit_row";
}
if (row.guid === currentRowKey.value) {
className += "current-row";
}
return className;
};
......@@ -232,10 +236,11 @@ onMounted(() => {
:show-header="props.tableInfo.showHeader ?? true" stripe :border="props.tableInfo.border
?? true" :height="props.tableInfo.height === null ? null : (props.tableInfo.height ?? '100%')"
:max-height="maxHeight" :row-key="rowKey" :current-row-key="currentRowKey" :row-class-name="rowClassName"
v-loading="tableDataLoading" @row-click="rowClick" @row-dblclick="rowDblClick" @selection-change="selectionChange"
@select="tableCheckboxSelectChange" @select-all="tableCheckboxAllSelectChange"
style="width: 100%; display: inline-block" :style="{ 'min-height': props.tableInfo.minHeight ?? '200px' }"
tooltip-effect="light" :tooltip-options="{ placement: 'top', popperClass: 'table_cell_tooltip' }"
:expand-row-keys="props.tableInfo.expandRowKeys" v-loading="tableDataLoading" @row-click="rowClick"
@row-dblclick="rowDblClick" @selection-change="selectionChange" @select="tableCheckboxSelectChange"
@select-all="tableCheckboxAllSelectChange" style="width: 100%; display: inline-block"
:style="{ 'min-height': props.tableInfo.minHeight ?? '200px' }" tooltip-effect="light"
:tooltip-options="{ placement: 'top', popperClass: 'table_cell_tooltip' }"
:show-summary="props.tableInfo.showSummary ?? false">
<el-table-column type="selection" :width="32" align="center" v-if="multiple" :selectable="rowSelectable"
:fixed="fixedSelection" />
......
......@@ -19,33 +19,33 @@ watch(
const combPath = pathArr[1] || 'app-scenes'
const toPath = pathArr[2]
const routerLength = pathArr.length
const jionPath = pathArr.slice(0,3).join("/")
const jionPath = pathArr.slice(0, 3).join("/")
let list: any = userStore.tabbar;
let pathIndex = ref(-1)
const isExist = list.filter((tab: any,index) => {
if(tab.fullPath.includes(jionPath)) {
const isExist = list.filter((tab: any, index) => {
if (tab.fullPath.includes(jionPath)) {
pathIndex.value = index
}
return tab.fullPath === newRouter.fullPath
});
if(isExist.length == 0) {
if( pathIndex.value!=-1 && routerLength > 3 ) {
list.splice(pathIndex.value+1,0,newRouter)
});
if (isExist.length == 0) {
if (pathIndex.value != -1 && routerLength > 3) {
list.splice(pathIndex.value + 1, 0, newRouter)
} else {
let pathIndex = -1
const option = list.find((item,index)=>{
const option = list.find((item, index) => {
pathIndex = index
return item.path===newRouter.path
return item.path === newRouter.path
})
if(option){
list.splice(pathIndex,1,newRouter);
if (option) {
list.splice(pathIndex, 1, newRouter);
} else {
list.push(newRouter)
}
}
}
// isExist.length == 0 && list.push(newRouter);
// isExist.length == 0 && list.push(newRouter);
list.map(item => {
if (combPath == 'app-scenes') {
item.visible = item.fullPath == '/'
......@@ -90,7 +90,7 @@ const removeTab = (targetName) => {
visibleTabs.value.splice(tabIndex, 1);
if (activeTab && router.currentRoute.value.fullPath != targetName) {
keepAliveStore.remove(activeTab.meta.reuse ? activeTab.fullPath : activeTab.matched.at(-1)?.components?.default?.name)
}
}
}
nextTick(() => {
nextTab.name && router.push({ name: nextTab.name, query: nextTab.query });
......@@ -166,13 +166,13 @@ onMounted(() => {
<svg-icon name="bar-home" />
</el-icon>
<ellipsis-tooltip :content="item.meta?.title" class-name="w100f"
:refName="'tooltipOver' + item.meta?.title"></ellipsis-tooltip>
:refName="'tooltipOver' + item.meta?.title"></ellipsis-tooltip>
</span>
</template>
<template #label v-else>
<span class="custom-tabs-label">
<ellipsis-tooltip :content="item.meta?.title" class-name="w100f"
:refName="'tooltipOver' + item.meta?.title"></ellipsis-tooltip>
:refName="'tooltipOver' + item.meta?.title"></ellipsis-tooltip>
</span>
</template>
</el-tab-pane>
......@@ -226,6 +226,7 @@ onMounted(() => {
.custom-tabs-label {
max-width: 280px;
.el-icon {
color: #999;
......@@ -252,9 +253,10 @@ onMounted(() => {
background: #fff;
border-radius: 4px 4px 0 0;
color: var(--el-color-primary);
.custom-tabs-label {
max-width: 280px;
.el-icon {
color: var(--el-color-primary);
}
......
import type { RouteRecordRaw } from 'vue-router'
function Layout() {
return import('@/layouts/index.vue')
}
const routes: RouteRecordRaw[] = [
{
path: '/data-asset-index',
component: Layout,
meta: {
title: '首页',
icon: 'sidebar-videos',
},
children: [{
path: '',
name: 'assetIndex',
component: () => import('@/views/indexNewBigScreen.vue'),
meta: {
title: '首页',
sidebar: false,
breadcrumb: false,
cache: true
},
}]
},
]
export default routes
......@@ -5,6 +5,7 @@ import DataAssess from './modules/dataAsset';
import DataMeta from './modules/dataMeta';
import DataQuality from './modules/dataQuality';
import DataInventory from './modules/dataInventory';
import AssetIndex from './modules/assetIndex';
import type { Route } from '#/global'
import useSettingsStore from '@/store/modules/settings'
......@@ -105,6 +106,7 @@ const asyncRoutes: Route.recordMainRaw[] = [
title: '首页',
},
children: [
...AssetIndex,
],
},
{
......
......@@ -77,7 +77,7 @@ const levelMap = {
}
const currTableInfo = ref<any>({});
const drawerRef = ref<any>('');
const currentRowKey = ref<any>(null);
const heightlightRow = ref<any>('');
const scopeRow = ref<any>(null);
const tableInfo = ref({
id: "data-class-standard-table",
......@@ -110,6 +110,7 @@ const tableInfo = ref({
data: [],
rowKey: 'guid',
currentRowKey: '',
expandedKeys: [] as any,
showPage: false,
actionInfo: {
label: "操作",
......@@ -118,6 +119,8 @@ const tableInfo = ref({
btns: [
{
label: "编辑", value: "edit", click: (scope) => {
tableInfo.value.currentRowKey = scope.row.guid;
heightlightRow.value = scope.row.guid;
scopeRow.value = scope.row;
currentEditingGuid.value = scope.row.guid;
selectParentEdit(scope.row.guid);
......@@ -308,6 +311,8 @@ const drawerBtnClick = async (btn, info) => {
const res: any = await saveClassify(params);
if (res.code == proxy.$passCode) {
proxy.$ElMessage.success('添加规则成功!');
tableInfo.value.currentRowKey = res.data;
heightlightRow.value = res.data;
drawerInfo.value.visible = false;
getTreeListData();
drawerInfo.value.footer.btns.map((item: any) => delete item.disabled);
......@@ -332,6 +337,7 @@ const drawerBtnClick = async (btn, info) => {
drawerInfo.value.footer.btns.map((item: any) => delete item.disabled);
getTreeListData();
// 清空当前编辑的guid
tableInfo.value.currentRowKey = heightlightRow.value
currentEditingGuid.value = '';
nextTick(() => {
console.log('tableRef进来了吗', scopeRow.value.guid);
......@@ -813,6 +819,17 @@ onActivated(() => {
}
});
const handleTableRowClick = (row, id) => {
tableInfo.value.currentRowKey = row.guid;
}
const drawerSelectChange = (val, row, info) => {
const tree = tableRef.value.tableRef;
console.log(val, row, info, tree);
tableInfo.value.expandedKeys.push(val);
console.log(tableInfo.value.expandedKeys);
}
</script>
<template>
......@@ -830,7 +847,8 @@ onActivated(() => {
<!-- <el-button class="show-change-btn" @click="changeShowMethod">{{ '图形展示' }}</el-button> -->
</div>
<div class="table_panel">
<Table v-show="dataShowMethod == 'table'" :tableInfo="tableInfo" ref="tableRef" />
<Table v-show="dataShowMethod == 'table'" :tableInfo="tableInfo" ref="tableRef"
@tableRowClick="handleTableRowClick" />
</div>
<div ref="shapeMain" class="shape-main" v-show="dataShowMethod != 'table'"></div>
<div v-if="showNodeDetails" class="node-details-popup"
......@@ -857,7 +875,8 @@ onActivated(() => {
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="saveUpdate" :loading="saveLoading">保存修改</el-button>
</div>
<Drawer :drawerInfo="drawerInfo" @drawerBtnClick="drawerBtnClick" ref="drawerRef" />
<Drawer :drawerInfo="drawerInfo" @drawerBtnClick="drawerBtnClick" ref="drawerRef"
@drawerSelectChange='drawerSelectChange' />
</div>
</template>
......
......@@ -336,7 +336,11 @@ const tableInfo = ref({
{ label: "序号", type: "index", width: 56, align: "center" },
{ label: "字段名", field: "fieldName", width: 140 },
{ label: "字段中文名", field: "fieldChName", width: 180 },
{ label: "分类", field: "classifyDetailName", width: 120 },
{
label: "分类", field: "classifyDetailNameRoutes", width: 120, getName: (scope) => {
return scope.row.classifyDetailNameRoutes.join('/');
}
},
{ label: "分级", field: "gradeDetailName", width: 80 },
{ label: "标签", field: "label", width: 140 },
{ label: "规则", field: "ruleDetail", width: 180 },
......@@ -416,7 +420,7 @@ const dataBaseTreeInfo = ref<any>({
editTreeItem: false,
queryValue: "",
className: 'tree-list',
queryPlaceholder: "输入标准集名称搜索",
queryPlaceholder: "输入名称搜索",
props: {
label: "name",
value: "guid",
......@@ -913,14 +917,23 @@ const dataBaseTablePageChange = (info) => {
}
// 字段信息分页
const dataFieldTablePageChange = (info) => {
dataFieldPage.value.curr = Number(info.curr);
dataFieldPage.value.limit = Number(info.limit);
getDataBaseFieldData({
pageIndex: info.curr,
pageSize: info.limit
});
}
// 获取字段信息getDbDirFieldPageList
const tableFieldsLoading = ref(false);
const tableFieldsData = ref([]);
const getDataBaseFieldData = async (params = {}) => {
tableFieldsDataInfo.value.loading = true;
const dataBaseParams = {
pageIndex: 1,
pageSize: -1,
pageIndex: dataFieldPage.value.curr,
pageSize: dataFieldPage.value.limit,
tableGuid: "",
execGuid: execGuidInfo.value.execGuid,
databaseGuid: "",
......@@ -932,12 +945,28 @@ const getDataBaseFieldData = async (params = {}) => {
if (res.code == proxy.$passCode) {
tableFieldsData.value = res.data.records;
tableFieldsDataInfo.value.data = res.data.records;
tableFieldsDataInfo.value.page.rows = res.data.totalRows;
tableFieldsDataInfo.value.page.limit = res.data.pageSize
tableFieldsDataInfo.value.page.curr = res.data.pageIndex
} else {
proxy.$ElMessage.error(res.msg);
}
tableFieldsDataInfo.value.loading = false;
};
const dataFieldPage = ref({
limit: 50,
curr: 1,
sizes: [
{ label: "10", value: 10 },
{ label: "50", value: 50 },
{ label: "100", value: 100 },
{ label: "150", value: 150 },
{ label: "200", value: 200 },
],
});
const tableFieldsDataInfo = ref({
id: "data-field-table",
multiple: false,
......@@ -955,11 +984,10 @@ const tableFieldsDataInfo = ref({
{ label: "标签", field: "label", width: 120, align: 'center' },
],
data: [],
showPage: false,
page: {
// type: "normal",
// rows: 0,
// ...dataBasePage.value,
type: "normal",
rows: 0,
...dataFieldPage.value,
},
actionInfo: {
......@@ -1392,13 +1420,13 @@ onActivated(async () => {
</div>
</div>
<div class="table_panel_wrap_database" v-if="!tableGuid && activeTab === 'table'"
:style="{ height: `calc(100% - ${tipHeight1}px)`, minHeight: '210px' }">
:style="{ height: '483px', minHeight: '210px' }">
<Table :tableInfo="dataBaseTableInfo" @tablePageChange="dataBaseTablePageChange"
@tableSwitchBeforeChange="tableSwitchBeforeChange" />
</div>
<div class="table_field" v-if="tableGuid || activeTab === 'word'"
:style="{ height: `calc(100% - ${tipHeight}px)`, minHeight: '210px' }">
<Table :tableInfo="tableFieldsDataInfo" />
:style="{ height: '523px', minHeight: '210px' }">
<Table :tableInfo="tableFieldsDataInfo" @tablePageChange="dataFieldTablePageChange" />
</div>
</div>
<Drawer :drawerInfo="drawerInfo" @drawerBtnClick="drawerBtnClick" class="v-drawer" />
......@@ -1470,6 +1498,7 @@ onActivated(async () => {
.main_wrap {
padding: 11px 16px 0 16px;
height: 100%;
.top-tool-tip {
display: flex;
......@@ -1534,7 +1563,7 @@ onActivated(async () => {
.table_panel_wrap {
width: 100%;
height: calc(100% - 117px);
height: 520px;
min-height: 210px;
overflow: visible;
}
......
......@@ -78,20 +78,12 @@ const labelPageList = ref<any>()
const getLabelPageData = async () => {
refCount.value++;
tableInfo.value.loading = true;
let params = {}
if (guids.value.length == 0) {
params = {
pageIndex: page.value.curr,
pageSize: page.value.limit,
classifyGuid: classifyGuid.value,
detailGuid: classifyDetailGuid.value
}
} else {
params = {
pageIndex: page.value.curr,
pageSize: page.value.limit,
guids: guids.value
}
const params = {
pageIndex: page.value.curr,
pageSize: page.value.limit,
classifyGuid: classifyGuid.value,
detailGuid: classifyDetailGuid.value,
guids: guids.value
}
const res: any = await getLabelPageList(params);
......@@ -743,13 +735,13 @@ const searchClass = async (val: any, clear: boolean = false) => {
}
if (val?.labelName?.length !== 0 || refCount.value >= 1) {
tableInfo.value.loading = true;
classifyGuid.value = '';
classifyDetailGuid.value = '';
treeInfo.value.expandedKey = [];
treeInfo.value.currentNodeKey = '';
const params = {
pageIndex: 1,
pageSize: 50,
classifyGuid: classifyGuid.value,
detailGuid: classifyDetailGuid.value,
guids: guids.value,
}
const res: any = await getLabelPageList(params);
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!