diff --git a/vue-fastapi-backend/module_admin/controller/meta_controller.py b/vue-fastapi-backend/module_admin/controller/meta_controller.py index 9ed2358..76709af 100644 --- a/vue-fastapi-backend/module_admin/controller/meta_controller.py +++ b/vue-fastapi-backend/module_admin/controller/meta_controller.py @@ -47,3 +47,11 @@ async def getMetaInfoApplyBusinessDetail(request: Request, query_db: AsyncSession = Depends(get_db)): result = await MetaService.get_meta_apply_detail_services(query_db, businessId) return ResponseUtil.success(data=result) + + +@metaController.get("/meta/getTable/{tableId}") +async def getTableByTableId(request: Request, + tableId: int, + query_db: AsyncSession = Depends(get_db)): + result = await MetaService.get_table_by_id(query_db, tableId) + return ResponseUtil.success(data=result) diff --git a/vue-fastapi-backend/module_admin/dao/meta_dao.py b/vue-fastapi-backend/module_admin/dao/meta_dao.py index dc7ecee..6bbf3e2 100644 --- a/vue-fastapi-backend/module_admin/dao/meta_dao.py +++ b/vue-fastapi-backend/module_admin/dao/meta_dao.py @@ -2,20 +2,78 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join, update, desc from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject from module_admin.entity.do.meta_do import MetadataExtractInfo, MetadataSuppInfo, MetadataFldTabExtractInfo, \ - MetadataFldSuppInfo, MetadataClas, MetadataSuppInfoVett, MetadataFldSuppInfoVett -import json -import re -from utils.time_format_util import object_format_datetime, list_format_datetime, format_datetime_dict_list -from datetime import datetime, time -from typing import Union, List -from utils.log_util import logger + MetadataFldSuppInfo, MetadataClas, MetadataSuppInfoVett, MetadataFldSuppInfoVett, MetaBatchTabClas, MetaBatchFldClas +from utils.common_util import CamelCaseUtil import uuid -import datetime from utils.page_util import PageUtil class MetaDao: + @classmethod + async def get_meta_tab_clas(cls, db: AsyncSession, sysCode: str, mdlName: str, tabName: str): + query_result = ( + ( + await db.execute( + select( + MetaBatchTabClas.onum, + MetaBatchTabClas.ssys_cd, + MetaBatchTabClas.data_whs_name, + MetaBatchTabClas.mdl_name, + MetaBatchTabClas.tab_no, + MetaBatchTabClas.tab_eng_name, + MetaBatchTabClas.clas_onum, + MetaBatchTabClas.clas_value, + MetadataClas.clas_pri_clas, + MetadataClas.clas_scd_clas, + MetadataClas.clas_thre_clas, + MetadataClas.clas_eff_flag, + MetadataClas.rec_subm_prsn, + MetadataClas.clas_name + ).join( + MetadataClas, MetaBatchTabClas.clas_onum == MetadataClas.clas_onum + ) + .where(MetaBatchTabClas.ssys_cd == sysCode, + MetaBatchTabClas.mdl_name == mdlName, + MetaBatchTabClas.tab_eng_name == tabName).distinct() + ) + ).fetchall() + ) + return query_result + + @classmethod + async def get_meta_fld_clas(cls, db: AsyncSession, sysCode: str, mdlName: str, tabName: str, fldName: str): + query_result = ( + ( + await db.execute( + select( + MetaBatchFldClas.onum, + MetaBatchFldClas.ssys_cd, + MetaBatchFldClas.data_whs_name, + MetaBatchFldClas.mdl_name, + MetaBatchFldClas.tab_no, + MetaBatchFldClas.tab_eng_name, + MetaBatchFldClas.fld_eng_name, + MetaBatchFldClas.clas_onum, + MetaBatchFldClas.clas_value, + MetadataClas.clas_pri_clas, + MetadataClas.clas_scd_clas, + MetadataClas.clas_thre_clas, + MetadataClas.clas_eff_flag, + MetadataClas.rec_subm_prsn, + MetadataClas.clas_name + ).join( + MetadataClas, MetaBatchFldClas.clas_onum == MetadataClas.clas_onum + ) + .where(MetaBatchFldClas.ssys_cd == sysCode, + MetaBatchFldClas.mdl_name == mdlName, + MetaBatchFldClas.tab_eng_name == tabName, + MetaBatchFldClas.fld_eng_name == fldName).distinct() + ) + ).fetchall() + ) + return query_result + @classmethod async def get_meta_rel_list(cls, db: AsyncSession, query_object: MetaPageObject): """ @@ -45,7 +103,7 @@ class MetaDao: MetadataSuppInfo.rec_stat.label('supp_rec_stat'), MetadataSuppInfo.tab_clas, MetadataSuppInfo.rec_subm_prsn, - MetadataSuppInfo.upd_time.label('supp_upd_time') + MetadataSuppInfo.upd_time.label('supp_upd_time'), ).join(MetadataSuppInfo, and_( MetadataExtractInfo.ssys_cd == MetadataSuppInfo.ssys_cd, @@ -379,3 +437,60 @@ class MetaDao: ) return query_result + @classmethod + async def get_meta_table_by_id(cls, tableId: int, db: AsyncSession): + """ + 根据查询参数获取用户列表信息 + """ + # 主查询 + + result = (await db.execute( + select( + MetadataExtractInfo.onum.label('extract_onum'), + MetadataExtractInfo.extract_ver_num, + MetadataExtractInfo.ver_desc.label('extract_ver_desc'), + MetadataExtractInfo.ssys_cd, + MetadataExtractInfo.data_whs_name, + MetadataExtractInfo.mdl_name, + MetadataExtractInfo.tab_no, + MetadataExtractInfo.tab_type, + MetadataExtractInfo.tab_eng_name, + MetadataExtractInfo.tab_cn_name, + MetadataExtractInfo.tab_rec_num, + MetadataExtractInfo.upd_time.label('extract_upd_time'), + MetadataSuppInfo.onum.label('supp_onum'), + MetadataSuppInfo.crrct_ver_num.label('supp_crrct_ver_num'), + MetadataSuppInfo.tab_crrct_name, + MetadataSuppInfo.tab_desc, + MetadataSuppInfo.pic, + MetadataSuppInfo.gov_flag, + MetadataSuppInfo.rec_stat.label('supp_rec_stat'), + MetadataSuppInfo.tab_clas, + MetadataSuppInfo.rec_subm_prsn, + MetadataSuppInfo.upd_time.label('supp_upd_time'), + ).join(MetadataSuppInfo, + and_( + MetadataExtractInfo.ssys_cd == MetadataSuppInfo.ssys_cd, + MetadataExtractInfo.mdl_name == MetadataSuppInfo.mdl_name, + MetadataExtractInfo.tab_eng_name == MetadataSuppInfo.tab_eng_name + ), isouter=True) + .join( + MetadataFldTabExtractInfo, + and_( + MetadataExtractInfo.ssys_cd == MetadataFldTabExtractInfo.ssys_cd, + MetadataExtractInfo.mdl_name == MetadataFldTabExtractInfo.mdl_name, + MetadataExtractInfo.tab_eng_name == MetadataFldTabExtractInfo.tab_eng_name + ), isouter=True) + .join( + MetadataFldSuppInfo, + and_( + MetadataExtractInfo.ssys_cd == MetadataFldSuppInfo.ssys_cd, + MetadataExtractInfo.mdl_name == MetadataFldSuppInfo.mdl_name, + MetadataExtractInfo.tab_eng_name == MetadataFldSuppInfo.tab_eng_name + ), isouter=True) + .where( + MetadataExtractInfo.onum == tableId + ).distinct() + )).first() + return CamelCaseUtil.transform_result(result) + diff --git a/vue-fastapi-backend/module_admin/entity/do/meta_do.py b/vue-fastapi-backend/module_admin/entity/do/meta_do.py index 7544c9a..a2b39a1 100644 --- a/vue-fastapi-backend/module_admin/entity/do/meta_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/meta_do.py @@ -156,3 +156,32 @@ class MetadataFldSuppInfoVett(Base): apply_time = Column(String(255, collation='utf8_general_ci'), comment='申请时间') apply_status = Column(String(255, collation='utf8_general_ci'), comment='申请状态') oldColumnData = Column(Text, comment='修改前字段信息') + + +class MetaBatchTabClas(Base): + """表格标签表""" + __tablename__ = 't_batch_tab_clas' + + onum = Column(Integer, primary_key=True, comment='序号(主键自增)') + ssys_cd = Column(String(50, collation='utf8_general_ci'), comment='源系统代码') + data_whs_name = Column(String(50, collation='utf8_general_ci'), comment='数据库名称') + mdl_name = Column(String(50, collation='utf8_general_ci'), comment='模式名称') + tab_no = Column(Integer, comment='表编号') + tab_eng_name = Column(String(200, collation='utf8_general_ci'), comment='表英文名称') + clas_onum = Column(String(200, collation='utf8_general_ci'), comment='标签序号') + clas_value = Column(String(200, collation='utf8_general_ci'), comment='标签值') + + +class MetaBatchFldClas(Base): + """字段标签表""" + __tablename__ = 't_batch_fld_clas' + + onum = Column(Integer, primary_key=True, comment='序号(主键自增)') + ssys_cd = Column(String(50, collation='utf8_general_ci'), comment='源系统代码') + data_whs_name = Column(String(50, collation='utf8_general_ci'), comment='数据库名称') + mdl_name = Column(String(50, collation='utf8_general_ci'), comment='模式名称') + tab_no = Column(Integer, comment='表编号') + tab_eng_name = Column(String(200, collation='utf8_general_ci'), comment='表英文名称') + fld_eng_name = Column(String(200, collation='utf8_general_ci'), comment='字段英文名称') + clas_onum = Column(String(200, collation='utf8_general_ci'), comment='标签序号') + clas_value = Column(String(200, collation='utf8_general_ci'), comment='标签值') diff --git a/vue-fastapi-backend/module_admin/service/meta_service.py b/vue-fastapi-backend/module_admin/service/meta_service.py index 44309a2..84b4162 100644 --- a/vue-fastapi-backend/module_admin/service/meta_service.py +++ b/vue-fastapi-backend/module_admin/service/meta_service.py @@ -37,6 +37,11 @@ class MetaService: # 0,正常,1已发布,2审核中,3已审核,4已作废 if 'admin' in current_user.roles: meta_rel_list = await MetaDao.get_meta_rel_list(result_db, query_object) + if meta_rel_list and len(meta_rel_list.rows) > 0: + for table in meta_rel_list.rows: + tab_list = await MetaDao.get_meta_tab_clas(result_db, table['ssysCd'], table['mdlName'], + table['tabEngName']) + table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list) return meta_rel_list else: # meta_rel_list = MetaDao.get_meta_rel_list(result_db, query_object, data_scope_sql) @@ -45,7 +50,12 @@ class MetaService: @classmethod async def get_meta_col_list_services(cls, result_db: AsyncSession, query_object: MetaColObject): meta_result = await MetaDao.get_meta_col_list(result_db, query_object) - return cls.convert_json_keys(meta_result) + result = CamelCaseUtil.transform_result(meta_result) + for column in result: + fld_list = await MetaDao.get_meta_fld_clas(result_db, column['ssysCd'], column['mdlName'], + column['tabEngName'], column['fldEngName']) + column['batchFldClas'] = CamelCaseUtil.transform_result(fld_list) + return result @classmethod async def get_meta_clas_list_services(cls, result_db: AsyncSession): @@ -117,76 +127,83 @@ class MetaService: @classmethod def castToTableStr(cls, table: MetadataSuppInfo, tableInfo: MetadataExtractInfo): tableDict = dict( - onum=table.onum, - crrctVerNum=table.crrct_ver_num, - ssysCd=table.ssys_cd, - mdlName=table.mdl_name, - tabEngName=table.tab_eng_name, + onum=tableInfo.onum, + crrctVerNum=table.crrct_ver_num if table else None, + ssysCd=tableInfo.ssys_cd, + mdlName=tableInfo.mdl_name, + tabEngName=tableInfo.tab_eng_name, tabCnName=tableInfo.tab_cn_name, tabType=tableInfo.tab_type, tabRecNum=tableInfo.tab_rec_num, - tabCrrctName=table.tab_crrct_name, - tabDesc=table.tab_desc, - pic=table.pic, - govFlag=table.gov_flag, - recStat=table.rec_stat, - tabClas=table.tab_clas, - recSubmPrsn=table.rec_subm_prsn, - updTime=table.upd_time + tabCrrctName=table.tab_crrct_name if table else None, + tabDesc=table.tab_desc if table else None, + pic=table.pic if table else None, + govFlag=table.gov_flag if table else None, + recStat=table.rec_stat if table else None, + tabClas=table.tab_clas if table else None, + recSubmPrsn=table.rec_subm_prsn if table else None, + updTime=table.upd_time if table else None ) return json.dumps(tableDict) @classmethod def castToColumnStr(cls, column: MetadataFldSuppInfo, columnInfo: MetadataFldTabExtractInfo): columnDict = dict( - onum=column.onum, - crrctVerNum=column.crrct_ver_num, - ssysCd=column.ssys_cd, - mdlName=column.mdl_name, - tabEngName=column.tab_eng_name, - fldEngName=column.fld_eng_name, + onum=columnInfo.onum, + crrctVerNum=column.crrct_ver_num if column else None, + ssysCd=columnInfo.ssys_cd, + mdlName=columnInfo.mdl_name, + tabEngName=columnInfo.tab_eng_name, + fldEngName=columnInfo.fld_eng_name, fldCnName=columnInfo.fld_cn_name, fldType=columnInfo.fld_type, pkFlag=columnInfo.pk_flag, requireFlag=columnInfo.require_flag, idxFlag=columnInfo.idx_flag, - fldCrrctName=column.fld_crrct_name, - crrctPkFlag=column.crrct_pk_flag, - fldDesc=column.fld_desc, - pic=column.pic, - fldClas=column.fld_clas, - fldNullRate=column.fld_null_rate, - recStat=column.rec_stat, - updTime=column.upd_time + fldCrrctName=column.fld_crrct_name if column else None, + crrctPkFlag=column.crrct_pk_flag if column else None, + fldDesc=column.fld_desc if column else None, + pic=column.pic if column else None, + fldClas=column.fld_clas if column else None, + fldNullRate=column.fld_null_rate if column else None, + recStat=column.rec_stat if column else None, + updTime=column.upd_time if column else None ) return json.dumps(columnDict) - @classmethod - def snake_to_camel(cls, snake_str: str): - # 将字符串按下划线分割成列表 - components = snake_str.split('_') - # 第一个单词保持小写,后续单词首字母大写 - camel_str = components[0] + ''.join(word.capitalize() for word in components[1:]) - return camel_str - - @classmethod - def convert_json_keys(cls, data): - if isinstance(data, dict): - # 如果数据是字典,则转换键名并递归处理值 - return {cls.snake_to_camel(k): cls.convert_json_keys(v) for k, v in data.items()} - elif isinstance(data, list): - # 如果数据是列表,则递归处理列表中的每个元素 - return [cls.convert_json_keys(element) for element in data] - else: - # 如果数据不是字典或列表,则直接返回(即基本数据类型,如字符串、数字等) - return data - @classmethod async def get_meta_apply_detail_services(cls, result_db: AsyncSession, businessId: str): tableData = await MetaDao.get_supp_table_vett_by_id(businessId, result_db) + table = CamelCaseUtil.transform_result(tableData) + clas_list = await MetaDao.get_meta_tab_clas(result_db, tableData.ssys_cd, tableData.mdl_name, + tableData.tab_eng_name) + table['batchTabClas'] = CamelCaseUtil.transform_result(clas_list) columnData = await MetaDao.get_supp_column_vett_by_tableInfo(result_db, tableData) + column_list = CamelCaseUtil.transform_result(columnData) + for column in column_list: + col_list = await MetaDao.get_meta_fld_clas(result_db, column['ssysCd'], column['mdlName'], + column['tabEngName'], column['fldEngName']) + column['batchColClas'] = CamelCaseUtil.transform_result(col_list) result = dict( - table=tableData, - column=columnData + table=table, + column=column_list ) return result + + @classmethod + async def get_table_by_id(cls, result_db: AsyncSession, tableId: int): + table = await MetaDao.get_meta_table_by_id(tableId, result_db) + tab_list = await MetaDao.get_meta_tab_clas(result_db, table['ssysCd'], table['mdlName'], + table['tabEngName']) + table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list) + colQuery = MetaColObject() + colQuery.ssys_cd = table['ssysCd'] + colQuery.mdl_name = table['mdlName'] + colQuery.tab_name = table['tabEngName'] + columnList = await MetaDao.get_meta_col_list(result_db, colQuery) + for column in columnList: + col_list = await MetaDao.get_meta_fld_clas(result_db, column['ssys_cd'], column['mdl_name'], + column['tab_eng_name'], column['fld_eng_name']) + column['batchColClas'] = CamelCaseUtil.transform_result(col_list) + table['columnList'] = CamelCaseUtil.transform_result(columnList) + return table diff --git a/vue-fastapi-frontend/src/views/dataint/dataquery/index.vue b/vue-fastapi-frontend/src/views/dataint/dataquery/index.vue new file mode 100644 index 0000000..364493c --- /dev/null +++ b/vue-fastapi-frontend/src/views/dataint/dataquery/index.vue @@ -0,0 +1,9 @@ + + 数据问答 + + + \ No newline at end of file diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue index 88a9347..15d51a8 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue @@ -101,7 +101,18 @@ - + + + + + {{item.clasName}} + + + {{item.clasName + ":" + item.clasValue}} + + + + @@ -203,9 +214,13 @@ 对象标签集合 新增 - - {{ tag.tagName }} - + + + {{ tag.clasName}} + + @@ -242,45 +257,44 @@ - {{scope.row.fldCrrctName}} - {{scope.row.fldCrrctName}} + {{scope.row.fldCrrctName}} - {{scope.row.crrctPkFlag}} - {{scope.row.crrctPkFlag}} + {{scope.row.crrctPkFlag}} - {{scope.row.fldDesc}} - {{scope.row.fldDesc}} + {{scope.row.fldDesc}} - - + - {{scope.row.pic}} - {{scope.row.pic}} + {{scope.row.pic}} - - {{item.tagName}} - + + + {{item.clasName}} + + + {{item.clasName + ":" + item.clasValue}} + + - {{scope.row.fldNullRate}} - {{scope.row.fldNullRate}} + {{scope.row.fldNullRate}} @@ -294,8 +308,8 @@ - Config - Role + 业务关系 + 血缘关系 @@ -346,29 +360,35 @@ - - - + + + - + - + + + + + + {{'有效'}} + {{'已删除'}} - + - + {{scope.row.tagSource ? scope.row.tagSource:'自动'}} - - 删除 + 删除 + 恢复 @@ -475,30 +495,35 @@ 新增 - - - - + + + + - + - + - + - + {{ (scope.row.clasEffFlag === '1')?'有效':'无效' }} + + + + + {{scope.row.tagSource?scope.row.tagSource:'自动'}} - - 删除 + 删除 + 恢复 @@ -554,7 +579,6 @@ const metaClasList = ref([]); const columnInfoDialog = ref(false); const currentColumnData = ref({}); - const oldColumnsData = ref([]); const currentTableTag = ref({ "clasThreClas": "", "clasOnum": null, @@ -595,57 +619,116 @@ tableTagDialog.value = false } function confirmColumn(){ + let changed = false for (let i = 0; i < columnList.value.length; i++) { if (columnList.value[i].fldEngName === currentColumnData.value.fldEngName){ if (columnList.value[i].fldCrrctName !== currentColumnData.value.fldCrrctName){ columnList.value[i].fldCrrctName = currentColumnData.value.fldCrrctName - oldColumnsData.value[i].fldCrrctName = true + changed = true } if (columnList.value[i].fldDesc !== currentColumnData.value.fldDesc){ columnList.value[i].fldDesc = currentColumnData.value.fldDesc - oldColumnsData.value[i].fldDesc = true + changed = true } if (columnList.value[i].crrctPkFlag !== currentColumnData.value.crrctPkFlag){ columnList.value[i].crrctPkFlag = currentColumnData.value.crrctPkFlag - oldColumnsData.value[i].crrctPkFlag = true + changed = true } // if (columnList.value[i].suppRecStat !== currentColumnData.value.suppRecStat){ // columnList.value[i].suppRecStat = currentColumnData.value.suppRecStat - // oldColumnsData.value[i].suppRecStat = true // } if (columnList.value[i].pic !== currentColumnData.value.pic){ columnList.value[i].pic = currentColumnData.value.pic - oldColumnsData.value[i].pic = true + changed = true } if (columnList.value[i].fldNullRate !== currentColumnData.value.fldNullRate){ columnList.value[i].fldNullRate = currentColumnData.value.fldNullRate - oldColumnsData.value[i].fldNullRate = true + changed = true } - if (columnList.value[i].fldClas !== null && columnList.value[i].fldClas !== ''){ - if (JSON.parse(columnList.value[i].fldClas) !== currentColumnData.value.fldClas){ - columnList.value[i].fldClas = JSON.stringify(currentColumnData.value.fldClas) - oldColumnsData.value[i].fldClas = true + if (currentColumnData.value.showFldClas && currentColumnData.value.showFldClas.length > 0){ + let showFldClas = currentColumnData.value.showFldClas + let fldClas = [] + for (let j = 0; j < showFldClas.length; j++) { + let col = showFldClas[j] + if (col.clasEffFlag === '0'){ // 无效 + fldClas.push(col) + }else{ // 有效 + if (col.tagSource === '手动'){ + fldClas.push(col) + } + } + } + if (columnList.value[i].fldClas && columnList.value[i].fldClas !== '[]'){ + if (JSON.stringify(fldClas) !== columnList.value[i].fldClas){ + columnList.value[i].fldClas = JSON.stringify(fldClas) + changed = true + } + }else { + if (fldClas.length !== 0){ + columnList.value[i].fldClas = JSON.stringify(fldClas) + changed = true + } } - }else { - if (currentColumnData.value.fldClas.length > 0){ - columnList.value[i].fldClas = JSON.stringify(currentColumnData.value.fldClas) - oldColumnsData.value[i].fldClas = true + let batchFldClas = columnList.value[i].batchFldClas + if (fldClas.length > 0){ + for (let j = 0; j < fldClas.length; j++) { + for (let k = 0; k < batchFldClas.length; k++) { + if (batchFldClas[k].clasPriClas === fldClas[j].clasPriClas + && batchFldClas[k].clasScdClas === fldClas[j].clasScdClas + && batchFldClas[k].clasThreClas === fldClas[j].clasThreClas + && batchFldClas[k].clasName === fldClas[j].clasName + ){ + batchFldClas[k] = fldClas[j] + } + } + } } + let tempFldClas = [] + if (batchFldClas && batchFldClas.length>0){ + for (let j = 0; j < batchFldClas.length; j++) { + if (tempFldClas.length > 0){ + let hasClas = false + for (let k = 0; k < tempFldClas.length; k++) { + if (tempFldClas[k].clasPriClas === batchFldClas[j].clasPriClas + && tempFldClas[k].clasScdClas === batchFldClas[j].clasScdClas + && tempFldClas[k].clasThreClas === batchFldClas[j].clasThreClas + ){ + hasClas = true + } + } + if (hasClas){ + break + }else { + if (batchFldClas[j].clasEffFlag === '1'){ + tempFldClas.push(batchFldClas[j]) + } + } + }else { + if (batchFldClas[j].clasEffFlag === '1'){ + tempFldClas.push(batchFldClas[j]) + } + } + } + } + columnList.value[i].showFldClas = batchFldClas + columnList.value[i].tempFldClas = tempFldClas } } } columnInfoDialog.value = false - changedColumns.value.push(currentColumnData.value) + if (changed){ + changedColumns.value.push(currentColumnData.value) + } } function addTableTag(){ let json = JSON.parse(JSON.stringify(currentTableTag.value)) if (json.clasOnum !== null){ tableTags.value.push({ - tagOnum: json.clasOnum, - tagName: json.clasName, - tagValue: '', + onum: json.clasOnum, + clasName: json.clasName, + clasValue: '', tagRemark:'', - tagStatus:'', + clasEffFlag:'1', tagSource:'手工', setUser: cache.local.get("username"), setTime: getNowDateTime() @@ -658,12 +741,12 @@ function addColumnTag(){ let json = JSON.parse(JSON.stringify(currentColumnTag.value)) if (json.clasOnum !== null){ - currentColumnData.value.fldClas.push({ - tagOnum: json.clasOnum, - tagName: json.clasName, - tagValue: '', + currentColumnData.value.showFldClas.push({ + onum: json.clasOnum, + clasName: json.clasName, + clasValue: '', tagRemark:'', - tagStatus:'', + clasEffFlag:'1', tagSource:'手工', setUser: cache.local.get("username"), setTime: getNowDateTime() @@ -684,11 +767,17 @@ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; } - function deleteTableTag(index){ - tableTags.value.splice(index,1) + function deleteTag(row){ + row.clasEffFlag = '0' + row.tagSource = '手动' } - function deleteColumnTag(index){ - currentColumnData.value.fldClas.splice(index,1) + function revertTag(row){ + row.clasEffFlag = '1' + row.tagSource = '手动' + } + + function changeTagValue(row){ + row.tagSource = '手动' } function changeTableTag(){ if (typeof currentTableTag.value.clasOnum !== null){ @@ -710,12 +799,13 @@ } } } - function handleTableTagClose(tag){ - for (let i = 0; i < currentMetaData.value.tags.length; i++) { - if (tag.tagName === currentMetaData.value.tags[i].tagName && tag.tagValue === currentMetaData.value.tags[i].tagValue){ - currentMetaData.value.tags.splice(i, 1); - } - } + function handleTableTagClose(index){ + currentMetaData.value.tags[index].clasEffFlag = '0' + // for (let i = 0; i < currentMetaData.value.tags.length; i++) { + // if (tag.tagName === currentMetaData.value.tags[i].tagName && tag.tagValue === currentMetaData.value.tags[i].tagValue){ + // currentMetaData.value.tags.splice(i, 1); + // } + // } } function openTableTagsDialog(){ tableTagDialog.value = true @@ -743,7 +833,7 @@ "clasPriClas": "", "clasScdClas": "" } - currentColumnData.value.fldClas = (row.fldClas === null || row.fldClas === '')?[]:JSON.parse(row.fldClas) + currentColumnData.value.showFldClas = JSON.parse(JSON.stringify(row.showFldClas)) getMetaClasList().then(res=>{ metaClasList.value = res.data }) @@ -759,7 +849,7 @@ tabDesc:tableData.tabDesc, govFlag:tableData.govFlag, pic:tableData.pic, - tags: tableData.tabClas? JSON.parse(tableData.tabClas):[] + tags: tableData.showTabClas } let columnData = { tabName: row.tabEngName, @@ -768,14 +858,55 @@ } getColumnList(columnData).then(res=>{ columnList.value = res.data - oldColumnsData.value = [] - for (let i = 0; i < columnList.value.length; i++) { - oldColumnsData.value.push({ - fldCrrctName:false, - crrctPkFlag:false, - fldDesc:false, - pic:false, - }) + if (columnList.value.length>0){ + for (let i = 0; i < columnList.value.length; i++) { + let batchFldClas = columnList.value[i].batchFldClas + let fldClas =[] + if (columnList.value[i].fldClas && columnList.value[i].fldClas !== '[]'){ + fldClas = JSON.parse(columnList.value[i].fldClas) + } + if (fldClas.length > 0){ + for (let j = 0; j < fldClas.length; j++) { + for (let k = 0; k < batchFldClas.length; k++) { + if (batchFldClas[k].clasPriClas === fldClas[j].clasPriClas + && batchFldClas[k].clasScdClas === fldClas[j].clasScdClas + && batchFldClas[k].clasThreClas === fldClas[j].clasThreClas + && batchFldClas[k].clasName === fldClas[j].clasName + ){ + batchFldClas[k] = fldClas[j] + } + } + } + } + let tempFldClas = [] + if (batchFldClas && batchFldClas.length>0){ + for (let j = 0; j < batchFldClas.length; j++) { + if (tempFldClas.length > 0){ + let hasClas = false + for (let k = 0; k < tempFldClas.length; k++) { + if (tempFldClas[k].clasPriClas === batchFldClas[j].clasPriClas + && tempFldClas[k].clasScdClas === batchFldClas[j].clasScdClas + && tempFldClas[k].clasThreClas === batchFldClas[j].clasThreClas){ + hasClas = true + } + } + if (hasClas){ + break + }else { + if (batchFldClas[j].clasEffFlag === '1'){ + tempFldClas.push(batchFldClas[j]) + } + } + }else { + if (batchFldClas[j].clasEffFlag === '1') { + tempFldClas.push(batchFldClas[j]) + } + } + } + } + columnList.value[i].showFldClas = batchFldClas + columnList.value[i].tempFldClas = tempFldClas + } } }) drawer.value = true @@ -818,6 +949,56 @@ function getList(){ getMetaDataList(queryParams.value).then(res=>{ dataList.value = res.data.rows + if (dataList.value.length>0){ + for (let i = 0; i < dataList.value.length; i++) { + let batchTabClas = dataList.value[i].batchTabClas + let tabClas =[] + if (dataList.value[i].tabClas && dataList.value[i].tabClas !== '[]'){ + tabClas = JSON.parse(dataList.value[i].tabClas) + } + if (tabClas.length > 0){ + for (let j = 0; j < tabClas.length; j++) { + for (let k = 0; k < batchTabClas.length; k++) { + if (batchTabClas[k].clasPriClas === tabClas[j].clasPriClas + && batchTabClas[k].clasScdClas === tabClas[j].clasScdClas + && batchTabClas[k].clasThreClas === tabClas[j].clasThreClas + && batchTabClas[k].clasName === tabClas[j].clasName + ){ + batchTabClas[k] = tabClas[j] + } + } + } + } + let tempTabClas = [] + if (batchTabClas && batchTabClas.length>0){ + for (let j = 0; j < batchTabClas.length; j++) { + if (tempTabClas.length > 0){ + let hasClas = false + for (let k = 0; k < tempTabClas.length; k++) { + if (tempTabClas[k].clasPriClas === batchTabClas[j].clasPriClas + && tempTabClas[k].clasScdClas === batchTabClas[j].clasScdClas + && tempTabClas[k].clasThreClas === batchTabClas[j].clasThreClas){ + hasClas = true + } + } + if (hasClas){ + break + }else { + if (batchTabClas[j].clasEffFlag === '1'){ + tempTabClas.push(batchTabClas[j]) + } + } + }else { + if (batchTabClas[j].clasEffFlag === '1') { + tempTabClas.push(batchTabClas[j]) + } + } + } + } + dataList.value[i].showTabClas = batchTabClas + dataList.value[i].tempTabClas = tempTabClas + } + } loading.value = false total.value = res.data.total }) @@ -858,7 +1039,7 @@ crrctPkFlag: column.crrctPkFlag, fldDesc: column.fldDesc, pic: column.pic, - fldClas: JSON.stringify(column.fldClas), + fldClas: JSON.stringify(column.showFldClas), fldNullRate: column.fldNullRate, recStat: column.recStat }) diff --git a/vue-fastapi-frontend/src/views/system/flow/index.vue b/vue-fastapi-frontend/src/views/system/flow/index.vue index 3c4ba09..aaa710c 100644 --- a/vue-fastapi-frontend/src/views/system/flow/index.vue +++ b/vue-fastapi-frontend/src/views/system/flow/index.vue @@ -254,8 +254,11 @@ 对象标签 - - {{item.tagName}} + + + {{item.clasName}} + {{item.clasName}} + @@ -321,8 +324,11 @@ - - {{item.tagName}} + + + {{item.clasName}} + {{item.clasName}} + @@ -423,8 +429,11 @@ 对象标签 - - {{item.tagName}} + + + {{item.clasName}} + {{item.clasName}} + @@ -490,8 +499,11 @@ - - {{item.tagName}} + + + {{item.clasName}} + {{item.clasName}} + @@ -800,55 +812,142 @@ function showBusinessDataDialog(row){ businessId: row.businessId } getMetaInfoApplyBusinessDetail(param).then(res=>{ - let table = JSON.parse(res.data.table.oldTableData) + let data = JSON.parse(JSON.stringify(res.data)) + let table = JSON.parse(data.table.oldTableData) + let batchTabClas = data.table.batchTabClas + let showOldTabClas = [] + if (batchTabClas && batchTabClas.length>0){ + showOldTabClas = JSON.parse(JSON.stringify(batchTabClas)) + if (table.tabClas && table.tabClas !== '[]' && table.tabClas !== 'null'){ + let oldTabClas = JSON.parse(table.tabClas) + for (let i = 0; i < oldTabClas.length; i++) { + for (let j = 0; j < showOldTabClas.length; j++) { + if (showOldTabClas[j].clasPriClas === oldTabClas[i].clasPriClas + && showOldTabClas[j].clasScdClas === oldTabClas[i].clasScdClas + && showOldTabClas[j].clasThreClas === oldTabClas[i].clasThreClas + && showOldTabClas[j].clasName === oldTabClas[i].clasName + ){ + showOldTabClas[j] = oldTabClas[i] + } + } + } + } + }else { + showOldTabClas = JSON.parse(table.tabClas) + } + table.showTabClas = showOldTabClas + oldTableInfo.value = JSON.parse(JSON.stringify(table)) newTableInfo.value = { - applyStatus:res.data.table.apply_status, - applyTime:res.data.table.apply_time, - crrctVerNum:res.data.table.crrct_ver_num, - govFlag:res.data.table.gov_flag, - mdlName:res.data.table.mdl_name, - onum:res.data.table.onum, - pic:res.data.table.pic, - recStat:res.data.table.rec_stat, - recSubmPrsn:res.data.table.rec_subm_prsn, - ssysCd:res.data.table.ssys_cd, - tabClas:res.data.table.tab_clas, - tabCrrctName:res.data.table.tab_crrct_name, - tabDesc:res.data.table.tab_desc, - tabEngName:res.data.table.tab_eng_name, - updTime:res.data.table.upd_time, + applyStatus:data.table.applyStatus, + applyTime:data.table.applyTime, + crrctVerNum:data.table.crrctVerNum, + govFlag:data.table.govFlag, + mdlName:data.table.mdlName, + onum:data.table.onum, + pic:data.table.pic, + recStat:data.table.recStat, + recSubmPrsn:data.table.recSubmPrsn, + ssysCd:data.table.ssysCd, + tabClas:data.table.tabClas, + tabCrrctName:data.table.tabCrrctName, + tabDesc:data.table.tabDesc, + tabEngName:data.table.tabEngName, + updTime:data.table.updTime, tabCnName:table.tabCnName, tabRecNum:table.tabRecNum, tabType:table.tabType, } + let showNewTabClas = [] + if (batchTabClas && batchTabClas.length>0){ + showNewTabClas = JSON.parse(JSON.stringify(batchTabClas)) + if (newTableInfo.value.tabClas && newTableInfo.value.tabClas !== '[]' && newTableInfo.value.tabClas !== 'null'){ + let newTabClas = JSON.parse(newTableInfo.value.tabClas) + for (let i = 0; i < newTabClas.length; i++) { + for (let j = 0; j < showNewTabClas.length; j++) { + if (showNewTabClas[j].clasPriClas === newTabClas[i].clasPriClas + && showNewTabClas[j].clasScdClas === newTabClas[i].clasScdClas + && showNewTabClas[j].clasThreClas === newTabClas[i].clasThreClas + && showNewTabClas[j].clasName === newTabClas[i].clasName + ){ + showNewTabClas[j] = newTabClas[i] + } + } + } + } + }else { + showNewTabClas = JSON.parse(data.table.tabClas) + } + newTableInfo.value.showTabClas = showNewTabClas newColumnList.value = [] oldColumnList.value = [] - oldTableInfo.value = table - if (res.data.column && res.data.column.length > 0){ - for (let i = 0; i < res.data.column.length; i++) { - let col = res.data.column[i] + if (data.column && data.column.length > 0){ + for (let i = 0; i < data.column.length; i++) { + let col = data.column[i] let column = JSON.parse(col.oldColumnData) + let batchColClas = col.batchColClas + let showOldColClas = [] + if (batchColClas && batchColClas.length>0){ + showOldColClas = JSON.parse(JSON.stringify(batchColClas)) + if (column.fldClas && column.fldClas !== '[]' && column.fldClas !== 'null'){ + let oldColClas = JSON.parse(column.fldClas) + for (let i = 0; i < oldColClas.length; i++) { + for (let j = 0; j < showOldColClas.length; j++) { + if (showOldColClas[j].clasPriClas === oldColClas[i].clasPriClas + && showOldColClas[j].clasScdClas === oldColClas[i].clasScdClas + && showOldColClas[j].clasThreClas === oldColClas[i].clasThreClas + && showOldColClas[j].clasName === oldColClas[i].clasName + ){ + showOldColClas[j] = oldColClas[i] + } + } + } + } + }else { + showOldColClas = JSON.parse(column.fldClas) + } + column.showColClas = showOldColClas oldColumnList.value.push(column) + let showNewColClas = [] + if (batchColClas && batchColClas.length>0){ + showNewColClas = batchColClas + if (col.fldClas && col.fldClas !== '[]' && col.fldClas !== 'null'){ + let newColClas = JSON.parse(col.fldClas) + for (let i = 0; i < newColClas.length; i++) { + for (let j = 0; j < showNewColClas.length; j++) { + if (showNewColClas[j].clasPriClas === newColClas[i].clasPriClas + && showNewColClas[j].clasScdClas === newColClas[i].clasScdClas + && showNewColClas[j].clasThreClas === newColClas[i].clasThreClas + && showNewColClas[j].clasName === newColClas[i].clasName + ){ + showNewColClas[j] = newColClas[i] + } + } + } + } + }else { + showNewColClas = JSON.parse(col.fldClas) + } newColumnList.value.push({ - applyStatus:col.apply_status, - applyTime:col.apply_time, - crrctPkFlag:col.crrct_pk_flag, - crrctVerNum:col.crrct_ver_num, - fldClas:col.fld_clas, - fldCrrctName:col.fld_crrct_name, - fldDesc:col.fld_desc, - fldEngName:col.fld_eng_name, - fldNullRate:col.fld_null_rate, - mdlName:col.mdl_name, + applyStatus:col.applyStatus, + applyTime:col.applyTime, + crrctPkFlag:col.crrctPkFlag, + crrctVerNum:col.crrctVerNum, + fldClas:col.fldClas, + fldCrrctName:col.fldCrrctName, + fldDesc:col.fldDesc, + fldEngName:col.fldEngName, + fldNullRate:col.fldNullRate, + mdlName:col.mdlName, onum:col.onum, pic:col.pic, - recStat:col.rec_stat, - recSubmPrsn:col.rec_subm_prsn, - ssysCd:col.ssys_cd, - tabEngName:col.tab_eng_name, - updTime:col.upd_time, + recStat:col.recStat, + recSubmPrsn:col.recSubmPrsn, + ssysCd:col.ssysCd, + tabEngName:col.tabEngName, + updTime:col.updTime, fldCnName:column.fldCnName, fldType:column.fldType, + showColClas: showNewColClas }) } }