From 201879c389d4173159502aac0f6b5fe99668e51c Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Tue, 11 Mar 2025 00:35:36 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=A0=87=E5=87=86=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datastd_controller.py | 12 + .../module_admin/dao/datastd_dao.py | 54 +++- .../module_admin/entity/do/datastd_do.py | 7 +- .../module_admin/entity/vo/datastd_vo.py | 4 +- .../module_admin/service/datastd_service.py | 18 +- .../src/api/datastd/stdcode.js | 15 +- .../src/views/datastd/stdcode/codeItem.vue | 177 +++++++----- .../views/datastd/stdcode/codeItemCommon.vue | 222 +++++++++++++++ .../src/views/datastd/stdcode/codeMap.vue | 269 ++++++++++++++++++ .../src/views/datastd/stdcode/index.vue | 49 +++- 10 files changed, 732 insertions(+), 95 deletions(-) create mode 100644 vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue create mode 100644 vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index cf1bb38..2bcd8c2 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -30,6 +30,18 @@ async def get_std_code_list( logger.info('获取列配置列表成功') return ResponseUtil.success(model_content=code_page_query_result) +@datastdController.get( + '/stdcode/code/maplist', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] +) +async def get_std_code_map_list( + request: Request, + code_page_query: DataStdCodePageQueryModel = Depends(DataStdCodePageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), +): + code_page_query_result = await DataStdService.get_std_code_map_list_services(query_db, code_page_query, is_page=True) + logger.info('获取列配置列表成功') + return ResponseUtil.success(model_content=code_page_query_result) + @datastdController.get( '/stdcode/code/{id}', response_model=DataStdCodeModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] ) diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 73a2161..9876c8f 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -1,8 +1,9 @@ -from sqlalchemy import delete, select, update, desc +from sqlalchemy import delete, select, update, desc,or_ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.do.datastd_do import DataStdCode from module_admin.entity.vo.datastd_vo import DataStdCodeModel from utils.page_util import PageUtil +from sqlalchemy.orm import aliased class DataStdDao: @@ -23,6 +24,11 @@ class DataStdDao: filters = [] if query_object.code_name: filters.append(DataStdCode.code_name.like(f"%{query_object.code_name}%")) + if query_object.code_num: + filters.append( or_( + DataStdCode.code_name.like(f"%{query_object.code_num}%"), + DataStdCode.code_num.like(f"%{query_object.code_num}%") + )) if query_object.code_status: filters.append(DataStdCode.code_status==query_object.code_status) if query_object.sys_id: @@ -48,9 +54,49 @@ class DataStdDao: db, query, query_object.page_num, query_object.page_size, is_page ) return col_list - - - + @classmethod + async def get_std_code_map_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): + # 构建查询条件 + filters = [] + # 系统级代码 + c1 = aliased(DataStdCode) # 当前 codeItem 表(c1) + c2 = aliased(DataStdCode) # 别名 c2 表示父级(parent) + c3 = aliased(DataStdCode) # 别名 c3 表示映射的代码 + c4 = aliased(DataStdCode) # 别名 c4 表示映射父级代码 + if query_object.parent_id: + if query_object.code_type =='sys': + filters.append(c1.parent_id == query_object.parent_id) + else: + filters.append(c3.parent_id == query_object.parent_id) + # 公司级代码 + # 2. 创建别名并进行连接 + filters.append(c1.class_id == 'codeItem') # class_id 为 'codeItem' + # 3. 构建基础查询,使用连接和别名 + query = ( + select( + c2.sys_id.label("target_sys_id"), # 父级系统编号 + c2.sys_name.label("target_sys_name"), # 父级系统名称 + c2.code_num.label("target_code_num"), # 父级代码编号 + c2.code_name.label("target_code_name"), # 父级代码名称 + c1.code_num.label("target_code_num_item"), # 当前 codeItem 的编号 + c1.code_name.label("target_code_name_item"), # 当前 codeItem 的名称 + c4.code_num.label("resource_code_num"), # 映射的父级代码编号 + c4.code_name.label("resource_code_name"), # 映射的父级代码名称 + c3.code_num.label("resource_code_num_item"), # 映射的父级代码编号 + c3.code_name.label("resource_code_name_item") # 映射的父级代码名称 + ) + .select_from(c1) # 从 c1 开始查询 + .join(c2, c1.parent_id == c2.id, isouter=True) # 连接 c2 + .join(c3, c1.code_map_id == c3.id, isouter=True) # 连接 c3 + .join(c4, c3.parent_id == c4.id, isouter=True) # 连接 c4 + .where(*filters) # 使用所有过滤条件 + .order_by(desc(c1.create_time)) # 按照创建时间降序排列 + ) + # 4. 分页逻辑 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return col_list @classmethod async def get_data_code_list_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel): List = ( diff --git a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py index 16c3b33..72541f7 100644 --- a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py @@ -15,12 +15,13 @@ class DataStdCode(Base): update_by = Column(String(20), default='', comment='更新者') update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') code_num = Column(String(50), default=None, comment='标准代码编号') - code_name = Column(String(50), default=None, comment='标准代码值') + code_name = Column(String(200), default=None, comment='标准代码值') code_type = Column(String(10), default=None, comment='标准代码类型(sys:系统级 company:公司级)') code_status = Column(String(1), default=None, comment='代码状态(0:有效 1:无效)') sys_name = Column(String(50), default=None, comment='归属系统') sys_id = Column(Integer, default=None, comment='归属系统Id') class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)') parent_id = Column(String(50), default=None, comment='父id') - - + code_map_id = Column(String(50), default=None,comment='标准代码Id') + code_map_num = Column(String(50), default=None, comment='标准代码编号') + code_map_name = Column(String(200), default=None, comment='标准代码值') diff --git a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py index cf0e117..1b748e5 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py @@ -31,7 +31,9 @@ class DataStdCodeModel(BaseModel): create_time: Optional[datetime] = Field(default=None, description='创建时间') update_by: Optional[str] = Field(default=None, description='更新者') update_time: Optional[datetime] = Field(default=None, description='更新时间') - + code_map_id: Optional[str] = Field(default=None, description='标准代码主键(映射)') + code_map_num: Optional[str] = Field(default=None, description='标准代码编号(映射)') + code_map_name: Optional[str] = Field(default=None, description='标准代码名称(映射)') diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index ab9989d..256033d 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -28,7 +28,20 @@ class DataStdService: col_list_result = await DataStdDao.get_std_code_list(query_db, query_object, is_page) return col_list_result - + @classmethod + async def get_std_code_map_list_services( + cls, query_db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False + ): + """ + 获取列配置列表信息service + + :param query_db: orm对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列配置列表信息对象 + """ + col_list_result = await DataStdDao.get_std_code_map_list(query_db, query_object, is_page) + return col_list_result @classmethod async def get_std_code_by_id_services(cls, query_db: AsyncSession, id: str): """ @@ -199,8 +212,7 @@ class DataStdService: else: # 如果code_item的id不为0,表示是修改操作 # 校验同一个父级下,code_num是否已存在 - existing_code_item = await cls.check_code_unique_services(query_db,code_item) - if existing_code_item: + if not await cls.check_code_unique_services(query_db, code_item): raise ServiceException(message=f"父级代码{code.code_num}下的代码项{code_item.code_num}已存在") # 生成新的UUID,并新增代码项 code_item.id = str(uuid.uuid4()) # 新生成的UUID diff --git a/vue-fastapi-frontend/src/api/datastd/stdcode.js b/vue-fastapi-frontend/src/api/datastd/stdcode.js index 735f0e1..f117e0c 100644 --- a/vue-fastapi-frontend/src/api/datastd/stdcode.js +++ b/vue-fastapi-frontend/src/api/datastd/stdcode.js @@ -9,7 +9,20 @@ export function listStdCode(query) { params: query }) } - +export function listStdCodeCompany() { + return request({ + url: '/default-api/datastd/stdcode/code/list', + method: 'get', + params: {classId:'code',codeType:"company"} + }) +} +export function listStdCodemap(query) { + return request({ + url: '/default-api/datastd/stdcode/code/maplist', + method: 'get', + params: query + }) +} // 查询标准代码项列表 export function listStdCodeItem(query) { return request({ diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue index c70005b..59ba8a6 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue @@ -3,14 +3,14 @@
- + - + @@ -19,7 +19,7 @@ - + - + + + + + + + + +
@@ -131,7 +149,7 @@ {{ scope.row.codeName }} @@ -149,26 +167,38 @@ + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue new file mode 100644 index 0000000..d1e8ee3 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue @@ -0,0 +1,222 @@ + + + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue new file mode 100644 index 0000000..212b89f --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue @@ -0,0 +1,269 @@ + + + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue index ce3e428..63e4843 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue @@ -119,14 +119,16 @@ @@ -152,6 +154,16 @@ 确定 + + + + + + + + + + @@ -161,6 +173,8 @@ import { listStdCode, addStdCode, getStdCode, updateStdCode, deleteStdCode } fro import { datasourcetree } from "@/api/meta/metatask"; import { ElLink } from 'element-plus'; import CodeItem from './codeItem.vue'; // 引入第二个页面组件 +import codeItemCommon from './codeItemCommon.vue'; // 引入第二个页面组件 +import codeMap from './codeMap'; // 引入第二个页面组件 const { proxy } = getCurrentInstance(); @@ -229,13 +243,23 @@ const getList = async () => { total.value = response.total; loading.value = false; }; +const codeVisible = ref(false); +const mapVisible = ref(false); +const codeMapId = ref(null); + // 点击代码名称,弹出第二个对话框并传递数据 const handleCodeClick = (row) => { - selectedRow.value = row; // 保存选中的行数据 - formData.value = { ...row }; // 复制选中的行数据 - dialogVisible2.value = true; // 打开第二个对话框 + codeMapId.value=row.id + console.log(codeMapId.value,"ddddddd") + codeVisible.value = true; + }; +const handleMapCodeClick = (row) => { + codeMapId.value=row.id + console.log(codeMapId.value,"ddddddd2222") + mapVisible.value = true; +}; function handleSelectionChange(selection) { ids.value = selection.map(item => item.id); codeNums.value = selection.map(item => item.codeNum); @@ -300,9 +324,8 @@ const handleRemove = (row) => { const handleSave2 =async () => { const child = proxy.$refs.editCodeDialog; - console.log(Object.getOwnPropertyNames(child)); // 打印所有方法和属性 + let isSuccess= await child.handleSave() - console.log(isSuccess,"ssssssssssss") if(isSuccess){ dialogVisible2.value = false; From 7e24a7cb2fd6dd768abab24bef9efad5e881c780 Mon Sep 17 00:00:00 2001 From: siyaqi Date: Thu, 13 Mar 2025 17:08:20 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=85=83=E6=95=B0=E6=8D=AE=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/meta/metatask/index.vue | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/vue-fastapi-frontend/src/views/meta/metatask/index.vue b/vue-fastapi-frontend/src/views/meta/metatask/index.vue index ae3dd0b..70305e1 100644 --- a/vue-fastapi-frontend/src/views/meta/metatask/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metatask/index.vue @@ -580,6 +580,7 @@ const { meta_task_type, meta_task_acq, meta_task_status,meta_task_at } = proxy.u const activeTab = ref("dataSource"); const loading = ref(true); const ids = ref([]); +const idnames = ref([]); const dsIds = ref([]); const single = ref(true); const isEdit = ref(true); @@ -779,6 +780,7 @@ const handleSelectionChange = (selection) => { chooseRows.value = selection; ids.value = selection.map((item) => item.metataskId); dsIds.value = selection.map((item) => item.dsIds); + idnames.value=selection.map((item) => item.metataskName); singleOne.value = selection.length !== 1 || selectRowData.value.status === "ONLINE"; singleTwo.value = selection.length !== 1 || selectRowData.value.status === "OFFLINE"; single.value = selection.length !== 1; @@ -830,7 +832,8 @@ const handleUpdate = async (row) => { const handleUp = async (row) => { const metataskIds = String(row.metataskId || ids.value); - await proxy.$modal.confirm(`是否确认上线任务编号为"${metataskIds}"的数据项?`); + const metataskNames = row.metataskName || idnames.value; + await proxy.$modal.confirm(`是否确认上线任务 "${metataskNames}"?`); await downOrUpmetatask(metataskIds, "ONLINE"); getList(); proxy.$modal.msgSuccess("上线成功"); @@ -838,7 +841,8 @@ const handleUp = async (row) => { const handleDown = async (row) => { const metataskIds = String(row.metataskId || ids.value); - await proxy.$modal.confirm(`是否确认下线任务编号为"${metataskIds}"的数据项?`); + const metataskNames = row.metataskName || idnames.value; + await proxy.$modal.confirm(`是否确认下线任务 "${metataskNames}"?`); await downOrUpmetatask(metataskIds, "OFFLINE"); getList(); proxy.$modal.msgSuccess("下线成功"); @@ -928,8 +932,9 @@ const handleDelete = async (row) => { } if (isDelete) { const metataskIds = row.metataskId || ids.value; + const metataskNames = row.metataskName || idnames.value; const dsidsVo = row.dsIds || dsIds.value; - await proxy.$modal.confirm(`是否确认删除任务编号为"${metataskIds}"的数据项?`); + await proxy.$modal.confirm(`是否确认删除任务 "${metataskNames}"?`); await delmetatask(metataskIds, dsidsVo); getList(); proxy.$modal.msgSuccess("删除成功"); @@ -954,8 +959,9 @@ const handleDeleteSche = async (row) => { if (isDelete) { const metataskIds = row.metataskId || ids.value; + const metataskNames = row.metataskName || idnames.value; const dsidsVo = row.dsIds || dsIds.value; - await proxy.$modal.confirm(`是否确认删除任务编号为"${metataskIds}"的调度?`); + await proxy.$modal.confirm(`是否确认删除任务 "${metataskNames}"的调度?`); await dsmetataskdelete({processDefinitionCode:dsidsVo.toString(),metaTaskId:metataskIds.toString()}) getList(); proxy.$modal.msgSuccess("删除调度成功"); From 2c6c27f8a96c3dfa1efa64ffa702d312fd511978 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Fri, 14 Mar 2025 01:36:25 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AD=97=E5=85=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datastd_controller.py | 68 ++- .../module_admin/dao/datastd_dao.py | 94 +++- .../module_admin/entity/do/datastd_do.py | 31 +- .../module_admin/entity/vo/datastd_vo.py | 34 ++ .../module_admin/service/datastd_service.py | 149 +++++- .../src/api/datastd/{stdcode.js => std.js} | 56 +++ .../src/views/datastd/stdcode/codeItem.vue | 3 +- .../views/datastd/stdcode/codeItemCommon.vue | 2 +- .../src/views/datastd/stdcode/codeMap.vue | 2 +- .../src/views/datastd/stdcode/index.vue | 4 +- .../src/views/datastd/stddict/AddEditForm.vue | 209 ++++++++ .../src/views/datastd/stddict/codeItem.vue | 446 ++++++++++++++++++ .../views/datastd/stddict/codeItemCommon.vue | 222 +++++++++ .../src/views/datastd/stddict/index.vue | 277 +++++++++++ 14 files changed, 1579 insertions(+), 18 deletions(-) rename vue-fastapi-frontend/src/api/datastd/{stdcode.js => std.js} (69%) create mode 100644 vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue create mode 100644 vue-fastapi-frontend/src/views/datastd/stddict/codeItem.vue create mode 100644 vue-fastapi-frontend/src/views/datastd/stddict/codeItemCommon.vue create mode 100644 vue-fastapi-frontend/src/views/datastd/stddict/index.vue diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 2bcd8c2..173597d 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -6,7 +6,7 @@ from config.get_db import get_db from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.annotation.log_annotation import Log from module_admin.aspect.interface_auth import CheckUserInterfaceAuth -from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdCodePageQueryModel, DeleteDataStdModel +from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdCodePageQueryModel, DeleteDataStdModel,DataStdDictModel,DataStdDictPageQueryModel from module_admin.service.datastd_service import DataStdService from module_admin.service.login_service import LoginService from utils.log_util import logger @@ -138,6 +138,72 @@ async def edit_std_code_with_items( + # ----------------------------------------------------------------数据字典---------------------------------------------------------------------------------------------------- + + +@datastdController.get( + '/stddict/dict/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))] +) +async def get_std_dict_list( + request: Request, + dict_page_query: DataStdDictPageQueryModel = Depends(DataStdDictPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), +): + dict_page_query_result = await DataStdService.get_std_dict_list_services(query_db, dict_page_query, is_page=True) + logger.info('获取列配置列表成功') + return ResponseUtil.success(model_content=dict_page_query_result) +@datastdController.get( + '/stddict/dict/{id}', response_model=DataStdDictModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))] +) +async def query_detail_dict(request: Request, id: str, query_db: AsyncSession = Depends(get_db)): + config_detail_result = await DataStdService.dict_detail_services(query_db, id) + logger.info(f'获取config_id为{id}的信息成功') + + return ResponseUtil.success(data=config_detail_result) +@datastdController.post('/stddict/dict', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:add'))]) +@Log(title='代码管理', business_type=BusinessType.INSERT) +async def add_std_dict( + request: Request, + add_std_dict: DataStdDictModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + + add_std_dict.create_by = current_user.user.user_name + add_std_dict.create_time = datetime.now() + add_std_dict.update_by = current_user.user.user_name + add_std_dict.update_time = datetime.now() + add_std_dict_result = await DataStdService.add_std_dict_services(request, query_db, add_std_dict) + logger.info(add_std_dict_result.message) + return ResponseUtil.success(msg=add_std_dict_result.message) + + +@datastdController.put('/stddict/dict', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:edit'))]) +@Log(title='代码管理', business_type=BusinessType.UPDATE) +async def edit_std_dict( + request: Request, + edit_std_dict: DataStdDictModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + edit_std_dict.update_by = current_user.user.user_name + edit_std_dict.update_time = datetime.now() + edit_std_dict_result = await DataStdService.edit_std_dict_services(request, query_db, edit_std_dict) + logger.info(edit_std_dict_result.message) + return ResponseUtil.success(msg=edit_std_dict_result.message) + + +@datastdController.delete('/stddict/dict/{ids}', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:remove'))]) +@Log(title='代码管理', business_type=BusinessType.DELETE) +async def delete_std_dict( + request: Request, + ids: str, + query_db: AsyncSession = Depends(get_db), +): + delete_std_dict = DeleteDataStdModel(ids =ids) + delete_std_dict_result = await DataStdService.delete_std_dict_services(request, query_db, delete_std_dict) + logger.info(delete_std_dict_result.message) + return ResponseUtil.success(msg=delete_std_dict_result.message) diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 9876c8f..219fa90 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -1,15 +1,14 @@ from sqlalchemy import delete, select, update, desc,or_ from sqlalchemy.ext.asyncio import AsyncSession -from module_admin.entity.do.datastd_do import DataStdCode -from module_admin.entity.vo.datastd_vo import DataStdCodeModel +from module_admin.entity.do.datastd_do import DataStdCode,DataStdDict +from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel from utils.page_util import PageUtil from sqlalchemy.orm import aliased class DataStdDao: - """ - 数据标准模块 - """ + + # ----------------------------------------------------------------数据标准模块---------------------------------------------------------------------------------------------------- @classmethod async def get_std_code_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): @@ -172,8 +171,89 @@ class DataStdDao: # 如果不存在,则检查代码项表中是否存在相同的code_num if not existing_code: - result = await query_db.execute(select(DataStdCodeModel).filter(DataStdCodeModel.code_num == code_num)) + result = await query_db.execute(select(DataStdCode).filter(DataStdCodeModel.code_num == code_num)) existing_code_item = result.scalar_one_or_none() return existing_code_item is not None - return True \ No newline at end of file + return True + # ----------------------------------------------------------------数据字典---------------------------------------------------------------------------------------------------- + @classmethod + async def get_std_dict_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False): + """ + 获取 DataStdDict 的列表信息,支持模糊查询和分页 + :param db: ORM对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列表信息 + """ + # 构建查询条件 + filters = [] + if query_object.dict_name: + filters.append(DataStdDict.dict_name.like(f"%{query_object.dict_name}%")) + if query_object.dict_code: + filters.append(DataStdDict.dict_code.like(f"%{query_object.dict_code}%")) + if query_object.dict_level: + filters.append(DataStdDict.dict_level == query_object.dict_level) + if query_object.sys_id: + filters.append(DataStdDict.sys_id == query_object.sys_id) + if query_object.dict_type: + filters.append(DataStdDict.dict_type == query_object.dict_type) + if query_object.dict_status: + filters.append(DataStdDict.dict_status == query_object.dict_status) + + # 构建查询语句 + query = ( + select(DataStdDict) + .where(*filters) + .order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序 + ) + + # 分页处理 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + + return col_list + @classmethod + async def add_std_dict(cls, db: AsyncSession,model:DataStdDictModel): + col = DataStdDict( + **model.model_dump() + ) + db.add(col) + await db.flush() + return col + + @classmethod + async def delete_std_dict(cls, db: AsyncSession, Id: str): + await db.execute(delete(DataStdDict).where(DataStdDict.id == Id)) + + @classmethod + async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel): + + await db.execute(update(DataStdDict), [update_data]) + await db.flush() + + @classmethod + async def get_std_dict_by_id(cls, db: AsyncSession, Id: str): + col = ( + await db.execute( + select(DataStdDict) + .where(DataStdDict.id == Id) + ) + ).scalars().first() + return col + @classmethod + async def get_data_dict_by_info(cls, db: AsyncSession, query_object: DataStdDictModel): + List = ( + await db.execute( + select(DataStdDict) + .where( + DataStdDict.dict_name == query_object.dict_name if query_object.dict_name else True, + DataStdDict.dict_num == query_object.dict_num if query_object.dict_num else True, + DataStdDict.dict_status == query_object.dict_status if query_object.dict_status else True, + DataStdDict.sys_id == query_object.sys_id if query_object.sys_id else True, + DataStdDict.dict_type == query_object.dict_type if query_object.dict_type else True, + ) + ) + ).scalars().first() + return List \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py index 72541f7..4bfbe5e 100644 --- a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, Integer, String, DateTime, Boolean +from sqlalchemy import Column, Integer, String, DateTime, Boolean,BigInteger from config.database import Base # 数据标准模块相关表 @@ -25,3 +25,32 @@ class DataStdCode(Base): code_map_id = Column(String(50), default=None,comment='标准代码Id') code_map_num = Column(String(50), default=None, comment='标准代码编号') code_map_name = Column(String(200), default=None, comment='标准代码值') + + +class DataStdDict(Base): + """ + 标准字典表 (Standard Code Table) + """ + __tablename__ = 't_datastd_dict' # 表名为 t_datastd_dict + + id = Column(String(50), primary_key=True, comment='标准代码Id') + create_by = Column(String(20), default='', comment='创建者') + create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') + update_by = Column(String(20), default='', comment='更新者') + update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') + dict_num = Column(String(50), default=None, comment='字典编号') + dict_code = Column(String(50), default=None, comment='字典英文名') + dict_name = Column(String(200), default=None, comment='字典中文名') + dict_level = Column(String(10), default=None, comment='字典归属(sys:系统级 company:公司级)') + dict_type = Column(String(1), default=None, comment='字典类型(0:基础数据 1:指标数据)') + sys_name = Column(String(50), default=None, comment='归属系统') + sys_id = Column(Integer, default=None, comment='归属系统Id') + dict_menu = Column(String(200), default=None, comment='字典业务定义') + data_type = Column(String(20), default=None, comment='数据类型') + std_code = Column(String(50), default=None, comment='数据标准编号') + std_name = Column(String(50), default=None, comment='数据标准名称') + dict_status = Column(String(1), default=None, comment='字典状态(1:有效 0:无效)') + buss_dept_id = Column(BigInteger, default=None, comment='业务认责部门') + tech_dept_id = Column(BigInteger, default=None, comment='技术认责部门') + buss_user = Column(String(20), default=None, comment='业务认责人员') + tech_user = Column(String(20), default=None, comment='技术认责人员') diff --git a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py index 1b748e5..1f2a0a7 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py @@ -53,3 +53,37 @@ class DeleteDataStdModel(BaseModel): model_config = ConfigDict(alias_generator=to_camel) ids: str = Field(description='需要删除的参数主键') +class DataStdDictModel(BaseModel): + """ + 标准字典表对应Pydantic模型 (Standard Dictionary Table Pydantic Model) + """ + model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) + + id: Optional[str] = Field(default=None, description='标准字典主键') + create_by: Optional[str] = Field(default='', description='创建者') + create_time: Optional[datetime] = Field(default=None, description='创建时间') + update_by: Optional[str] = Field(default='', description='更新者') + update_time: Optional[datetime] = Field(default=None, description='更新时间') + dict_num: Optional[str] = Field(default=None, description='字典编号') + dict_code: Optional[str] = Field(default=None, description='字典英文名') + dict_name: Optional[str] = Field(default=None, description='字典中文名') + dict_level: Optional[str] = Field(default=None, description='字典归属(sys:系统级 company:公司级)') + dict_type: Optional[str] = Field(default=None, description='字典类型(0:基础数据 1:指标数据)') + sys_name: Optional[str] = Field(default=None, description='归属系统') + sys_id: Optional[int] = Field(default=None, description='归属系统Id') + dict_menu: Optional[str] = Field(default=None, description='字典业务定义') + data_type: Optional[str] = Field(default=None, description='数据类型') + std_code: Optional[str] = Field(default=None, description='数据标准编号') + std_name: Optional[str] = Field(default=None, description='数据标准名称') + dict_status: Optional[str] = Field(default=None, description='字典状态(1:有效 0:无效)') + buss_dept_id: Optional[int] = Field(default=None, description='业务认责部门') + tech_dept_id: Optional[int] = Field(default=None, description='技术认责部门') + buss_user: Optional[str] = Field(default=None, description='业务认责人员') + tech_user: Optional[str] = Field(default=None, description='技术认责人员') +@as_query +class DataStdDictPageQueryModel(DataStdDictModel): + """ + 元数据任务分页查询模型 + """ + page_num: int = Field(default=1, description='当前页码') + page_size: int = Field(default=10, description='每页记录数') \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 256033d..b04b3cc 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from exceptions.exception import ServiceException from module_admin.dao.datastd_dao import DataStdDao from module_admin.entity.vo.common_vo import CrudResponseModel -from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel +from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel from utils.common_util import CamelCaseUtil import uuid from config.constant import CommonConstant @@ -246,4 +246,149 @@ class DataStdService: ) if dict_type and dict_type.id != id: return CommonConstant.NOT_UNIQUE - return CommonConstant.UNIQUE \ No newline at end of file + return CommonConstant.UNIQUE + # ----------------------------------------------------------------数据字典---------------------------------------------------------------------------------------------------- + + @classmethod + async def get_std_dict_list_services( + cls, query_db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False + ): + """ + 获取列配置列表信息service + + :param query_db: orm对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列配置列表信息对象 + """ + col_list_result = await DataStdDao.get_std_dict_list(query_db, query_object, is_page) + return col_list_result + + + @classmethod + async def get_std_dict_by_id_services(cls, query_db: AsyncSession, id: str): + """ + 获取列配置详细信息service + + :param query_db: orm对象 + :param id: 列配置ID + :return: 列配置详细信息对象 + """ + col = await DataStdDao.get_std_dict_by_id(query_db, id) + if col: + result = DataStdDictModel(**CamelCaseUtil.transform_result(col)) + else: + result = DataStdDictModel(**dict()) + return result + + + @classmethod + async def add_std_dict_services(cls, request: Request, query_db: AsyncSession, page_object: DataStdDictModel): + """ + 新增列配置服务 + + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 新增的列配置对象 + :return: 新增列配置校验结果 + """ + try: + if not await cls.check_dict_unique_services(query_db, page_object): + raise ServiceException(message=f"数据字典{page_object.dict_num}已存在") + # 创建新的 page_object 实例,避免修改原始对象 + new_page_object = DataStdDictModel(**page_object.model_dump(by_alias=True)) + new_page_object.dict_status="0" + new_page_object.id=str(uuid.uuid4()) + # 调用 DAO 方法插入数据 + await DataStdDao.add_std_dict(query_db, new_page_object) + return CrudResponseModel(is_success=True, message='新增数据字典成功') + except Exception as e: + await query_db.rollback() + raise e + + + @classmethod + async def dict_detail_services(cls, query_db: AsyncSession, col: str): + """ + 获取参数配置详细信息service + + :param query_db: orm对象 + :param config_id: 参数配置id + :return: 参数配置id对应的信息 + """ + config = await DataStdDao.get_std_dict_by_id(query_db, col) + if config: + result = DataStdDictModel(**CamelCaseUtil.transform_result(config)) + else: + result = DataStdDictModel(**dict()) + + return result + @classmethod + async def edit_std_dict_services(cls, request: Request, query_db: AsyncSession, page_object: DataStdDictModel): + """ + 编辑列配置服务 + + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 编辑的列配置对象 + :return: 编辑列配置校验结果 + """ + if not await cls.check_dict_unique_services(query_db, page_object): + raise ServiceException(message=f"数据字典编号:{page_object.dict_num}已存在") + edit_col = page_object.model_dump(exclude_unset=True) + col_info = await cls.get_std_dict_by_id_services(query_db, page_object.id) + if col_info: + try: + await DataStdDao.update_std_dict(query_db, edit_col) + return CrudResponseModel(is_success=True, message='编辑数据字典成功') + except Exception as e: + await query_db.rollback() + raise e + else: + raise ServiceException(message=f'数据字典{page_object.id}不存在') + + + @classmethod + async def delete_std_dict_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteDataStdModel): + """ + 删除列配置服务 + :param request: Request对象 + :param query_db: orm对象 + :param page_object: 删除列配置对象 + :return: 删除列配置校验结果 + """ + if page_object.ids: + col_id_list = page_object.ids.split(',') + try: + for col_id in col_id_list: + col_info = await cls.get_std_dict_by_id_services(query_db, col_id) + if col_info: + # 校验不能删除的系统内置列 + await DataStdDao.delete_std_dict(query_db, col_id) + await query_db.commit() + + + return CrudResponseModel(is_success=True, message='删除数据字典成功') + except Exception as e: + await query_db.rollback() + raise e + else: + raise ServiceException(message='传入数据字典ID为空') + @classmethod + async def check_dict_unique_services(cls, query_db: AsyncSession, page_object: DataStdDictModel): + """ + 校验字典类型称是否唯一service + + :param query_db: orm对象 + :param page_object: 字典类型对象 + :return: 校验结果 + """ + id ='-1' if page_object.id is None else page_object.id + codemodel=DataStdDictModel() + codemodel.dict_num=page_object.dict_num + + dict_type = await DataStdDao.get_data_dict_by_info(query_db, codemodel + ) + if dict_type and dict_type.id != id: + return CommonConstant.NOT_UNIQUE + return CommonConstant.UNIQUE \ No newline at end of file diff --git a/vue-fastapi-frontend/src/api/datastd/stdcode.js b/vue-fastapi-frontend/src/api/datastd/std.js similarity index 69% rename from vue-fastapi-frontend/src/api/datastd/stdcode.js rename to vue-fastapi-frontend/src/api/datastd/std.js index f117e0c..dc8d968 100644 --- a/vue-fastapi-frontend/src/api/datastd/stdcode.js +++ b/vue-fastapi-frontend/src/api/datastd/std.js @@ -116,6 +116,62 @@ export function deleteStdCodeItems(rowIds) { }) } +// ------------------------------------------------------------数据词典----------------------------------------------------------------- +export function listStdDict(query) { + return request({ + url: '/default-api/datastd/stddict/dict/list', + method: 'get', + params: query + }) +} + + + +// 查询标准代码详情 +export function getStdDict(colId) { + return request({ + url: '/default-api/datastd/stddict/dict/' + parseStrEmpty(colId), + method: 'get' + }) +} + + +// 新增标准代码 +export function addStdDict(data) { + return request({ + url: '/default-api/datastd/stddict/dict', + method: 'post', + data: data + }) +} + +// 修改标准代码 +export function updateStdDict(data) { + return request({ + url: '/default-api/datastd/stddict/dict', + method: 'put', + data: data + }) +} + + +// 删除标准代码 +export function deleteStdDict(colId) { + return request({ + url: '/default-api/datastd/stddict/dict/' + colId, + method: 'delete' + }) +} + + + +// 批量删除标准代码 +export function deleteStdDicts(colIds) { + return request({ + url: '/default-api/datastd/stddict/dict/' + colIds, + method: 'delete' + }) +} diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue index 59ba8a6..8099674 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue @@ -197,7 +197,7 @@ diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/codeItem.vue b/vue-fastapi-frontend/src/views/datastd/stddict/codeItem.vue new file mode 100644 index 0000000..59ba8a6 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stddict/codeItem.vue @@ -0,0 +1,446 @@ + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/codeItemCommon.vue b/vue-fastapi-frontend/src/views/datastd/stddict/codeItemCommon.vue new file mode 100644 index 0000000..d1e8ee3 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stddict/codeItemCommon.vue @@ -0,0 +1,222 @@ + + + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/index.vue b/vue-fastapi-frontend/src/views/datastd/stddict/index.vue new file mode 100644 index 0000000..8714ab7 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stddict/index.vue @@ -0,0 +1,277 @@ + + + + + From 27effa756363d0c40fc8e1dae8b7d4430e0ad8b1 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Fri, 14 Mar 2025 01:40:03 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=88=86=E9=A1=B5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue b/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue index 2f57cc4..262f1f7 100644 --- a/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue +++ b/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue @@ -160,7 +160,7 @@ watch(() => props.visible, (newVal) => { }); function getList() { - listUser({pageSize:1,pageNumber:1000}).then(res => { + listUser({pageSize:1000,pageNum:1}).then(res => { userList.value = res.rows; }); }; From 4be859d7dcc2b68a3f0f6f43bf303dd19cf5f4cd Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Sat, 15 Mar 2025 01:10:18 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AF=8D=E5=85=B8?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/dao/datastd_dao.py | 30 ++++++++++++++++-- .../module_admin/service/datastd_service.py | 4 +-- .../src/views/datastd/stddict/AddEditForm.vue | 6 +++- .../src/views/datastd/stddict/index.vue | 31 ++++++++++++++----- 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 219fa90..ba3bce3 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -2,6 +2,7 @@ from sqlalchemy import delete, select, update, desc,or_ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.do.datastd_do import DataStdCode,DataStdDict from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel +from module_admin.entity.do.dept_do import SysDept from utils.page_util import PageUtil from sqlalchemy.orm import aliased @@ -200,10 +201,35 @@ class DataStdDao: filters.append(DataStdDict.dict_type == query_object.dict_type) if query_object.dict_status: filters.append(DataStdDict.dict_status == query_object.dict_status) - + c1 = aliased(SysDept) # 技术部门 + c2 = aliased(SysDept) # 业务部门 # 构建查询语句 query = ( - select(DataStdDict) + select(DataStdDict.id, + DataStdDict.create_by, + DataStdDict.create_time, + DataStdDict.update_by, + DataStdDict.update_time, + DataStdDict.dict_num, + DataStdDict.dict_code, + DataStdDict.dict_name, + DataStdDict.dict_level, + DataStdDict.dict_type, + DataStdDict.sys_name, + DataStdDict.sys_id, + DataStdDict.dict_menu, + DataStdDict.data_type, + DataStdDict.std_code, + DataStdDict.std_name, + DataStdDict.dict_status, + DataStdDict.buss_dept_id, + DataStdDict.tech_dept_id, + DataStdDict.buss_user, + DataStdDict.tech_user, + c1.dept_name.label("tech_dept_name"), + c2.dept_name.label("buss_dept_name")).select_from(DataStdDict) + .join(c1,c1.dept_id ==DataStdDict.tech_dept_id, isouter=True) + .join(c2,c2.dept_id ==DataStdDict.buss_dept_id, isouter=True) .where(*filters) .order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序 ) diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index b04b3cc..33b7fec 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -72,7 +72,7 @@ class DataStdService: try: # 创建新的 page_object 实例,避免修改原始对象 new_page_object = DataStdCodeModel(**page_object.model_dump(by_alias=True)) - new_page_object.code_status="0" + new_page_object.code_status="1" # 调用 DAO 方法插入数据 await DataStdDao.add_std_code(query_db, new_page_object) return CrudResponseModel(is_success=True, message='新增标准代码成功') @@ -297,7 +297,7 @@ class DataStdService: raise ServiceException(message=f"数据字典{page_object.dict_num}已存在") # 创建新的 page_object 实例,避免修改原始对象 new_page_object = DataStdDictModel(**page_object.model_dump(by_alias=True)) - new_page_object.dict_status="0" + new_page_object.dict_status="1" new_page_object.id=str(uuid.uuid4()) # 调用 DAO 方法插入数据 await DataStdDao.add_std_dict(query_db, new_page_object) diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue b/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue index 262f1f7..1054473 100644 --- a/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue +++ b/vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue @@ -135,7 +135,11 @@ const props = defineProps({ const formRules = ref({ dictLevel: [{ required: true, message: '请选择字典归属', trigger: 'blur' }], dictType: [{ required: true, message: '请选择数据字典类型', trigger: 'blur' }], - dictNum: [{ required: true, message: '请输入数据字典编号', trigger: 'blur' }] + bussDeptId: [{ required: true, message: '请选择业务认责部门', trigger: 'blur' }], + techDeptId: [{ required: true, message: '请选择技术认责部门', trigger: 'blur' }], + dictNum: [{ required: true, message: '请输入数据字典编号', trigger: 'blur' }], + bussUser: [{ required: true, message: '请输入业务认责人', trigger: 'blur' }], + techUser: [{ required: true, message: '请输入技术认责人', trigger: 'blur' }], }); const showSys = ref(false); const emit = defineEmits(['update:visible', 'refresh']); diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/index.vue b/vue-fastapi-frontend/src/views/datastd/stddict/index.vue index 8714ab7..67a1be1 100644 --- a/vue-fastapi-frontend/src/views/datastd/stddict/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/stddict/index.vue @@ -80,19 +80,34 @@ - - - + + + + + + + - - + + + + - + @@ -125,6 +140,7 @@ import { listStdDict, addStdDict, getStdDict, updateStdDict, deleteStdDict } fro import { datasourcetree } from "@/api/meta/metatask"; import AddEditForm from './AddEditForm.vue'; const { proxy } = getCurrentInstance(); +const { std_code_status,std_code_appr } = proxy.useDict("std_code_status","std_code_appr"); const queryParams = ref({ dictNum: '', @@ -218,7 +234,8 @@ const handleAdd = () => { isEdit.value = false; selectedRow.value={ dictLevel: 'company', - sysId: undefined, + sysId: 10000, + sysName: "公司级", dictType: '', dictNum: '', dictCode: '',