全景地图地址修改
Showing
53 changed files
with
2444 additions
and
50 deletions
| ... | @@ -83,6 +83,9 @@ VITE_APP_ATTACHMENT_TEMPLATE = ms-daop-personel-service | ... | @@ -83,6 +83,9 @@ VITE_APP_ATTACHMENT_TEMPLATE = ms-daop-personel-service |
| 83 | #人员服务 | 83 | #人员服务 |
| 84 | VITE_APP_PERSONAL_URL = 'ms-daop-personel-service' | 84 | VITE_APP_PERSONAL_URL = 'ms-daop-personel-service' |
| 85 | 85 | ||
| 86 | #元数据标准 | ||
| 87 | VITE_APP_STANDARD_URL = 'ms-daop-meta-standard-service' | ||
| 88 | |||
| 86 | #流通平台地址 | 89 | #流通平台地址 |
| 87 | VITE_APP_CIRCULATION = https://daop-lt-test.zgsjzc.com/ | 90 | VITE_APP_CIRCULATION = https://daop-lt-test.zgsjzc.com/ |
| 88 | # 测试环境访问地址 | 91 | # 测试环境访问地址 |
| ... | @@ -91,7 +94,6 @@ VITE_APP_CIRCULATION = https://daop-lt-test.zgsjzc.com/ | ... | @@ -91,7 +94,6 @@ VITE_APP_CIRCULATION = https://daop-lt-test.zgsjzc.com/ |
| 91 | #数据加工交付 | 94 | #数据加工交付 |
| 92 | VITE_APP_DATA_DELIVERY = https://daop-jgjf-test.zgsjzc.com/ | 95 | VITE_APP_DATA_DELIVERY = https://daop-jgjf-test.zgsjzc.com/ |
| 93 | 96 | ||
| 94 | |||
| 95 | # 本地访问地址 | 97 | # 本地访问地址 |
| 96 | # VITE_API_CIRCULATION_URL = http://localhost:9000/circulation | 98 | # VITE_API_CIRCULATION_URL = http://localhost:9000/circulation |
| 97 | 99 | ... | ... |
| ... | @@ -110,6 +110,9 @@ VITE_API_ASSET_BASEURL = ms-swzl-data-dam-service | ... | @@ -110,6 +110,9 @@ VITE_API_ASSET_BASEURL = ms-swzl-data-dam-service |
| 110 | #数据同步接口地址 | 110 | #数据同步接口地址 |
| 111 | VITE_API_DATA_SYNC = ms-swzl-data-sync-service | 111 | VITE_API_DATA_SYNC = ms-swzl-data-sync-service |
| 112 | 112 | ||
| 113 | #元数据标准 | ||
| 114 | VITE_APP_STANDARD_URL = 'ms-daop-meta-standard-service' | ||
| 115 | |||
| 113 | #消息接口 | 116 | #消息接口 |
| 114 | VITE_API_MESSAGE = ms-daop-message-service | 117 | VITE_API_MESSAGE = ms-daop-message-service |
| 115 | 118 | ... | ... |
| ... | @@ -27,6 +27,7 @@ declare module '@vue/runtime-core' { | ... | @@ -27,6 +27,7 @@ declare module '@vue/runtime-core' { |
| 27 | FileUpload: typeof import('./src/components/FileUpload/index.vue')['default'] | 27 | FileUpload: typeof import('./src/components/FileUpload/index.vue')['default'] |
| 28 | FixedActionBar: typeof import('./src/components/FixedActionBar/index.vue')['default'] | 28 | FixedActionBar: typeof import('./src/components/FixedActionBar/index.vue')['default'] |
| 29 | Form: typeof import('./src/components/Form/index.vue')['default'] | 29 | Form: typeof import('./src/components/Form/index.vue')['default'] |
| 30 | GraphTopbar: typeof import('./src/components/RelationNetwork/graphTopbar.vue')['default'] | ||
| 30 | Hour: typeof import('./src/components/Schedule/component/hour.vue')['default'] | 31 | Hour: typeof import('./src/components/Schedule/component/hour.vue')['default'] |
| 31 | ImagePreview: typeof import('./src/components/ImagePreview/index.vue')['default'] | 32 | ImagePreview: typeof import('./src/components/ImagePreview/index.vue')['default'] |
| 32 | ImagesUpload: typeof import('./src/components/ImagesUpload/index.vue')['default'] | 33 | ImagesUpload: typeof import('./src/components/ImagesUpload/index.vue')['default'] |
| ... | @@ -41,6 +42,7 @@ declare module '@vue/runtime-core' { | ... | @@ -41,6 +42,7 @@ declare module '@vue/runtime-core' { |
| 41 | PageNav: typeof import('./src/components/PageNav/index.vue')['default'] | 42 | PageNav: typeof import('./src/components/PageNav/index.vue')['default'] |
| 42 | PcasCascader: typeof import('./src/components/PcasCascader/index.vue')['default'] | 43 | PcasCascader: typeof import('./src/components/PcasCascader/index.vue')['default'] |
| 43 | Popover: typeof import('./src/components/Popover/index.vue')['default'] | 44 | Popover: typeof import('./src/components/Popover/index.vue')['default'] |
| 45 | RelationNetwork: typeof import('./src/components/RelationNetwork/index.vue')['default'] | ||
| 44 | RouterLink: typeof import('vue-router')['RouterLink'] | 46 | RouterLink: typeof import('vue-router')['RouterLink'] |
| 45 | RouterView: typeof import('vue-router')['RouterView'] | 47 | RouterView: typeof import('vue-router')['RouterView'] |
| 46 | Schedule: typeof import('./src/components/Schedule/index.vue')['default'] | 48 | Schedule: typeof import('./src/components/Schedule/index.vue')['default'] | ... | ... |
| ... | @@ -552,3 +552,8 @@ export const getContractDetail = (params) => request({ | ... | @@ -552,3 +552,8 @@ export const getContractDetail = (params) => request({ |
| 552 | method: 'get', | 552 | method: 'get', |
| 553 | params | 553 | params |
| 554 | }) | 554 | }) |
| 555 | |||
| 556 | // 获取所有字典 | ||
| 557 | export const getDictAllList = () => request({ | ||
| 558 | url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-all` | ||
| 559 | }) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -249,3 +249,297 @@ export const delMetaDataSource = (databaseGuid) => request({ | ... | @@ -249,3 +249,297 @@ export const delMetaDataSource = (databaseGuid) => request({ |
| 249 | url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/meta-collect-task/del-by-database-guid?databaseGuid=${databaseGuid}`, | 249 | url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/meta-collect-task/del-by-database-guid?databaseGuid=${databaseGuid}`, |
| 250 | method: 'delete', | 250 | method: 'delete', |
| 251 | }) | 251 | }) |
| 252 | |||
| 253 | /** 元数据-标准代码分页查询 */ | ||
| 254 | export const getStandardCodeList = (params) => request({ | ||
| 255 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/page-list`, | ||
| 256 | method: 'post', | ||
| 257 | data: params | ||
| 258 | }) | ||
| 259 | /** 元数据-标准代码新增 */ | ||
| 260 | export const saveStandardCode = (params) => request({ | ||
| 261 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/save`, | ||
| 262 | method: 'post', | ||
| 263 | data: params | ||
| 264 | }) | ||
| 265 | /** 元数据-标准代码修改 */ | ||
| 266 | export const updateStandardCode = (params) => request({ | ||
| 267 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/update`, | ||
| 268 | method: 'put', | ||
| 269 | data: params | ||
| 270 | }) | ||
| 271 | /** 元数据-标准代码详情 */ | ||
| 272 | export const getStandardCodeDetail = (guid) => request({ | ||
| 273 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/detail?guid=${guid}`, | ||
| 274 | method: 'get', | ||
| 275 | }) | ||
| 276 | /** 元数据-标准代码删除 */ | ||
| 277 | export const deleteStandardCode = (params) => request({ | ||
| 278 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/delete`, | ||
| 279 | method: 'delete', | ||
| 280 | data: params | ||
| 281 | }) | ||
| 282 | /** 元数据-查询标准列表 */ | ||
| 283 | export const getStandardCodeStandard = (standardTypeCode) => request({ | ||
| 284 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/get-standard?standardTypeCode=${standardTypeCode}`, | ||
| 285 | method: 'get' | ||
| 286 | }) | ||
| 287 | /** 元数据-查询代码列表 */ | ||
| 288 | export const getStandardCodeDataList = (params) => request({ | ||
| 289 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/data/get-data`, | ||
| 290 | method: 'post', | ||
| 291 | data: params | ||
| 292 | }) | ||
| 293 | /** 元数据-查询代码字段数据 */ | ||
| 294 | export const getStandardCodeFields = (standardGuid) => request({ | ||
| 295 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/get-field?standardGuid=${standardGuid}`, | ||
| 296 | method: 'get' | ||
| 297 | }) | ||
| 298 | /** 元数据-保存标准代码数据 */ | ||
| 299 | export const saveStandardCodeFieldsData = (params) => request({ | ||
| 300 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/data/save-data`, | ||
| 301 | method: 'post', | ||
| 302 | data: params | ||
| 303 | }) | ||
| 304 | /** 元数据-删除标准代码数据 */ | ||
| 305 | export const deleteStandardCodeFieldsData = (params) => request({ | ||
| 306 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/data/remove-data`, | ||
| 307 | method: 'post', | ||
| 308 | data: params | ||
| 309 | }) | ||
| 310 | /** 元数据-导出 */ | ||
| 311 | export const exportStandardCodeData = (params) => request({ | ||
| 312 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/data/data-export`, | ||
| 313 | method: 'post', | ||
| 314 | data: params, | ||
| 315 | responseType: 'blob' | ||
| 316 | }) | ||
| 317 | /** 元数据标准-树形列表 */ | ||
| 318 | export const getMetaStandardTree = () => request({ | ||
| 319 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/list-tree`, | ||
| 320 | method: 'get' | ||
| 321 | }) | ||
| 322 | /** 元数据标准-新增 */ | ||
| 323 | export const saveMetaStandard = (params) => request({ | ||
| 324 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/save`, | ||
| 325 | method: 'post', | ||
| 326 | data: params | ||
| 327 | }) | ||
| 328 | /** 元数据标准-修改 */ | ||
| 329 | export const updateMetaStandard = (params) => request({ | ||
| 330 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/update`, | ||
| 331 | method: 'put', | ||
| 332 | data: params | ||
| 333 | }) | ||
| 334 | /** 元数据标准-删除 */ | ||
| 335 | export const deleteMetaStandard = (params) => request({ | ||
| 336 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/delete`, | ||
| 337 | method: 'delete', | ||
| 338 | data: params | ||
| 339 | }) | ||
| 340 | /** 元数据标准-详情 */ | ||
| 341 | export const getMetaStandardDetail = (guid) => request({ | ||
| 342 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/detail?guid=${guid}`, | ||
| 343 | method: 'get' | ||
| 344 | }) | ||
| 345 | /** 元数据标准-标准数据 */ | ||
| 346 | export const getMetaStandardDataList = (params) => request({ | ||
| 347 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/page-list`, | ||
| 348 | method: 'post', | ||
| 349 | data: params | ||
| 350 | }) | ||
| 351 | /** 元数据标准-标准字段 */ | ||
| 352 | export const getMetaStandardDataFields = (metaStandardGuid) => request({ | ||
| 353 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/get-standard-field?metaStandardGuid=${metaStandardGuid}`, | ||
| 354 | method: 'get' | ||
| 355 | }) | ||
| 356 | /** 元数据标准-标准字段保存 */ | ||
| 357 | export const saveMetaStandardDataFields = (params) => request({ | ||
| 358 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/save-or-update`, | ||
| 359 | method: 'post', | ||
| 360 | data: params | ||
| 361 | }) | ||
| 362 | /** 元数据标准-标准字段删除 */ | ||
| 363 | export const deleteMetaStandardDataFields = (params) => request({ | ||
| 364 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/del`, | ||
| 365 | method: 'delete', | ||
| 366 | data: params | ||
| 367 | }) | ||
| 368 | /** 元数据标准-导出 */ | ||
| 369 | export const exportMetaStandardData = (params) => request({ | ||
| 370 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/data-export`, | ||
| 371 | method: 'post', | ||
| 372 | data: params, | ||
| 373 | responseType: 'blob' | ||
| 374 | }) | ||
| 375 | /** 标准代码-树形表 */ | ||
| 376 | export const getStandardCodeTree = () => request({ | ||
| 377 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/standard-code/code-tree`, | ||
| 378 | method: 'get' | ||
| 379 | }) | ||
| 380 | |||
| 381 | /** 元数据标准树形列表查询 */ | ||
| 382 | export const getMetaStandardTreeList = (guid) => request({ | ||
| 383 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/list-tree?metaStandardGuid=${guid}`, | ||
| 384 | method: 'get' | ||
| 385 | }) | ||
| 386 | |||
| 387 | /** 元数据标准guid查询只展示的字段 */ | ||
| 388 | export const getMetaStandardField = (guid) => request({ | ||
| 389 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/list-by-meta-standard-guid?metaStandardGuid=${guid}`, | ||
| 390 | method: 'get' | ||
| 391 | }) | ||
| 392 | /** 元数据标准字段详情 */ | ||
| 393 | export const getMetaStandardFieldsDetail = (guid) => request({ | ||
| 394 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/detail?guid=${guid}`, | ||
| 395 | method: 'get' | ||
| 396 | }) | ||
| 397 | |||
| 398 | /** 根据元数据标准展示字段去获取未展示的详情信息 */ | ||
| 399 | export const getMetaStandardFieldDetail = (guid) => request({ | ||
| 400 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/data/convert-detail?guid=${guid}`, | ||
| 401 | method: 'get' | ||
| 402 | }) | ||
| 403 | |||
| 404 | /** 获取桑基图数据 */ | ||
| 405 | export const getSankeyData = (guid) => request({ | ||
| 406 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/sankey-data?metaStandardGuid=${guid}`, | ||
| 407 | method: 'get' | ||
| 408 | }) | ||
| 409 | |||
| 410 | /** 数仓目录树列表查询 */ | ||
| 411 | export const getDataWareCatalogList = (params) => request({ | ||
| 412 | // url: `${import.meta.env.VITE_APP_DATA_DELIVERY}delivery/ms-daop-data-plan-service/data-catalog-directory/tree-list`, | ||
| 413 | url: `${import.meta.env.VITE_API_BASEURL}delivery/api/ms-daop-data-plan-service/data-catalog-directory/tree-list`, | ||
| 414 | method: 'post', | ||
| 415 | data: params | ||
| 416 | }) | ||
| 417 | |||
| 418 | export const getAllFlowData = (dictType) => request({ | ||
| 419 | url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType?dictType=${dictType}`, | ||
| 420 | method: 'get', | ||
| 421 | }) | ||
| 422 | |||
| 423 | /** 元数据标准guid查询新建数据集字段 */ | ||
| 424 | export const getMetaStandardDsField = (guid) => request({ | ||
| 425 | url: `${import.meta.env.VITE_APP_STANDARD_URL}/meta-standard/get-standard?metaStandardGuid=${guid}`, | ||
| 426 | method: 'get' | ||
| 427 | }) | ||
| 428 | |||
| 429 | /** 表分类类型 */ | ||
| 430 | export const tableCategoryList = [ | ||
| 431 | { | ||
| 432 | value: 1, | ||
| 433 | label: "明细表", | ||
| 434 | }, | ||
| 435 | { | ||
| 436 | value: 2, | ||
| 437 | label: "汇总表", | ||
| 438 | }, | ||
| 439 | { | ||
| 440 | value: 3, | ||
| 441 | label: "应用表", | ||
| 442 | }, | ||
| 443 | { | ||
| 444 | value: 6, | ||
| 445 | label: "业务表", | ||
| 446 | }, | ||
| 447 | // { | ||
| 448 | // value: 4, | ||
| 449 | // label: "维度表", | ||
| 450 | // }, | ||
| 451 | // { | ||
| 452 | // value: 5, | ||
| 453 | // label: "缓慢变化维", | ||
| 454 | // } | ||
| 455 | ]; | ||
| 456 | |||
| 457 | /** 同步策略 */ | ||
| 458 | export const syncPolicys = [ | ||
| 459 | { | ||
| 460 | value: 1, | ||
| 461 | label: "实时", | ||
| 462 | }, | ||
| 463 | { | ||
| 464 | value: 2, | ||
| 465 | label: "增量", | ||
| 466 | }, | ||
| 467 | { | ||
| 468 | value: 3, | ||
| 469 | label: "全量", | ||
| 470 | }, | ||
| 471 | { | ||
| 472 | value: 4, | ||
| 473 | label: "增量加更新", | ||
| 474 | }, | ||
| 475 | ]; | ||
| 476 | |||
| 477 | /** 维表类型 */ | ||
| 478 | export const dimTypeList = [{ | ||
| 479 | label: "列表", | ||
| 480 | value: 1, | ||
| 481 | }, | ||
| 482 | { | ||
| 483 | label: "层级", | ||
| 484 | value: 2, | ||
| 485 | }, | ||
| 486 | { | ||
| 487 | label: "螺旋", | ||
| 488 | value: 3, | ||
| 489 | }, | ||
| 490 | { | ||
| 491 | label: "通用", | ||
| 492 | value: 4, | ||
| 493 | }]; | ||
| 494 | |||
| 495 | /** 表模型分类 */ | ||
| 496 | export const tableModels = [ | ||
| 497 | { | ||
| 498 | label: "主键模型", | ||
| 499 | value: 1, | ||
| 500 | }, | ||
| 501 | { | ||
| 502 | label: "聚合模型", | ||
| 503 | value: 2, | ||
| 504 | }, | ||
| 505 | { | ||
| 506 | label: "明细模型", | ||
| 507 | value: 3, | ||
| 508 | } | ||
| 509 | ]; | ||
| 510 | |||
| 511 | /** 聚合方式 */ | ||
| 512 | export const aggMethodList = [{ | ||
| 513 | value: 'SUM', | ||
| 514 | }, { | ||
| 515 | value: 'MAX' | ||
| 516 | }, { | ||
| 517 | value: 'MIN' | ||
| 518 | }, { | ||
| 519 | value: 'REPLACE' | ||
| 520 | }, { | ||
| 521 | value: 'REPLACE_IF_NOT_NULL' | ||
| 522 | }, { | ||
| 523 | value: 'HLL_UNION' | ||
| 524 | }, { | ||
| 525 | value: 'BITMAP_UNION' | ||
| 526 | }]; | ||
| 527 | |||
| 528 | /** 保存主题表设置,直接入库 */ | ||
| 529 | export const saveSubjectTable = (params) => request({ | ||
| 530 | url: `${import.meta.env.VITE_API_BASEURL}delivery/api/ms-daop-data-plan-service/data-catalog-subject/add`, | ||
| 531 | method: 'post', | ||
| 532 | data: params | ||
| 533 | }) | ||
| 534 | |||
| 535 | /** 获取字典列表 */ | ||
| 536 | export const getDictionary = (params) => request({ | ||
| 537 | url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/data-dictionary-general/list-all?state=1`, | ||
| 538 | method: 'post' | ||
| 539 | }) | ||
| 540 | |||
| 541 | /** 获取维度列表 */ | ||
| 542 | export const getDimList = () => request({ | ||
| 543 | url: `${import.meta.env.VITE_API_BASEURL}delivery/api/ms-daop-data-plan-service/data-catalog-subject/get-dim-list`, | ||
| 544 | method: 'get' | ||
| 545 | }) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/api/modules/dataPricing.ts
0 → 100644
| 1 | import request from "@/utils/request"; | ||
| 2 | |||
| 3 | //获取需求表树形列表 | ||
| 4 | export const getDemandTreeList = (params) => { | ||
| 5 | return request({ | ||
| 6 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-menu/page-list`, | ||
| 7 | method: "post", | ||
| 8 | data: params, | ||
| 9 | }); | ||
| 10 | }; | ||
| 11 | |||
| 12 | //获取所有需求表列表 | ||
| 13 | export const getDemandAll = (params) => { | ||
| 14 | return request({ | ||
| 15 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-menu/get-list-data`, | ||
| 16 | method: "get", | ||
| 17 | params | ||
| 18 | }); | ||
| 19 | }; | ||
| 20 | |||
| 21 | //新增需求列表 | ||
| 22 | export const saveDemandTree = (params) => { | ||
| 23 | return request({ | ||
| 24 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-menu/save`, | ||
| 25 | method: "post", | ||
| 26 | data: params, | ||
| 27 | }); | ||
| 28 | }; | ||
| 29 | |||
| 30 | //修改需求列表 | ||
| 31 | export const updateDemandTree = (params) => { | ||
| 32 | return request({ | ||
| 33 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-menu/update`, | ||
| 34 | method: "post", | ||
| 35 | data: params, | ||
| 36 | }); | ||
| 37 | }; | ||
| 38 | |||
| 39 | // 删除需求列表 | ||
| 40 | export const deleteDemandTree = (params) => { | ||
| 41 | return request({ | ||
| 42 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-menu/delete`, | ||
| 43 | method: "delete", | ||
| 44 | data: params, | ||
| 45 | }); | ||
| 46 | }; | ||
| 47 | |||
| 48 | //获取需求表 | ||
| 49 | export const getDemandList = (params) => { | ||
| 50 | return request({ | ||
| 51 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-table/page-list`, | ||
| 52 | method: "post", | ||
| 53 | data: params, | ||
| 54 | }); | ||
| 55 | }; | ||
| 56 | |||
| 57 | //获取需求表详情 | ||
| 58 | export const getDemandDetail = (params) => { | ||
| 59 | return request({ | ||
| 60 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-table/detail`, | ||
| 61 | method: "get", | ||
| 62 | params, | ||
| 63 | }); | ||
| 64 | }; | ||
| 65 | |||
| 66 | //新增需求表 | ||
| 67 | export const saveDemand = (params) => { | ||
| 68 | return request({ | ||
| 69 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-table/save`, | ||
| 70 | method: "post", | ||
| 71 | data: params, | ||
| 72 | }); | ||
| 73 | }; | ||
| 74 | |||
| 75 | //修改需求表 | ||
| 76 | export const updateDemand = (params) => { | ||
| 77 | return request({ | ||
| 78 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-table/update`, | ||
| 79 | method: "post", | ||
| 80 | data: params, | ||
| 81 | }); | ||
| 82 | }; | ||
| 83 | |||
| 84 | // 删除需求表 | ||
| 85 | export const deleteDemand = (params) => { | ||
| 86 | return request({ | ||
| 87 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-demand-table/delete`, | ||
| 88 | method: "delete", | ||
| 89 | data: params, | ||
| 90 | }); | ||
| 91 | }; | ||
| 92 | |||
| 93 | // 获取疾病列表 | ||
| 94 | export const getDiseaseList = (params) => { | ||
| 95 | return request({ | ||
| 96 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/disease-manage/page-list`, | ||
| 97 | method: "post", | ||
| 98 | data: params, | ||
| 99 | }); | ||
| 100 | }; | ||
| 101 | |||
| 102 | //获取所有疾病列表 | ||
| 103 | export const getDiseaseAll = () => { | ||
| 104 | return request({ | ||
| 105 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/disease-manage/get-list-data`, | ||
| 106 | method: "post" | ||
| 107 | }); | ||
| 108 | }; | ||
| 109 | |||
| 110 | // 获取疾病详情 | ||
| 111 | export const getDiseaseDetail = (params) => { | ||
| 112 | return request({ | ||
| 113 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/disease-manage/detail`, | ||
| 114 | method: "get", | ||
| 115 | params, | ||
| 116 | }); | ||
| 117 | }; | ||
| 118 | |||
| 119 | // 新增疾病 | ||
| 120 | export const saveDisease = (params) => { | ||
| 121 | return request({ | ||
| 122 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/disease-manage/save`, | ||
| 123 | method: "post", | ||
| 124 | data: params, | ||
| 125 | }); | ||
| 126 | }; | ||
| 127 | |||
| 128 | // 修改疾病 | ||
| 129 | export const updateDisease = (params) => { | ||
| 130 | return request({ | ||
| 131 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/disease-manage/update`, | ||
| 132 | method: "post", | ||
| 133 | data: params, | ||
| 134 | }); | ||
| 135 | }; | ||
| 136 | |||
| 137 | // 删除疾病 | ||
| 138 | export const deleteDisease = (params) => { | ||
| 139 | return request({ | ||
| 140 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/disease-manage/delete`, | ||
| 141 | method: "delete", | ||
| 142 | data: params, | ||
| 143 | }); | ||
| 144 | }; | ||
| 145 | |||
| 146 | // 获取定价配置 | ||
| 147 | export const getConfigureList = (params) => { | ||
| 148 | return request({ | ||
| 149 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/page-list`, | ||
| 150 | method: "post", | ||
| 151 | data: params, | ||
| 152 | }); | ||
| 153 | }; | ||
| 154 | |||
| 155 | // 获取配置详情 | ||
| 156 | export const getConfigureDetail = (params) => { | ||
| 157 | return request({ | ||
| 158 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/detail`, | ||
| 159 | method: "get", | ||
| 160 | params, | ||
| 161 | }); | ||
| 162 | }; | ||
| 163 | |||
| 164 | // 新增配置 | ||
| 165 | export const saveConfigure = (params) => { | ||
| 166 | return request({ | ||
| 167 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/save`, | ||
| 168 | method: "post", | ||
| 169 | data: params, | ||
| 170 | }); | ||
| 171 | }; | ||
| 172 | |||
| 173 | // 修改配置 | ||
| 174 | export const updateConfigure = (params) => { | ||
| 175 | return request({ | ||
| 176 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/update`, | ||
| 177 | method: "post", | ||
| 178 | data: params, | ||
| 179 | }); | ||
| 180 | }; | ||
| 181 | |||
| 182 | // 删除配置 | ||
| 183 | export const deleteConfigure = (params) => { | ||
| 184 | return request({ | ||
| 185 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/delete`, | ||
| 186 | method: "delete", | ||
| 187 | data: params, | ||
| 188 | }); | ||
| 189 | }; | ||
| 190 | |||
| 191 | // 复制配置 | ||
| 192 | export const addCopyConfigure = (params) => { | ||
| 193 | return request({ | ||
| 194 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/copy`, | ||
| 195 | method: "post", | ||
| 196 | data: params, | ||
| 197 | }); | ||
| 198 | }; | ||
| 199 | |||
| 200 | // 获取数据定价 | ||
| 201 | export const getPriceList = (params) => { | ||
| 202 | return request({ | ||
| 203 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/page-list`, | ||
| 204 | method: "post", | ||
| 205 | data: params, | ||
| 206 | }); | ||
| 207 | }; | ||
| 208 | |||
| 209 | // 获取数据定价详情 | ||
| 210 | export const getPriceDetail = (params) => { | ||
| 211 | return request({ | ||
| 212 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/detail`, | ||
| 213 | method: "get", | ||
| 214 | params, | ||
| 215 | }); | ||
| 216 | }; | ||
| 217 | |||
| 218 | // 新增数据定价 | ||
| 219 | export const savePrice = (params) => { | ||
| 220 | return request({ | ||
| 221 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/save`, | ||
| 222 | method: "post", | ||
| 223 | data: params, | ||
| 224 | }); | ||
| 225 | }; | ||
| 226 | |||
| 227 | // 修改数据定价 | ||
| 228 | export const updatePrice = (params) => { | ||
| 229 | return request({ | ||
| 230 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/update`, | ||
| 231 | method: "post", | ||
| 232 | data: params, | ||
| 233 | }); | ||
| 234 | }; | ||
| 235 | |||
| 236 | // 获取数据定价结果 | ||
| 237 | export const getPriceResult = (params) => { | ||
| 238 | return request({ | ||
| 239 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/pricing-price`, | ||
| 240 | method: "post", | ||
| 241 | data: params, | ||
| 242 | }); | ||
| 243 | }; | ||
| 244 | |||
| 245 | // 删除数据定价 | ||
| 246 | export const deletePrice = (params) => { | ||
| 247 | return request({ | ||
| 248 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/delete`, | ||
| 249 | method: "delete", | ||
| 250 | data: params, | ||
| 251 | }); | ||
| 252 | }; | ||
| 253 | |||
| 254 | // 获取数据资源目录 | ||
| 255 | export const getDamCatalogList = (params) => { | ||
| 256 | return request({ | ||
| 257 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/get-table-select-new`, | ||
| 258 | method: "get", | ||
| 259 | params, | ||
| 260 | }); | ||
| 261 | }; | ||
| 262 | |||
| 263 | // 获取模型相关需求表 | ||
| 264 | export const getModelDemand = (params) => { | ||
| 265 | return request({ | ||
| 266 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/pricing-model`, | ||
| 267 | method: "get", | ||
| 268 | params, | ||
| 269 | }); | ||
| 270 | }; | ||
| 271 | |||
| 272 | // 获取质量模型评分 | ||
| 273 | export const getModelScore = (params) => { | ||
| 274 | return request({ | ||
| 275 | url: `${import.meta.env.VITE_APP_QUALITY_BASEURL}/quality-analysis-report/get-quality-score-by-dam-guid-v2`, | ||
| 276 | method: "get", | ||
| 277 | params, | ||
| 278 | }); | ||
| 279 | }; | ||
| 280 | |||
| 281 | export const exportModelScore = (params) => { | ||
| 282 | return request({ | ||
| 283 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-data/download-template`, | ||
| 284 | method: "post", | ||
| 285 | data: params, | ||
| 286 | responseType: 'blob' | ||
| 287 | }); | ||
| 288 | }; |
| ... | @@ -303,3 +303,10 @@ export const getCurrentUserInfo = (params) => { | ... | @@ -303,3 +303,10 @@ export const getCurrentUserInfo = (params) => { |
| 303 | params | 303 | params |
| 304 | }); | 304 | }); |
| 305 | }; | 305 | }; |
| 306 | |||
| 307 | /** 下载文件模板 */ | ||
| 308 | export const exportTemplate = (params) => request({ | ||
| 309 | url: `${import.meta.env.VITE_APP_ADD_FILE}/import-config/export-template?bizGuid=${params.bizGuid}&importType=${params.importType}`, | ||
| 310 | method: 'post', | ||
| 311 | responseType: 'blob' | ||
| 312 | }); | ... | ... |
| ... | @@ -1182,3 +1182,12 @@ | ... | @@ -1182,3 +1182,12 @@ |
| 1182 | max-width: 100%; | 1182 | max-width: 100%; |
| 1183 | } | 1183 | } |
| 1184 | } | 1184 | } |
| 1185 | |||
| 1186 | .el-drawer__title { | ||
| 1187 | font-size: 18px; | ||
| 1188 | color: #212121; | ||
| 1189 | } | ||
| 1190 | .el-form-item--default .el-form-item__label { | ||
| 1191 | height: 26px; | ||
| 1192 | line-height: 26px; | ||
| 1193 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -44,6 +44,7 @@ const emits = defineEmits([ | ... | @@ -44,6 +44,7 @@ const emits = defineEmits([ |
| 44 | "uploadBtnClick", | 44 | "uploadBtnClick", |
| 45 | "beforeUPload", | 45 | "beforeUPload", |
| 46 | "uploadFile", | 46 | "uploadFile", |
| 47 | 'deleteFile', | ||
| 47 | "onUpload", | 48 | "onUpload", |
| 48 | "scheduleChange", | 49 | "scheduleChange", |
| 49 | "cascaderChange", | 50 | "cascaderChange", |
| ... | @@ -668,7 +669,7 @@ defineExpose({ | ... | @@ -668,7 +669,7 @@ defineExpose({ |
| 668 | <template v-else-if="con.type.indexOf('upload') > -1"> | 669 | <template v-else-if="con.type.indexOf('upload') > -1"> |
| 669 | <UploadFiles ref="formUploadRef" :upload-info="con.uploadInfo" @onUpload="onUpload" | 670 | <UploadFiles ref="formUploadRef" :upload-info="con.uploadInfo" @onUpload="onUpload" |
| 670 | @beforeUPload="beforeUPload" @uploadFile="uploadFile" @uploadBtnClick="uploadBtnClick" | 671 | @beforeUPload="beforeUPload" @uploadFile="uploadFile" @uploadBtnClick="uploadBtnClick" |
| 671 | @cascaderChange="cascaderChange" @selectChange="uploadSelectChange" /> | 672 | @cascaderChange="cascaderChange" @selectChange="uploadSelectChange" @deleteFile="() => emits('deleteFile')"/> |
| 672 | </template> | 673 | </template> |
| 673 | <template v-else> | 674 | <template v-else> |
| 674 | <div v-if="con.formInfo.tools"> | 675 | <div v-if="con.formInfo.tools"> | ... | ... |
| ... | @@ -70,7 +70,15 @@ const onMouseOver = (str) => { | ... | @@ -70,7 +70,15 @@ const onMouseOver = (str) => { |
| 70 | </script> | 70 | </script> |
| 71 | 71 | ||
| 72 | <template> | 72 | <template> |
| 73 | <el-tooltip class="item" placement="top" effect="light" :popper-class="popperClass ?? 'table_tooltip'" :disabled="isShowTooltip" :open-delay="400" :content="content"> | 73 | <el-tooltip |
| 74 | class="item" | ||
| 75 | placement="top" | ||
| 76 | effect="light" | ||
| 77 | :popper-class="popperClass ?? 'table_tooltip'" | ||
| 78 | :disabled="isShowTooltip" | ||
| 79 | :open-delay="400" | ||
| 80 | :content="content" | ||
| 81 | > | ||
| 74 | <p class="over-flow" :class="className" @mouseover="onMouseOver(refName)"> | 82 | <p class="over-flow" :class="className" @mouseover="onMouseOver(refName)"> |
| 75 | <span :ref="(el) => setRefMap(el, refName)" v-html="content || '-'"></span> | 83 | <span :ref="(el) => setRefMap(el, refName)" v-html="content || '-'"></span> |
| 76 | </p> | 84 | </p> |
| ... | @@ -92,3 +100,9 @@ p { | ... | @@ -92,3 +100,9 @@ p { |
| 92 | margin: 0; | 100 | margin: 0; |
| 93 | } | 101 | } |
| 94 | </style> | 102 | </style> |
| 103 | |||
| 104 | <style lang="scss"> | ||
| 105 | .el-popper.tree-popper { | ||
| 106 | max-width: 280px!important; | ||
| 107 | } | ||
| 108 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -741,6 +741,7 @@ onMounted(() => { | ... | @@ -741,6 +741,7 @@ onMounted(() => { |
| 741 | toolRef.value.isFull = true | 741 | toolRef.value.isFull = true |
| 742 | } | 742 | } |
| 743 | }, 500) | 743 | }, 500) |
| 744 | return; | ||
| 744 | } | 745 | } |
| 745 | const container: any = containerRef.value; | 746 | const container: any = containerRef.value; |
| 746 | const width = container.clientWidth; | 747 | const width = container.clientWidth; | ... | ... |
| 1 | <script lang="ts" setup name="topbar"> | ||
| 2 | import { ref, watch } from 'vue'; | ||
| 3 | |||
| 4 | const props = defineProps({ | ||
| 5 | isGraphDisplay: { | ||
| 6 | type: Boolean, | ||
| 7 | default: true | ||
| 8 | }, | ||
| 9 | }); | ||
| 10 | |||
| 11 | const isGraph = ref(false); | ||
| 12 | |||
| 13 | watch(() => props.isGraphDisplay, (val) => { | ||
| 14 | isGraph.value = val; | ||
| 15 | }, { | ||
| 16 | immediate: true | ||
| 17 | }) | ||
| 18 | |||
| 19 | const emits = defineEmits(["displaySwitchChange"]); | ||
| 20 | |||
| 21 | const switchChange = (val) => { | ||
| 22 | isGraph.value = val | ||
| 23 | emits('displaySwitchChange', val); | ||
| 24 | } | ||
| 25 | |||
| 26 | </script> | ||
| 27 | |||
| 28 | <template> | ||
| 29 | <div className='g6-component-topbar-content'> | ||
| 30 | <div :class="isGraph ? 'selected g6-component-topbar-item' : 'g6-component-topbar-item'" @click="switchChange(true)"> | ||
| 31 | 关系网 | ||
| 32 | </div> | ||
| 33 | <div :class="!isGraph ? 'selected g6-component-topbar-item' : 'g6-component-topbar-item'" @click="switchChange(false)"> | ||
| 34 | 桑基图 | ||
| 35 | </div> | ||
| 36 | </div> | ||
| 37 | </template> | ||
| 38 | |||
| 39 | <style scoped lang="scss"> | ||
| 40 | .g6-component-topbar-content { | ||
| 41 | display: flex; | ||
| 42 | flex-direction: row; | ||
| 43 | justify-content: center; | ||
| 44 | align-items: center; | ||
| 45 | background: #fff; | ||
| 46 | border: 1px solid var(--el-color-primary); | ||
| 47 | border-radius: 32px; | ||
| 48 | padding: 4px; | ||
| 49 | width: 138px; | ||
| 50 | height: 32px; | ||
| 51 | } | ||
| 52 | |||
| 53 | .g6-component-topbar-item { | ||
| 54 | width: 50%; | ||
| 55 | height: 100%; | ||
| 56 | display: flex; | ||
| 57 | align-items: center; | ||
| 58 | justify-content: center; | ||
| 59 | font-size: 14px; | ||
| 60 | color: #999999; | ||
| 61 | cursor: pointer; | ||
| 62 | |||
| 63 | &.selected { | ||
| 64 | background: #4FA1A4; | ||
| 65 | border-radius: 32px; | ||
| 66 | color: #fff; | ||
| 67 | } | ||
| 68 | } | ||
| 69 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
src/components/RelationNetwork/index.vue
0 → 100644
This diff is collapsed.
Click to expand it.
| ... | @@ -248,6 +248,7 @@ onMounted(() => { | ... | @@ -248,6 +248,7 @@ onMounted(() => { |
| 248 | :show-header="props.tableInfo.showHeader ?? true" stripe :border="props.tableInfo.border | 248 | :show-header="props.tableInfo.showHeader ?? true" stripe :border="props.tableInfo.border |
| 249 | ?? true" :height="props.tableInfo.height === null ? null : (props.tableInfo.height ?? '100%')" | 249 | ?? true" :height="props.tableInfo.height === null ? null : (props.tableInfo.height ?? '100%')" |
| 250 | :max-height="maxHeight" :row-key="rowKey" :current-row-key="currentRowKey" :row-class-name="rowClassName" | 250 | :max-height="maxHeight" :row-key="rowKey" :current-row-key="currentRowKey" :row-class-name="rowClassName" |
| 251 | :tree-props="props.tableInfo.treeProps" :default-expand-all="props.tableInfo.expandAll ?? false" | ||
| 251 | :expand-row-keys="props.tableInfo.expandedKey" v-loading="tableDataLoading" @row-click="rowClick" | 252 | :expand-row-keys="props.tableInfo.expandedKey" v-loading="tableDataLoading" @row-click="rowClick" |
| 252 | @row-dblclick="rowDblClick" @selection-change="selectionChange" @select="tableCheckboxSelectChange" | 253 | @row-dblclick="rowDblClick" @selection-change="selectionChange" @select="tableCheckboxSelectChange" |
| 253 | @select-all="tableCheckboxAllSelectChange" style="width: 100%; display: inline-block" | 254 | @select-all="tableCheckboxAllSelectChange" style="width: 100%; display: inline-block" | ... | ... |
| ... | @@ -42,20 +42,20 @@ const checkKeys = computed(() => { | ... | @@ -42,20 +42,20 @@ const checkKeys = computed(() => { |
| 42 | return props.treeInfo.checkedKey ?? [] | 42 | return props.treeInfo.checkedKey ?? [] |
| 43 | }); | 43 | }); |
| 44 | const currentNodeKey = computed(() => { | 44 | const currentNodeKey = computed(() => { |
| 45 | // if (props.treeInfo.currentNodeKey) { | 45 | if (props.treeInfo.currentNodeKey) { |
| 46 | // nextTick(() => { | 46 | nextTick(() => { |
| 47 | // let domItems = treeRef.value?.$el.getElementsByClassName('el-tree-node'); | 47 | let domItems = treeRef.value?.$el.getElementsByClassName('el-tree-node'); |
| 48 | // let clientHeight = treeRef.value?.$el.clientHeight; | 48 | let clientHeight = treeRef.value?.$el.clientHeight; |
| 49 | // for (const item of domItems) { | 49 | for (const item of domItems) { |
| 50 | // if (item.getAttribute('data-key') == props.treeInfo.currentNodeKey) { | 50 | if (item.getAttribute('data-key') == props.treeInfo.currentNodeKey) { |
| 51 | // if (item.offsetTop > clientHeight) { | 51 | if (item.offsetTop > clientHeight) { |
| 52 | // item.scrollIntoView({ block: "end", inline: "nearest" }); | 52 | item.scrollIntoView({ block: "end", inline: "nearest" }); |
| 53 | // } | 53 | } |
| 54 | // break; | 54 | break; |
| 55 | // } | 55 | } |
| 56 | // } | 56 | } |
| 57 | // }) | 57 | }) |
| 58 | // } | 58 | } |
| 59 | return props.treeInfo.currentNodeKey ?? '' | 59 | return props.treeInfo.currentNodeKey ?? '' |
| 60 | }); | 60 | }); |
| 61 | const customInfo = computed(() => { | 61 | const customInfo = computed(() => { |
| ... | @@ -70,6 +70,9 @@ const editTreeItem = computed(() => { | ... | @@ -70,6 +70,9 @@ const editTreeItem = computed(() => { |
| 70 | const expendAll = computed(() => { | 70 | const expendAll = computed(() => { |
| 71 | return props.treeInfo.expendAll ?? false | 71 | return props.treeInfo.expendAll ?? false |
| 72 | }) | 72 | }) |
| 73 | const ellipsis = computed(() => { | ||
| 74 | return props.treeInfo.ellipsis ?? true | ||
| 75 | }) | ||
| 73 | 76 | ||
| 74 | interface Tree { | 77 | interface Tree { |
| 75 | [key: string]: any; | 78 | [key: string]: any; |
| ... | @@ -182,6 +185,21 @@ const appendChildren = (key, data) => { | ... | @@ -182,6 +185,21 @@ const appendChildren = (key, data) => { |
| 182 | 185 | ||
| 183 | const visibleNodes = ref({}); //解决点击树item,下拉菜单不消失的问题,原因是树的点击事件阻止冒泡了。 | 186 | const visibleNodes = ref({}); //解决点击树item,下拉菜单不消失的问题,原因是树的点击事件阻止冒泡了。 |
| 184 | 187 | ||
| 188 | function formatNodeLabel (node) { | ||
| 189 | let sliceLength = 8 | ||
| 190 | switch (node.level) { | ||
| 191 | case 2: | ||
| 192 | sliceLength = 9 | ||
| 193 | break | ||
| 194 | case 3: | ||
| 195 | sliceLength = 6 | ||
| 196 | break | ||
| 197 | case 4: | ||
| 198 | sliceLength = 6 | ||
| 199 | break | ||
| 200 | } | ||
| 201 | return node.label.slice(0, sliceLength) | ||
| 202 | } | ||
| 185 | defineExpose({ | 203 | defineExpose({ |
| 186 | getCheckedNodes, | 204 | getCheckedNodes, |
| 187 | getCheckedKeys, | 205 | getCheckedKeys, |
| ... | @@ -225,8 +243,14 @@ defineExpose({ | ... | @@ -225,8 +243,14 @@ defineExpose({ |
| 225 | </span> | 243 | </span> |
| 226 | <template v-else-if="editTreeItem && data.showEdit !== false"> | 244 | <template v-else-if="editTreeItem && data.showEdit !== false"> |
| 227 | <span class="list-item-text"> | 245 | <span class="list-item-text"> |
| 228 | <ellipsis-tooltip v-if="!customInfo" :content="node.label" class-name="w100f" | 246 | <template v-if="!ellipsis"> |
| 247 | <span>{{ formatNodeLabel(node) }}</span> | ||
| 248 | </template> | ||
| 249 | <template v-else> | ||
| 250 | <ellipsis-tooltip v-if="!customInfo" :content="node.label" class-name="w100f" popper-class="tree-popper" | ||
| 229 | :refName="'tooltipOver' + node.id"></ellipsis-tooltip> | 251 | :refName="'tooltipOver' + node.id"></ellipsis-tooltip> |
| 252 | </template> | ||
| 253 | |||
| 230 | </span> | 254 | </span> |
| 231 | <div class="tags-list-right" :class="visibleNodes[node.data.guid] ? 'active' : ''"> | 255 | <div class="tags-list-right" :class="visibleNodes[node.data.guid] ? 'active' : ''"> |
| 232 | <el-popover v-model:visible="visibleNodes[node.data.guid]" placement="bottom" width="96" trigger="click" | 256 | <el-popover v-model:visible="visibleNodes[node.data.guid]" placement="bottom" width="96" trigger="click" | ... | ... |
| ... | @@ -4,7 +4,7 @@ import { ElMessage, genFileId } from "element-plus"; | ... | @@ -4,7 +4,7 @@ import { ElMessage, genFileId } from "element-plus"; |
| 4 | import { Plus, Download, Upload, } from "@element-plus/icons-vue"; | 4 | import { Plus, Download, Upload, } from "@element-plus/icons-vue"; |
| 5 | import type { UploadRawFile } from 'element-plus' | 5 | import type { UploadRawFile } from 'element-plus' |
| 6 | 6 | ||
| 7 | const emits = defineEmits(["onUpload", "beforeUPload", "uploadFile", "uploadBtnClick", "cascaderChange", "selectChange"]); | 7 | const emits = defineEmits(["onUpload", "beforeUPload", "uploadFile", "uploadBtnClick", "cascaderChange", "selectChange", 'deleteFile']); |
| 8 | const props = defineProps({ | 8 | const props = defineProps({ |
| 9 | uploadInfo: { | 9 | uploadInfo: { |
| 10 | type: Object, | 10 | type: Object, |
| ... | @@ -75,6 +75,7 @@ const btnClick = (file, type) => { | ... | @@ -75,6 +75,7 @@ const btnClick = (file, type) => { |
| 75 | if (type == 'remove') { | 75 | if (type == 'remove') { |
| 76 | const fileUpload = fileUploadRef.value[0] || fileUploadRef.value | 76 | const fileUpload = fileUploadRef.value[0] || fileUploadRef.value |
| 77 | fileUpload?.handleRemove(file) | 77 | fileUpload?.handleRemove(file) |
| 78 | emits('deleteFile') | ||
| 78 | } else if (type == 'upload') { | 79 | } else if (type == 'upload') { |
| 79 | file.show = false | 80 | file.show = false |
| 80 | emits('uploadFile', file) | 81 | emits('uploadFile', file) |
| ... | @@ -113,11 +114,14 @@ defineExpose({ | ... | @@ -113,11 +114,14 @@ defineExpose({ |
| 113 | <span class="item_label" :class="{ required_mark: item.selectInfo.required }">{{ item.selectInfo.label | 114 | <span class="item_label" :class="{ required_mark: item.selectInfo.required }">{{ item.selectInfo.label |
| 114 | }}:</span> | 115 | }}:</span> |
| 115 | <el-select v-model="extraParams[item.selectInfo.field]" :placeholder="item.selectInfo.placeholder" | 116 | <el-select v-model="extraParams[item.selectInfo.field]" :placeholder="item.selectInfo.placeholder" |
| 116 | :disabled="item.selectInfo.disabled" @change="selectChange"> | 117 | :disabled="item.selectInfo.disabled" @change="selectChange" :filterable="item.selectInfo.filterable" :style="item.selectInfo.style"> |
| 117 | <el-option v-for="opts in item.selectInfo.options" :label="opts.label" :value="opts.value" /> | 118 | <el-option v-for="opts in item.selectInfo.options" |
| 119 | :label="item.selectInfo.props?.label ? opts[item.selectInfo.props.label] : opts.label" | ||
| 120 | :value="item.selectInfo.props?.value ? opts[item.selectInfo.props.value] : opts.value" | ||
| 121 | :disabled="opts.disabled" /> | ||
| 118 | </el-select> | 122 | </el-select> |
| 119 | </div> | 123 | </div> |
| 120 | <div class="form_item" v-if="item.type == 'tree-select'"> | 124 | <div class="form_item" v-else-if="item.type == 'tree-select'"> |
| 121 | <span class="item_label" :class="{ required_mark: item.selectInfo.required }">{{ item.selectInfo.label | 125 | <span class="item_label" :class="{ required_mark: item.selectInfo.required }">{{ item.selectInfo.label |
| 122 | }}:</span> | 126 | }}:</span> |
| 123 | <el-tree-select | 127 | <el-tree-select |
| ... | @@ -176,7 +180,7 @@ defineExpose({ | ... | @@ -176,7 +180,7 @@ defineExpose({ |
| 176 | </el-button> | 180 | </el-button> |
| 177 | </div> | 181 | </div> |
| 178 | <el-upload v-else ref="fileUploadRef" class="upload_panel" :class="[props.uploadInfo.col]" | 182 | <el-upload v-else ref="fileUploadRef" class="upload_panel" :class="[props.uploadInfo.col]" |
| 179 | v-model:file-list="fileList" :action="item.uploadInfo.action" :auto-upload="item.uploadInfo.auto ?? ''" | 183 | v-model:file-list="fileList" :action="item.uploadInfo.action ?? ''" :auto-upload="item.uploadInfo.auto ?? ''" |
| 180 | :drag="item.uploadInfo.drag ?? false" :accept="item.uploadInfo.accept" :limit="item.uploadInfo.limit ?? 1" | 184 | :drag="item.uploadInfo.drag ?? false" :accept="item.uploadInfo.accept" :limit="item.uploadInfo.limit ?? 1" |
| 181 | :on-change="onUpload" :on-exceed="val => exceedFile(val, item.uploadInfo.cover ?? false)" | 185 | :on-change="onUpload" :on-exceed="val => exceedFile(val, item.uploadInfo.cover ?? false)" |
| 182 | :on-error="handleError" :on-success="handleSuccess" :before-upload="beforeUPload" | 186 | :on-error="handleError" :on-success="handleSuccess" :before-upload="beforeUPload" | ... | ... |
| ... | @@ -4,6 +4,7 @@ import { useRouter } from "vue-router"; | ... | @@ -4,6 +4,7 @@ import { useRouter } from "vue-router"; |
| 4 | import useUserStore from "@/store/modules/user"; | 4 | import useUserStore from "@/store/modules/user"; |
| 5 | import useKeepAliveStore from '@/store/modules/keepAlive' | 5 | import useKeepAliveStore from '@/store/modules/keepAlive' |
| 6 | import { ElMessageBox, ElMessage } from "element-plus"; | 6 | import { ElMessageBox, ElMessage } from "element-plus"; |
| 7 | import { isEqual } from "lodash-es"; | ||
| 7 | 8 | ||
| 8 | const router = useRouter(); | 9 | const router = useRouter(); |
| 9 | const route = useRoute(); | 10 | const route = useRoute(); |
| ... | @@ -26,7 +27,7 @@ watch( | ... | @@ -26,7 +27,7 @@ watch( |
| 26 | if (tab.fullPath.includes(jionPath)) { | 27 | if (tab.fullPath.includes(jionPath)) { |
| 27 | pathIndex.value = index | 28 | pathIndex.value = index |
| 28 | } | 29 | } |
| 29 | return tab.fullPath === newRouter.fullPath; | 30 | return tab.fullPath === newRouter.fullPath || (tab.path == newRouter.path && isEqual(tab.query, newRouter.query)); |
| 30 | }); | 31 | }); |
| 31 | if (isExist.length == 0) { | 32 | if (isExist.length == 0) { |
| 32 | if (pathIndex.value != -1 && routerLength > 3) { | 33 | if (pathIndex.value != -1 && routerLength > 3) { |
| ... | @@ -45,11 +46,8 @@ watch( | ... | @@ -45,11 +46,8 @@ watch( |
| 45 | 46 | ||
| 46 | } | 47 | } |
| 47 | } | 48 | } |
| 48 | list.map(item => { | ||
| 49 | item.fullPath = item.fullPath; | ||
| 50 | }) | ||
| 51 | tabbarList.value = list; | 49 | tabbarList.value = list; |
| 52 | tabbarActive.value = newRouter.fullPath; | 50 | tabbarActive.value = isExist[0]?.fullPath || newRouter.fullPath; |
| 53 | userStore.setTabbar(tabbarList.value); | 51 | userStore.setTabbar(tabbarList.value); |
| 54 | userStore.setActiveTabbar(combPath, newRouter.fullPath); | 52 | userStore.setActiveTabbar(combPath, newRouter.fullPath); |
| 55 | }, | 53 | }, |
| ... | @@ -58,7 +56,7 @@ watch( | ... | @@ -58,7 +56,7 @@ watch( |
| 58 | const changeTab = (pane: any, ev: any) => { | 56 | const changeTab = (pane: any, ev: any) => { |
| 59 | const tabIndex = Number(pane.index); | 57 | const tabIndex = Number(pane.index); |
| 60 | const paneData: any = tabbarList.value[tabIndex]; | 58 | const paneData: any = tabbarList.value[tabIndex]; |
| 61 | if (paneData.name == 'budgetDataIndex' || paneData.name == 'iframePage') { | 59 | if (paneData.name == 'budgetDataIndex' || paneData.name == 'iframePage' || paneData.name == 'portraitMap' || paneData.name == 'portraitMaps') { |
| 62 | router.push(paneData.fullPath); | 60 | router.push(paneData.fullPath); |
| 63 | } else { | 61 | } else { |
| 64 | router.push({ | 62 | router.push({ | ... | ... |
| ... | @@ -144,7 +144,7 @@ const routes: RouteRecordRaw[] = [ | ... | @@ -144,7 +144,7 @@ const routes: RouteRecordRaw[] = [ |
| 144 | { | 144 | { |
| 145 | path: 'budgetDataIndex', | 145 | path: 'budgetDataIndex', |
| 146 | name: 'budgetDataIndex', | 146 | name: 'budgetDataIndex', |
| 147 | component: () => import('@/views/data_catalog/budgetDataIndex.vue'), | 147 | component: () => import('@/views/data_meta/budgetDataIndex.vue'), |
| 148 | meta: { | 148 | meta: { |
| 149 | title: '', | 149 | title: '', |
| 150 | // sidebar: false, | 150 | // sidebar: false, |
| ... | @@ -166,7 +166,7 @@ const routes: RouteRecordRaw[] = [ | ... | @@ -166,7 +166,7 @@ const routes: RouteRecordRaw[] = [ |
| 166 | { | 166 | { |
| 167 | path: 'iframePage', | 167 | path: 'iframePage', |
| 168 | name: 'iframePage', | 168 | name: 'iframePage', |
| 169 | component: () => import('@/views/data_catalog/budgetDataIndex.vue'), | 169 | component: () => import('@/views/data_meta/budgetDataIndex.vue'), |
| 170 | meta: { | 170 | meta: { |
| 171 | title: '', | 171 | title: '', |
| 172 | sidebar: true, | 172 | sidebar: true, |
| ... | @@ -175,6 +175,19 @@ const routes: RouteRecordRaw[] = [ | ... | @@ -175,6 +175,19 @@ const routes: RouteRecordRaw[] = [ |
| 175 | reuse: true, | 175 | reuse: true, |
| 176 | activeMenu: '/data-meta/reports/iframePage', | 176 | activeMenu: '/data-meta/reports/iframePage', |
| 177 | }, | 177 | }, |
| 178 | }, | ||
| 179 | { | ||
| 180 | path: 'portraitMaps', | ||
| 181 | name: 'portraitMaps', | ||
| 182 | component: () => import('@/views/data_meta/portraitMap.vue'), | ||
| 183 | meta: { | ||
| 184 | title: '全景地图', | ||
| 185 | sidebar: true, | ||
| 186 | breadcrumb: false, | ||
| 187 | cache: true, | ||
| 188 | reuse: true, | ||
| 189 | activeMenu: '/data-meta/reports/portraitMaps', | ||
| 190 | }, | ||
| 178 | } | 191 | } |
| 179 | ] | 192 | ] |
| 180 | }, | 193 | }, |
| ... | @@ -199,6 +212,119 @@ const routes: RouteRecordRaw[] = [ | ... | @@ -199,6 +212,119 @@ const routes: RouteRecordRaw[] = [ |
| 199 | }, | 212 | }, |
| 200 | } | 213 | } |
| 201 | ] | 214 | ] |
| 215 | }, | ||
| 216 | { | ||
| 217 | path: '/data-meta/metadata-standard', | ||
| 218 | component: Layout, | ||
| 219 | meta: { title: '元数据标准', icon: 'ep:grid' }, | ||
| 220 | children: [ | ||
| 221 | { | ||
| 222 | path: '', | ||
| 223 | name: 'metadataStandard', | ||
| 224 | component: () => import('@/views/data_meta/standard.vue'), | ||
| 225 | meta: { | ||
| 226 | title: '元数据标准管理', | ||
| 227 | breadcrumb: false, | ||
| 228 | cache: true | ||
| 229 | } | ||
| 230 | }, | ||
| 231 | { | ||
| 232 | path: 'standard-query', | ||
| 233 | name: 'metadataStandardQuery', | ||
| 234 | component: () => import('@/views/data_meta/standard-query.vue'), | ||
| 235 | meta: { | ||
| 236 | title: '元数据标准查询', | ||
| 237 | breadcrumb: false, | ||
| 238 | cache: true | ||
| 239 | } | ||
| 240 | }, | ||
| 241 | { | ||
| 242 | path: 'standard-query-view', | ||
| 243 | name: 'metadataStandardQueryView', | ||
| 244 | component: () => import('@/views/data_meta/standard-query-view.vue'), | ||
| 245 | meta: { | ||
| 246 | title: '元数据标准查看', | ||
| 247 | breadcrumb: false, | ||
| 248 | cache: true, | ||
| 249 | activeMenu: '/data-meta/metadata-standard' | ||
| 250 | }, | ||
| 251 | beforeEnter: (to, from) => { | ||
| 252 | if (to.query.name) { | ||
| 253 | to.meta.title = `元数据标准查看-${to.query.name}`; | ||
| 254 | } | ||
| 255 | } | ||
| 256 | }, | ||
| 257 | { | ||
| 258 | path: 'table-create-manual', | ||
| 259 | name: 'tableCreateManual', | ||
| 260 | component: () => import('@/views/data_meta/tableCreateManual.vue'), | ||
| 261 | meta: { | ||
| 262 | title: '新建表', | ||
| 263 | sidebar: false, | ||
| 264 | breadcrumb: false, | ||
| 265 | cache: true, | ||
| 266 | reuse: true, | ||
| 267 | activeMenu: '/data-meta/metadata-standard/standard-query' | ||
| 268 | }, | ||
| 269 | beforeEnter: (to, from) => { | ||
| 270 | if (to.query.domainName) { | ||
| 271 | to.meta.title = `新建表(${to.query.domainName})-${to.query.standardName}`; | ||
| 272 | to.meta.editPage = true; | ||
| 273 | } | ||
| 274 | } | ||
| 275 | }, | ||
| 276 | { | ||
| 277 | path: 'dim-table-create-manual', | ||
| 278 | name: 'dimTableCreateManual', | ||
| 279 | component: () => import('@/views/data_meta/dimTableCreateManual.vue'), | ||
| 280 | meta: { | ||
| 281 | title: '新建表', | ||
| 282 | sidebar: false, | ||
| 283 | breadcrumb: false, | ||
| 284 | cache: true, | ||
| 285 | reuse: true, | ||
| 286 | activeMenu: '/data-meta/metadata-standard/standard-query' | ||
| 287 | }, | ||
| 288 | beforeEnter: (to, from) => { | ||
| 289 | if (to.query.domainName) { | ||
| 290 | to.meta.title = `新建表(${to.query.domainName})-${to.query.standardName}`; | ||
| 291 | to.meta.editPage = true; | ||
| 292 | } | ||
| 293 | } | ||
| 294 | }, | ||
| 295 | { | ||
| 296 | path: 'standard-codetable', | ||
| 297 | name: 'metadataStandardCodetable', | ||
| 298 | component: () => import('@/views/data_meta/standard-codetable.vue'), | ||
| 299 | meta: { | ||
| 300 | title: '标准代码表', | ||
| 301 | breadcrumb: false, | ||
| 302 | cache: true | ||
| 303 | } | ||
| 304 | }, | ||
| 305 | { | ||
| 306 | path: 'standard-import', | ||
| 307 | name: 'metadataStandardImport', | ||
| 308 | component: () => import('@/views/data_meta/standard-import.vue'), | ||
| 309 | meta: { | ||
| 310 | title: '标准代码导入', | ||
| 311 | breadcrumb: false, | ||
| 312 | cache: true, | ||
| 313 | activeMenu: '/data-meta/metadata-standard/standard-codetable' | ||
| 314 | } | ||
| 315 | }, | ||
| 316 | { | ||
| 317 | path: 'standard-meta-import', | ||
| 318 | name: 'standardMetaImport', | ||
| 319 | component: () => import('@/views/data_meta/standard-meta-import.vue'), | ||
| 320 | meta: { | ||
| 321 | title: '元数据标准导入', | ||
| 322 | breadcrumb: false, | ||
| 323 | cache: true, | ||
| 324 | activeMenu: '/data-meta/metadata-standard' | ||
| 325 | } | ||
| 326 | } | ||
| 327 | ] | ||
| 202 | } | 328 | } |
| 203 | ] | 329 | ] |
| 204 | 330 | ... | ... |
src/router/modules/dataPricing.ts
0 → 100644
| 1 | import type { RouteRecordRaw } from 'vue-router' | ||
| 2 | |||
| 3 | function Layout() { | ||
| 4 | return import('@/layouts/index.vue') | ||
| 5 | } | ||
| 6 | |||
| 7 | const routes: RouteRecordRaw[] = [ | ||
| 8 | { | ||
| 9 | path: '/data-pricing/pricing-manage', | ||
| 10 | component: Layout, | ||
| 11 | meta: { | ||
| 12 | title: '定价管理', | ||
| 13 | icon: 'ep:grid', | ||
| 14 | }, | ||
| 15 | children: [ | ||
| 16 | { | ||
| 17 | path: 'demand-manage', | ||
| 18 | name: 'demandManage', | ||
| 19 | component: () => import('@/views/data_pricing/demandManage.vue'), | ||
| 20 | meta: { | ||
| 21 | title: '需求表管理', | ||
| 22 | breadcrumb: false, | ||
| 23 | cache: true | ||
| 24 | }, | ||
| 25 | }, | ||
| 26 | { | ||
| 27 | path: 'import-file-demand-manage', | ||
| 28 | name: 'importFileDemandManage', | ||
| 29 | component: () => import('@/views/importFile.vue'), | ||
| 30 | meta: { | ||
| 31 | title: '导入数据-需求表管理', | ||
| 32 | sidebar: false, | ||
| 33 | breadcrumb: false, | ||
| 34 | cache: true, | ||
| 35 | reuse: true, | ||
| 36 | activeMenu: '/data-pricing/pricing-manage/demand-manage' | ||
| 37 | } | ||
| 38 | }, | ||
| 39 | { | ||
| 40 | path: 'disease-manage', | ||
| 41 | name: 'diseaseManage', | ||
| 42 | component: () => import('@/views/data_pricing/diseaseManage.vue'), | ||
| 43 | meta: { | ||
| 44 | title: '疾病管理', | ||
| 45 | breadcrumb: false, | ||
| 46 | cache: true | ||
| 47 | }, | ||
| 48 | }, | ||
| 49 | { | ||
| 50 | path: 'import-file-disease', | ||
| 51 | name: 'importFileDisease', | ||
| 52 | component: () => import('@/views/importFile.vue'), | ||
| 53 | meta: { | ||
| 54 | title: '导入数据-疾病管理', | ||
| 55 | sidebar: false, | ||
| 56 | breadcrumb: false, | ||
| 57 | cache: true, | ||
| 58 | reuse: true, | ||
| 59 | activeMenu: '/data-pricing/pricing-manage/disease-manage' | ||
| 60 | } | ||
| 61 | }, | ||
| 62 | { | ||
| 63 | path: 'price-config', | ||
| 64 | name: 'priceConfig', | ||
| 65 | component: () => import('@/views/data_pricing/priceConfig.vue'), | ||
| 66 | meta: { | ||
| 67 | title: '定价配置', | ||
| 68 | breadcrumb: false, | ||
| 69 | cache: true | ||
| 70 | }, | ||
| 71 | }, | ||
| 72 | { | ||
| 73 | path: 'price-model', | ||
| 74 | name: 'priceModel', | ||
| 75 | component: () => import('@/views/data_pricing/priceModel.vue'), | ||
| 76 | meta: { | ||
| 77 | title: '新增配置', | ||
| 78 | sidebar: false, | ||
| 79 | breadcrumb: false, | ||
| 80 | cache: true, | ||
| 81 | reuse: true, | ||
| 82 | editPage: true, | ||
| 83 | activeMenu: '/data-pricing/pricing-manage/price-config' | ||
| 84 | }, | ||
| 85 | beforeEnter: (to, from) => { | ||
| 86 | if (to.query.guid) { | ||
| 87 | to.meta.title = `编辑-${to.query.name}`; | ||
| 88 | } else { | ||
| 89 | to.meta.title = `新增配置`; | ||
| 90 | } | ||
| 91 | } | ||
| 92 | }, | ||
| 93 | { | ||
| 94 | path: 'price-calculate', | ||
| 95 | name: 'priceCalculate', | ||
| 96 | component: () => import('@/views/data_pricing/priceCalculate.vue'), | ||
| 97 | meta: { | ||
| 98 | title: '数据定价', | ||
| 99 | breadcrumb: false, | ||
| 100 | cache: true | ||
| 101 | } | ||
| 102 | }, | ||
| 103 | { | ||
| 104 | path: 'calculate-config', | ||
| 105 | name: 'calculateConfig', | ||
| 106 | component: () => import('@/views/data_pricing/calculateConfig.vue'), | ||
| 107 | meta: { | ||
| 108 | title: '新增数据定价', | ||
| 109 | sidebar: false, | ||
| 110 | breadcrumb: false, | ||
| 111 | cache: true, | ||
| 112 | reuse: true, | ||
| 113 | editPage: true, | ||
| 114 | activeMenu: '/data-pricing/pricing-manage/price-calculate' | ||
| 115 | }, | ||
| 116 | beforeEnter: (to, from) => { | ||
| 117 | if (to.query.guid) { | ||
| 118 | to.meta.title = `编辑-${to.query.name}`; | ||
| 119 | } else { | ||
| 120 | to.meta.title = `新增数据定价`; | ||
| 121 | } | ||
| 122 | } | ||
| 123 | }, | ||
| 124 | ], | ||
| 125 | }, | ||
| 126 | ] | ||
| 127 | |||
| 128 | export default routes |
| ... | @@ -10,6 +10,7 @@ import DataTrustedSpace from './modules/dataTrustedSpace'; | ... | @@ -10,6 +10,7 @@ import DataTrustedSpace from './modules/dataTrustedSpace'; |
| 10 | import DataAssetRegistry from './modules/dataAssetRegistry'; | 10 | import DataAssetRegistry from './modules/dataAssetRegistry'; |
| 11 | import DataEntry from './modules/dataEntry'; | 11 | import DataEntry from './modules/dataEntry'; |
| 12 | import SecurityMenu from './modules/securityMenu'; | 12 | import SecurityMenu from './modules/securityMenu'; |
| 13 | import DataPricing from './modules/dataPricing'; | ||
| 13 | 14 | ||
| 14 | import useSettingsStore from '@/store/modules/settings' | 15 | import useSettingsStore from '@/store/modules/settings' |
| 15 | 16 | ||
| ... | @@ -112,7 +113,8 @@ const asyncRoutes: RouteRecordRaw[] = [ | ... | @@ -112,7 +113,8 @@ const asyncRoutes: RouteRecordRaw[] = [ |
| 112 | ...DataMeta, | 113 | ...DataMeta, |
| 113 | ...DataQuality, | 114 | ...DataQuality, |
| 114 | ...DataInventory, | 115 | ...DataInventory, |
| 115 | ...DataTrustedSpace | 116 | ...DataTrustedSpace, |
| 117 | ...DataPricing | ||
| 116 | ] | 118 | ] |
| 117 | 119 | ||
| 118 | const constantRoutesByFilesystem = generatedRoutes.filter((item) => { | 120 | const constantRoutesByFilesystem = generatedRoutes.filter((item) => { | ... | ... |
| ... | @@ -174,7 +174,10 @@ const useMenuStore = defineStore( | ... | @@ -174,7 +174,10 @@ const useMenuStore = defineStore( |
| 174 | else { | 174 | else { |
| 175 | // 如果是 string 类型,则认为是路由,需要查找对应的主导航索引 | 175 | // 如果是 string 类型,则认为是路由,需要查找对应的主导航索引 |
| 176 | const findIndex = allMenus.value.findIndex(item => item.children.some(r => { | 176 | const findIndex = allMenus.value.findIndex(item => item.children.some(r => { |
| 177 | if ((data== "/data-meta/reports/iframePage" || data== "/data-meta/report/budgetDataIndex") && r.path?.includes('/data-meta/report')) { | 177 | if ((data== "/data-meta/reports/iframePage" || data == '/data-meta/reports/portraitMaps' || data== "/data-meta/report/budgetDataIndex") && r.path?.includes('/data-meta/report')) { |
| 178 | return true; | ||
| 179 | } | ||
| 180 | if (data== "/data-meta/portraitMap" && r.path?.includes('/data-meta/portraitMap')) { | ||
| 178 | return true; | 181 | return true; |
| 179 | } | 182 | } |
| 180 | if (data== "/data-meta/portraitMap" && r.path?.includes('/data-meta/portraitMap')) { | 183 | if (data== "/data-meta/portraitMap" && r.path?.includes('/data-meta/portraitMap')) { | ... | ... |
| ... | @@ -157,7 +157,7 @@ const useRouteStore = defineStore( | ... | @@ -157,7 +157,7 @@ const useRouteStore = defineStore( |
| 157 | }; | 157 | }; |
| 158 | } | 158 | } |
| 159 | r = routes.find((route: any) => { | 159 | r = routes.find((route: any) => { |
| 160 | return route.path === path || route.path === m.path || `/${route.path}` === m.path || ((path.includes('budgetDataIndex') && path.includes('/data-meta/report') && route.path.includes('/data-meta/report')) || (path.includes('iframePage') && path.includes('/data-meta/report')) || (path.includes('/data-meta/portraitMap') && route.path.includes('/data-meta/portraitMap'))); | 160 | return route.path === path || route.path === m.path || `/${route.path}` === m.path || ((path.includes('budgetDataIndex') && path.includes('/data-meta/report') && route.path.includes('/data-meta/report')) || (path.includes('iframePage') && path.includes('/data-meta/report')) || (path.includes('portraitMaps') && path.includes('/data-meta/report')) || (path.includes('/data-meta/portraitMap') && route.path.includes('/data-meta/portraitMap'))); |
| 161 | }); | 161 | }); |
| 162 | if (r && (path.includes('budgetDataIndex') || path.includes('iframePage')) || path.includes('portraitMap')) { | 162 | if (r && (path.includes('budgetDataIndex') || path.includes('iframePage')) || path.includes('portraitMap')) { |
| 163 | r.path = path; | 163 | r.path = path; | ... | ... |
| ... | @@ -27,6 +27,7 @@ declare module '@vue/runtime-core' { | ... | @@ -27,6 +27,7 @@ declare module '@vue/runtime-core' { |
| 27 | FileUpload: typeof import('./../components/FileUpload/index.vue')['default'] | 27 | FileUpload: typeof import('./../components/FileUpload/index.vue')['default'] |
| 28 | FixedActionBar: typeof import('./../components/FixedActionBar/index.vue')['default'] | 28 | FixedActionBar: typeof import('./../components/FixedActionBar/index.vue')['default'] |
| 29 | Form: typeof import('./../components/Form/index.vue')['default'] | 29 | Form: typeof import('./../components/Form/index.vue')['default'] |
| 30 | GraphTopbar: typeof import('./../components/RelationNetwork/graphTopbar.vue')['default'] | ||
| 30 | Hour: typeof import('./../components/Schedule/component/hour.vue')['default'] | 31 | Hour: typeof import('./../components/Schedule/component/hour.vue')['default'] |
| 31 | ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default'] | 32 | ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default'] |
| 32 | ImagesUpload: typeof import('./../components/ImagesUpload/index.vue')['default'] | 33 | ImagesUpload: typeof import('./../components/ImagesUpload/index.vue')['default'] |
| ... | @@ -41,6 +42,7 @@ declare module '@vue/runtime-core' { | ... | @@ -41,6 +42,7 @@ declare module '@vue/runtime-core' { |
| 41 | PageNav: typeof import('./../components/PageNav/index.vue')['default'] | 42 | PageNav: typeof import('./../components/PageNav/index.vue')['default'] |
| 42 | PcasCascader: typeof import('./../components/PcasCascader/index.vue')['default'] | 43 | PcasCascader: typeof import('./../components/PcasCascader/index.vue')['default'] |
| 43 | Popover: typeof import('./../components/Popover/index.vue')['default'] | 44 | Popover: typeof import('./../components/Popover/index.vue')['default'] |
| 45 | RelationNetwork: typeof import('./../components/RelationNetwork/index.vue')['default'] | ||
| 44 | RouterLink: typeof import('vue-router')['RouterLink'] | 46 | RouterLink: typeof import('vue-router')['RouterLink'] |
| 45 | RouterView: typeof import('vue-router')['RouterView'] | 47 | RouterView: typeof import('vue-router')['RouterView'] |
| 46 | Schedule: typeof import('./../components/Schedule/index.vue')['default'] | 48 | Schedule: typeof import('./../components/Schedule/index.vue')['default'] | ... | ... |
| ... | @@ -120,6 +120,9 @@ export const filterCascaderData = (data, field, val, type = 'disabled') => { | ... | @@ -120,6 +120,9 @@ export const filterCascaderData = (data, field, val, type = 'disabled') => { |
| 120 | } | 120 | } |
| 121 | // 数字千分位 保留两位小数 | 121 | // 数字千分位 保留两位小数 |
| 122 | export const changeNum = (num, fixed = 0, round = false) => { | 122 | export const changeNum = (num, fixed = 0, round = false) => { |
| 123 | if(num === '' || num === null || num === undefined){ | ||
| 124 | return ''; | ||
| 125 | } | ||
| 123 | num = parseFloat(num); | 126 | num = parseFloat(num); |
| 124 | if (round) { | 127 | if (round) { |
| 125 | let parts = num.toFixed(fixed).split(".") | 128 | let parts = num.toFixed(fixed).split(".") | ... | ... |
| ... | @@ -884,7 +884,7 @@ const matchEnValue = ref({ | ... | @@ -884,7 +884,7 @@ const matchEnValue = ref({ |
| 884 | <div class="data-label"> | 884 | <div class="data-label"> |
| 885 | <div class="container_wrap full flex"> | 885 | <div class="container_wrap full flex"> |
| 886 | <div class="aside_wrap"> | 886 | <div class="aside_wrap"> |
| 887 | <div class="aside_title">分类分级目录</div> | 887 | <div class="aside_title">分类分级模板</div> |
| 888 | <Tree :treeInfo="treeInfo" @nodeClick="nodeClick" @itemMenuClick="handleTreeItemMenuClick" /> | 888 | <Tree :treeInfo="treeInfo" @nodeClick="nodeClick" @itemMenuClick="handleTreeItemMenuClick" /> |
| 889 | </div> | 889 | </div> |
| 890 | <div class="main_wrap"> | 890 | <div class="main_wrap"> | ... | ... |
| ... | @@ -1293,6 +1293,7 @@ const loadDrawer = async () => { | ... | @@ -1293,6 +1293,7 @@ const loadDrawer = async () => { |
| 1293 | drawerInfo.value.footer.btns.at(-2).visible = false | 1293 | drawerInfo.value.footer.btns.at(-2).visible = false |
| 1294 | drawerInfo.value.footer.btns.at(-3).visible = false | 1294 | drawerInfo.value.footer.btns.at(-3).visible = false |
| 1295 | drawerInfo.value.visible = true | 1295 | drawerInfo.value.visible = true |
| 1296 | console.log('table', formTable.value) | ||
| 1296 | }; | 1297 | }; |
| 1297 | 1298 | ||
| 1298 | const batching = (type) => { | 1299 | const batching = (type) => { | ... | ... |
src/views/data_meta/components/Sankey.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div ref="containerRef" class='canvas-wrapper'> | ||
| 3 | |||
| 4 | </div> | ||
| 5 | </template> | ||
| 6 | |||
| 7 | <script lang="ts" setup name="topbar"> | ||
| 8 | import { ref, watch } from 'vue'; | ||
| 9 | import * as echarts from "echarts"; | ||
| 10 | |||
| 11 | const props = defineProps({ | ||
| 12 | treeData: { | ||
| 13 | type: Array<any>, | ||
| 14 | default: [ | ||
| 15 | { | ||
| 16 | source: 'a', | ||
| 17 | target: 'a1', | ||
| 18 | value: 5 | ||
| 19 | }, | ||
| 20 | { | ||
| 21 | source: 'a', | ||
| 22 | target: 'a2', | ||
| 23 | value: 3 | ||
| 24 | }, | ||
| 25 | { | ||
| 26 | source: 'b', | ||
| 27 | target: 'b1', | ||
| 28 | value: 8 | ||
| 29 | }, | ||
| 30 | { | ||
| 31 | source: 'a', | ||
| 32 | target: 'b1', | ||
| 33 | value: 3 | ||
| 34 | }, | ||
| 35 | { | ||
| 36 | source: 'b1', | ||
| 37 | target: 'a1', | ||
| 38 | value: 1 | ||
| 39 | }, | ||
| 40 | { | ||
| 41 | source: 'b1', | ||
| 42 | target: 'c', | ||
| 43 | value: 2 | ||
| 44 | } | ||
| 45 | ] | ||
| 46 | }, | ||
| 47 | names: { | ||
| 48 | type: Array<any>, | ||
| 49 | default: [ | ||
| 50 | { | ||
| 51 | name: 'a' | ||
| 52 | }, | ||
| 53 | { | ||
| 54 | name: 'b' | ||
| 55 | }, | ||
| 56 | { | ||
| 57 | name: 'a1' | ||
| 58 | }, | ||
| 59 | { | ||
| 60 | name: 'a2' | ||
| 61 | }, | ||
| 62 | { | ||
| 63 | name: 'b1' | ||
| 64 | }, | ||
| 65 | { | ||
| 66 | name: 'c' | ||
| 67 | } | ||
| 68 | ] | ||
| 69 | } | ||
| 70 | }) | ||
| 71 | |||
| 72 | watch(() => props.treeData, (val) => { | ||
| 73 | setChartsOption(); | ||
| 74 | }) | ||
| 75 | |||
| 76 | const sankeyInstance: any = ref(); | ||
| 77 | |||
| 78 | const containerRef = ref(); | ||
| 79 | |||
| 80 | const setChartsOption = () => { | ||
| 81 | |||
| 82 | let option = { | ||
| 83 | tooltip: { | ||
| 84 | trigger: 'item', | ||
| 85 | formatter: (params) => { | ||
| 86 | if (params.data.name) { | ||
| 87 | return null; | ||
| 88 | } | ||
| 89 | return params.data.source + ' > ' + params.data.target | ||
| 90 | } | ||
| 91 | }, | ||
| 92 | color: ["#3DBCBE", "#6b67d1", "#7BBCE0", "#2B8EF3", "#51dca2", "#E19D46"], | ||
| 93 | series: [ | ||
| 94 | { | ||
| 95 | type: 'sankey', | ||
| 96 | top: 60, | ||
| 97 | bottom: 20, | ||
| 98 | draggable: false, | ||
| 99 | left: 50, | ||
| 100 | emphasis: { | ||
| 101 | focus: 'trajectory' | ||
| 102 | }, | ||
| 103 | labelLayout: { | ||
| 104 | hideOverlap: true, | ||
| 105 | }, | ||
| 106 | right: 100, | ||
| 107 | label: { | ||
| 108 | fontSize: 10, | ||
| 109 | }, | ||
| 110 | data: props.names?.map(n => { | ||
| 111 | if (n.isLast) { | ||
| 112 | return { | ||
| 113 | ...n, | ||
| 114 | label: { | ||
| 115 | width: 97, | ||
| 116 | overflow: 'breakAll' | ||
| 117 | } | ||
| 118 | } | ||
| 119 | } | ||
| 120 | return n; | ||
| 121 | }), | ||
| 122 | links: props.treeData, | ||
| 123 | lineStyle: { | ||
| 124 | color: 'source', | ||
| 125 | curveness: 0.5 | ||
| 126 | }, | ||
| 127 | } | ||
| 128 | ] | ||
| 129 | } | ||
| 130 | sankeyInstance.value.setOption(option); | ||
| 131 | sankeyInstance.value.resize(); | ||
| 132 | } | ||
| 133 | |||
| 134 | const resizeObserver = ref(); | ||
| 135 | |||
| 136 | const observeResize = () => { | ||
| 137 | window.addEventListener('resize', (e) => { | ||
| 138 | sankeyInstance.value?.resize(); | ||
| 139 | }); | ||
| 140 | } | ||
| 141 | |||
| 142 | onMounted(() => { | ||
| 143 | nextTick(() => { | ||
| 144 | sankeyInstance.value = echarts.init(containerRef.value); | ||
| 145 | setChartsOption(); | ||
| 146 | observeResize(); | ||
| 147 | }) | ||
| 148 | }) | ||
| 149 | |||
| 150 | </script> | ||
| 151 | |||
| 152 | <style lang="scss" scoped> | ||
| 153 | .canvas-wrapper { | ||
| 154 | width: 100%; | ||
| 155 | height: 100%; | ||
| 156 | position: relative; | ||
| 157 | } | ||
| 158 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
This diff is collapsed.
Click to expand it.
src/views/data_meta/components/drawer.vue
0 → 100644
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
| 1 | <template> | ||
| 2 | <el-drawer | ||
| 3 | v-model="visible" | ||
| 4 | :title="title" | ||
| 5 | size="520px" | ||
| 6 | class="standard-meta-modal" | ||
| 7 | :close-on-click-modal="false" | ||
| 8 | > | ||
| 9 | <el-form | ||
| 10 | :model="form" | ||
| 11 | :rules="formRules" | ||
| 12 | ref="formEl" | ||
| 13 | style="min-height: 200px;" | ||
| 14 | require-asterisk-position="right" | ||
| 15 | v-loading="loading" | ||
| 16 | > | ||
| 17 | <el-row> | ||
| 18 | <el-col v-for="item,index in fields" :key="index" :span="12" style="padding-right:10px;"> | ||
| 19 | <el-form-item :label="item.fileNameCodeName" :prop="item.fileNameCode"> | ||
| 20 | <el-input | ||
| 21 | v-if="item.inputTypeCode == '1' || item.inputTypeCode == '3'" | ||
| 22 | v-model="form[item.fileNameCode]" | ||
| 23 | placeholder="请输入" | ||
| 24 | /> | ||
| 25 | <el-select | ||
| 26 | v-else-if="item.inputTypeCode == '2'" | ||
| 27 | v-model="form[item.fileNameCode]" | ||
| 28 | filterable | ||
| 29 | clearable | ||
| 30 | placeholder="请选择" | ||
| 31 | > | ||
| 32 | <el-option v-for="op in formOptions[item.fileNameCode]" :label="op.label" :value="op.value" :key="op.value"></el-option> | ||
| 33 | </el-select> | ||
| 34 | <el-tree-select | ||
| 35 | v-else-if="item.inputTypeCode == '4'" | ||
| 36 | v-model="form[item.fileNameCode]" | ||
| 37 | :data="standardCodeTree" | ||
| 38 | :props="treeSelectProps" | ||
| 39 | placeholder="请选择" | ||
| 40 | filterable | ||
| 41 | clearable | ||
| 42 | /> | ||
| 43 | </el-form-item> | ||
| 44 | </el-col> | ||
| 45 | </el-row> | ||
| 46 | </el-form> | ||
| 47 | <template #footer> | ||
| 48 | <div style="text-align:right"> | ||
| 49 | <el-button @click="visible = false" :disabled="confirmLoading">取消</el-button> | ||
| 50 | <el-button type="primary" @click="confirm" :loading="confirmLoading">确认</el-button> | ||
| 51 | </div> | ||
| 52 | </template> | ||
| 53 | </el-drawer> | ||
| 54 | </template> | ||
| 55 | |||
| 56 | <script setup lang="ts"> | ||
| 57 | import { watch } from 'vue' | ||
| 58 | import { ElMessage } from "element-plus"; | ||
| 59 | import { getParamsList } from '@/api/modules/dataAsset' | ||
| 60 | import { saveMetaStandardDataFields, getMetaStandardFieldsDetail, getStandardCodeTree } from '@/api/modules/dataMetaService' | ||
| 61 | |||
| 62 | const { proxy } = getCurrentInstance() as any; | ||
| 63 | const props = defineProps({ | ||
| 64 | modelValue: Boolean, | ||
| 65 | fields: { | ||
| 66 | type: Array, | ||
| 67 | default: () => ([]) | ||
| 68 | }, | ||
| 69 | metaStandardGuid: { | ||
| 70 | type: String, | ||
| 71 | default: '' | ||
| 72 | }, | ||
| 73 | type: { | ||
| 74 | type: String, | ||
| 75 | default: 'add' | ||
| 76 | }, | ||
| 77 | data: { | ||
| 78 | type: Object, | ||
| 79 | default: () => ({}) | ||
| 80 | } | ||
| 81 | }) | ||
| 82 | const emit = defineEmits(['update:modelValue', 'success', 'confirm']) | ||
| 83 | const visible = computed({ | ||
| 84 | get() { | ||
| 85 | return props.modelValue; | ||
| 86 | }, | ||
| 87 | set(val) { | ||
| 88 | emit('update:modelValue', val); | ||
| 89 | } | ||
| 90 | }) | ||
| 91 | const title = computed(() => { | ||
| 92 | return props.type === 'add' ? '新增字段标准' : '编辑字段标准' | ||
| 93 | }) | ||
| 94 | |||
| 95 | const formEl = ref() | ||
| 96 | const form = ref({}) | ||
| 97 | const formRules = ref({}) | ||
| 98 | const formOptions = ref({}) | ||
| 99 | const detail = ref({}) | ||
| 100 | |||
| 101 | async function initForm () { | ||
| 102 | const { fields, type, data } = props | ||
| 103 | console.log(data) | ||
| 104 | if (!fields) return | ||
| 105 | let formData = {} | ||
| 106 | let formRuleData = {} | ||
| 107 | let formOptionData = {} | ||
| 108 | let detailData:any = {} | ||
| 109 | if (type === 'edit') { | ||
| 110 | detailData = await getDetail() | ||
| 111 | detail.value = detailData | ||
| 112 | } | ||
| 113 | fields.forEach(async (item:any) => { | ||
| 114 | formData[item.fileNameCode] = type === 'add' ? '' : detailData.metaStandardValue[item.fileNameCode] | ||
| 115 | formRuleData[item.fileNameCode] = { | ||
| 116 | required: item.isNotnull === 'Y' ? true : false, | ||
| 117 | message: `缺少${item.fileNameCodeName}` | ||
| 118 | } | ||
| 119 | // formOptionData[item.fileNameCode] = await getOptions(item.dataTypeCode) | ||
| 120 | if (item.inputTypeCode == '2') { | ||
| 121 | formOptions.value[item.fileNameCode] = await getOptions(item.dataTypeCode) | ||
| 122 | } | ||
| 123 | }) | ||
| 124 | // formOptions.value = formOptionData | ||
| 125 | form.value = formData | ||
| 126 | formRules.value = formRuleData | ||
| 127 | nextTick(() => formEl.value.clearValidate()) | ||
| 128 | setTimeout(() => { | ||
| 129 | formEl.value.clearValidate() | ||
| 130 | }, 100) | ||
| 131 | } | ||
| 132 | function getOptions (dictType) { | ||
| 133 | return new Promise((resolve, reject) => { | ||
| 134 | getParamsList({ dictType }).then((res:any) => { | ||
| 135 | if (res.code === proxy.$passCode) { | ||
| 136 | resolve(res.data) | ||
| 137 | } | ||
| 138 | }) | ||
| 139 | }) | ||
| 140 | } | ||
| 141 | const loading = ref(false) | ||
| 142 | function getDetail () { | ||
| 143 | return new Promise((resolve) => { | ||
| 144 | loading.value = true | ||
| 145 | getMetaStandardFieldsDetail(props.data.guid).then((res:any) => { | ||
| 146 | if (res.code === proxy.$passCode) { | ||
| 147 | resolve(res.data) | ||
| 148 | } | ||
| 149 | }).finally(() => loading.value = false) | ||
| 150 | }) | ||
| 151 | } | ||
| 152 | |||
| 153 | const confirmLoading = ref(false) | ||
| 154 | function confirm () { | ||
| 155 | console.log(form.value) | ||
| 156 | formEl.value.validate(valid => { | ||
| 157 | if (!valid) return | ||
| 158 | let body = { | ||
| 159 | metaStandardGuid: props.type === 'edit' ? detail.value.metaStandardGuid : props.metaStandardGuid, | ||
| 160 | metaStandardValue: { ...form.value } | ||
| 161 | } | ||
| 162 | if (props.type === 'edit') { | ||
| 163 | body.guid = props.data.guid | ||
| 164 | } | ||
| 165 | confirmLoading.value = true | ||
| 166 | saveMetaStandardDataFields(body).then((res:any) => { | ||
| 167 | if (res.code === proxy.$passCode) { | ||
| 168 | ElMessage.success('操作成功') | ||
| 169 | emit('success') | ||
| 170 | visible.value = false | ||
| 171 | } else { | ||
| 172 | ElMessage.error(res.msg) | ||
| 173 | } | ||
| 174 | }).finally(() => confirmLoading.value = false) | ||
| 175 | }) | ||
| 176 | } | ||
| 177 | |||
| 178 | const standardCodeTree = ref([]) | ||
| 179 | const treeSelectProps = { | ||
| 180 | label: 'name', | ||
| 181 | value: 'guid', | ||
| 182 | isLeaf: 'isCode' | ||
| 183 | } | ||
| 184 | function getStandardCodeTreeList () { | ||
| 185 | getStandardCodeTree().then((res:any) => { | ||
| 186 | if (res.code === proxy.$passCode) { | ||
| 187 | const data = res.data | ||
| 188 | data.forEach(item => { | ||
| 189 | if (item.children) { | ||
| 190 | item.children.forEach(subItem => { | ||
| 191 | // 二级的标准名字作为key | ||
| 192 | subItem.guid = subItem.name | ||
| 193 | // subItem.value = subItem.name | ||
| 194 | }) | ||
| 195 | } | ||
| 196 | }) | ||
| 197 | standardCodeTree.value = data | ||
| 198 | } | ||
| 199 | }) | ||
| 200 | } | ||
| 201 | |||
| 202 | watch( | ||
| 203 | () => visible.value, | ||
| 204 | (v) => { | ||
| 205 | if (!v) return | ||
| 206 | initForm() | ||
| 207 | } | ||
| 208 | ) | ||
| 209 | |||
| 210 | onBeforeMount(() => { | ||
| 211 | getStandardCodeTreeList() | ||
| 212 | }) | ||
| 213 | </script> | ||
| 214 | |||
| 215 | <style lang="scss"> | ||
| 216 | .standard-meta-modal { | ||
| 217 | .el-form-item { | ||
| 218 | flex-direction: column; | ||
| 219 | .el-form-item__label { | ||
| 220 | justify-content: flex-start; | ||
| 221 | } | ||
| 222 | } | ||
| 223 | .el-drawer__footer { | ||
| 224 | padding: 10px; | ||
| 225 | justify-content: flex-end; | ||
| 226 | } | ||
| 227 | |||
| 228 | .table-form-wrapper { | ||
| 229 | display: flex; | ||
| 230 | margin-bottom: 5px; | ||
| 231 | .table-form-item { | ||
| 232 | padding-right: 10px; | ||
| 233 | } | ||
| 234 | .table-form-operation { | ||
| 235 | flex: 0 0 70px; | ||
| 236 | padding-left: 6px; | ||
| 237 | } | ||
| 238 | } | ||
| 239 | } | ||
| 240 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | <template> | ||
| 2 | <el-select v-if="!readonly && isEdit && isSelectType(dbType, scope)" v-model="scope.row['defaultValue']" placeholder="请选择" collapse-tags-tooltip | ||
| 3 | filterable allow-create default-first-option :reserve-keyword="false"> | ||
| 4 | <el-option v-for="opt in optionsConfig[dataType]" :key="opt['value']" :label="opt['label']" :value="opt['value']" /> | ||
| 5 | </el-select> | ||
| 6 | <el-date-picker v-else-if="!readonly && isEdit && dataType === 'date'" v-model="scope.row['defaultValue']" type="date" | ||
| 7 | format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择" /> | ||
| 8 | <el-date-picker v-else-if="!readonly && isEdit && dbType === 'mysql' && dataType === 'datetime'" | ||
| 9 | v-model="scope.row['defaultValue']" placeholder="请选择" type="datetime" format="YYYY-MM-DD HH:mm:ss" | ||
| 10 | value-format="YYYY-MM-DD HH:mm:ss" /> | ||
| 11 | <el-input v-else-if="!readonly && isEdit" v-model.trim="scope.row['defaultValue']" placeholder="请填写" | ||
| 12 | @input="(val) => inputChange(val, scope.row.dataType, scope)" /> | ||
| 13 | <span v-else>{{ scope.row["defaultValue"] == null ? '-' : (isSelectType(dbType, scope) ? | ||
| 14 | (optionsConfig[dataType].find(s => s.value == scope.row["defaultValue"])?.label ?? | ||
| 15 | scope.row["defaultValue"]) : scope.row["defaultValue"]) }}</span> | ||
| 16 | </template> | ||
| 17 | |||
| 18 | <script lang="ts" setup name="tableDefaultValue"> | ||
| 19 | import { ref } from "vue"; | ||
| 20 | import { useDefault } from "@/hooks/useDefault"; | ||
| 21 | const { optionsConfig, inputChange, isSelectType } = useDefault() | ||
| 22 | |||
| 23 | const props = defineProps({ | ||
| 24 | dbType: { | ||
| 25 | type: String, | ||
| 26 | default: '' | ||
| 27 | }, | ||
| 28 | scope: { | ||
| 29 | type: Object, | ||
| 30 | default: {} | ||
| 31 | }, | ||
| 32 | readonly: { | ||
| 33 | type: Boolean, | ||
| 34 | default: false | ||
| 35 | } | ||
| 36 | }) | ||
| 37 | |||
| 38 | const isEdit = computed(() => { | ||
| 39 | return props.scope.row['isEdit']; | ||
| 40 | }); | ||
| 41 | |||
| 42 | const dataType = computed(() => { | ||
| 43 | return props.scope.row['dataType']; | ||
| 44 | }); | ||
| 45 | |||
| 46 | </script> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
src/views/data_meta/dimTableCreateManual.vue
0 → 100644
This diff is collapsed.
Click to expand it.
| ... | @@ -26,8 +26,8 @@ function encrypt(txt) { | ... | @@ -26,8 +26,8 @@ function encrypt(txt) { |
| 26 | } | 26 | } |
| 27 | const userStore = useUserStore() | 27 | const userStore = useUserStore() |
| 28 | const userInfoData = JSON.parse(localStorage.userData) | 28 | const userInfoData = JSON.parse(localStorage.userData) |
| 29 | // const url: any = 'https://scm.cs4pl.com/portraitBMap?fUrl=portraitMap'; | 29 | const url: any = 'https://scm-operation-test.csbr.cn/portraitBMap?fUrl=portraitMap&tUrl=portraitBMap'; |
| 30 | const url: any = 'http://localhost:8086/portraitBMap?fUrl=portraitMap'; | 30 | // const url: any = 'http://localhost:8086/portraitBMap?fUrl=portraitMap&tUrl=portraitBMap'; |
| 31 | 31 | ||
| 32 | const link = ref('') | 32 | const link = ref('') |
| 33 | const loading = ref(true); | 33 | const loading = ref(true); | ... | ... |
src/views/data_meta/standard-codetable.vue
0 → 100644
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/views/data_meta/standard-import.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_meta/standard-meta-import.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_meta/standard-query-view.vue
0 → 100644
| 1 | <route lang="yaml"> | ||
| 2 | name: metadataStandardQueryView | ||
| 3 | </route> | ||
| 4 | |||
| 5 | <template> | ||
| 6 | <div class="main_wrap" v-loading="graphDataLoading"> | ||
| 7 | <div className='g6-component-topbar'> | ||
| 8 | <graphTopbar ref="topBarRef" @displaySwitchChange="displaySwitchChange" :isGraphDisplay="isGraphDisplay" /> | ||
| 9 | </div> | ||
| 10 | <RelationNetwork v-show="graphTreeData?.guid && isGraphDisplay" ref="relationNetworkRef" :tree-data="graphTreeData" | ||
| 11 | :noContextMenu="true" @nodeItemClick="handleNodeItemClick" @contextMenu="handleContextMenu"> | ||
| 12 | </RelationNetwork> | ||
| 13 | <Sankey v-show="!isGraphDisplay && (sankeyNames?.length || sankeyDataLoading)" v-loading="sankeyDataLoading" | ||
| 14 | :tree-data="sankeyData" :names="sankeyNames"> | ||
| 15 | </Sankey> | ||
| 16 | <div v-show="(isGraphDisplay ? !graphTreeData?.guid : (!sankeyDataLoading && !sankeyNames?.length))" | ||
| 17 | class="main-placeholder"> | ||
| 18 | <img src="../../assets/images/no-data.png" :style="{ width: '96px', height: '96px' }" /> | ||
| 19 | <div class="empty-text">暂无数据</div> | ||
| 20 | </div> | ||
| 21 | </div> | ||
| 22 | </template> | ||
| 23 | |||
| 24 | <script lang="ts" setup name="metadataStandardQueryView"> | ||
| 25 | import { | ||
| 26 | getMetaStandardField, | ||
| 27 | getSankeyData, | ||
| 28 | getMetaStandardTreeList | ||
| 29 | } from '@/api/modules/dataMetaService'; | ||
| 30 | import Sankey from './components/Sankey.vue'; | ||
| 31 | import { ElMessage } from 'element-plus'; | ||
| 32 | |||
| 33 | const router = useRouter(); | ||
| 34 | const route = useRoute() | ||
| 35 | |||
| 36 | const metaGuid = ref(route.query.guid); | ||
| 37 | |||
| 38 | const { proxy } = getCurrentInstance() as any; | ||
| 39 | |||
| 40 | const relationNetworkRef = ref(); | ||
| 41 | |||
| 42 | const graphDataLoading = ref(false); | ||
| 43 | |||
| 44 | /** 关系网树形数据 */ | ||
| 45 | const graphTreeData: any = ref({}); | ||
| 46 | |||
| 47 | onBeforeUnmount(() => { | ||
| 48 | relationNetworkRef.value.destroy(); | ||
| 49 | }) | ||
| 50 | |||
| 51 | const sankeyDataLoading = ref(false); | ||
| 52 | |||
| 53 | const sankeyData: any = ref([]); | ||
| 54 | |||
| 55 | const sankeyNames: any = ref([]); | ||
| 56 | |||
| 57 | const isGraphDisplay = ref(true); | ||
| 58 | |||
| 59 | const displaySwitchChange = (val) => { | ||
| 60 | if (val == isGraphDisplay.value) { | ||
| 61 | return; | ||
| 62 | } | ||
| 63 | isGraphDisplay.value = val; | ||
| 64 | if (!val) { | ||
| 65 | getSankeyDataList(); | ||
| 66 | } | ||
| 67 | } | ||
| 68 | |||
| 69 | const getSankeyDataList = () => { | ||
| 70 | sankeyDataLoading.value = true; | ||
| 71 | getSankeyData(metaGuid.value).then((res: any) => { | ||
| 72 | sankeyDataLoading.value = false; | ||
| 73 | if (res?.code == proxy.$passCode) { | ||
| 74 | sankeyData.value = res.data?.links || []; | ||
| 75 | sankeyNames.value = res.data?.data || []; | ||
| 76 | } else { | ||
| 77 | ElMessage.error(res.msg); | ||
| 78 | } | ||
| 79 | }) | ||
| 80 | } | ||
| 81 | |||
| 82 | const handleNodeItemClick = (graph, nodeItem) => { | ||
| 83 | const nodeId = nodeItem.get('id'); | ||
| 84 | let parentData = graph.findDataById(nodeId); | ||
| 85 | if (!parentData.children) { | ||
| 86 | parentData.children = []; | ||
| 87 | } | ||
| 88 | if (parentData.isHaveData == 'N') { | ||
| 89 | ElMessage.warning('没有可展开的下级字段'); | ||
| 90 | return; | ||
| 91 | } | ||
| 92 | // graph.updateConfig({ animate: false }); | ||
| 93 | // graph.refresh(); | ||
| 94 | nodeItem.getModel().collapsed = false; | ||
| 95 | parentData.collapsed = false; | ||
| 96 | graphDataLoading.value = true; | ||
| 97 | getMetaStandardField(nodeId).then((res: any) => { | ||
| 98 | graphDataLoading.value = false; | ||
| 99 | if (res?.code == proxy.$passCode) { | ||
| 100 | parentData = graph.findDataById(nodeId); | ||
| 101 | const data = res.data || []; | ||
| 102 | parentData.children = []; | ||
| 103 | if (!data?.length) { | ||
| 104 | parentData.isHaveData = 'N'; | ||
| 105 | ElMessage.warning('没有可展开的下级字段'); | ||
| 106 | return; | ||
| 107 | } | ||
| 108 | data.forEach(d => { | ||
| 109 | parentData.children.push(d); | ||
| 110 | }) | ||
| 111 | parentData.isLoading = false; | ||
| 112 | nodeItem.getModel().collapsed = false; | ||
| 113 | parentData.collapsed = false; | ||
| 114 | graph.updateItem(nodeItem, { | ||
| 115 | ...nodeItem.getModel(), | ||
| 116 | collapsed: false | ||
| 117 | }); | ||
| 118 | graph.layout(); | ||
| 119 | setTimeout(() => { | ||
| 120 | // graph.updateConfig({ animate: true }); | ||
| 121 | // graph.refresh(); | ||
| 122 | graph.updateItem(nodeItem, { | ||
| 123 | ...nodeItem.getModel(), | ||
| 124 | collapsed: false | ||
| 125 | }); | ||
| 126 | graph.setMinZoom(1); | ||
| 127 | graph.setMaxZoom(1); | ||
| 128 | graph.layout(); | ||
| 129 | graph.setMinZoom(0.5); | ||
| 130 | graph.setMaxZoom(5); | ||
| 131 | graph.focusItem(nodeItem, true, { | ||
| 132 | duration: 400 // 动画时长为500ms | ||
| 133 | }); | ||
| 134 | }, 500); | ||
| 135 | } else { | ||
| 136 | parentData.isLoading = false; | ||
| 137 | ElMessage.error(res.msg); | ||
| 138 | } | ||
| 139 | }) | ||
| 140 | } | ||
| 141 | |||
| 142 | const handleContextMenu = (model) => { | ||
| 143 | router.push({ | ||
| 144 | name: 'metadataStandard', | ||
| 145 | query: { | ||
| 146 | standardGuid: model.guid, | ||
| 147 | name: model.standardName | ||
| 148 | } | ||
| 149 | }); | ||
| 150 | } | ||
| 151 | |||
| 152 | onBeforeMount(() => { | ||
| 153 | graphDataLoading.value = true | ||
| 154 | getMetaStandardTreeList(metaGuid.value).then((res: any) => { | ||
| 155 | graphDataLoading.value = false; | ||
| 156 | if (res?.code == proxy.$passCode) { | ||
| 157 | const data = res.data || []; | ||
| 158 | let resultData = data?.[0] || {}; | ||
| 159 | if (!resultData?.children?.length && resultData.isHaveData == 'Y') { | ||
| 160 | graphDataLoading.value = true; | ||
| 161 | getMetaStandardField(resultData.guid).then((res: any) => { | ||
| 162 | graphDataLoading.value = false; | ||
| 163 | if (res?.code == proxy.$passCode) { | ||
| 164 | resultData.children = res.data || []; | ||
| 165 | graphTreeData.value = resultData; | ||
| 166 | } else { | ||
| 167 | graphTreeData.value = resultData; | ||
| 168 | ElMessage.error(res.msg); | ||
| 169 | } | ||
| 170 | }); | ||
| 171 | } else { | ||
| 172 | graphTreeData.value = resultData; | ||
| 173 | } | ||
| 174 | } else { | ||
| 175 | ElMessage.error(res.msg); | ||
| 176 | } | ||
| 177 | }) | ||
| 178 | }) | ||
| 179 | |||
| 180 | </script> | ||
| 181 | |||
| 182 | <style lang="scss" scoped> | ||
| 183 | .main_wrap { | ||
| 184 | height: 100%; | ||
| 185 | width: 100%; | ||
| 186 | position: relative; | ||
| 187 | |||
| 188 | :deep(.canvas-wrapper) { | ||
| 189 | background-color: #f7f7f9; | ||
| 190 | } | ||
| 191 | |||
| 192 | .main-placeholder { | ||
| 193 | height: 100%; | ||
| 194 | display: flex; | ||
| 195 | justify-content: center; | ||
| 196 | align-items: center; | ||
| 197 | flex-direction: column; | ||
| 198 | |||
| 199 | .empty-text { | ||
| 200 | font-size: 14px; | ||
| 201 | color: #b2b2b2; | ||
| 202 | } | ||
| 203 | } | ||
| 204 | } | ||
| 205 | |||
| 206 | .g6-component-topbar { | ||
| 207 | position: absolute; | ||
| 208 | left: 24px; | ||
| 209 | bottom: unset; | ||
| 210 | top: 14px; | ||
| 211 | padding: 0; | ||
| 212 | text-align: center; | ||
| 213 | z-index: 999; | ||
| 214 | } | ||
| 215 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
src/views/data_meta/standard-query.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_meta/standard.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_meta/tableCreateManual.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_pricing/calculateConfig.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_pricing/demandManage.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_pricing/diseaseManage.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/views/data_pricing/priceCalculate.vue
0 → 100644
| 1 | <route lang="yaml"> | ||
| 2 | name: priceCalculate | ||
| 3 | </route> | ||
| 4 | |||
| 5 | <script lang="ts" setup name="priceCalculate"> | ||
| 6 | import { ref } from 'vue'; | ||
| 7 | import TableTools from '@/components/Tools/table_tools.vue'; | ||
| 8 | import { TableColumnWidth, commonPageConfig } from '@/utils/enum'; | ||
| 9 | import { ElMessage, ElMessageBox } from "element-plus"; | ||
| 10 | import { CirclePlus } from "@element-plus/icons-vue"; | ||
| 11 | import { useRouter, useRoute } from "vue-router"; | ||
| 12 | import useUserStore from "@/store/modules/user"; | ||
| 13 | import useDataAssetStore from "@/store/modules/dataAsset"; | ||
| 14 | import { getAllFlowData } from '@/api/modules/queryService'; | ||
| 15 | import { changeNum } from "@/utils/common"; | ||
| 16 | import { | ||
| 17 | getDiseaseAll, | ||
| 18 | getPriceList, | ||
| 19 | deletePrice, | ||
| 20 | } from '@/api/modules/dataPricing'; | ||
| 21 | |||
| 22 | const router = useRouter(); | ||
| 23 | const userStore = useUserStore() | ||
| 24 | const assetStore = useDataAssetStore(); | ||
| 25 | const userData = JSON.parse(userStore.userData) | ||
| 26 | const { proxy } = getCurrentInstance() as any; | ||
| 27 | |||
| 28 | const searchItemList = ref([ | ||
| 29 | { | ||
| 30 | type: "input", | ||
| 31 | label: "", | ||
| 32 | field: "dataResourceName", | ||
| 33 | default: "", | ||
| 34 | placeholder: "数据资源名称", | ||
| 35 | clearable: true, | ||
| 36 | }, | ||
| 37 | { | ||
| 38 | type: "cascader", | ||
| 39 | label: "", | ||
| 40 | field: "diseaseName", | ||
| 41 | placeholder: "疾病名称", | ||
| 42 | default: "", | ||
| 43 | options: [], | ||
| 44 | showAllLevels: false, | ||
| 45 | props: { | ||
| 46 | checkStrictly: true, | ||
| 47 | label: "diseaseName", | ||
| 48 | value: "guid", | ||
| 49 | children: 'childList', | ||
| 50 | emitPath: false | ||
| 51 | }, | ||
| 52 | filterable: true, | ||
| 53 | clearable: true, | ||
| 54 | } | ||
| 55 | ]); | ||
| 56 | |||
| 57 | const typeMap: any = ref({}); | ||
| 58 | const selectRowData: any = ref([]) | ||
| 59 | const currTableData: any = ref({}); | ||
| 60 | const page: any = ref({ | ||
| 61 | ...commonPageConfig, | ||
| 62 | dataResourceName: '', | ||
| 63 | diseaseName: '' | ||
| 64 | }); | ||
| 65 | const tableField: any = ref([ | ||
| 66 | { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" }, | ||
| 67 | { label: "定价模型名称", field: "modelName", width: 200 }, | ||
| 68 | { label: "数据资源名称", field: "dataResourceName", width: 200 }, | ||
| 69 | { label: "疾病名称", field: "diseaseName", width: 200 }, | ||
| 70 | { | ||
| 71 | label: "交易价格(元)", field: "dataTransactionPrice", width: 120, align: 'right', getName: (scope) => { | ||
| 72 | return scope.row.dataTransactionPrice ? changeNum(parseFloat(scope.row.dataTransactionPrice), 2) : '-'; | ||
| 73 | } | ||
| 74 | }, | ||
| 75 | { label: "创建人", field: "createUserName", width: 120 }, | ||
| 76 | { label: "创建时间", field: "createTime", width: TableColumnWidth.DATETIME }, | ||
| 77 | ]); | ||
| 78 | const tableInfo = ref({ | ||
| 79 | id: 'api-data-table', | ||
| 80 | rowKey: 'guid', | ||
| 81 | loading: false, | ||
| 82 | fields: tableField.value, | ||
| 83 | data: [], | ||
| 84 | page: { | ||
| 85 | type: "normal", | ||
| 86 | rows: 0, | ||
| 87 | ...page.value, | ||
| 88 | }, | ||
| 89 | actionInfo: { | ||
| 90 | label: "操作", | ||
| 91 | type: "btn", | ||
| 92 | isMore: false, | ||
| 93 | width: 120, | ||
| 94 | btns: [ | ||
| 95 | { label: "编辑", value: "edit" }, | ||
| 96 | { label: "删除", value: "del" } | ||
| 97 | ] | ||
| 98 | } | ||
| 99 | }); | ||
| 100 | |||
| 101 | const setTableField = () => { | ||
| 102 | tableField.value.splice(4, 0, { | ||
| 103 | label: "交易用途", field: "dataUsage", width: 120, getName: (scope) => { | ||
| 104 | return typeMap.value['dataUsage'].find((item) => item.value == scope.row['dataUsage'])?.label || '-'; | ||
| 105 | } | ||
| 106 | }); | ||
| 107 | tableInfo.value.fields = tableField.value; | ||
| 108 | } | ||
| 109 | |||
| 110 | // 获取所有疾病数据 | ||
| 111 | const getDiseaseData = () => { | ||
| 112 | getDiseaseAll().then((res: any) => { | ||
| 113 | if (res.code == proxy.$passCode) { | ||
| 114 | const data = res.data || []; | ||
| 115 | searchItemList.value[1].options = data; | ||
| 116 | } | ||
| 117 | }) | ||
| 118 | } | ||
| 119 | |||
| 120 | // 获取数据字典 | ||
| 121 | const getDataType = (dictType, fieldName) => { | ||
| 122 | getAllFlowData({ dictType }).then((res: any) => { | ||
| 123 | if (res.code == proxy.$passCode) { | ||
| 124 | const data = res.data || []; | ||
| 125 | typeMap.value[fieldName] = JSON.parse(JSON.stringify(data)); | ||
| 126 | setTableField() | ||
| 127 | } else { | ||
| 128 | proxy.$ElMessage.error(res.msg); | ||
| 129 | } | ||
| 130 | }) | ||
| 131 | } | ||
| 132 | |||
| 133 | const toSearch = (val: any, clear: boolean = false) => { | ||
| 134 | page.value.curr = 1; | ||
| 135 | if (clear) { | ||
| 136 | searchItemList.value.map((item) => (item.default = "")); | ||
| 137 | page.value.dataResourceName = '' | ||
| 138 | page.value.diseaseName = ''; | ||
| 139 | } else { | ||
| 140 | page.value.dataResourceName = val.dataResourceName || ''; | ||
| 141 | page.value.diseaseName = val.diseaseName || ''; | ||
| 142 | } | ||
| 143 | getTableData(); | ||
| 144 | }; | ||
| 145 | |||
| 146 | const getTableData = () => { | ||
| 147 | tableInfo.value.loading = true; | ||
| 148 | getPriceList({ | ||
| 149 | pageSize: page.value.limit, | ||
| 150 | pageIndex: page.value.curr, | ||
| 151 | dataResourceName: page.value.dataResourceName, | ||
| 152 | diseaseName: page.value.diseaseName, | ||
| 153 | }).then((res: any) => { | ||
| 154 | tableInfo.value.loading = false; | ||
| 155 | if (res.code == proxy.$passCode) { | ||
| 156 | const data = res.data || {}; | ||
| 157 | tableInfo.value.data = data.records || []; | ||
| 158 | tableInfo.value.page.limit = data.pageSize | ||
| 159 | tableInfo.value.page.curr = data.pageIndex | ||
| 160 | tableInfo.value.page.rows = data.totalRows | ||
| 161 | } else { | ||
| 162 | proxy.$ElMessage.error(res.msg); | ||
| 163 | } | ||
| 164 | }) | ||
| 165 | } | ||
| 166 | |||
| 167 | const tablePageChange = (info) => { | ||
| 168 | page.value.curr = Number(info.curr); | ||
| 169 | page.value.limit = Number(info.limit); | ||
| 170 | tableInfo.value.page.limit = page.value.limit; | ||
| 171 | tableInfo.value.page.curr = page.value.curr; | ||
| 172 | getTableData(); | ||
| 173 | }; | ||
| 174 | |||
| 175 | const tableBtnClick = (scope, btn) => { | ||
| 176 | const type = btn.value; | ||
| 177 | const row = scope.row; | ||
| 178 | currTableData.value = row; | ||
| 179 | if (type === 'edit') { // 编辑 | ||
| 180 | router.push( | ||
| 181 | { | ||
| 182 | name: 'calculateConfig', | ||
| 183 | query: { | ||
| 184 | guid: row.guid, | ||
| 185 | name: row.modelName, | ||
| 186 | type: 'edit' | ||
| 187 | } | ||
| 188 | } | ||
| 189 | ); | ||
| 190 | } else if (type === 'del') { // 删除 | ||
| 191 | open('确定要删除该条数据吗?', 'warning'); | ||
| 192 | } | ||
| 193 | }; | ||
| 194 | |||
| 195 | const open = (msg, type, isBatch = false) => { | ||
| 196 | ElMessageBox.confirm(msg, "提示", { | ||
| 197 | confirmButtonText: "确定", | ||
| 198 | cancelButtonText: "取消", | ||
| 199 | type: type, | ||
| 200 | }).then(() => { | ||
| 201 | let guids = [currTableData.value.guid] | ||
| 202 | if (isBatch) { | ||
| 203 | guids = selectRowData.value | ||
| 204 | } | ||
| 205 | deletePrice(guids).then((res: any) => { | ||
| 206 | if (res.code == proxy.$passCode) { | ||
| 207 | getTableData(); | ||
| 208 | ElMessage({ | ||
| 209 | type: "success", | ||
| 210 | message: "删除成功", | ||
| 211 | }); | ||
| 212 | } else { | ||
| 213 | proxy.$ElMessage.error(res.msg); | ||
| 214 | } | ||
| 215 | }); | ||
| 216 | }); | ||
| 217 | }; | ||
| 218 | |||
| 219 | const addDisease = () => { | ||
| 220 | router.push( | ||
| 221 | { | ||
| 222 | name: 'calculateConfig', | ||
| 223 | query: { | ||
| 224 | type: 'create' | ||
| 225 | } | ||
| 226 | } | ||
| 227 | ); | ||
| 228 | } | ||
| 229 | |||
| 230 | onBeforeMount(() => { | ||
| 231 | getDiseaseData(); | ||
| 232 | getDataType('数据用途', 'dataUsage') | ||
| 233 | }); | ||
| 234 | |||
| 235 | onActivated(() => { | ||
| 236 | if (assetStore.isRefresh) {//如果是首次加载,则不需要调用 | ||
| 237 | toSearch(null, true); | ||
| 238 | assetStore.set(false); | ||
| 239 | } | ||
| 240 | }) | ||
| 241 | |||
| 242 | </script> | ||
| 243 | |||
| 244 | <template> | ||
| 245 | <div class="container_wrap"> | ||
| 246 | <div class="table_tool_wrap"> | ||
| 247 | <TableTools :searchItems="searchItemList" :searchId="'data-source-search'" @search="toSearch" /> | ||
| 248 | <div class="tools_btns"> | ||
| 249 | <el-button type="primary" @click="addDisease" v-preReClick>新增</el-button> | ||
| 250 | </div> | ||
| 251 | </div> | ||
| 252 | <div class="table_panel_wrap"> | ||
| 253 | <Table :tableInfo="tableInfo" @tablePageChange="tablePageChange" @tableBtnClick="tableBtnClick" /> | ||
| 254 | </div> | ||
| 255 | </div> | ||
| 256 | </template> | ||
| 257 | |||
| 258 | <style lang="scss" scoped> | ||
| 259 | .table_tool_wrap { | ||
| 260 | width: 100%; | ||
| 261 | height: 84px !important; | ||
| 262 | padding: 0 8px; | ||
| 263 | |||
| 264 | .tools_btns { | ||
| 265 | padding: 0px 0 0; | ||
| 266 | } | ||
| 267 | } | ||
| 268 | |||
| 269 | .table_panel_wrap { | ||
| 270 | width: 100%; | ||
| 271 | height: calc(100% - 84px); | ||
| 272 | padding: 0px 8px 0; | ||
| 273 | } | ||
| 274 | </style> |
src/views/data_pricing/priceConfig.vue
0 → 100644
| 1 | <route lang="yaml"> | ||
| 2 | name: priceConfig | ||
| 3 | </route> | ||
| 4 | |||
| 5 | <script lang="ts" setup name="priceConfig"> | ||
| 6 | import { ref } from 'vue'; | ||
| 7 | import TableTools from '@/components/Tools/table_tools.vue'; | ||
| 8 | import { TableColumnWidth, commonPageConfig } from '@/utils/enum'; | ||
| 9 | import { ElMessage, ElMessageBox } from "element-plus"; | ||
| 10 | import { CirclePlus } from "@element-plus/icons-vue"; | ||
| 11 | import { useRouter, useRoute } from "vue-router"; | ||
| 12 | import useUserStore from "@/store/modules/user"; | ||
| 13 | import useDataAssetStore from "@/store/modules/dataAsset"; | ||
| 14 | import { getAllFlowData } from '@/api/modules/queryService'; | ||
| 15 | import { | ||
| 16 | getConfigureList, | ||
| 17 | deleteConfigure, | ||
| 18 | getConfigureDetail, | ||
| 19 | addCopyConfigure | ||
| 20 | } from '@/api/modules/dataPricing'; | ||
| 21 | |||
| 22 | const router = useRouter(); | ||
| 23 | const userStore = useUserStore() | ||
| 24 | const assetStore = useDataAssetStore(); | ||
| 25 | const userData = JSON.parse(userStore.userData) | ||
| 26 | const { proxy } = getCurrentInstance() as any; | ||
| 27 | |||
| 28 | const searchItemList = ref([ | ||
| 29 | { | ||
| 30 | type: "input", | ||
| 31 | label: "", | ||
| 32 | field: "modelName", | ||
| 33 | default: "", | ||
| 34 | placeholder: "定价模型名称", | ||
| 35 | clearable: true, | ||
| 36 | }, | ||
| 37 | { | ||
| 38 | type: "select", | ||
| 39 | label: "", | ||
| 40 | field: "institutionType", | ||
| 41 | placeholder: "机构类型", | ||
| 42 | default: "", | ||
| 43 | options: [], | ||
| 44 | clearable: true, | ||
| 45 | } | ||
| 46 | ]); | ||
| 47 | |||
| 48 | const typeMap = ref({}); | ||
| 49 | const tableData: any = ref([]); | ||
| 50 | const selectRowData: any = ref([]) | ||
| 51 | const currTableData: any = ref({}); | ||
| 52 | const page: any = ref({ | ||
| 53 | ...commonPageConfig, | ||
| 54 | modelName: '', | ||
| 55 | institutionType: '' | ||
| 56 | }); | ||
| 57 | const tableInfo = ref({ | ||
| 58 | id: 'api-data-table', | ||
| 59 | rowKey: 'guid', | ||
| 60 | loading: false, | ||
| 61 | fields: [ | ||
| 62 | { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" }, | ||
| 63 | { label: "定价模型名称", field: "modelName", width: 200 }, | ||
| 64 | { | ||
| 65 | label: "机构类型", field: "institutionType", width: 120, getName: (scope) => { | ||
| 66 | return filterVal(scope.row.institutionType, 'institutionType') | ||
| 67 | } | ||
| 68 | }, | ||
| 69 | { | ||
| 70 | label: "启用状态", field: "bizState", type: 'tag', width: 120, align: 'center', getName: (scope) => { | ||
| 71 | return scope.row.bizState == 'Y' ? '启用' : '停用'; | ||
| 72 | }, tagType: (scope) => { | ||
| 73 | return scope.row.bizState == 'Y' ? 'success' : 'info'; | ||
| 74 | } | ||
| 75 | }, | ||
| 76 | { label: "创建人", field: "createUserName", width: 120 }, | ||
| 77 | { label: "创建时间", field: "createTime", width: TableColumnWidth.DATETIME }, | ||
| 78 | ], | ||
| 79 | data: tableData.value, | ||
| 80 | page: { | ||
| 81 | type: "normal", | ||
| 82 | rows: 0, | ||
| 83 | ...page.value, | ||
| 84 | }, | ||
| 85 | actionInfo: { | ||
| 86 | label: "操作", | ||
| 87 | type: "btn", | ||
| 88 | isMore: false, | ||
| 89 | width: 160, | ||
| 90 | btns: [ | ||
| 91 | { label: "编辑", value: "edit" }, | ||
| 92 | { label: "复制", value: "copy" }, | ||
| 93 | { label: "删除", value: "del" } | ||
| 94 | ] | ||
| 95 | } | ||
| 96 | }); | ||
| 97 | |||
| 98 | // 过滤 | ||
| 99 | const filterVal = (val, name) => { | ||
| 100 | if (typeMap.value[name]) { | ||
| 101 | const data = typeMap.value[name].find(item => item.value == val); | ||
| 102 | return data?.label || '--'; | ||
| 103 | } | ||
| 104 | }; | ||
| 105 | |||
| 106 | // 获取需求类型 | ||
| 107 | const getDataType = (dictType, fieldName) => { | ||
| 108 | getAllFlowData({ dictType }).then((res: any) => { | ||
| 109 | if (res.code == proxy.$passCode) { | ||
| 110 | const data = res.data || []; | ||
| 111 | typeMap.value[fieldName] = JSON.parse(JSON.stringify(data)); | ||
| 112 | let item = searchItemList.value.find(item => item.field == fieldName); | ||
| 113 | item && (item.options = data); | ||
| 114 | } else { | ||
| 115 | proxy.$ElMessage.error(res.msg); | ||
| 116 | } | ||
| 117 | }) | ||
| 118 | } | ||
| 119 | |||
| 120 | const toSearch = (val: any, clear: boolean = false) => { | ||
| 121 | page.value.curr = 1; | ||
| 122 | if (clear) { | ||
| 123 | searchItemList.value.map((item) => (item.default = "")); | ||
| 124 | page.value.modelName = ''; | ||
| 125 | page.value.institutionType = ''; | ||
| 126 | } else { | ||
| 127 | page.value.modelName = val.modelName || ''; | ||
| 128 | page.value.institutionType = val.institutionType || ''; | ||
| 129 | } | ||
| 130 | getTableData(); | ||
| 131 | }; | ||
| 132 | |||
| 133 | const getTableData = () => { | ||
| 134 | tableInfo.value.loading = true; | ||
| 135 | getConfigureList({ | ||
| 136 | pageSize: page.value.limit, | ||
| 137 | pageIndex: page.value.curr, | ||
| 138 | modelName: page.value.modelName, | ||
| 139 | institutionType: page.value.institutionType, | ||
| 140 | }).then((res: any) => { | ||
| 141 | tableInfo.value.loading = false; | ||
| 142 | if (res.code == proxy.$passCode) { | ||
| 143 | const data = res.data || {}; | ||
| 144 | tableInfo.value.data = data.records || [] | ||
| 145 | tableInfo.value.page.limit = data.pageSize | ||
| 146 | tableInfo.value.page.curr = data.pageIndex | ||
| 147 | tableInfo.value.page.rows = data.totalRows | ||
| 148 | } else { | ||
| 149 | proxy.$ElMessage.error(res.msg); | ||
| 150 | } | ||
| 151 | }) | ||
| 152 | } | ||
| 153 | |||
| 154 | const tablePageChange = (info) => { | ||
| 155 | page.value.curr = Number(info.curr); | ||
| 156 | page.value.limit = Number(info.limit); | ||
| 157 | tableInfo.value.page.limit = page.value.limit; | ||
| 158 | tableInfo.value.page.curr = page.value.curr; | ||
| 159 | getTableData(); | ||
| 160 | }; | ||
| 161 | |||
| 162 | const tableBtnClick = (scope, btn) => { | ||
| 163 | const type = btn.value; | ||
| 164 | const row = scope.row; | ||
| 165 | currTableData.value = row; | ||
| 166 | if (type === 'edit') { // 编辑 | ||
| 167 | router.push( | ||
| 168 | { | ||
| 169 | name: 'priceModel', | ||
| 170 | query: { | ||
| 171 | guid: row.guid, | ||
| 172 | name: row.modelName, | ||
| 173 | type | ||
| 174 | } | ||
| 175 | } | ||
| 176 | ); | ||
| 177 | } else if (type == 'copy') { //复制 | ||
| 178 | ElMessageBox.confirm('是否确定复制该模型?', "提示", { | ||
| 179 | confirmButtonText: "确定", | ||
| 180 | cancelButtonText: "取消", | ||
| 181 | type: 'warning', | ||
| 182 | }).then(() => { | ||
| 183 | getConfigureDetail({ guid: row.guid }).then((res: any) => { | ||
| 184 | if (res.code == proxy.$passCode) { | ||
| 185 | const data = res.data || {}; | ||
| 186 | let params = { ...data }; | ||
| 187 | delete params.createTime; | ||
| 188 | delete params.createUserName; | ||
| 189 | delete params.pricingDimensionalityRSVOS; | ||
| 190 | const pricingDimensionalityRSVOS = data.pricingDimensionalityRSVOS || []; | ||
| 191 | pricingDimensionalityRSVOS.map(p => { | ||
| 192 | p.pricingTargetRQVOS = p.pricingTargetRSVOS || []; | ||
| 193 | delete p.pricingTargetRSVOS; | ||
| 194 | }); | ||
| 195 | params.pricingDimensionalityRQVOS = pricingDimensionalityRSVOS; | ||
| 196 | addCopyConfigure(params).then((res: any) => { | ||
| 197 | if (res.code == proxy.$passCode) { | ||
| 198 | ElMessage({ | ||
| 199 | type: "success", | ||
| 200 | message: "复制定价配置成功", | ||
| 201 | }); | ||
| 202 | getTableData(); | ||
| 203 | } else { | ||
| 204 | proxy.$ElMessage.error(res.msg); | ||
| 205 | } | ||
| 206 | }).catch(() => { | ||
| 207 | |||
| 208 | }); | ||
| 209 | } | ||
| 210 | }).catch(() => { | ||
| 211 | |||
| 212 | }) | ||
| 213 | }); | ||
| 214 | } else if (type === 'del') { // 删除 | ||
| 215 | open('确定要删除该条数据吗?', 'warning'); | ||
| 216 | } | ||
| 217 | }; | ||
| 218 | |||
| 219 | const open = (msg, type, isBatch = false) => { | ||
| 220 | ElMessageBox.confirm(msg, "提示", { | ||
| 221 | confirmButtonText: "确定", | ||
| 222 | cancelButtonText: "取消", | ||
| 223 | type: type, | ||
| 224 | }).then(() => { | ||
| 225 | let guids = [currTableData.value.guid] | ||
| 226 | if (isBatch) { | ||
| 227 | guids = selectRowData.value | ||
| 228 | } | ||
| 229 | deleteConfigure(guids).then((res: any) => { | ||
| 230 | if (res.code == proxy.$passCode) { | ||
| 231 | getTableData(); | ||
| 232 | ElMessage({ | ||
| 233 | type: "success", | ||
| 234 | message: "删除成功", | ||
| 235 | }); | ||
| 236 | } else { | ||
| 237 | proxy.$ElMessage.error(res.msg); | ||
| 238 | } | ||
| 239 | }); | ||
| 240 | }); | ||
| 241 | }; | ||
| 242 | |||
| 243 | const addDisease = () => { | ||
| 244 | router.push( | ||
| 245 | { | ||
| 246 | name: 'priceModel', | ||
| 247 | query: { | ||
| 248 | type: 'create' | ||
| 249 | } | ||
| 250 | } | ||
| 251 | ); | ||
| 252 | } | ||
| 253 | |||
| 254 | onBeforeMount(() => { | ||
| 255 | getDataType('机构类型', 'institutionType') | ||
| 256 | }); | ||
| 257 | |||
| 258 | onActivated(() => { | ||
| 259 | if (assetStore.isRefresh) {//如果是首次加载,则不需要调用 | ||
| 260 | toSearch(null, true); | ||
| 261 | assetStore.set(false); | ||
| 262 | } | ||
| 263 | }) | ||
| 264 | |||
| 265 | </script> | ||
| 266 | |||
| 267 | <template> | ||
| 268 | <div class="container_wrap"> | ||
| 269 | <div class="table_tool_wrap"> | ||
| 270 | <TableTools :searchItems="searchItemList" :searchId="'data-source-search'" @search="toSearch" /> | ||
| 271 | <div class="tools_btns"> | ||
| 272 | <el-button type="primary" @click="addDisease" v-preReClick>新增</el-button> | ||
| 273 | </div> | ||
| 274 | </div> | ||
| 275 | <div class="table_panel_wrap"> | ||
| 276 | <Table :tableInfo="tableInfo" @tablePageChange="tablePageChange" @tableBtnClick="tableBtnClick" /> | ||
| 277 | </div> | ||
| 278 | </div> | ||
| 279 | </template> | ||
| 280 | |||
| 281 | <style lang="scss" scoped> | ||
| 282 | .table_tool_wrap { | ||
| 283 | width: 100%; | ||
| 284 | height: 84px !important; | ||
| 285 | padding: 0 8px; | ||
| 286 | |||
| 287 | .tools_btns { | ||
| 288 | padding: 0px 0 0; | ||
| 289 | } | ||
| 290 | } | ||
| 291 | |||
| 292 | .table_panel_wrap { | ||
| 293 | width: 100%; | ||
| 294 | height: calc(100% - 84px); | ||
| 295 | padding: 0px 8px 0; | ||
| 296 | } | ||
| 297 | </style> |
src/views/data_pricing/priceModel.vue
0 → 100644
This diff is collapsed.
Click to expand it.
| ... | @@ -25,12 +25,13 @@ import { | ... | @@ -25,12 +25,13 @@ import { |
| 25 | getDatabase, | 25 | getDatabase, |
| 26 | getRuleTypeList | 26 | getRuleTypeList |
| 27 | } from '@/api/modules/dataQuality'; | 27 | } from '@/api/modules/dataQuality'; |
| 28 | import { getDamCatalogList } from '@/api/modules/dataPricing'; | ||
| 28 | import useDataQualityStore from "@/store/modules/dataQuality"; | 29 | import useDataQualityStore from "@/store/modules/dataQuality"; |
| 29 | import { useValidator } from '@/hooks/useValidator'; | 30 | import { useValidator } from '@/hooks/useValidator'; |
| 30 | import { TableColumnWidth } from '@/utils/enum'; | 31 | import { TableColumnWidth } from '@/utils/enum'; |
| 31 | 32 | ||
| 32 | const dataQualityStore = useDataQualityStore(); | 33 | const dataQualityStore = useDataQualityStore(); |
| 33 | 34 | const userData = JSON.parse(localStorage.userData); | |
| 34 | const { proxy } = getCurrentInstance() as any; | 35 | const { proxy } = getCurrentInstance() as any; |
| 35 | const { orderNum, description } = useValidator(); | 36 | const { orderNum, description } = useValidator(); |
| 36 | 37 | ||
| ... | @@ -39,6 +40,8 @@ const cacheStore = useCatchStore(); | ... | @@ -39,6 +40,8 @@ const cacheStore = useCatchStore(); |
| 39 | /** 可选择的质量规则列表。 */ | 40 | /** 可选择的质量规则列表。 */ |
| 40 | const ruleTypeList: any = ref([]); | 41 | const ruleTypeList: any = ref([]); |
| 41 | 42 | ||
| 43 | const productList: any = ref([]); | ||
| 44 | |||
| 42 | /** 质量规则集表对象。 */ | 45 | /** 质量规则集表对象。 */ |
| 43 | const qualityModelTreeRef = ref(); | 46 | const qualityModelTreeRef = ref(); |
| 44 | /** 树选中不同层级的,代表的类型, model, group, table */ | 47 | /** 树选中不同层级的,代表的类型, model, group, table */ |
| ... | @@ -281,7 +284,22 @@ const formItems: any = ref([ | ... | @@ -281,7 +284,22 @@ const formItems: any = ref([ |
| 281 | default: '', | 284 | default: '', |
| 282 | maxlength: 6, | 285 | maxlength: 6, |
| 283 | required: true | 286 | required: true |
| 284 | }, { | 287 | }, |
| 288 | { | ||
| 289 | label: '数据产品', | ||
| 290 | type: 'select', | ||
| 291 | field: 'damGuid', | ||
| 292 | default: '', | ||
| 293 | placeholder: '请选择', | ||
| 294 | options: productList.value, | ||
| 295 | props: { | ||
| 296 | value: 'guid', | ||
| 297 | label: 'damName' | ||
| 298 | }, | ||
| 299 | clearable: true, | ||
| 300 | filterable: true | ||
| 301 | }, | ||
| 302 | { | ||
| 285 | label: '描述', | 303 | label: '描述', |
| 286 | type: 'textarea', | 304 | type: 'textarea', |
| 287 | placeholder: '请输入', | 305 | placeholder: '请输入', |
| ... | @@ -929,6 +947,17 @@ onActivated(async () => { | ... | @@ -929,6 +947,17 @@ onActivated(async () => { |
| 929 | } | 947 | } |
| 930 | }) | 948 | }) |
| 931 | 949 | ||
| 950 | // 获取数据产品列表 | ||
| 951 | const getProducts = () => { | ||
| 952 | getDamCatalogList({ dataType: userData.superTubeFlag == 'Y' ? "P" : "D", sceneType: "Z" }).then((res: any) => { | ||
| 953 | if (res.code == proxy.$passCode) { | ||
| 954 | const data = res.data || []; | ||
| 955 | productList.value = data; | ||
| 956 | formItems.value.at(-2).options = data; | ||
| 957 | } | ||
| 958 | }) | ||
| 959 | } | ||
| 960 | |||
| 932 | onBeforeMount(() => { | 961 | onBeforeMount(() => { |
| 933 | getQualityGroupTreeData(); | 962 | getQualityGroupTreeData(); |
| 934 | getGroupTableData(); | 963 | getGroupTableData(); |
| ... | @@ -945,6 +974,7 @@ onBeforeMount(() => { | ... | @@ -945,6 +974,7 @@ onBeforeMount(() => { |
| 945 | ElMessage.error(res.msg); | 974 | ElMessage.error(res.msg); |
| 946 | } | 975 | } |
| 947 | }) | 976 | }) |
| 977 | getProducts(); | ||
| 948 | }) | 978 | }) |
| 949 | 979 | ||
| 950 | </script> | 980 | </script> | ... | ... |
| ... | @@ -18,7 +18,7 @@ import { | ... | @@ -18,7 +18,7 @@ import { |
| 18 | getImportData, | 18 | getImportData, |
| 19 | exportDictionary, | 19 | exportDictionary, |
| 20 | exportCollectTask, | 20 | exportCollectTask, |
| 21 | // getImageContent | 21 | exportTemplate |
| 22 | } from '@/api/modules/queryService'; | 22 | } from '@/api/modules/queryService'; |
| 23 | import { | 23 | import { |
| 24 | parseAndDecodeUrl, | 24 | parseAndDecodeUrl, |
| ... | @@ -29,6 +29,7 @@ import { | ... | @@ -29,6 +29,7 @@ import { |
| 29 | getDictionaryTree | 29 | getDictionaryTree |
| 30 | } from '@/api/modules/dataInventory'; | 30 | } from '@/api/modules/dataInventory'; |
| 31 | import { commonPageConfig } from '@/utils/enum'; | 31 | import { commonPageConfig } from '@/utils/enum'; |
| 32 | import { getDemandTreeList, getDiseaseAll } from '@/api/modules/dataPricing'; | ||
| 32 | 33 | ||
| 33 | const { proxy } = getCurrentInstance() as any; | 34 | const { proxy } = getCurrentInstance() as any; |
| 34 | 35 | ||
| ... | @@ -156,6 +157,29 @@ const getDictList = () => { | ... | @@ -156,6 +157,29 @@ const getDictList = () => { |
| 156 | }) | 157 | }) |
| 157 | } | 158 | } |
| 158 | 159 | ||
| 160 | // 获取需求表树形数据 | ||
| 161 | const getTreeData = () => { | ||
| 162 | if (isfileImport == '7') { | ||
| 163 | getDemandTreeList({ pageIndex: 1, pageSize: 100000, isCatalog: 'N' }).then((res: any) => { | ||
| 164 | if (res.code == proxy.$passCode) { | ||
| 165 | const data = res.data?.records || []; | ||
| 166 | dictionaryList.value = data; | ||
| 167 | } else { | ||
| 168 | proxy.$ElMessage.error(res.msg); | ||
| 169 | } | ||
| 170 | }) | ||
| 171 | } else { | ||
| 172 | getDiseaseAll().then((res: any) => { | ||
| 173 | if (res.code == proxy.$passCode) { | ||
| 174 | const data = res.data || []; | ||
| 175 | dictionaryList.value = data; | ||
| 176 | } else { | ||
| 177 | proxy.$ElMessage.error(res.msg); | ||
| 178 | } | ||
| 179 | }) | ||
| 180 | } | ||
| 181 | } | ||
| 182 | |||
| 159 | const tabsChange = (name) => { | 183 | const tabsChange = (name) => { |
| 160 | tabsActiveName.value = name | 184 | tabsActiveName.value = name |
| 161 | let info: any = { | 185 | let info: any = { |
| ... | @@ -283,11 +307,16 @@ const batching = (type) => { | ... | @@ -283,11 +307,16 @@ const batching = (type) => { |
| 283 | } | 307 | } |
| 284 | open("此操作将永久删除, 是否继续?", "warning", true); | 308 | open("此操作将永久删除, 是否继续?", "warning", true); |
| 285 | } else if (type === 'importFile') { | 309 | } else if (type === 'importFile') { |
| 286 | if (isfileImport == '2' || isfileImport == '4') { | 310 | if (isfileImport == '2' || isfileImport == '4' || isfileImport == '7' || isfileImport == '8') { |
| 287 | dialogInfo.value.header.title = '导入数据' | 311 | dialogInfo.value.header.title = '导入数据' |
| 288 | dialogInfo.value.type = 'upload' | 312 | dialogInfo.value.type = 'upload' |
| 289 | dialogInfo.value.size = isfileImport == '4' ? 600 : 500; | 313 | dialogInfo.value.size = isfileImport == '4' ? 600 : 500; |
| 290 | uploadFiles.value = [] | 314 | uploadFiles.value = [] |
| 315 | if (isfileImport == '7') { | ||
| 316 | uploadSteps.value[0].selectInfo.options = dictionaryList.value; | ||
| 317 | } else if (isfileImport == '8') { | ||
| 318 | uploadSteps.value[0].cascaderInfo.options = dictionaryList.value; | ||
| 319 | } | ||
| 291 | uploadInfo.value.uploadInfo.steps = uploadSteps.value | 320 | uploadInfo.value.uploadInfo.steps = uploadSteps.value |
| 292 | const content: any = [uploadInfo.value] | 321 | const content: any = [uploadInfo.value] |
| 293 | dialogInfo.value.contents = content | 322 | dialogInfo.value.contents = content |
| ... | @@ -377,6 +406,20 @@ const exportData = (ids: any = null) => { | ... | @@ -377,6 +406,20 @@ const exportData = (ids: any = null) => { |
| 377 | res?.msg && ElMessage.error(res?.msg); | 406 | res?.msg && ElMessage.error(res?.msg); |
| 378 | } | 407 | } |
| 379 | }); | 408 | }); |
| 409 | } else if (tabsActiveName.value == 'importFile' && isfileImport == '7') { | ||
| 410 | exportTemplate({ | ||
| 411 | bizGuid: '', | ||
| 412 | importType: "0046" | ||
| 413 | }).then((res: any) => { | ||
| 414 | download(res, '需求表管理导入模板.xlsx', 'excel') | ||
| 415 | }); | ||
| 416 | } else if (tabsActiveName.value == 'importFile' && isfileImport == '8') { | ||
| 417 | exportTemplate({ | ||
| 418 | bizGuid: '', | ||
| 419 | importType: "0047" | ||
| 420 | }).then((res: any) => { | ||
| 421 | download(res, '疾病管理导入模板.xlsx', 'excel') | ||
| 422 | }); | ||
| 380 | } | 423 | } |
| 381 | } | 424 | } |
| 382 | 425 | ||
| ... | @@ -390,11 +433,11 @@ const importData = (info) => { | ... | @@ -390,11 +433,11 @@ const importData = (info) => { |
| 390 | // dialogInfo.value.footer.btns.map((item: any) => delete item.disabled) | 433 | // dialogInfo.value.footer.btns.map((item: any) => delete item.disabled) |
| 391 | return | 434 | return |
| 392 | } | 435 | } |
| 393 | let paramUrl = ''; | ||
| 394 | if (isfileImport == '2') { | ||
| 395 | uploadFiles.value.forEach((item: any, index: number) => { | 436 | uploadFiles.value.forEach((item: any, index: number) => { |
| 396 | params.append("file", item.raw); | 437 | params.append("file", item.raw); |
| 397 | }); | 438 | }); |
| 439 | let paramUrl = ''; | ||
| 440 | if (isfileImport == '2') { | ||
| 398 | paramUrl = `ms-daop-zcgl-asset-dam-service/dam-catalog-table/excel-by-subject-guid?staffGuid=${userData.staffGuid}&subjectGuid=${route.query.bizGuid}` | 441 | paramUrl = `ms-daop-zcgl-asset-dam-service/dam-catalog-table/excel-by-subject-guid?staffGuid=${userData.staffGuid}&subjectGuid=${route.query.bizGuid}` |
| 399 | } else if (isfileImport == '4') { | 442 | } else if (isfileImport == '4') { |
| 400 | if (!info.databaseNameZh) { | 443 | if (!info.databaseNameZh) { |
| ... | @@ -411,14 +454,17 @@ const importData = (info) => { | ... | @@ -411,14 +454,17 @@ const importData = (info) => { |
| 411 | }) | 454 | }) |
| 412 | return; | 455 | return; |
| 413 | } | 456 | } |
| 414 | uploadFiles.value.forEach((item: any, index: number) => { | 457 | |
| 415 | params.append("uploadFile", item.raw); | ||
| 416 | }); | ||
| 417 | paramUrl = `${import.meta.env.VITE_APP_PLAN_BASEURL}/meta-collect-task/meta-collect-import?staffGuid=${userData.staffGuid}&databaseNameZh=${info.databaseNameZh}&databaseNameEn=${info.databaseNameEn}&isCover=${info.isCover}` | 458 | paramUrl = `${import.meta.env.VITE_APP_PLAN_BASEURL}/meta-collect-task/meta-collect-import?staffGuid=${userData.staffGuid}&databaseNameZh=${info.databaseNameZh}&databaseNameEn=${info.databaseNameEn}&isCover=${info.isCover}` |
| 459 | } else if (isfileImport == '7') { | ||
| 460 | info.bizGuid = '0046'; | ||
| 461 | paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}` | ||
| 462 | paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}` | ||
| 463 | } else if (isfileImport == '8') { | ||
| 464 | info.bizGuid = '0047'; | ||
| 465 | paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}` | ||
| 466 | paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}` | ||
| 418 | } else { | 467 | } else { |
| 419 | uploadFiles.value.forEach((item: any, index: number) => { | ||
| 420 | params.append("file", item.raw); | ||
| 421 | }); | ||
| 422 | paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}&dataType=2` | 468 | paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}&dataType=2` |
| 423 | if (info && Object.keys(info).length) { | 469 | if (info && Object.keys(info).length) { |
| 424 | paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}` | 470 | paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}` |
| ... | @@ -452,6 +498,10 @@ const dialogBtnClick = (btn, info) => { | ... | @@ -452,6 +498,10 @@ const dialogBtnClick = (btn, info) => { |
| 452 | if (dialogInfo.value.type == 'upload') { | 498 | if (dialogInfo.value.type == 'upload') { |
| 453 | if (tabsActiveName.value == 'dictionary') { | 499 | if (tabsActiveName.value == 'dictionary') { |
| 454 | importData({ bizGuid: dictionaryGuid.value }) | 500 | importData({ bizGuid: dictionaryGuid.value }) |
| 501 | } else if (tabsActiveName.value == 'importFile' && isfileImport == '7') { | ||
| 502 | importData(info) | ||
| 503 | } else if (tabsActiveName.value == 'importFile' && isfileImport == '8') { | ||
| 504 | importData(info) | ||
| 455 | } else { | 505 | } else { |
| 456 | importData(info) | 506 | importData(info) |
| 457 | } | 507 | } |
| ... | @@ -478,6 +528,10 @@ const setUploadInfo = () => { | ... | @@ -478,6 +528,10 @@ const setUploadInfo = () => { |
| 478 | importType.value = '0034'; | 528 | importType.value = '0034'; |
| 479 | } else if (isfileImport == '4') { | 529 | } else if (isfileImport == '4') { |
| 480 | importType.value = '0042'; | 530 | importType.value = '0042'; |
| 531 | } else if (isfileImport == '7') { | ||
| 532 | importType.value = '0046'; | ||
| 533 | } else if (isfileImport == '8') { | ||
| 534 | importType.value = '0047'; | ||
| 481 | } else { | 535 | } else { |
| 482 | importType.value = '0033'; | 536 | importType.value = '0033'; |
| 483 | } | 537 | } |
| ... | @@ -641,6 +695,94 @@ const setUploadInfo = () => { | ... | @@ -641,6 +695,94 @@ const setUploadInfo = () => { |
| 641 | } | 695 | } |
| 642 | ] | 696 | ] |
| 643 | uploadInfo.value.uploadInfo.extraParams = { isCover: 'Y' } | 697 | uploadInfo.value.uploadInfo.extraParams = { isCover: 'Y' } |
| 698 | } else if (tabsActiveName.value == 'importFile' && isfileImport == '7') { | ||
| 699 | uploadSteps.value = [ | ||
| 700 | { | ||
| 701 | title: '1、导入前请先录入以下内容', | ||
| 702 | type: 'select', | ||
| 703 | selectInfo: { | ||
| 704 | label: '需求表名称', | ||
| 705 | placeholder: '请选择', | ||
| 706 | field: 'menuGuid', | ||
| 707 | default: '', | ||
| 708 | options: [], | ||
| 709 | props: { | ||
| 710 | label: "menuName", | ||
| 711 | value: "guid", | ||
| 712 | }, | ||
| 713 | filterable: true, | ||
| 714 | clearable: true, | ||
| 715 | required: true, | ||
| 716 | style: { | ||
| 717 | width: '191px', | ||
| 718 | } | ||
| 719 | } | ||
| 720 | }, | ||
| 721 | { | ||
| 722 | title: '2、请下载最新的模板,并按照模板格式准备需要导入的数据', | ||
| 723 | type: 'btn_down' | ||
| 724 | }, | ||
| 725 | { | ||
| 726 | title: '3、选择准备好的文件导入', | ||
| 727 | type: 'btn_upload', | ||
| 728 | uploadInfo: { | ||
| 729 | action: '', | ||
| 730 | auto: false, | ||
| 731 | cover: true, | ||
| 732 | fileList: [], | ||
| 733 | accept: '.xlsx, .xls', | ||
| 734 | tips: '当前支持xls、xlsx文件,默认使用第一个sheet' | ||
| 735 | } | ||
| 736 | } | ||
| 737 | ] | ||
| 738 | dictionaryGuid.value = uploadSetting.value?.dictionaryGuid || '' | ||
| 739 | uploadInfo.value.uploadInfo.extraParams = { | ||
| 740 | menuGuid: dictionaryGuid.value | ||
| 741 | } | ||
| 742 | } else if (tabsActiveName.value == 'importFile' && isfileImport == '8') { | ||
| 743 | uploadSteps.value = [ | ||
| 744 | { | ||
| 745 | title: '1、导入前请先录入以下内容', | ||
| 746 | type: 'cascader', | ||
| 747 | cascaderInfo: { | ||
| 748 | label: '疾病名称', | ||
| 749 | placeholder: '', | ||
| 750 | field: 'parentGuid', | ||
| 751 | options: [], | ||
| 752 | default: '', | ||
| 753 | showAllLevels: false, | ||
| 754 | props: { | ||
| 755 | checkStrictly: true, | ||
| 756 | label: "diseaseName", | ||
| 757 | value: "guid", | ||
| 758 | children: 'childList', | ||
| 759 | emitPath: false | ||
| 760 | }, | ||
| 761 | filterable: true, | ||
| 762 | clearable: true, | ||
| 763 | } | ||
| 764 | }, | ||
| 765 | { | ||
| 766 | title: '2、请下载最新的模板,并按照模板格式准备需要导入的数据', | ||
| 767 | type: 'btn_down' | ||
| 768 | }, | ||
| 769 | { | ||
| 770 | title: '3、选择准备好的文件导入', | ||
| 771 | type: 'btn_upload', | ||
| 772 | uploadInfo: { | ||
| 773 | action: '', | ||
| 774 | auto: false, | ||
| 775 | cover: true, | ||
| 776 | fileList: [], | ||
| 777 | accept: '.xlsx, .xls', | ||
| 778 | tips: '当前支持xls、xlsx文件,默认使用第一个sheet' | ||
| 779 | } | ||
| 780 | } | ||
| 781 | ] | ||
| 782 | dictionaryGuid.value = uploadSetting.value?.dictionaryGuid || '' | ||
| 783 | uploadInfo.value.uploadInfo.extraParams = { | ||
| 784 | parentGuid: dictionaryGuid.value | ||
| 785 | } | ||
| 644 | } else { | 786 | } else { |
| 645 | uploadSteps.value = [ | 787 | uploadSteps.value = [ |
| 646 | { | 788 | { |
| ... | @@ -674,7 +816,8 @@ onActivated(() => { | ... | @@ -674,7 +816,8 @@ onActivated(() => { |
| 674 | if (tabsActiveName.value == 'dictionary') { | 816 | if (tabsActiveName.value == 'dictionary') { |
| 675 | getDictList(); | 817 | getDictList(); |
| 676 | } | 818 | } |
| 677 | setUploadInfo() | 819 | setUploadInfo(); |
| 820 | (isfileImport == '7' || isfileImport == '8') && getTreeData(); | ||
| 678 | }) | 821 | }) |
| 679 | 822 | ||
| 680 | </script> | 823 | </script> | ... | ... |
-
Please register or sign in to post a comment