Browse Source

智能问答配置页面

master
xueyinfei 3 months ago
parent
commit
aa187d29f3
  1. 14
      .idea/inspectionProfiles/Project_Default.xml
  2. 38
      vue-fastapi-backend/module_admin/controller/cdplb_controller.py
  3. 38
      vue-fastapi-backend/module_admin/controller/fccbd_controller.py
  4. 55
      vue-fastapi-backend/module_admin/controller/sscf_controller.py
  5. 41
      vue-fastapi-backend/module_admin/controller/tsmcb_controller.py
  6. 41
      vue-fastapi-backend/module_admin/controller/vecset_controller.py
  7. 53
      vue-fastapi-backend/module_admin/dao/cdplb_dao.py
  8. 53
      vue-fastapi-backend/module_admin/dao/fccbd_dao.py
  9. 96
      vue-fastapi-backend/module_admin/dao/sscf_dao.py
  10. 53
      vue-fastapi-backend/module_admin/dao/tsmcb_dao.py
  11. 54
      vue-fastapi-backend/module_admin/dao/vecset_dao.py
  12. 123
      vue-fastapi-backend/module_admin/entity/do/dataint_do.py
  13. 127
      vue-fastapi-backend/module_admin/entity/vo/dataint_vo.py
  14. 54
      vue-fastapi-backend/module_admin/service/cdplb_service.py
  15. 54
      vue-fastapi-backend/module_admin/service/fccbd_service.py
  16. 96
      vue-fastapi-backend/module_admin/service/sscf_service.py
  17. 54
      vue-fastapi-backend/module_admin/service/tsmcb_service.py
  18. 54
      vue-fastapi-backend/module_admin/service/vecset_service.py
  19. 10
      vue-fastapi-backend/server.py
  20. 26
      vue-fastapi-frontend/src/api/dataint/cdplb.js
  21. 26
      vue-fastapi-frontend/src/api/dataint/fccbd.js
  22. 41
      vue-fastapi-frontend/src/api/dataint/sscf.js
  23. 26
      vue-fastapi-frontend/src/api/dataint/tsmcb.js
  24. 26
      vue-fastapi-frontend/src/api/dataint/vecset.js
  25. 271
      vue-fastapi-frontend/src/views/dataint/cypz/cdplb.vue
  26. 263
      vue-fastapi-frontend/src/views/dataint/cypz/fccbd.vue
  27. 281
      vue-fastapi-frontend/src/views/dataint/cypz/tsmcb.vue
  28. 451
      vue-fastapi-frontend/src/views/dataint/sscf/index.vue
  29. 473
      vue-fastapi-frontend/src/views/dataint/vecset/index.vue

14
.idea/inspectionProfiles/Project_Default.xml

@ -0,0 +1,14 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N802" />
<option value="N803" />
<option value="N806" />
</list>
</option>
</inspection_tool>
</profile>
</component>

38
vue-fastapi-backend/module_admin/controller/cdplb_controller.py

@ -0,0 +1,38 @@
from typing import List
from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.get_db import get_db
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import CdplbPageObject, SaveCdplbModel
from module_admin.service.login_service import LoginService
from module_admin.service.cdplb_service import CdplbService
from utils.response_util import ResponseUtil
cdplbController = APIRouter(prefix='/dataint/cdplb', dependencies=[Depends(LoginService.get_current_user)])
@cdplbController.get("/list")
async def get_tsmcb_list(request: Request, cdplb_query: CdplbPageObject = Depends(CdplbPageObject.as_query),
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await CdplbService.get_cdplb_list_services(query_db, cdplb_query, current_user)
return ResponseUtil.success(data=meta_query_result)
@cdplbController.post("/save")
async def save_tsmcb(request: Request,
saveCdplbModel: SaveCdplbModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await CdplbService.save_cdplb(query_db, saveCdplbModel, current_user)
return ResponseUtil.success(msg=result.message)
@cdplbController.post("/delete")
async def delete_tsmcb(request: Request,
array: List[str],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await CdplbService.delete_cdplb(query_db, array)
return ResponseUtil.success(msg=result.message)

38
vue-fastapi-backend/module_admin/controller/fccbd_controller.py

@ -0,0 +1,38 @@
from typing import List
from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.get_db import get_db
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import FccbdPageObject, SaveFccbdModel
from module_admin.service.login_service import LoginService
from module_admin.service.fccbd_service import FccbdService
from utils.response_util import ResponseUtil
fccbdController = APIRouter(prefix='/dataint/fccbd', dependencies=[Depends(LoginService.get_current_user)])
@fccbdController.get("/list")
async def get_tsmcb_list(request: Request, fccbd_query: FccbdPageObject = Depends(FccbdPageObject.as_query),
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await FccbdService.get_fccbd_list_services(query_db, fccbd_query, current_user)
return ResponseUtil.success(data=meta_query_result)
@fccbdController.post("/save")
async def save_tsmcb(request: Request,
saveFccbdModel: SaveFccbdModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await FccbdService.save_fccbd(query_db, saveFccbdModel, current_user)
return ResponseUtil.success(msg=result.message)
@fccbdController.post("/delete")
async def delete_tsmcb(request: Request,
array: List[str],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await FccbdService.delete_fccbd(query_db, array)
return ResponseUtil.success(msg=result.message)

55
vue-fastapi-backend/module_admin/controller/sscf_controller.py

@ -0,0 +1,55 @@
from typing import List
from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.get_db import get_db
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import SscfPageObject, SaveSscfModel, TreeOperateModel
from module_admin.service.login_service import LoginService
from module_admin.service.sscf_service import SscfService
from utils.response_util import ResponseUtil
sscfController = APIRouter(prefix='/dataint/sscf', dependencies=[Depends(LoginService.get_current_user)])
@sscfController.get("/list")
async def get_tsmcb_list(request: Request, sscf_query: SscfPageObject = Depends(SscfPageObject.as_query),
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await SscfService.get_sscf_list_services(query_db, sscf_query, current_user)
return ResponseUtil.success(data=meta_query_result)
@sscfController.get("/tree")
async def get_tsmcb_list(request: Request,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await SscfService.get_dasset_tree_services(query_db, current_user)
return ResponseUtil.success(data=meta_query_result)
@sscfController.post("/tree")
async def get_tsmcb_list(request: Request,
treeOperate: TreeOperateModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await SscfService.save_dasset_tree_services(query_db, treeOperate, current_user)
return ResponseUtil.success(data=meta_query_result)
@sscfController.post("/save")
async def save_tsmcb(request: Request,
saveSscfModel: SaveSscfModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await SscfService.save_sscf(query_db, saveSscfModel, current_user)
return ResponseUtil.success(msg=result.message)
@sscfController.post("/delete")
async def delete_tsmcb(request: Request,
array: List[str],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await SscfService.delete_sscf(query_db, array)
return ResponseUtil.success(msg=result.message)

41
vue-fastapi-backend/module_admin/controller/tsmcb_controller.py

@ -0,0 +1,41 @@
from typing import List
from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.get_db import get_db
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import TsmcbPageObject, SaveTsmcbModel
from module_admin.service.login_service import LoginService
from module_admin.service.tsmcb_service import TsmcbService
from utils.response_util import ResponseUtil
tsmcbController = APIRouter(prefix='/dataint/tsmcb', dependencies=[Depends(LoginService.get_current_user)])
@tsmcbController.get("/list")
async def get_tsmcb_list(request: Request, tsmcb_query: TsmcbPageObject = Depends(TsmcbPageObject.as_query),
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await TsmcbService.get_tsmcb_list_services(query_db, tsmcb_query, current_user)
return ResponseUtil.success(data=meta_query_result)
@tsmcbController.post("/save")
async def save_tsmcb(request: Request,
saveTsmcbModel: SaveTsmcbModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await TsmcbService.save_tsmcb(query_db, saveTsmcbModel, current_user)
return ResponseUtil.success(msg=result.message)
@tsmcbController.post("/delete")
async def delete_tsmcb(request: Request,
array: List[str],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await TsmcbService.delete_tsmcb(query_db, array)
return ResponseUtil.success(msg=result.message)

41
vue-fastapi-backend/module_admin/controller/vecset_controller.py

@ -0,0 +1,41 @@
from typing import List
from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.get_db import get_db
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import VecsetPageObject, SaveVecsetModel
from module_admin.service.login_service import LoginService
from module_admin.service.vecset_service import VecsetService
from utils.response_util import ResponseUtil
vecsetController = APIRouter(prefix='/dataint/vecset', dependencies=[Depends(LoginService.get_current_user)])
@vecsetController.get("/list")
async def get_vecset_list(request: Request, vecset_query: VecsetPageObject = Depends(VecsetPageObject.as_query),
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
meta_query_result = await VecsetService.get_vecset_list_services(query_db, vecset_query, current_user)
return ResponseUtil.success(data=meta_query_result)
@vecsetController.post("/save")
async def save_Vecset(request: Request,
saveVecsetModel: SaveVecsetModel,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await VecsetService.save_vecset(query_db, saveVecsetModel, current_user)
return ResponseUtil.success(msg=result.message)
@vecsetController.post("/delete")
async def delete_vecset(request: Request,
array: List[str],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
result = await VecsetService.delete_vecset(query_db, array)
return ResponseUtil.success(msg=result.message)

53
vue-fastapi-backend/module_admin/dao/cdplb_dao.py

@ -0,0 +1,53 @@
from typing import List
from sqlalchemy import desc, delete, func, select, update
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import CdplbPageObject
from module_admin.entity.do.dataint_do import SysCdplb
from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join
from utils.page_util import PageUtil
class CdplbDao:
"""
菜单管理模块数据库操作层
"""
@classmethod
async def get_cdplb_list(cls, db: AsyncSession, cdplb_query: CdplbPageObject):
query = (
select(SysCdplb).where(
SysCdplb.bath_obj_tabName == cdplb_query.bath_obj_tabName if cdplb_query.bath_obj_tabName else True,
SysCdplb.bath_obj_fldName == cdplb_query.bath_obj_fldName if cdplb_query.bath_obj_fldName else True,
SysCdplb.pos_name == cdplb_query.pos_name if cdplb_query.pos_name else True,
SysCdplb.status == cdplb_query.status if cdplb_query.status else True
).distinct()
)
query_result = await PageUtil.paginate(db, query, cdplb_query.page_num, cdplb_query.page_size, True)
return query_result
@classmethod
async def insert_cdplb(cls, db: AsyncSession, sysCdplb: SysCdplb):
db.add(sysCdplb)
await db.flush()
return sysCdplb
@classmethod
async def get_cdplb_by_id(cls, db: AsyncSession, onum: str):
result = (
(
await db.execute(
select(SysCdplb).where(SysCdplb.onum == onum).distinct()
)
).scalars().first()
)
return result
@classmethod
async def update_cdplb(cls, db: AsyncSession, saveObj: dict):
await db.execute(update(SysCdplb), [saveObj])
@classmethod
async def delete_cdplb(cls, db: AsyncSession, array: List[str]):
await db.execute(delete(SysCdplb).where(SysCdplb.onum.in_(array)))

53
vue-fastapi-backend/module_admin/dao/fccbd_dao.py

@ -0,0 +1,53 @@
from typing import List
from sqlalchemy import desc, delete, func, select, update
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import FccbdPageObject
from module_admin.entity.do.dataint_do import SysFccbd
from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join
from utils.page_util import PageUtil
class FccbdDao:
"""
菜单管理模块数据库操作层
"""
@classmethod
async def get_fccbd_list(cls, db: AsyncSession, fccbd_query: FccbdPageObject):
query = (
select(SysFccbd).where(
SysFccbd.pos == fccbd_query.pos if fccbd_query.pos else True,
SysFccbd.pos_name == fccbd_query.pos_name if fccbd_query.pos_name else True,
SysFccbd.term == fccbd_query.term if fccbd_query.term else True,
SysFccbd.status == fccbd_query.status if fccbd_query.status else True
).distinct()
)
query_result = await PageUtil.paginate(db, query, fccbd_query.page_num, fccbd_query.page_size, True)
return query_result
@classmethod
async def insert_fccbd(cls, db: AsyncSession, sysFccbd: SysFccbd):
db.add(sysFccbd)
await db.flush()
return sysFccbd
@classmethod
async def get_fccbd_by_id(cls, db: AsyncSession, onum: str):
result = (
(
await db.execute(
select(SysFccbd).where(SysFccbd.onum == onum).distinct()
)
).scalars().first()
)
return result
@classmethod
async def update_fccbd(cls, db: AsyncSession, saveObj: dict):
await db.execute(update(SysFccbd), [saveObj])
@classmethod
async def delete_fccbd(cls, db: AsyncSession, array: List[str]):
await db.execute(delete(SysFccbd).where(SysFccbd.onum.in_(array)))

96
vue-fastapi-backend/module_admin/dao/sscf_dao.py

@ -0,0 +1,96 @@
import uuid
from typing import List
from sqlalchemy import desc, delete, func, select, update
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import SscfPageObject, TreeOperateModel
from module_admin.entity.do.dataint_do import SysSscf, SysDassetTree
from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join
from utils.page_util import PageUtil
class SscfDao:
"""
菜单管理模块数据库操作层
"""
@classmethod
async def get_sscf_list(cls, db: AsyncSession, sscf_query: SscfPageObject):
query = (
select(SysSscf).where(
SysSscf.keyword == sscf_query.keyword if sscf_query.keyword else True,
SysSscf.type == sscf_query.type if sscf_query.type else True,
SysSscf.dasset_id == sscf_query.dasset_id if sscf_query.dasset_id else True,
SysSscf.status == sscf_query.status if sscf_query.status else True
).distinct()
)
query_result = await PageUtil.paginate(db, query, sscf_query.page_num, sscf_query.page_size, True)
return query_result
@classmethod
async def insert_sscf(cls, db: AsyncSession, sysSscf: SysSscf):
db.add(sysSscf)
await db.flush()
return sysSscf
@classmethod
async def get_sscf_by_id(cls, db: AsyncSession, onum: str):
result = (
(
await db.execute(
select(SysSscf).where(SysSscf.onum == onum).distinct()
)
).scalars().first()
)
return result
@classmethod
async def update_sscf(cls, db: AsyncSession, saveObj: dict):
await db.execute(update(SysSscf), [saveObj])
@classmethod
async def delete_sscf(cls, db: AsyncSession, array: List[str]):
await db.execute(delete(SysSscf).where(SysSscf.onum.in_(array)))
@classmethod
async def get_dasset_tree(cls, db: AsyncSession):
result = (
(
await db.execute(
select(SysDassetTree).distinct()
)
).scalars().all()
)
return result
@classmethod
async def get_dasset_tree_by_code(cls, db: AsyncSession, code: str):
result = (
(
await db.execute(
select(SysDassetTree).where(SysDassetTree.dasset_code == code).distinct()
)
).scalars().first()
)
return result
@classmethod
async def insert_dasset_tree(cls, db: AsyncSession, treeOperate: TreeOperateModel):
tree = SysDassetTree()
tree.onum = uuid.uuid4()
tree.dasset_code = treeOperate.dasset_code
tree.dasset_name = treeOperate.dasset_name
tree.parent_code = "1"
db.add(tree)
await db.flush()
return tree
@classmethod
async def save_dasset_tree(cls, db: AsyncSession, treeOperate: dict):
await db.execute(update(SysDassetTree), [treeOperate])
@classmethod
async def delete_dasset_tree(cls, db: AsyncSession, onum: str):
await db.execute(delete(SysDassetTree).where(SysDassetTree.onum == onum))

53
vue-fastapi-backend/module_admin/dao/tsmcb_dao.py

@ -0,0 +1,53 @@
from typing import List
from sqlalchemy import desc, delete, func, select, update
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import TsmcbPageObject
from module_admin.entity.do.dataint_do import SysTsmcb
from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join
from utils.page_util import PageUtil
class TsmcbDao:
"""
菜单管理模块数据库操作层
"""
@classmethod
async def get_tsmcb_list(cls, db: AsyncSession, tsmcb_query: TsmcbPageObject):
query = (
select(SysTsmcb).where(
SysTsmcb.pos == tsmcb_query.pos if tsmcb_query.pos else True,
SysTsmcb.type == tsmcb_query.type if tsmcb_query.type else True,
SysTsmcb.std_rpl_str == tsmcb_query.std_rpl_str if tsmcb_query.std_rpl_str else True,
SysTsmcb.status == tsmcb_query.status if tsmcb_query.status else True
).distinct()
)
query_result = await PageUtil.paginate(db, query, tsmcb_query.page_num, tsmcb_query.page_size, True)
return query_result
@classmethod
async def insert_tsmcb(cls, db: AsyncSession, sysTsmcb: SysTsmcb):
db.add(sysTsmcb)
await db.flush()
return sysTsmcb
@classmethod
async def get_tsmcb_by_id(cls, db: AsyncSession, onum: str):
result = (
(
await db.execute(
select(SysTsmcb).where(SysTsmcb.onum == onum).distinct()
)
).scalars().first()
)
return result
@classmethod
async def update_tsmcb(cls, db: AsyncSession, saveObj: dict):
await db.execute(update(SysTsmcb), [saveObj])
@classmethod
async def delete_tsmcb(cls, db: AsyncSession, array: List[str]):
await db.execute(delete(SysTsmcb).where(SysTsmcb.onum.in_(array)))

54
vue-fastapi-backend/module_admin/dao/vecset_dao.py

@ -0,0 +1,54 @@
from typing import List
from sqlalchemy import desc, delete, func, select, update
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import VecsetPageObject
from module_admin.entity.do.dataint_do import SysVecset
from sqlalchemy import select, text, cast, Integer, and_, or_, outerjoin, func, join
from utils.page_util import PageUtil
class VecsetDao:
"""
菜单管理模块数据库操作层
"""
@classmethod
async def get_vecset_list(cls, db: AsyncSession, vecset_query: VecsetPageObject):
query = (
select(SysVecset).where(
SysVecset.dasset_id == vecset_query.dasset_id if vecset_query.dasset_id else True,
SysVecset.stab_name == vecset_query.stab_name if vecset_query.stab_name else True,
SysVecset.squery == vecset_query.squery if vecset_query.squery else True,
SysVecset.sanal_plan == vecset_query.sanal_plan if vecset_query.sanal_plan else True,
SysVecset.status == vecset_query.status if vecset_query.status else True
).distinct()
)
query_result = await PageUtil.paginate(db, query, vecset_query.page_num, vecset_query.page_size, True)
return query_result
@classmethod
async def insert_vecset(cls, db: AsyncSession, sysVecset: SysVecset):
db.add(sysVecset)
await db.flush()
return sysVecset
@classmethod
async def get_vecset_by_id(cls, db: AsyncSession, onum: str):
result = (
(
await db.execute(
select(SysVecset).where(SysVecset.onum == onum).distinct()
)
).scalars().first()
)
return result
@classmethod
async def update_vecset(cls, db: AsyncSession, saveObj: dict):
await db.execute(update(SysVecset), [saveObj])
@classmethod
async def delete_vecset(cls, db: AsyncSession, array: List[str]):
await db.execute(delete(SysVecset).where(SysVecset.onum.in_(array)))

123
vue-fastapi-backend/module_admin/entity/do/dataint_do.py

@ -0,0 +1,123 @@
from sqlalchemy import Column, Float, Integer, String, Text, DateTime, Boolean, ForeignKey, UniqueConstraint, Index, \
text
from config.database import Base
from datetime import datetime
class SysTsmcb(Base):
"""
词性文本替换表
"""
__tablename__ = 't_pos_txt_rpl'
onum = Column(String(50), primary_key=True, comment='序号')
pos = Column(String(500, collation='utf8_general_ci'), comment='词性')
type = Column(String(500, collation='utf8_general_ci'), comment='类型')
std_rpl_str = Column(String(500, collation='utf8_general_ci'), comment='标准化替换字符串')
prefix_supp_str = Column(String(500, collation='utf8_general_ci'), comment='前缀补充字符串')
suffix_supp_str = Column(String(500, collation='utf8_general_ci'), comment='后缀补充字符串')
status = Column(String(1, collation='utf8_general_ci'), default='0', comment='状态(0正常 1停用)')
create_by = Column(String(64), default='', comment='创建者')
create_time = Column(DateTime, comment='创建时间')
update_by = Column(String(64), default='', comment='更新者')
update_time = Column(DateTime, comment='更新时间')
remark = Column(String(500), nullable=True, default='', comment='备注')
class SysFccbd(Base):
"""
词典配置表
"""
__tablename__ = 't_dict_config'
onum = Column(String(50), primary_key=True, comment='序号')
term = Column(String(500, collation='utf8_general_ci'), comment='词语')
freq = Column(String(500, collation='utf8_general_ci'), comment='频次')
pos = Column(String(500, collation='utf8_general_ci'), comment='词性')
pos_name = Column(String(500, collation='utf8_general_ci'), comment='词性名称')
status = Column(String(500, collation='utf8_general_ci'), comment='状态(0正常 1停用)')
create_by = Column(String(500, collation='utf8_general_ci'), comment='创建者')
create_time = Column(DateTime, comment='创建时间')
update_by = Column(String(64, collation='utf8_general_ci'), comment='更新者')
update_time = Column(DateTime, comment='更新时间')
remark = Column(String(500, collation='utf8_general_ci'), comment='备注')
class SysCdplb(Base):
"""
词典配置表
"""
__tablename__ = 't_bath_dict_config'
onum = Column(String(50, collation='utf8_general_ci'), primary_key=True, comment='序号')
bath_obj_tab_name = Column(String(500, collation='utf8_general_ci'), comment='批量对象表名')
bath_obj_fld_name = Column(String(500, collation='utf8_general_ci'), comment='批里对象字段名')
freq = Column(String(500, collation='utf8_general_ci'), comment='频次')
pos = Column(String(500, collation='utf8_general_ci'), comment='词性')
pos_name = Column(String(500, collation='utf8_general_ci'), comment='词性名称')
status = Column(String(1, collation='utf8_general_ci'), comment='状态(0正常 1停用)')
create_by = Column(String(64, collation='utf8_general_ci'), comment='创建者')
create_time = Column(DateTime, comment='创建时间')
update_by = Column(String(64, collation='utf8_general_ci'), comment='更新者')
update_time = Column(DateTime, comment='更新时间')
remark = Column(String(500, collation='utf8_general_ci'), comment='备注')
class SysSscf(Base):
"""
短句配置表
"""
__tablename__ = 't_keyword'
onum = Column(String(60), primary_key=True, comment='序号')
dasset_id = Column(String(500), comment='数据域名ID')
keywords = Column(String(500), comment='关键词JSON') # 根据你的注释,这里使用了String而不是JSON
keyword = Column(String(500), comment='关键词')
algorithm = Column(String(500), comment='算法')
order = Column(String(500), comment='指令')
whole_sentence = Column(String(500), comment='整句')
type = Column(String(500), comment='类型')
supp_expl = Column(String(500), comment='补充说明')
bak1 = Column(String(500), comment='备注1')
bak2 = Column(String(500), comment='备注2')
bak3 = Column(String(500), comment='备注3')
bak4 = Column(String(500), comment='备注4')
bak5 = Column(String(500), comment='备注5')
status = Column(String(1), comment='有效标志')
del_flag = Column(String(1), comment='删除标志')
update_time = Column(DateTime, comment='更新时间')
update_by = Column(String(50), comment='更新者')
create_time = Column(DateTime, comment='创建时间')
create_by = Column(String(50), comment='创建者')
class SysDassetTree(Base):
__tablename__ = 't_dasset_tree'
onum = Column(String(60), primary_key=True, comment='序号')
dasset_code = Column(String(500), comment='code')
dasset_name = Column(String(500), comment='name') # 根据你的注释,这里使用了String而不是JSON
parent_code = Column(String(500), comment='父节点code')
class SysVecset(Base):
"""
智能语句配置表
"""
__tablename__ = 't_vecset'
onum = Column(String(60), primary_key=True, comment='序号')
dasset_id = Column(String(500), comment='数据域名')
squery = Column(String(500), comment='查询语句')
sanal_plan = Column(String(500), comment='分析方法')
sintnt_term = Column(String(500), comment='意图词')
stab_name = Column(String(500), comment='表名称')
ssql = Column(String(8000), comment='参考sql')
sim_thrsh = Column(String(500), comment='相似阈值')
status = Column(String(1), comment='状态(0正常 1停用)')
del_flag = Column(String(1), comment='删除标志(0代表存在 2代表删除)')
create_by = Column(String(64), comment='创建者')
create_time = Column(DateTime, comment='创建时间')
update_by = Column(String(64), comment='更新者')
update_time = Column(DateTime, comment='更新时间')
remark = Column(String(500), comment='备注')

127
vue-fastapi-backend/module_admin/entity/vo/dataint_vo.py

@ -0,0 +1,127 @@
from pydantic import BaseModel
from typing import Union, Optional, List
from module_admin.annotation.pydantic_annotation import as_query
from pydantic import BaseModel, ConfigDict, Field, model_validator
from pydantic.alias_generators import to_camel
@as_query
class TsmcbPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
page_num: int
page_size: int
pos: Optional[str] = None
type: Optional[str] = None
std_rpl_str: Optional[str] = None
status: Optional[str] = None
class SaveTsmcbModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[str] = None
pos: Optional[str] = None
type: Optional[str] = None
std_rpl_str: Optional[str] = None
prefix_supp_str: Optional[str] = None
suffix_supp_str: Optional[str] = None
status: Optional[str] = None
@as_query
class FccbdPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
page_num: int
page_size: int
pos: Optional[str] = None
term: Optional[str] = None
pos_name: Optional[str] = None
status: Optional[str] = None
class SaveFccbdModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[str] = None
term: Optional[str] = None
freq: Optional[str] = None
pos: Optional[str] = None
pos_name: Optional[str] = None
status: Optional[str] = None
@as_query
class CdplbPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
page_num: int
page_size: int
bath_obj_tabName: Optional[str] = None
bath_obj_fldName: Optional[str] = None
pos_name: Optional[str] = None
status: Optional[str] = None
class SaveCdplbModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[str] = None
bath_obj_tab_name: Optional[str] = None
bath_obj_fld_name: Optional[str] = None
freq: Optional[str] = None
pos: Optional[str] = None
pos_name: Optional[str] = None
status: Optional[str] = None
@as_query
class SscfPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
page_num: int
page_size: int
keyword: Optional[str] = None
type: Optional[str] = None
dasset_id: Optional[str] = None
status: Optional[str] = None
class SaveSscfModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[str] = None
dasset_id: Optional[str] = None
keyword: Optional[str] = None
status: Optional[str] = None
algorithm: Optional[str] = None
order: Optional[str] = None
whole_sentence: Optional[str] = None
type: Optional[str] = None
supp_expl: Optional[str] = None
@as_query
class VecsetPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
page_num: int
page_size: int
stab_name: Optional[str] = None
squery: Optional[str] = None
sanal_plan: Optional[str] = None
dasset_id: Optional[str] = None
status: Optional[str] = None
class SaveVecsetModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[str] = None
dasset_id: Optional[str] = None
stab_name: Optional[str] = None
squery: Optional[str] = None
sanal_plan: Optional[str] = None
ssql: Optional[str] = None
sintnt_term: Optional[str] = None
status: Optional[str] = None
sim_thrsh: Optional[str] = None
class TreeOperateModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
operate: Optional[str] = None
onum: Optional[str] = None
dasset_code: Optional[str] = None
dasset_name: Optional[str] = None

54
vue-fastapi-backend/module_admin/service/cdplb_service.py

@ -0,0 +1,54 @@
import json
import uuid
from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import CdplbPageObject, SaveCdplbModel
from module_admin.entity.do.dataint_do import SysCdplb
from module_admin.dao.cdplb_dao import CdplbDao
from exceptions.exception import ServiceException, ServiceWarning
from datetime import datetime
from utils.common_util import CamelCaseUtil
class CdplbService:
"""
智能问答服务层
"""
@classmethod
async def get_cdplb_list_services(cls, result_db: AsyncSession, cdplb_query: CdplbPageObject, current_user: CurrentUserModel):
result = await CdplbDao.get_cdplb_list(result_db, cdplb_query)
return CamelCaseUtil.transform_result(result)
@classmethod
async def save_cdplb(cls, result_db: AsyncSession, saveCdplbModel: SaveCdplbModel, current_user: CurrentUserModel):
if saveCdplbModel.onum is None:
# add
saveCdplbModel.onum = uuid.uuid4()
addObj = SysCdplb(**saveCdplbModel.model_dump())
addObj.create_by = current_user.user.user_name
addObj.create_time = datetime.now()
addObj.update_by = current_user.user.user_name
addObj.update_time = datetime.now()
await CdplbDao.insert_cdplb(result_db, addObj)
else:
# update
oldObj = await CdplbDao.get_cdplb_by_id(result_db, saveCdplbModel.onum)
if oldObj is None:
raise ServiceException(message='所改对象不存在')
saveObj = saveCdplbModel.model_dump(exclude_unset=True)
saveObj['update_by'] = current_user.user.user_name
saveObj['update_time'] = datetime.now()
await CdplbDao.update_cdplb(result_db, saveObj)
await result_db.commit()
return CrudResponseModel(is_success=True, message='操作成功')
@classmethod
async def delete_cdplb(cls, db: AsyncSession, array: List[str]):
await CdplbDao.delete_cdplb(db, array)
await db.commit()
return CrudResponseModel(is_success=True, message='操作成功')

54
vue-fastapi-backend/module_admin/service/fccbd_service.py

@ -0,0 +1,54 @@
import json
import uuid
from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import FccbdPageObject, SaveFccbdModel
from module_admin.entity.do.dataint_do import SysFccbd
from module_admin.dao.fccbd_dao import FccbdDao
from exceptions.exception import ServiceException, ServiceWarning
from datetime import datetime
from utils.common_util import CamelCaseUtil
class FccbdService:
"""
智能问答服务层
"""
@classmethod
async def get_fccbd_list_services(cls, result_db: AsyncSession, fccbd_query: FccbdPageObject, current_user: CurrentUserModel):
result = await FccbdDao.get_fccbd_list(result_db, fccbd_query)
return CamelCaseUtil.transform_result(result)
@classmethod
async def save_fccbd(cls, result_db: AsyncSession, saveFccbdModel: SaveFccbdModel, current_user: CurrentUserModel):
if saveFccbdModel.onum is None:
# add
saveFccbdModel.onum = uuid.uuid4()
addObj = SysFccbd(**saveFccbdModel.model_dump())
addObj.create_by = current_user.user.user_name
addObj.create_time = datetime.now()
addObj.update_by = current_user.user.user_name
addObj.update_time = datetime.now()
await FccbdDao.insert_fccbd(result_db, addObj)
else:
# update
oldObj = await FccbdDao.get_fccbd_by_id(result_db, saveFccbdModel.onum)
if oldObj is None:
raise ServiceException(message='所改对象不存在')
saveObj = saveFccbdModel.model_dump(exclude_unset=True)
saveObj['update_by'] = current_user.user.user_name
saveObj['update_time'] = datetime.now()
await FccbdDao.update_fccbd(result_db, saveObj)
await result_db.commit()
return CrudResponseModel(is_success=True, message='操作成功')
@classmethod
async def delete_fccbd(cls, db: AsyncSession, array: List[str]):
await FccbdDao.delete_fccbd(db, array)
await db.commit()
return CrudResponseModel(is_success=True, message='操作成功')

96
vue-fastapi-backend/module_admin/service/sscf_service.py

@ -0,0 +1,96 @@
import json
import uuid
from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import SscfPageObject, SaveSscfModel, TreeOperateModel
from module_admin.entity.do.dataint_do import SysSscf
from module_admin.dao.sscf_dao import SscfDao
from exceptions.exception import ServiceException, ServiceWarning
from datetime import datetime
from utils.common_util import CamelCaseUtil
class SscfService:
"""
智能问答服务层
"""
@classmethod
async def get_sscf_list_services(cls, result_db: AsyncSession, sscf_query: SscfPageObject, current_user: CurrentUserModel):
result = await SscfDao.get_sscf_list(result_db, sscf_query)
return CamelCaseUtil.transform_result(result)
@classmethod
async def get_dasset_tree_services(cls, result_db: AsyncSession, current_user: CurrentUserModel):
result = await SscfDao.get_dasset_tree(result_db)
return CamelCaseUtil.transform_result(result)
@classmethod
async def save_dasset_tree_services(cls, result_db: AsyncSession, treeOperate: TreeOperateModel, current_user: CurrentUserModel):
tree = await SscfDao.get_dasset_tree_by_code(result_db, treeOperate.dasset_code)
if treeOperate.operate == 'ADD':
if tree:
raise ServiceException(message="已存在code为:"+treeOperate.dasset_code+"的目录,无法重复新增,请修改code后新增")
else:
await SscfDao.insert_dasset_tree(result_db, treeOperate)
await result_db.commit()
if treeOperate.operate == 'UPDATE':
if tree:
if tree.onum == treeOperate.onum:
treeObj = dict(
onum=treeOperate.onum,
dasset_code=treeOperate.dasset_code,
dasset_name=treeOperate.dasset_name
)
await SscfDao.save_dasset_tree(result_db, treeObj)
await result_db.commit()
else:
raise ServiceException(message="已存在code为:"+treeOperate.dasset_code+"的目录")
else:
treeObj = dict(
onum=treeOperate.onum,
dasset_code=treeOperate.dasset_code,
dasset_name=treeOperate.dasset_name
)
await SscfDao.save_dasset_tree(result_db, treeObj)
await result_db.commit()
if treeOperate.operate == 'DELETE':
if tree:
await SscfDao.delete_dasset_tree(result_db, treeOperate.onum)
await result_db.commit()
else:
raise ServiceException(mssage="不存在code为:"+treeOperate.dasset_code+"的目录")
return CrudResponseModel(is_success=True, message='操作成功')
@classmethod
async def save_sscf(cls, result_db: AsyncSession, saveSscfModel: SaveSscfModel, current_user: CurrentUserModel):
if saveSscfModel.onum is None:
# add
saveSscfModel.onum = uuid.uuid4()
addObj = SysSscf(**saveSscfModel.model_dump())
addObj.create_by = current_user.user.user_name
addObj.create_time = datetime.now()
addObj.update_by = current_user.user.user_name
addObj.update_time = datetime.now()
await SscfDao.insert_sscf(result_db, addObj)
else:
# update
oldObj = await SscfDao.get_sscf_by_id(result_db, saveSscfModel.onum)
if oldObj is None:
raise ServiceException(message='所改对象不存在')
saveObj = saveSscfModel.model_dump(exclude_unset=True)
saveObj['update_by'] = current_user.user.user_name
saveObj['update_time'] = datetime.now()
await SscfDao.update_sscf(result_db, saveObj)
await result_db.commit()
return CrudResponseModel(is_success=True, message='操作成功')
@classmethod
async def delete_sscf(cls, db: AsyncSession, array: List[str]):
await SscfDao.delete_sscf(db, array)
await db.commit()
return CrudResponseModel(is_success=True, message='操作成功')

54
vue-fastapi-backend/module_admin/service/tsmcb_service.py

@ -0,0 +1,54 @@
import json
import uuid
from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import TsmcbPageObject, SaveTsmcbModel
from module_admin.entity.do.dataint_do import SysTsmcb
from module_admin.dao.tsmcb_dao import TsmcbDao
from exceptions.exception import ServiceException, ServiceWarning
from datetime import datetime
from utils.common_util import CamelCaseUtil
class TsmcbService:
"""
智能问答服务层
"""
@classmethod
async def get_tsmcb_list_services(cls, result_db: AsyncSession, tsmcb_query: TsmcbPageObject, current_user: CurrentUserModel):
result = await TsmcbDao.get_tsmcb_list(result_db, tsmcb_query)
return CamelCaseUtil.transform_result(result)
@classmethod
async def save_tsmcb(cls, result_db: AsyncSession, saveTsmcbModel: SaveTsmcbModel, current_user: CurrentUserModel):
if saveTsmcbModel.onum is None:
# add
saveTsmcbModel.onum = uuid.uuid4()
addObj = SysTsmcb(**saveTsmcbModel.model_dump())
addObj.create_by = current_user.user.user_name
addObj.create_time = datetime.now()
addObj.update_by = current_user.user.user_name
addObj.update_time = datetime.now()
await TsmcbDao.insert_tsmcb(result_db, addObj)
else:
# update
oldObj = await TsmcbDao.get_tsmcb_by_id(result_db, saveTsmcbModel.onum)
if oldObj is None:
raise ServiceException(message='所改对象不存在')
saveObj = saveTsmcbModel.model_dump(exclude_unset=True)
saveObj['update_by'] = current_user.user.user_name
saveObj['update_time'] = datetime.now()
await TsmcbDao.update_tsmcb(result_db, saveObj)
await result_db.commit()
return CrudResponseModel(is_success=True, message='操作成功')
@classmethod
async def delete_tsmcb(cls, db: AsyncSession, array: List[str]):
await TsmcbDao.delete_tsmcb(db, array)
await db.commit()
return CrudResponseModel(is_success=True, message='操作成功')

54
vue-fastapi-backend/module_admin/service/vecset_service.py

@ -0,0 +1,54 @@
import json
import uuid
from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import VecsetPageObject, SaveVecsetModel
from module_admin.entity.do.dataint_do import SysVecset
from module_admin.dao.vecset_dao import VecsetDao
from exceptions.exception import ServiceException, ServiceWarning
from datetime import datetime
from utils.common_util import CamelCaseUtil
class VecsetService:
"""
智能问答服务层
"""
@classmethod
async def get_vecset_list_services(cls, result_db: AsyncSession, vecset_query: VecsetPageObject, current_user: CurrentUserModel):
result = await VecsetDao.get_vecset_list(result_db, vecset_query)
return CamelCaseUtil.transform_result(result)
@classmethod
async def save_vecset(cls, result_db: AsyncSession, saveVecsetModel: SaveVecsetModel, current_user: CurrentUserModel):
if saveVecsetModel.onum is None:
# add
saveVecsetModel.onum = uuid.uuid4()
addObj = SysVecset(**saveVecsetModel.model_dump())
addObj.create_by = current_user.user.user_name
addObj.create_time = datetime.now()
addObj.update_by = current_user.user.user_name
addObj.update_time = datetime.now()
await VecsetDao.insert_vecset(result_db, addObj)
else:
# update
oldObj = await VecsetDao.get_vecset_by_id(result_db, saveVecsetModel.onum)
if oldObj is None:
raise ServiceException(message='所改对象不存在')
saveObj = saveVecsetModel.model_dump(exclude_unset=True)
saveObj['update_by'] = current_user.user.user_name
saveObj['update_time'] = datetime.now()
await VecsetDao.update_vecset(result_db, saveObj)
await result_db.commit()
return CrudResponseModel(is_success=True, message='操作成功')
@classmethod
async def delete_vecset(cls, db: AsyncSession, array: List[str]):
await VecsetDao.delete_vecset(db, array)
await db.commit()
return CrudResponseModel(is_success=True, message='操作成功')

10
vue-fastapi-backend/server.py

@ -29,6 +29,11 @@ from module_admin.controller.metasecurity_controller import metaSecurityControll
from module_admin.controller.datastd_controller import datastdController
from module_admin.controller.approval_controller import approvalController
from module_admin.controller.data_ast_content_controller import dataCatalogController
from module_admin.controller.tsmcb_controller import tsmcbController
from module_admin.controller.fccbd_controller import fccbdController
from module_admin.controller.cdplb_controller import cdplbController
from module_admin.controller.sscf_controller import sscfController
from module_admin.controller.vecset_controller import vecsetController
from sub_applications.handle import handle_sub_applications
from utils.common_util import worship
from utils.log_util import logger
@ -91,6 +96,11 @@ controller_list = [
{'router': approvalController, 'tags': ['审批模块']},
{'router': datastdController, 'tags': ['数据标准模块']},
{'router': dataCatalogController, 'tags': ['系统管理-数据目录管理']},
{'router': tsmcbController, 'tags': ['智能数据-特殊名词补充']},
{'router': fccbdController, 'tags': ['智能数据-分词词典补充']},
{'router': cdplbController, 'tags': ['智能数据-词典批量补充']},
{'router': sscfController, 'tags': ['智能数据-短句配置']},
{'router': vecsetController, 'tags': ['智能数据-全句配置']},
]
for controller in controller_list:

26
vue-fastapi-frontend/src/api/dataint/cdplb.js

@ -0,0 +1,26 @@
import request from '@/utils/request'
export function getCdplbList(data) {
return request({
url: '/default-api/dataint/cdplb/list',
method: 'get',
params: data
})
}
export function saveCdplb(data){
return request({
url: '/default-api/dataint/cdplb/save',
method: 'post',
data: data
})
}
export function deleteCdplb(array){
return request({
url: '/default-api/dataint/cdplb/delete',
method: 'post',
data: array
})
}

26
vue-fastapi-frontend/src/api/dataint/fccbd.js

@ -0,0 +1,26 @@
import request from '@/utils/request'
export function getFccbdList(data) {
return request({
url: '/default-api/dataint/fccbd/list',
method: 'get',
params: data
})
}
export function saveFccbd(data){
return request({
url: '/default-api/dataint/fccbd/save',
method: 'post',
data: data
})
}
export function deleteFccbd(array){
return request({
url: '/default-api/dataint/fccbd/delete',
method: 'post',
data: array
})
}

41
vue-fastapi-frontend/src/api/dataint/sscf.js

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function getSscfList(data) {
return request({
url: '/default-api/dataint/sscf/list',
method: 'get',
params: data
})
}
export function saveSscf(data){
return request({
url: '/default-api/dataint/sscf/save',
method: 'post',
data: data
})
}
export function deleteSscf(array){
return request({
url: '/default-api/dataint/sscf/delete',
method: 'post',
data: array
})
}
export function get_dasset_tree() {
return request({
url: '/default-api/dataint/sscf/tree',
method: 'get',
})
}
export function saveDassetTreeNode(data) {
return request({
url: '/default-api/dataint/sscf/tree',
method: 'post',
data: data
})
}

26
vue-fastapi-frontend/src/api/dataint/tsmcb.js

@ -0,0 +1,26 @@
import request from '@/utils/request'
export function getTsmcbList(data) {
return request({
url: '/default-api/dataint/tsmcb/list',
method: 'get',
params: data
})
}
export function saveTsmcb(data){
return request({
url: '/default-api/dataint/tsmcb/save',
method: 'post',
data: data
})
}
export function deleteTsmcb(array){
return request({
url: '/default-api/dataint/tsmcb/delete',
method: 'post',
data: array
})
}

26
vue-fastapi-frontend/src/api/dataint/vecset.js

@ -0,0 +1,26 @@
import request from '@/utils/request'
export function getVecsetList(data) {
return request({
url: '/default-api/dataint/vecset/list',
method: 'get',
params: data
})
}
export function saveVecset(data){
return request({
url: '/default-api/dataint/vecset/save',
method: 'post',
data: data
})
}
export function deleteVecset(array){
return request({
url: '/default-api/dataint/vecset/delete',
method: 'post',
data: array
})
}

271
vue-fastapi-frontend/src/views/dataint/cypz/cdplb.vue

@ -0,0 +1,271 @@
<template>
<div class="app-container">
<el-form inline :model="queryParams">
<el-form-item label="批量对象表名:">
<el-input v-model="queryParams.bathObjTabName"></el-input>
</el-form-item>
<el-form-item label="批里对象字段名:">
<el-input v-model="queryParams.bathObjFldName"></el-input>
</el-form-item>
<el-form-item label="词性名称:">
<el-input v-model="queryParams.posName"></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="queryParams.status" style="width: 200px" clearable>
<el-option label="正常" key="tsmcb-query-status-1" value="1"></el-option>
<el-option label="弃用" key="tsmcb-query-status-1" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Minus"
@click="multDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Upload"
@click="handleImport"
>导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table :data="dataList" @selection-change="handleSelection">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="序号" align="center" prop="onum"></el-table-column>-->
<el-table-column label="批量对象表名" align="center" prop="bathObjTabName"></el-table-column>
<el-table-column label="批里对象字段名" align="center" prop="bathObjFldName"></el-table-column>
<el-table-column label="频次" align="center" prop="freq"></el-table-column>
<el-table-column label="词性" align="center" prop="pos"></el-table-column>
<el-table-column label="词性名称" align="center" prop="posName"></el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-switch v-model="scope.row.status"
active-value="1"
inactive-value="0" @change="changeStatus(scope.row)" />
</template>
</el-table-column>
<el-table-column label="负责人员" align="center" prop="updateBy"></el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template #default="scope">
<span>{{scope.row.updateTime.replace("T"," ")}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" prop="operation">
<template #default="scope">
<el-link type="primary" @click="handleEdit(scope.row)" :underline="false">修改</el-link>
<el-link type="danger" style="margin-left: 10px" @click="handleDelete([scope.row.onum])" :underline="false">删除</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog
v-model="showDialog"
:title="currentForm.operate === 'ADD'?'新增词典配置表':'编辑词典配置表'"
width="500"
>
<el-form v-if="showDialog"
:model="currentForm"
ref="formRef"
:rules="rules"
label-width="125px">
<el-form-item label="批量对象表名:" prop="bathObjTabName">
<el-input
v-model="currentForm.bathObjTabName" clearable
/>
</el-form-item>
<el-form-item label="批量对象字段名:" prop="bathObjFldName">
<el-input
v-model="currentForm.bathObjFldName" clearable
/>
</el-form-item>
<el-form-item label="频次:" prop="freq">
<el-input
v-model="currentForm.freq" clearable
></el-input>
</el-form-item>
<el-form-item label="词性:" prop="pos">
<el-input
v-model="currentForm.pos" clearable
></el-input>
</el-form-item>
<el-form-item label="词性名称:" prop="posName">
<el-input
v-model="currentForm.posName" clearable
></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-radio-group v-model="currentForm.status">
<el-radio value="1" size="large">正常</el-radio>
<el-radio value="0" size="large">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showDialog = false">取消</el-button>
<el-button type="primary" @click="handleSave">
确定
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import { getCdplbList, saveCdplb, deleteCdplb } from "@/api/dataint/cdplb"
const { proxy } = getCurrentInstance();
const queryParams = ref({
bathObjTabName:'',
bathObjFldName:'',
posName:'',
status:'',
pageNum:1,
pageSize:10
})
const showDialog = ref(false)
const rules = ref({
bathObjTabName: [{required: true, message: '批量对象表名不能为空!', trigger: 'change',},],
bathObjFldName: [{required: true, message: '批里对象字段名不能为空!!', trigger: 'change',},],
pos: [{required: true, message: '词性不能为空!', trigger: 'change',},],
posName: [{required: true, message: '词性名称不能为空!', trigger: 'change',},],
freq: [{required: true, message: '频次不能为空!', trigger: 'change',},],
})
const currentForm = ref({
operate: 'ADD',
bathObjTabName:'',
bathObjFldName:'',
pos:'',
posName:'',
freq:'',
status:'1'
})
const multSelection = ref([])
const dataList = ref([])
const total = ref(0)
function handleQuery(){
queryParams.value.pageNum = 1;
getList()
}
function getList(){
getCdplbList(queryParams.value).then(res=>{
dataList.value = res.data.rows
total.value = res.data.total
})
}
function resetQuery(){
queryParams.value = {
pos:'',
type:'',
stdRplStr:'',
status:'',
pageNum:1,
pageSize:10
}
handleQuery()
}
function handleAdd(){
showDialog.value = true
currentForm.value ={
operate: 'ADD',
bathObjTabName:'',
bathObjFldName:'',
pos:'',
posName:'',
freq:'',
status:'1'
}
}
function handleSave(){
proxy.$refs.formRef.validate(valid => {
if (valid) {
saveCdplb(currentForm.value).then(res=>{
proxy.$modal.msgSuccess("操作成功");
showDialog.value = false
getList()
})
}
});
}
function handleEdit(row){
currentForm.value = JSON.parse(JSON.stringify(row))
currentForm.value.operate = 'UPDATE'
showDialog.value = true
}
function changeStatus(row){
let param = {
onum: row.onum,
status: row.status
}
saveCdplb(param).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function multDelete(){
let array = []
if (multSelection.value.length>0){
for (let i = 0; i < multSelection.value.length; i++) {
array.push(multSelection.value[i].onum)
}
handleDelete(array)
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function handleDelete(array){
deleteCdplb(array).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleImport(){
}
function handleExport(){
}
function handleSelection(val){
multSelection.value= val
}
onMounted(() => {
handleQuery()
})
</script>
<style scoped lang="scss">
</style>

263
vue-fastapi-frontend/src/views/dataint/cypz/fccbd.vue

@ -0,0 +1,263 @@
<template>
<div class="app-container">
<el-form inline :model="queryParams">
<el-form-item label="词语:">
<el-input v-model="queryParams.term"></el-input>
</el-form-item>
<el-form-item label="词性:">
<el-input v-model="queryParams.pos"></el-input>
</el-form-item>
<el-form-item label="词性名称:">
<el-input v-model="queryParams.posName"></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="queryParams.status" style="width: 200px" clearable>
<el-option label="正常" key="tsmcb-query-status-1" value="0"></el-option>
<el-option label="弃用" key="tsmcb-query-status-1" value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Minus"
@click="multDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Upload"
@click="handleImport"
>导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table :data="dataList" @selection-change="handleSelection">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="序号" align="center" prop="onum"></el-table-column>-->
<el-table-column label="词语" align="center" prop="term"></el-table-column>
<el-table-column label="频次" align="center" prop="freq"></el-table-column>
<el-table-column label="词性" align="center" prop="pos"></el-table-column>
<el-table-column label="词性名称" align="center" prop="posName"></el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-switch v-model="scope.row.status"
active-value="1"
inactive-value="0" @change="changeStatus(scope.row)" />
</template>
</el-table-column>
<el-table-column label="负责人员" align="center" prop="updateBy"></el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template #default="scope">
<span>{{scope.row.updateTime.replace("T"," ")}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" prop="operation">
<template #default="scope">
<el-link type="primary" @click="handleEdit(scope.row)" :underline="false">修改</el-link>
<el-link type="danger" style="margin-left: 10px" @click="handleDelete([scope.row.onum])" :underline="false">删除</el-link>
</template>
</el-table-column>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-table>
<el-dialog
v-model="showDialog"
:title="currentForm.operate === 'ADD'?'新增词典配置表':'编辑词典配置表'"
width="500"
>
<el-form v-if="showDialog"
:model="currentForm"
ref="formRef"
:rules="rules"
label-width="125px">
<el-form-item label="词语:" prop="term">
<el-input
v-model="currentForm.term" clearable
/>
</el-form-item>
<el-form-item label="频次:" prop="freq">
<el-input
v-model="currentForm.freq" clearable
/>
</el-form-item>
<el-form-item label="词性:" prop="pos">
<el-input
v-model="currentForm.pos" clearable
></el-input>
</el-form-item>
<el-form-item label="词性名称:" prop="posName">
<el-input
v-model="currentForm.posName" clearable
></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-radio-group v-model="currentForm.status">
<el-radio value="1" size="large">正常</el-radio>
<el-radio value="0" size="large">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showDialog = false">取消</el-button>
<el-button type="primary" @click="handleSave">
确定
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import { getFccbdList, saveFccbd, deleteFccbd } from "@/api/dataint/fccbd"
const { proxy } = getCurrentInstance();
const queryParams = ref({
pos:'',
posName:'',
term:'',
status:'',
pageNum:1,
pageSize:10
})
const showDialog = ref(false)
const rules = ref({
pos: [{required: true, message: '词性不能为空!', trigger: 'change',},],
freq: [{required: true, message: '频次不能为空!', trigger: 'change',},],
posName: [{required: true, message: '词性名称不能为空!', trigger: 'change',},],
term: [{required: true, message: '词语不能为空!', trigger: 'change',},],
})
const multSelection = ref([])
const currentForm = ref({
operate: 'ADD',
pos:'',
freq:'',
posName:'',
term:'',
status:'1'
})
const dataList = ref([])
const total = ref(0)
function handleQuery(){
queryParams.value.pageNum = 1;
getList()
}
function getList(){
getFccbdList(queryParams.value).then(res=>{
dataList.value = res.data.rows
total.value = res.data.total
})
}
function resetQuery(){
queryParams.value = {
pos:'',
type:'',
stdRplStr:'',
status:'',
pageNum:1,
pageSize:10
}
handleQuery()
}
function changeStatus(row){
let param = {
onum: row.onum,
status: row.status
}
saveFccbd(param).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleAdd(){
showDialog.value = true
currentForm.value ={
operate: 'ADD',
pos:'',
freq:'',
posName:'',
term:'',
status:'1'
}
}
function handleEdit(row){
currentForm.value = JSON.parse(JSON.stringify(row))
currentForm.value.operate = 'UPDATE'
showDialog.value = true
}
function handleSave(){
proxy.$refs.formRef.validate(valid => {
if (valid) {
saveFccbd(currentForm.value).then(res=>{
proxy.$modal.msgSuccess("操作成功");
showDialog.value = false
getList()
})
}
});
}
function multDelete(){
let array = []
if (multSelection.value.length>0){
for (let i = 0; i < multSelection.value.length; i++) {
array.push(multSelection.value[i].onum)
}
handleDelete(array)
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function handleDelete(array){
deleteFccbd(array).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleImport(){
}
function handleExport(){
}
function handleSelection(val){
multSelection.value= val
}
onMounted(() => {
handleQuery()
})
</script>
<style scoped lang="scss">
</style>

281
vue-fastapi-frontend/src/views/dataint/cypz/tsmcb.vue

@ -0,0 +1,281 @@
<template>
<div class="app-container">
<el-form inline :model="queryParams">
<el-form-item label="词性:">
<el-input v-model="queryParams.pos"></el-input>
</el-form-item>
<el-form-item label="类型:">
<el-input v-model="queryParams.type"></el-input>
</el-form-item>
<el-form-item label="标准化替换字符:">
<el-input v-model="queryParams.stdRplStr"></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="queryParams.status" style="width: 200px" clearable>
<el-option label="正常" key="tsmcb-query-status-1" value="1"></el-option>
<el-option label="弃用" key="tsmcb-query-status-1" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>新增</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="Edit"-->
<!-- @click="handleEdit"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Minus"
@click="multDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Upload"
@click="handleImport"
>导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table :data="dataList" @selection-change="handleSelection">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="序号" align="center" prop="onum"></el-table-column>-->
<el-table-column label="词性" align="center" prop="pos"></el-table-column>
<el-table-column label="类型" align="center" prop="type"></el-table-column>
<el-table-column label="标准化替换字符" align="center" prop="stdRplStr"></el-table-column>
<el-table-column label="前缀补充字符" align="center" prop="prefixSuppStr"></el-table-column>
<el-table-column label="后缀补充字符" align="center" prop="suffixSuppStr"></el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-switch v-model="scope.row.status"
active-value="1"
inactive-value="0" @change="changeStatus(scope.row)" />
</template>
</el-table-column>
<el-table-column label="负责人员" align="center" prop="updateBy"></el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template #default="scope">
<span>{{scope.row.updateTime.replace("T"," ")}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" prop="operation">
<template #default="scope">
<el-link type="primary" @click="handleEdit(scope.row)" :underline="false">修改</el-link>
<el-link type="danger" style="margin-left: 10px" @click="handleDelete([scope.row.onum])" :underline="false">删除</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog
v-model="showDialog"
:title="currentForm.operate === 'ADD'?'新增词性文本替换':'编辑词性文本替换'"
width="500"
>
<el-form
v-if="showDialog"
:model="currentForm"
ref="formRef"
:rules="rules"
label-width="125px">
<el-form-item label="词性:" prop="pos">
<el-input
v-model="currentForm.pos" clearable
/>
</el-form-item>
<el-form-item label="类型:" prop="type">
<el-input
v-model="currentForm.type" clearable
/>
</el-form-item>
<el-form-item label="标准化替换字符:" prop="stdRplStr">
<el-input
v-model="currentForm.stdRplStr" clearable
></el-input>
</el-form-item>
<el-form-item label="前缀补充字符:" prop="prefixSuppStr">
<el-input
v-model="currentForm.prefixSuppStr" clearable
></el-input>
</el-form-item>
<el-form-item label="后缀补充字符:" prop="suffixSuppStr">
<el-input
v-model="currentForm.suffixSuppStr" clearable
></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-radio-group v-model="currentForm.status">
<el-radio value="1" size="large">正常</el-radio>
<el-radio value="0" size="large">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showDialog = false">取消</el-button>
<el-button type="primary" @click="handleSave">
确定
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import { getTsmcbList, saveTsmcb, deleteTsmcb } from "@/api/dataint/tsmcb"
const { proxy } = getCurrentInstance();
const queryParams = ref({
pos:'',
type:'',
stdRplStr:'',
status:'',
pageNum:1,
pageSize:10
})
const currentForm = ref({
operate: 'ADD',
pos:'',
type:'',
stdRplStr:'',
prefixSuppStr:'',
suffixSuppStr:'',
status:'1'
})
const rules = ref({
pos: [{required: true, message: '词性不能为空!', trigger: 'change',},],
type: [{required: true, message: '类型不能为空!', trigger: 'change',},],
stdRplStr: [{required: true, message: '标准化替换字符不能为空!', trigger: 'change',},],
prefixSuppStr: [{required: true, message: '前缀补充字符不能为空!', trigger: 'change',},],
suffixSuppStr: [{required: true, message: '后缀补充字符不能为空!', trigger: 'change',},],
})
const multSelection =ref([])
const dataList = ref([])
const total = ref(0)
const showDialog = ref(false)
function handleQuery(){
queryParams.value.pageNum = 1;
getList()
}
function getList(){
getTsmcbList(queryParams.value).then(res=>{
dataList.value = res.data.rows
total.value = res.data.total
})
}
function resetQuery(){
queryParams.value = {
pos:'',
type:'',
stdRplStr:'',
status:'',
pageNum:1,
pageSize:10
}
handleQuery()
}
function handleAdd(){
showDialog.value = true
currentForm.value ={
operate: 'ADD',
pos:'',
type:'',
stdRplStr:'',
prefixSuppStr:'',
suffixSuppStr:'',
status:'1'
}
}
function handleEdit(row){
currentForm.value = JSON.parse(JSON.stringify(row))
currentForm.value.operate = 'UPDATE'
showDialog.value = true
}
function changeStatus(row){
let param = {
onum: row.onum,
status: row.status
}
saveTsmcb(param).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleSave(){
proxy.$refs.formRef.validate(valid => {
if (valid) {
saveTsmcb(currentForm.value).then(res=>{
proxy.$modal.msgSuccess("操作成功");
showDialog.value = false
getList()
})
}
});
}
function multDelete(){
let array = []
if (multSelection.value.length>0){
for (let i = 0; i < multSelection.value.length; i++) {
array.push(multSelection.value[i].onum)
}
handleDelete(array)
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function handleDelete(array){
deleteTsmcb(array).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleImport(){
}
function handleExport(){
}
function handleSelection(val){
multSelection.value= val
}
onMounted(() => {
handleQuery()
})
</script>
<style scoped lang="scss">
</style>

451
vue-fastapi-frontend/src/views/dataint/sscf/index.vue

@ -0,0 +1,451 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="dasset"
placeholder="请输入数据资产名称"
clearable
prefix-icon="Search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="dassetOptions"
:props="{ label: 'dassetName', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="deptTreeRef"
node-key="onum"
highlight-current
default-expand-all
@node-click="handleNodeClick"
>
<template #default="{ data }">
<div class="custom-tree-node" @mouseenter="data.show = true" @mouseleave="data.show = false">
<span>{{ data.dassetName }}</span>
<div v-if="data.parentCode === '0' && data.show">
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="primary" icon="Plus" @click="handleAddTree(data)"></el-link>
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="success" icon="Edit" @click="handleEditTree(data)"></el-link>
</div>
<div v-if="data.parentCode !== '0' && data.show">
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="success" icon="Edit" @click="handleEditTree(data)"></el-link>
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="danger" icon="Delete" @click="handleDeleteTree(data)"></el-link>
</div>
</div>
</template>
</el-tree>
</div>
</el-col>
<el-col :span="20" :xs="24">
<el-form inline :model="queryParams">
<el-form-item label="关键词:">
<el-input v-model="queryParams.keyword"></el-input>
</el-form-item>
<el-form-item label="类型:">
<el-input v-model="queryParams.type"></el-input>
</el-form-item>
<el-form-item label="字段状态:">
<el-select v-model="queryParams.status" style="width: 200px" clearable>
<el-option label="正常" key="sscf-query-status-1" value="1"></el-option>
<el-option label="弃用" key="sscf-query-status-2" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>新增</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="Edit"-->
<!-- @click="handleEdit"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Minus"
@click="multDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Upload"
@click="handleImport"
>导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table :data="dataList" @selection-change="handleSelection">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="序号" align="center" prop="onum"></el-table-column>-->
<el-table-column label="关键词" align="center" prop="keyword"></el-table-column>
<el-table-column label="算法" align="center" prop="algorithm"></el-table-column>
<el-table-column label="按顺序匹配标志" align="center" prop="order"></el-table-column>
<el-table-column label="整句" align="center" prop="wholeSentence"></el-table-column>
<el-table-column label="类型" align="center" prop="type"></el-table-column>
<el-table-column label="补充说明" align="center" prop="suppExpl"></el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-switch v-model="scope.row.status"
active-value="1"
inactive-value="0" @change="changeStatus(scope.row)" />
</template>
</el-table-column>
<el-table-column label="负责人员" align="center" prop="updateBy"></el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template #default="scope">
<span>{{scope.row.updateTime.replace("T"," ")}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" prop="operation">
<template #default="scope">
<el-link type="primary" @click="handleEdit(scope.row)" :underline="false">修改</el-link>
<el-link type="danger" style="margin-left: 10px" @click="handleDelete([scope.row.onum])" :underline="false">删除</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<el-dialog
v-model="showDialog"
:title="currentForm.operate === 'ADD'?'新增字段':'编辑字段'"
width="500"
>
<el-form
v-if="showDialog"
:model="currentForm"
ref="formRef"
:rules="rules"
label-width="125px">
<el-form-item label="归属资产名:" prop="dassetId">
<el-select v-model="currentForm.dassetId" style="width: 100%;" clearable>
<el-option v-for="item in dassetList" :key="item.onum" :value="item.onum" :label="item.dassetName"></el-option>
</el-select>
</el-form-item>
<el-form-item label="关键词:" prop="keyword">
<el-input
v-model="currentForm.keyword" clearable
/>
</el-form-item>
<el-form-item label="字段状态:">
<el-radio-group v-model="currentForm.status">
<el-radio value="1" size="large">正常</el-radio>
<el-radio value="0" size="large">停用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="算法:">
<el-radio-group v-model="currentForm.algorithm">
<el-radio value="包含" size="large">包含</el-radio>
<el-radio value="等于" size="large">等于</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="按顺序匹配标志:">
<el-switch v-model="currentForm.order"
active-value="True"
inactive-value="False" />
</el-form-item>
<el-form-item label="整句:">
<el-switch v-model="currentForm.wholeSentence"
active-value="True"
inactive-value="False" />
</el-form-item>
<el-form-item label="类型:">
<el-radio-group v-model="currentForm.type">
<el-radio value="补充" size="large">补充</el-radio>
<el-radio value="替换" size="large">替换</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="补充说明:">
<el-input
v-model="currentForm.suppExpl" clearable
></el-input>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showDialog = false">取消</el-button>
<el-button type="primary" @click="handleSave">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog
v-model="showTreeDialog"
:title="currentTreeNode.operate === 'ADD'?'新增目录':'编辑目录'"
width="500"
>
<el-form
v-if="showTreeDialog"
:model="currentTreeNode"
ref="formRef"
:rules="dassetRules"
label-width="125px">
<el-form-item label="目录编码:" prop="dassetCode">
<el-input
v-model="currentTreeNode.dassetCode" clearable
/>
</el-form-item>
<el-form-item label="目录名称:" prop="dassetName">
<el-input
v-model="currentTreeNode.dassetName" clearable
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showTreeDialog = false">取消</el-button>
<el-button type="primary" @click="handleSaveTree">
确定
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import { getSscfList, saveSscf, deleteSscf, get_dasset_tree, saveDassetTreeNode } from "@/api/dataint/sscf"
const { proxy } = getCurrentInstance();
const queryParams = ref({
dassetId:'',
keyword:'',
type:'',
status:'',
pageNum:1,
pageSize:10
})
const currentForm = ref({
operate: 'ADD',
dassetId:'',
status:'1',
keyword:'',
algorithm:'包含',
order:'True',
wholeSentence:'True',
type:'补充',
suppExpl:''
})
const dassetList = ref([])
const rules = ref({
dassetId: [{required: true, message: '归属资产不能为空!', trigger: 'change',},],
keyword: [{required: true, message: '关键词不能为空!', trigger: 'change',},],
})
const dassetRules = ref({
dassetCode: [{required: true, message: 'code不能为空!', trigger: 'change',},],
dassetName: [{required: true, message: '名称不能为空!', trigger: 'change',},],
})
const multSelection =ref([])
const dassetOptions = ref([])
const dasset =ref('')
const dataList = ref([])
const total = ref(0)
const showDialog = ref(false)
const showTreeDialog = ref(false)
const currentTreeNode = ref({})
function handleAddTree(){
showTreeDialog.value = true
currentTreeNode.value = {
operate: 'ADD',
dassetCode: '',
dassetName: ''
}
}
function handleEditTree(data){
currentTreeNode.value = data
currentTreeNode.value.operate = 'UPDATE'
showTreeDialog.value = true
}
function handleSaveTree(){
let param = {
operate: currentTreeNode.value.operate,
dassetCode: currentTreeNode.value.dassetCode,
dassetName: currentTreeNode.value.dassetName,
onum: currentTreeNode.value.onum
}
saveDassetTreeNode(param).then(res=>{
proxy.$modal.msgSuccess("操作成功")
showTreeDialog.value = false
get_tree_data()
})
}
function handleDeleteTree(data){
let param = {
onum: data.onum,
dassetCode: data.dassetCode,
operate: 'DELETE'
}
saveDassetTreeNode(param).then(res=>{
proxy.$modal.msgSuccess("操作成功")
get_tree_data()
})
}
function handleQuery(){
queryParams.value.pageNum = 1;
getList()
}
function getList(){
getSscfList(queryParams.value).then(res=>{
dataList.value = res.data.rows
total.value = res.data.total
})
}
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.dassetId = data.onum;
handleQuery();
}
function resetQuery(){
queryParams.value = {
pos:'',
type:'',
stdRplStr:'',
status:'',
pageNum:1,
pageSize:10
}
handleQuery()
}
function handleAdd(){
showDialog.value = true
currentForm.value ={
operate: 'ADD',
dassetId:'',
status:'1',
keyword:'',
algorithm:'包含',
order:'True',
wholeSentence:'True',
type:'补充',
suppExpl:''
}
}
function handleEdit(row){
currentForm.value = JSON.parse(JSON.stringify(row))
currentForm.value.operate = 'UPDATE'
showDialog.value = true
}
function changeStatus(row){
let param = {
onum: row.onum,
status: row.status
}
saveSscf(param).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleSave(){
proxy.$refs.formRef.validate(valid => {
if (valid) {
saveSscf(currentForm.value).then(res=>{
proxy.$modal.msgSuccess("操作成功");
showDialog.value = false
getList()
})
}
});
}
function multDelete(){
let array = []
if (multSelection.value.length>0){
for (let i = 0; i < multSelection.value.length; i++) {
array.push(multSelection.value[i].onum)
}
handleDelete(array)
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function handleDelete(array){
deleteSscf(array).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleImport(){
}
function handleExport(){
}
function handleSelection(val){
multSelection.value= val
}
function get_tree_data(){
get_dasset_tree().then(res=>{
let treeList = res.data
if(treeList.length > 0){
let children = []
dassetOptions.value = []
for (let i = 0; i < treeList.length; i++) {
if (treeList[i].dassetCode === "1"){
dassetOptions.value.push(treeList[i])
}else {
children.push(treeList[i])
}
}
dassetOptions.value[0].children = children
dassetList.value = children
}
})
}
/** 通过条件过滤节点 */
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
onMounted(() => {
get_tree_data()
handleQuery()
})
</script>
<style scoped lang="scss">
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.tree-node__action {
padding: 0 8px;
display: flex;
justify-content: flex-end;
}
}
</style>

473
vue-fastapi-frontend/src/views/dataint/vecset/index.vue

@ -0,0 +1,473 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="dasset"
placeholder="请输入数据资产名称"
clearable
prefix-icon="Search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="dassetOptions"
:props="{ label: 'dassetName', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="deptTreeRef"
node-key="onum"
highlight-current
default-expand-all
@node-click="handleNodeClick"
>
<template #default="{ data }">
<div class="custom-tree-node" @mouseenter="data.show = true" @mouseleave="data.show = false">
<span>{{ data.dassetName }}</span>
<div v-if="data.parentCode === '0' && data.show">
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="primary" icon="Plus" @click="handleAddTree(data)"></el-link>
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="success" icon="Edit" @click="handleEditTree(data)"></el-link>
</div>
<div v-if="data.parentCode !== '0' && data.show">
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="success" icon="Edit" @click="handleEditTree(data)"></el-link>
<el-link :underline="false" style="font-size: 16px;margin: 5px" type="danger" icon="Delete" @click="handleDeleteTree(data)"></el-link>
</div>
</div>
</template>
</el-tree>
</div>
</el-col>
<el-col :span="20" :xs="24">
<el-form inline :model="queryParams">
<el-form-item label="表名称:">
<el-input v-model="queryParams.stabName"></el-input>
</el-form-item>
<el-form-item label="查询语句:">
<el-input v-model="queryParams.squery"></el-input>
</el-form-item>
<el-form-item label="分析方法:">
<el-input v-model="queryParams.sanalPlan"></el-input>
</el-form-item>
<el-form-item label="字段状态:">
<el-select v-model="queryParams.status" style="width: 200px" clearable>
<el-option label="正常" key="vecset-query-status-1" value="1"></el-option>
<el-option label="弃用" key="vecset-query-status-2" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
>新增</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="Edit"-->
<!-- @click="handleEdit"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Minus"
@click="multDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="Upload"
@click="handleImport"
>导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
<el-table :data="dataList" @selection-change="handleSelection">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="序号" align="center" prop="onum"></el-table-column>-->
<el-table-column label="表名称" align="center" prop="stabName"></el-table-column>
<el-table-column label="查询语句" align="center" prop="squery"></el-table-column>
<el-table-column label="分析方法" align="center" prop="sanalPlan"></el-table-column>
<el-table-column label="意图词" align="center" prop="sintntTerm"></el-table-column>
<el-table-column label="参考sql" align="center" prop="ssql"></el-table-column>
<el-table-column label="相似阈值" align="center" prop="simThrsh"></el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-switch v-model="scope.row.status"
active-value="1"
inactive-value="0" @change="changeStatus(scope.row)" />
</template>
</el-table-column>
<el-table-column label="负责人员" align="center" prop="updateBy"></el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template #default="scope">
<span>{{scope.row.updateTime.replace("T"," ")}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" prop="operation">
<template #default="scope">
<el-link type="primary" @click="handleEdit(scope.row)" :underline="false">修改</el-link>
<el-link type="danger" style="margin-left: 10px" @click="handleDelete([scope.row.onum])" :underline="false">删除</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<el-dialog
v-model="showDialog"
:title="currentForm.operate === 'ADD'?'新增字段':'编辑字段'"
width="800"
>
<el-form
v-if="showDialog"
:model="currentForm"
ref="formRef"
inline
:rules="rules"
label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="归属资产名:" prop="dassetId">
<el-select v-model="currentForm.dassetId" style="width: 250px;" clearable>
<el-option v-for="item in dassetList" :key="item.onum" :value="item.onum" :label="item.dassetName"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="表名:">
<el-input style="width: 250px;"
v-model="currentForm.stabName" clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="查询语句:" prop="squery">
<el-input style="width: 250px;"
v-model="currentForm.squery" clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分析方法:">
<el-input style="width: 250px;"
v-model="currentForm.sanalPlan" clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参考sql:">
<el-input style="width: 250px;"
v-model="currentForm.ssql" clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="意图词:">
<el-input style="width: 250px;"
v-model="currentForm.sintntTerm" clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="字段状态:">
<el-radio-group v-model="currentForm.status">
<el-radio value="1" size="large">正常</el-radio>
<el-radio value="0" size="large">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="相似阈值:">
<el-input style="width: 250px;"
v-model="currentForm.simThrsh" clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showDialog = false">取消</el-button>
<el-button type="primary" @click="handleSave">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog
v-model="showTreeDialog"
:title="currentTreeNode.operate === 'ADD'?'新增目录':'编辑目录'"
width="500"
>
<el-form
v-if="showTreeDialog"
:model="currentTreeNode"
ref="formRef"
:rules="dassetRules"
label-width="125px">
<el-form-item label="目录编码:" prop="dassetCode">
<el-input
v-model="currentTreeNode.dassetCode" clearable
/>
</el-form-item>
<el-form-item label="目录名称:" prop="dassetName">
<el-input
v-model="currentTreeNode.dassetName" clearable
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showTreeDialog = false">取消</el-button>
<el-button type="primary" @click="handleSaveTree">
确定
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import { getVecsetList, saveVecset, deleteVecset } from "@/api/dataint/vecset"
import { get_dasset_tree, saveDassetTreeNode } from "@/api/dataint/sscf"
const { proxy } = getCurrentInstance();
const queryParams = ref({
dassetId:'',
stabName:'',
squery:'',
sanalPlan:'',
status:'',
pageNum:1,
pageSize:10
})
const currentForm = ref({
operate: 'ADD',
dassetId:'',
stabName:'',
squery:'',
sanalPlan:'',
ssql:'',
sintntTerm:'',
status:'1',
simThrsh:'',
})
const rules = ref({
dassetId: [{required: true, message: '归属资产不能为空!', trigger: 'change',},],
squery: [{required: true, message: '查询语句不能为空!', trigger: 'change',},],
})
const dassetRules = ref({
dassetCode: [{required: true, message: 'code不能为空!', trigger: 'change',},],
dassetName: [{required: true, message: '名称不能为空!', trigger: 'change',},],
})
const multSelection =ref([])
const dassetOptions = ref([])
const dassetList = ref([])
const dasset =ref('')
const dataList = ref([])
const total = ref(0)
const showDialog = ref(false)
const showTreeDialog = ref(false)
const currentTreeNode = ref({})
function handleAddTree(){
showTreeDialog.value = true
currentTreeNode.value = {
operate: 'ADD',
dassetCode: '',
dassetName: ''
}
}
function handleEditTree(data){
currentTreeNode.value = data
currentTreeNode.value.operate = 'UPDATE'
showTreeDialog.value = true
}
function handleSaveTree(){
let param = {
operate: currentTreeNode.value.operate,
dassetCode: currentTreeNode.value.dassetCode,
dassetName: currentTreeNode.value.dassetName,
onum: currentTreeNode.value.onum
}
saveDassetTreeNode(param).then(res=>{
proxy.$modal.msgSuccess("操作成功")
showTreeDialog.value = false
get_tree_data()
})
}
function handleDeleteTree(data){
let param = {
onum: data.onum,
dassetCode: data.dassetCode,
operate: 'DELETE'
}
saveDassetTreeNode(param).then(res=>{
proxy.$modal.msgSuccess("操作成功")
get_tree_data()
})
}
function handleQuery(){
queryParams.value.pageNum = 1;
getList()
}
function getList(){
getVecsetList(queryParams.value).then(res=>{
dataList.value = res.data.rows
total.value = res.data.total
})
}
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.dassetId = data.onum;
handleQuery();
}
function resetQuery(){
queryParams.value = {
pos:'',
type:'',
stdRplStr:'',
status:'',
pageNum:1,
pageSize:10
}
handleQuery()
}
function handleAdd(){
showDialog.value = true
currentForm.value ={
operate: 'ADD',
dassetId:'',
status:'1',
keyword:'',
algorithm:'包含',
order:'True',
wholeSentence:'True',
type:'补充',
suppExpl:''
}
}
function handleEdit(row){
currentForm.value = JSON.parse(JSON.stringify(row))
currentForm.value.operate = 'UPDATE'
showDialog.value = true
}
function changeStatus(row){
let param = {
onum: row.onum,
status: row.status
}
saveVecset(param).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleSave(){
proxy.$refs.formRef.validate(valid => {
if (valid) {
saveVecset(currentForm.value).then(res=>{
proxy.$modal.msgSuccess("操作成功");
showDialog.value = false
getList()
})
}
});
}
function multDelete(){
let array = []
if (multSelection.value.length>0){
for (let i = 0; i < multSelection.value.length; i++) {
array.push(multSelection.value[i].onum)
}
handleDelete(array)
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function handleDelete(array){
deleteVecset(array).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function handleImport(){
}
function handleExport(){
}
function handleSelection(val){
multSelection.value= val
}
function get_tree_data(){
get_dasset_tree().then(res=>{
let treeList = res.data
if(treeList.length > 0){
let children = []
dassetOptions.value = []
for (let i = 0; i < treeList.length; i++) {
if (treeList[i].dassetCode === "1"){
dassetOptions.value.push(treeList[i])
}else {
children.push(treeList[i])
}
}
dassetOptions.value[0].children = children
dassetList.value = children
}
})
}
/** 通过条件过滤节点 */
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
onMounted(() => {
get_tree_data()
handleQuery()
})
</script>
<style scoped lang="scss">
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.tree-node__action {
padding: 0 8px;
display: flex;
justify-content: flex-end;
}
}
</style>
Loading…
Cancel
Save