Commit 43baef13 by “lijun”
2 parents 5f2c6ec4 830bfaac
File mode changed
// const ajaxUrl = '172.20.10.3:7003'; // const ajaxUrl = '172.20.10.3:7003';
// const ajaxUrl = '43.143.211.42'; // const ajaxUrl = '43.143.211.42';
// const ajaxUrl = "http://172.20.10.7:19000"; // const ajaxUrl = "http://172.20.10.7:19000";
const ajaxUrl = "192.168.0.102:80"; const ajaxUrl = "localhost:80";
/*
* @Description: 架构全景大屏及智能驾驶舱接口
* @Version: 2.0
* @Autor: pan
* @Date: 2024-05-29 16:04:01
* @LastEditors: pan
* @LastEditTime: 2024-06-05 14:44:06
*/
import { post } from '@/utils/http' import { post } from '@/utils/http'
import { import {
EADC_ARRCHITECTURE, EADC_ARRCHITECTURE,
EADC_SHARED_ABILITY EADC_SHARED_ABILITY
} from '@/config/micromodule' } from '@/config/micromodule'
const base = '/creen' const [base, cockpit] = ['/creen', '/smart-cockpit']
// 架构全景智能大屏------------------------
// 统推项目和自建项目占比 // 统推项目和自建项目占比
export function getProjPercent(params) { export function getProjPercent(params) {
return post(EADC_ARRCHITECTURE + `${base}/getProjPercent`, params) return post(EADC_ARRCHITECTURE + `${base}/getProjPercent`, params)
...@@ -37,4 +46,24 @@ export function getProinceList(params) { ...@@ -37,4 +46,24 @@ export function getProinceList(params) {
// 根据架构、元素对资产数据进行分类展示 // 根据架构、元素对资产数据进行分类展示
export function getAssetTypeDataByYearCount(params) { export function getAssetTypeDataByYearCount(params) {
return post(EADC_ARRCHITECTURE + `${base}/getAssetTypeDataByYearCount`, params) return post(EADC_ARRCHITECTURE + `${base}/getAssetTypeDataByYearCount`, params)
} }
\ No newline at end of file
// 智能驾驶舱---------------------
// 组织机构树
export function getOrgTree(params) {
return post(EADC_ARRCHITECTURE + `${cockpit}/orgTree`, params)
}
// 统计业务
export function getCountBusiness(params) {
return post(EADC_ARRCHITECTURE + `${cockpit}/countBusiness`, params)
}
// 项目管理信息
export function getPrjInfo(params) {
return post(EADC_ARRCHITECTURE + `${cockpit}/prjInfo`, params)
}
// 架构视图
export function getViewInfo(params) {
return post(EADC_ARRCHITECTURE + `${cockpit}/view`, params)
}
...@@ -18,7 +18,7 @@ export function getDrawioLeftCommonGraph(params) { ...@@ -18,7 +18,7 @@ export function getDrawioLeftCommonGraph(params) {
} }
export function save_drawio_attribute(params) { export function save_drawio_attribute(params) {
//保存画布属性 //保存画布属性
return post(EADC_ARRCHITECTURE + '/ma-ml/updateEleRelBatch', params) return post(EADC_ARRCHITECTURE + '/ele-rel/updEleBatch', params)
} }
// 导入列表 // 导入列表
export function offlineQuery(params) { export function offlineQuery(params) {
...@@ -118,7 +118,7 @@ export function getJGSTPZAdd(params) { ...@@ -118,7 +118,7 @@ export function getJGSTPZAdd(params) {
} }
// 编辑视图(state暂存2发布1) // 编辑视图(state暂存2发布1)
export function getJGSTPZUpdate(params) { export function getJGSTPZUpdate(params) {
return post(EADC_ARRCHITECTURE + '/archi-vw/upd-archi_vw', params) return post(EADC_ARRCHITECTURE + '/archi-vw/upd-archi-vw', params)
} }
// 批量发布 // 批量发布
export function getJGSTPZUpdateBatch(params) { export function getJGSTPZUpdateBatch(params) {
...@@ -134,11 +134,11 @@ export function getViewNameList(params) { ...@@ -134,11 +134,11 @@ export function getViewNameList(params) {
} }
// 获取元素和元素关系列表 // 获取元素和元素关系列表
export function getEleList(params) { export function getEleList(params) {
return post(EADC_ARRCHITECTURE + '/archi-vw/ele-list', params) return post(EADC_ARRCHITECTURE + '/ele/ele-list', params)
} }
export function gtEleRelList(params) { export function gtEleRelList(params) {
return post(EADC_ARRCHITECTURE + '/archi-vw/rel-list', params) return post(EADC_ARRCHITECTURE + '/ele-rel/rel-list', params)
} }``
// 元模型字典管理 // 元模型字典管理
// 列表查询 // 列表查询
...@@ -613,6 +613,11 @@ export function addSystemTable(params) { ...@@ -613,6 +613,11 @@ export function addSystemTable(params) {
export function editSystemTable(params) { export function editSystemTable(params) {
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/upd', params) return post(EADC_ARRCHITECTURE + '/arc-ast-sys/upd', params)
} }
// 系统资产架构,停用
export function stopSystemTable(params) {
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/stop', params)
}
// 系统资产架构,维护资产要素保存 // 系统资产架构,维护资产要素保存
export function systemArchiSaveFactor(params) { export function systemArchiSaveFactor(params) {
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/extend', params) return post(EADC_ARRCHITECTURE + '/arc-ast-sys/extend', params)
......
<template>
<div class="chart-box">
<div class="chart-title">{{ chartTitle }}</div>
<div class="chart-height" :style="{ height }">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
props: {
chartTitle: {
type: String,
default: '',
required: true,
},
height: {
type: String,
default: '240px',
},
},
}
</script>
<style scoped lang="scss">
.chart-title {
font-weight: 500;
font-size: 14px;
color: #000;
position: relative;
padding-left: 10px;
text-align: left;
margin-bottom: 14px;
&::before {
position: absolute;
content: '';
left: 0;
top: 3px;
width: 4px;
height: 15px;
background-color: rgba(13, 134, 127, 1);
border-radius: 2px;
}
}
</style>
<!--
* @Description: 选择项目组件
* @Version: 2.0
* @Autor: pan
* @Date: 2024-05-29 16:57:25
* @LastEditors: pan
* @LastEditTime: 2024-06-05 19:46:56
-->
<template> <template>
<el-dialog <el-dialog
title="选择项目" title="选择项目"
...@@ -26,7 +34,7 @@ ...@@ -26,7 +34,7 @@
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button> <el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleConfirm()" size="mini" <el-button type="primary" v-preventReClick @click="handleConfirm()" size="mini"
>确 定</el-button >确 定</el-button
> >
</span></el-dialog </span></el-dialog
...@@ -78,7 +86,7 @@ export default { ...@@ -78,7 +86,7 @@ export default {
initValue: '', // 字段初始值 initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性 placeholder: '请选择', // elementui组件属性
options: this.sysOrgOptions, options: this.sysOrgOptions,
filterable: true filterable: true,
}, },
{ {
label: '部门', // label文字 label: '部门', // label文字
...@@ -87,7 +95,7 @@ export default { ...@@ -87,7 +95,7 @@ export default {
initValue: '', // 字段初始值 initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性 placeholder: '请选择', // elementui组件属性
options: this.sysDeptOptions, options: this.sysDeptOptions,
filterable: true filterable: true,
}, },
{ {
label: '系统名称', // label文字 label: '系统名称', // label文字
...@@ -113,14 +121,14 @@ export default { ...@@ -113,14 +121,14 @@ export default {
{ {
label: '单位', label: '单位',
prop: 'manageOrgId', prop: 'manageOrgId',
width: '200px', width: '200px',
options: this.sysOrgOptions, options: this.sysOrgOptions,
collectionType: true, collectionType: true,
}, },
{ {
label: '部门', label: '部门',
prop: 'manageDeptId', prop: 'manageDeptId',
width: '200px', width: '200px',
options: this.sysDeptOptions, options: this.sysDeptOptions,
collectionType: true, collectionType: true,
}, },
......
...@@ -571,6 +571,48 @@ export const routes = [ ...@@ -571,6 +571,48 @@ export const routes = [
keepAlive: true, keepAlive: true,
}, },
}, },
{
path: "/main/digitalizeBuildAnalysis",
name: "digitalizeBuildAnalysis",
component: () => import("@/views/bigScreen/digitalizeBuildAnalysis/index.vue"),
meta: {
title: "电网数字化项目建设分析",
},
},
{
path: "/main/architectureBlueprintAnalysis",
name: "architectureBlueprintAnalysis",
component: () => import("@/views/bigScreen/architectureBlueprintAnalysis/index.vue"),
meta: {
title: "公司架构蓝图实现情况分析",
},
},
{
path: "/main/manageCockpit",
name: "manageCockpit",
component: () => import("@/views/bigScreen/cockpit/manageCockpit/index.vue"),
meta: {
title: "管理智能驾驶舱",
keepAlive: true,
},
},
{
path: "/main/businessCockpit",
name: "businessCockpit",
component: () => import("@/views/bigScreen/cockpit/businessCockpit/index.vue"),
meta: {
title: "业务智能驾驶舱",
keepAlive: true,
},
},
{
path: "/main/projectCockpit",
name: "projectCockpit",
component: () => import("@/views/bigScreen/cockpit/projectCockpit/index.vue"),
meta: {
title: "项目智能驾驶舱详情",
},
},
], ],
}, },
]; ];
......
...@@ -117,6 +117,15 @@ $color-primary: #0d867f; ...@@ -117,6 +117,15 @@ $color-primary: #0d867f;
.font-bold { .font-bold {
font-weight: bold; font-weight: bold;
} }
.align-l {
text-align: left;
}
.align-r {
text-align: right;
}
.align-c {
text-align: center;
}
.searchTable { .searchTable {
width: 100%; width: 100%;
......
...@@ -11,7 +11,7 @@ $color-primary: #0d857f; ...@@ -11,7 +11,7 @@ $color-primary: #0d857f;
color: #fff; color: #fff;
} }
/deep/ .el-dialog__close { /deep/ .el-dialog__close {
color: #fff; color: #fff!important;
} }
/deep/ .el-dialog__headerbtn:focus .el-dialog__close, /deep/ .el-dialog__headerbtn:focus .el-dialog__close,
/deep/ .el-dialog__headerbtn:hover .el-dialog__close { /deep/ .el-dialog__headerbtn:hover .el-dialog__close {
......
...@@ -31,9 +31,9 @@ export default { ...@@ -31,9 +31,9 @@ export default {
// position: relative; // position: relative;
// overflow: hidden; // overflow: hidden;
display: flex; display: flex;
height: calc(100% - 220px); height: calc(100% - 184px);
width: calc(100% - 40px); width: calc(100% - 24px);
margin: 70px 20px 20px 20px; margin: 0 12px 10px 12px;
border-top: 6px solid #0d867f; border-top: 6px solid #0d867f;
box-shadow: 10px 10px 30px 30px rgba(201, 226, 225, 1); box-shadow: 10px 10px 30px 30px rgba(201, 226, 225, 1);
} }
......
...@@ -237,7 +237,7 @@ export default { ...@@ -237,7 +237,7 @@ export default {
padding-right: 20px!important; padding-right: 20px!important;
} }
.tags-view-container { .tags-view-container {
height: 34px; height: 32px;
width: 100%; width: 100%;
background: #fff; background: #fff;
border-bottom: 1px solid #d8dce5; border-bottom: 1px solid #d8dce5;
...@@ -254,7 +254,7 @@ export default { ...@@ -254,7 +254,7 @@ export default {
color: #495060; color: #495060;
background: #fff; background: #fff;
padding: 0 8px; padding: 0 8px;
font-size: 12px; font-size: 14px;
margin-left: 5px; margin-left: 5px;
margin-top: 4px; margin-top: 4px;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
} }
.top_menu_container { .top_menu_container {
/* margin-bottom: 20px; */ /* margin-bottom: 20px; */
height: 125px; // height: 125px;
} }
.left_menu_and_drawio_container { .left_menu_and_drawio_container {
display: flex; display: flex;
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
width: 6%; width: 6%;
} */ } */
.logo_title_container { .logo_title_container {
height: 64px; height: 55px;
display: flex; display: flex;
align-items: center; align-items: center;
background-color: rgb(13, 134, 127); background-color: rgb(13, 134, 127);
...@@ -155,7 +155,7 @@ ...@@ -155,7 +155,7 @@
&::after { &::after {
content: ''; content: '';
position: absolute; position: absolute;
bottom: -17px; bottom: -12px;
left: -20px; left: -20px;
width: calc(100% + 20px); width: calc(100% + 20px);
height: 4px; height: 4px;
...@@ -223,7 +223,7 @@ ...@@ -223,7 +223,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 60px; height: 50px;
} }
.menu_1_container { .menu_1_container {
display: flex; display: flex;
......
...@@ -7,12 +7,12 @@ export const menuOptions = [ ...@@ -7,12 +7,12 @@ export const menuOptions = [
name: '架构全景智能大屏', name: '架构全景智能大屏',
children: [ children: [
{ {
name: 'XX网数字化项目建设分析', name: '网数字化项目建设分析',
path: '', path: '/main/digitalizeBuildAnalysis',
}, },
{ {
name: '公司架构蓝图实现情况分析', name: '公司架构蓝图实现情况分析',
path: '', path: '/main/architectureBlueprintAnalysis',
}, },
], ],
}, },
...@@ -21,15 +21,15 @@ export const menuOptions = [ ...@@ -21,15 +21,15 @@ export const menuOptions = [
children: [ children: [
{ {
name: '管理智能驾驶舱', name: '管理智能驾驶舱',
path: '', path: '/main/manageCockpit',
}, },
{ {
name: '业务智能驾驶舱', name: '业务智能驾驶舱',
path: '', path: '/main/businessCockpit',
}, },
{ {
name: '项目智能驾驶舱', name: '项目智能驾驶舱',
path: '', path: '/main/projectCockpit',
}, },
], ],
}, },
......
...@@ -869,7 +869,7 @@ import { ...@@ -869,7 +869,7 @@ import {
queryProjectInfoManageTable, queryProjectInfoManageTable,
querysystemInfoManageTable, querysystemInfoManageTable,
queryZiChanJiaGouZuJianLeiXing, queryZiChanJiaGouZuJianLeiXing,
queryZuJianLeiXingBelongForm, queryZuJianLeiXingBelongForm, stopSystemTable,
systemArchiSaveFactor, systemArchiSaveFactor,
} from '@/api/index.js' } from '@/api/index.js'
import $ from 'jquery' import $ from 'jquery'
...@@ -1824,10 +1824,9 @@ export default { ...@@ -1824,10 +1824,9 @@ export default {
.then(() => { .then(() => {
const params = { const params = {
assetId: row.assetId, assetId: row.assetId,
state: 0, state: 0
archiType: this.archiType,
} }
editSystemTable(params).then((res) => { stopSystemTable(params).then((res) => {
if (res.code == 200) { if (res.code == 200) {
this.get_table() this.get_table()
Message({ Message({
......
...@@ -111,73 +111,60 @@ ...@@ -111,73 +111,60 @@
border border
> >
<el-table-column <el-table-column
type="selection" type="selection"
width="55" width="55"
:selectable="selectable" :selectable="selectable"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
type="index" type="index"
label="序号" label="序号"
width="80" width="50"
align="center" align="center"
:index="indexMethod" :index="indexMethod"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="elementName" prop="elementName"
label="元素名称" label="元素名称"
align="center" align="center"
width="120" width="160"
show-overflow-tooltip
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="archiLevelName" prop="archiLevelName"
label="架构层次" label="架构层次"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="archiBelongName" prop="archiBelongName"
label="架构归属" label="架构归属"
align="center" align="center"
></el-table-column> ></el-table-column>
<!-- <el-table-column-->
<!-- prop="eaLevel"-->
<!-- label="元素层级"-->
<!-- align="center"-->
<!-- ></el-table-column>-->
<!-- <el-table-column
prop="content"
label="描述"
align="center"
width="200"
:show-overflow-tooltip="true"
></el-table-column> -->
<el-table-column <el-table-column
prop="definition" prop="definition"
label="定义" label="定义"
align="center" align="center"
width="200" width="150"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="referenceRelationship" prop="referenceRelationship"
label="引用关系" label="引用关系"
align="center" align="center"
width="200" width="150"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="example" prop="example"
label="示例" label="示例"
align="center" align="center"
width="200" width="150"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column width="100" label="图标" align="center"> <el-table-column width="100" label="图标" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<img <img
:src="scope.row.icon" :src="scope.row.icon"
alt="" alt=""
:style="{ width: scope.row.width, height: scope.row.height }" :style="{ width: scope.row.width, height: scope.row.height }"
/> />
<!-- <div v-html="scope.row.icon" style="display: flex;justify-content: center;"></div> --> <!-- <div v-html="scope.row.icon" style="display: flex;justify-content: center;"></div> -->
</template> </template>
...@@ -815,7 +802,7 @@ import { ...@@ -815,7 +802,7 @@ import {
} from '@/api/index.js' } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui' import { MessageBox, Message } from 'element-ui'
import $ from 'jquery' import $ from 'jquery'
import { getDictTypeOptions, svgToBase64 } from '@/utils' import { getDictTypuueOptions, svgToBase64 } from '@/utils'
import { archiEleColor } from '@/config' import { archiEleColor } from '@/config'
export default { export default {
name: 'ArchiEleList', name: 'ArchiEleList',
......
...@@ -7,13 +7,13 @@ ...@@ -7,13 +7,13 @@
<span class="search_title">元素关系名称</span> <span class="search_title">元素关系名称</span>
<el-input v-model="params.rsName" placeholder="请输入内容" class="search_item"></el-input> <el-input v-model="params.rsName" placeholder="请输入内容" class="search_item"></el-input>
</div> </div>
<div class="search_menu_item"> <!-- <div class="search_menu_item">
<span class="search_title">适用范围</span> <span class="search_title">适用范围</span>
<el-select v-model="params.scope" placeholder="请选择" clearable class="search_item"> <el-select v-model="params.scope" placeholder="请选择" clearable class="search_item">
<el-option v-for="(item, idnex) in search_select1" :key="idnex" :label="item.label" <el-option v-for="(item, idnex) in search_select1" :key="idnex" :label="item.label"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
</div> </div>-->
<div class="search_menu_item"> <div class="search_menu_item">
<span class="search_title">状态</span> <span class="search_title">状态</span>
<el-select v-model="params.state" placeholder="请选择" clearable class="search_item"> <el-select v-model="params.state" placeholder="请选择" clearable class="search_item">
......
...@@ -1107,7 +1107,7 @@ export default { ...@@ -1107,7 +1107,7 @@ export default {
return return
} }
let params = { let params = {
viewId: [], ids: [],
state: 2, state: 2,
} }
let hasArchiLevelId = true let hasArchiLevelId = true
...@@ -1115,7 +1115,7 @@ export default { ...@@ -1115,7 +1115,7 @@ export default {
if (!this.dicObj.archiLevelId[item.archiLevelId]) { if (!this.dicObj.archiLevelId[item.archiLevelId]) {
hasArchiLevelId = false hasArchiLevelId = false
} }
params.viewId.push(item.viewId) params.ids.push(item.viewId)
}) })
console.log('this.selectList', this.selectList) console.log('this.selectList', this.selectList)
if (!hasArchiLevelId) { if (!hasArchiLevelId) {
......
...@@ -105,27 +105,27 @@ export default { ...@@ -105,27 +105,27 @@ export default {
columns() { columns() {
return [ return [
{ label: '序号', type: 'index', width: '80px' }, { label: '序号', type: 'index', width: '80px' },
{ label: '批次年度', prop: 'year' }, { label: '批次名称', prop: 'batName', width: '500px', __slotName: 'batName', },
{ label: '批次名称', prop: 'batName', width: '300px', __slotName: 'batName', }, { label: '批次年度', prop: 'year', width: '150px'},
{
label: '计划评审日期',
width: '120px',
prop: 'planReviewDate',
},
{ {
label: '状态', label: '状态',
prop: 'state', prop: 'state',
width: '120px', width: '150px',
collectionType: 'approvalStatusOptions', collectionType: 'approvalStatusOptions',
options: approvalStatusOptions, options: approvalStatusOptions,
}, },
{ label: '备注', width: '100px', prop: 'remark' }, {
label: '计划评审日期',
width: '200px',
prop: 'planReviewDate',
},
// { label: '创建人', prop: 'createMan' }, // { label: '创建人', prop: 'createMan' },
{ label: '创建时间', prop: 'createTime', width: '120px' }, { label: '创建时间', prop: 'createTime', width: '200px' },
{ label: '备注', width: '400px', prop: 'remark' },
{ {
label: '操作', label: '操作',
type: 'operation', type: 'operation',
width: '360px', width: '450px',
actionButtons: [ actionButtons: [
{ {
title: '修改', title: '修改',
......
<!--
* @Description: 公司架构蓝图实现情况分析
* @Version: 2.0
* @Autor: pan
* @Date: 2024-05-28 18:59:07
* @LastEditors: pan
* @LastEditTime: 2024-06-03 08:28:59
-->
<template>
<div class="w-100 h-100 p-10 architectureBlueprintAnalysis">
<div class="filter-year m-b-10">
<el-date-picker
:editable="false"
v-model="year"
format="yyyy 年"
value-format="yyyy"
type="year"
placeholder="选择年"
:clearable="false"
@change="getAssetTypeDataByYearCount"
>
</el-date-picker>
</div>
<div class="container">
<el-row :gutter="20" type="flex" justify="center" style="flex-wrap: wrap">
<el-col
class="m-b-20"
:span="8"
v-for="(item, idx) in cardItems"
:key="idx"
>
<div class="card-item" :style="{ backgroundColor: item.bgColor }">
<div class="card-title font-14 m-b-10">{{ item.title }}</div>
<div class="flex-b-c">
<div
class="flex"
v-for="(countItem, idx2) in item.countItems"
:key="idx2"
>
<div class="count-item flex-column">
<div class="count-item-title font-14 m-b-10">
{{ countItem.title }}
</div>
<div class="count-item-value font-20 font-bold flex">
<count-to
:start-val="0"
:end-val="countItem.count1"
:duration="2000"
separator=","
autoplay
/>
<span>/</span>
<count-to
:start-val="0"
:end-val="countItem.count2"
:duration="2000"
separator=","
autoplay
/>
<span></span>
</div>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<chart-box height="330px" chart-title="视图数量">
<BaseChart :option="chartOptions" ref="chart" />
</chart-box>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import ChartBox from '@/components/Charts/ChartBox.vue'
import BaseChart from '@/components/Charts/BaseChart.vue'
import CountTo from '@/components/VueCountTo/index.vue'
import { getAssetTypeDataByYearCount } from '@/api/bigScreen'
export default {
name: 'architectureBlueprintAnalysis',
components: {
ChartBox,
BaseChart,
CountTo,
},
data() {
return {
year: new Date().format('yyyy'),
detailData: {},
}
},
computed: {
cardItems() {
const {
ARCHI_BUSINESS,
ARCHI_APPLICATION,
ARCHI_DATA,
ARCHI_TECHNOLOGY,
ARCHI_SAFE,
} = this.detailData
return [
{
title: '业务架构资产',
bgColor: '#8895ed',
countItems: [
{
title: '业务域',
count1: ARCHI_BUSINESS && ARCHI_BUSINESS['busDomainNum-sys'],
count2: ARCHI_BUSINESS && ARCHI_BUSINESS['busDomainNum'],
},
{
title: '业务职能',
count1: 595,
count2: 624,
},
{
title: '业务流程',
count1: ARCHI_BUSINESS && ARCHI_BUSINESS['busProcessNum-sys'],
count2: ARCHI_BUSINESS && ARCHI_BUSINESS['busProcessNum'],
},
],
},
{
title: '应用架构资产',
bgColor: '#b591e8',
countItems: [
{
title: '应用',
count1: 12,
count2: 14,
},
{
title: '一级功能',
count1:
ARCHI_APPLICATION && ARCHI_APPLICATION['oneLevelAppCount-sys'],
count2:
ARCHI_APPLICATION && ARCHI_APPLICATION['oneLevelAppCount'],
},
{
title: '二级功能',
count1:
ARCHI_APPLICATION && ARCHI_APPLICATION['twoLevelAppCount-sys'],
count2:
ARCHI_APPLICATION && ARCHI_APPLICATION['twoLevelAppCount'],
},
],
},
{
title: '数据架构资产',
bgColor: '#e192a6',
countItems: [
{
title: '一级主题域',
count1: ARCHI_DATA && ARCHI_DATA['oneLevelDataCount-sys'],
count2: ARCHI_DATA && ARCHI_DATA['oneLevelDataCount'],
},
{
title: '二级主题域',
count1: ARCHI_DATA && ARCHI_DATA['twoLevelDataCount-sys'],
count2: ARCHI_DATA && ARCHI_DATA['twoLevelDataCount'],
},
{
title: '概念实体',
count1: ARCHI_DATA && ARCHI_DATA['systemTotal'],
count2: ARCHI_DATA && ARCHI_DATA['totalityTotal'],
},
],
},
{
title: '技术架构资产',
bgColor: '#93afe9',
countItems: [
{
title: '技术域',
count1: ARCHI_TECHNOLOGY && ARCHI_TECHNOLOGY['tecDomainNum-sys'],
count2: ARCHI_TECHNOLOGY && ARCHI_TECHNOLOGY['tecDomainNum'],
},
{
title: '技术能力',
count1: ARCHI_TECHNOLOGY && ARCHI_TECHNOLOGY['tecAbilityNum-sys'],
count2: ARCHI_TECHNOLOGY && ARCHI_TECHNOLOGY['tecAbilityNum'],
},
{
title: '技术组件',
count1: ARCHI_TECHNOLOGY && ARCHI_TECHNOLOGY['tecModulNum-sys'],
count2: ARCHI_TECHNOLOGY && ARCHI_TECHNOLOGY['tecModulNum'],
},
],
},
{
title: '安全架构资产',
bgColor: '#a4ebaf',
countItems: [
{
title: '防护对象',
count1: 12,
count2: 14,
},
{
title: '防护要求',
count1: 595,
count2: 624,
},
{
title: '防护措施',
count1: 2869,
count2: 2967,
},
],
},
]
},
chartOptions() {
return {
color: ['#f2ad65', '#a0ddb8'],
tooltip: {
trigger: 'axis',
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
},
},
legend: {
data: ['总体', '系统'],
align: 'right',
left: '5%',
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
xAxis: [
{
type: 'category',
data: ['业务架构', '应用架构', '数据架构', '技术架构', '安全架构'],
},
],
yAxis: [
{
type: 'value',
axisLabel: {
formatter: '{value}',
},
},
],
series: [
{
name: '总体',
type: 'bar',
data: this.getTotal[1],
},
{
name: '系统',
type: 'bar',
data: this.getTotal[0],
},
],
}
},
getTotal() {
let [systemTotalList, totalityTotal] = [[], []]
if (Object.keys(this.detailData).length) {
for (const key in this.detailData) {
if (Object.hasOwnProperty.call(this.detailData, key)) {
const item = this.detailData[key]
systemTotalList.push(item.systemTotal || 0)
totalityTotal.push(item.totalityTotal || 0)
}
}
return [systemTotalList, totalityTotal]
} else {
return [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
]
}
},
},
created() {
this.getAssetTypeDataByYearCount()
},
methods: {
getAssetTypeDataByYearCount() {
getAssetTypeDataByYearCount({ year: this.year }).then((res) => {
if (res.code === 200) {
this.detailData = res.data
} else {
this.detailData = {}
this.$message.warning(res.msg)
}
})
},
},
}
</script>
<style scoped lang="scss">
.architectureBlueprintAnalysis {
box-sizing: border-box;
overflow-y: auto;
.card-item {
border-radius: 5px;
color: #ffffff;
text-align: left;
padding: 10px 16px;
}
}
</style>
<!--
* @Description: 业务智能驾驶舱
* @Version: 2.0
* @Autor: pan
* @Date: 2024-06-05 09:51:26
* @LastEditors: pan
* @LastEditTime: 2024-06-11 16:29:47
-->
<template>
<div class="w-100 h-100 manageCockpit flex">
<div class="leftTree">
<div class="treeTitle">组织机构</div>
<el-tree
:highlight-current="true"
:data="treeData"
:props="treeProps"
@node-click="handleNodeClick"
></el-tree>
</div>
<div class="flex-1" style="min-width: 0">
<div class="header__wrap p-16">
<div class="header-title m-b-16 align-l">
<span class="font-18 font-bold">发展策划部</span>
<div class="flex m-t-10">
<div class="flex m-r-30">
<div class="label">支撑业务系统数量:</div>
<div class="font-bold font-18">{{ numberSystems }}</div>
</div>
<div class="flex m-r-30">
<div class="label">涉及业务流程数量:</div>
<div class="font-bold font-18">{{ businessProcess }}</div>
</div>
<div class="flex">
<div class="label">涉及业务活动数量:</div>
<div class="font-bold font-18">{{ businessActivities }}</div>
</div>
</div>
</div>
<div class="header-choosePrj align-l">
<el-button class="m-r-20" type="primary" @click="fnChoosePrj()"
>选择项目
</el-button>
<span>您已选择:{{ prjInfo.prjName }}</span>
</div>
</div>
<div class="content__wrap flex">
<ProjectInfo ref="project" style="width: 30%" />
<ViewInfo
style="width: 70%"
:prjId="prjInfo.prjId"
ref="view"
class="flex-1"
/>
</div>
</div>
<!-- 选择项目组件 -->
<ChoosePrjDialog
@selectData="selectData"
:visible.sync="choosePrjVisible"
/>
</div>
</template>
<script>
import ChoosePrjDialog from '@/components/ChoosePrjDialog.vue'
import ProjectInfo from '../components/ProjectInfo.vue'
import ViewInfo from '../components/ViewInfo.vue'
import { queryProjectInfoManageTable } from '@/api/index'
import { getOrgTree, getCountBusiness } from '@/api/bigScreen'
export default {
name: 'manageCockpit',
components: {
ProjectInfo,
ChoosePrjDialog,
ViewInfo,
},
data() {
return {
choosePrjVisible: false,
prjInfo: {},
treeData: [],
treeProps: {
children: 'children',
label: 'name',
},
businessActivities: 0,
businessProcess: 0,
numberSystems: 0,
}
},
created() {
this.queryProjectInfoManageTable()
this.getOrgTree()
this.getCountBusiness()
},
methods: {
init() {
this.$refs['project'].fnGetDetail(this.prjInfo.prjId)
this.$refs['view'].getViewInfo(this.prjInfo.prjId)
},
queryProjectInfoManageTable() {
const params = {
current: 1,
pageSize: 1,
}
queryProjectInfoManageTable(params).then((res) => {
if (res.code === 200) {
this.prjInfo = res.data.records[0]
this.init()
} else {
this.$message.warning(res.msg)
}
})
},
getOrgTree() {
getOrgTree().then((res) => {
if (res.code === 200) {
this.treeData = res.data
}
})
},
fnChoosePrj() {
this.choosePrjVisible = true
},
selectData(data) {
console.log(data)
this.prjInfo = data[0]
this.init()
},
handleNodeClick() {},
getCountBusiness() {
getCountBusiness().then(res => {
if(res.code === 200) {
this.businessActivities = res.data.businessActivities,
this.businessProcess = res.data.businessProcess
this.numberSystems = res.data.numberSystems
}
})
}
},
}
</script>
<style scoped lang="scss">
.manageCockpit {
.leftTree {
width: 273px;
display: flex;
flex-direction: column;
border-right: 1px solid #ebeef5;
// height: 100%;
.treeTitle {
height: 60px;
line-height: 60px;
padding: 0 15px;
box-sizing: border-box;
border-bottom: 1px solid #ebeef5;
text-align: left;
font-weight: bold;
}
/deep/ .el-tree {
flex: 1;
min-height: 0;
overflow: auto;
padding-right: 10px;
margin-bottom: 10px;
.el-tree-node__expand-icon.el-icon-caret-right.is-leaf {
background-color: #ffffff !important;
}
.el-tree-node__content:hover {
.is-leaf {
background-color: #f5f7fa !important;
}
}
}
/deep/
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
background-color: #c0ebe4 !important;
color: #999999;
.is-leaf {
background-color: #c0ebe4 !important;
}
}
}
.header__wrap {
border-bottom: 1px solid #ebeef5;
}
.content__wrap {
height: calc(100% - 114px);
}
}
</style>
<!--
* @Description: 智能驾驶舱模块 项目信息组件
* @Version: 2.0
* @Autor: pan
* @Date: 2024-06-05 09:54:56
* @LastEditors: pan
* @LastEditTime: 2024-06-07 09:29:16
-->
<template>
<el-scrollbar>
<div class="project-info p-16">
<div class="title font-18 font-bold m-b-10">项目信息</div>
<div
class="info-item flex m-b-6"
v-for="(item, idx) in items"
:key="idx"
>
<div class="label m-r-10">{{ item.label }}:</div>
<div class="value">{{ item.value }}</div>
</div>
</div>
</el-scrollbar>
</template>
<script>
import { getPrjInfo } from '@/api/bigScreen'
export default {
props: {},
data() {
return {
items: [
{
label: '单位',
value: '',
key: 'manageOrgName',
},
{
label: '部门',
value: '',
key: 'manageDeptName',
},
{
label: '系统名称',
value: '',
key: 'appName',
},
{
label: '建设类型',
value: '',
key: 'buildTypeName',
},
{
label: '项目名称',
value: '',
key: 'prjName',
},
{
label: '项目类型',
value: '',
key: 'prjPlanClassName',
},
{
label: '业务部门',
value: '',
key: 'manageOrgName',
},
{
label: '承建单位',
value: '',
key: 'manageDeptName',
},
{
label: '项目经理',
value: '',
key: 'projectManager',
},
{
label: '概设评审信息',
value: '完成',
},
{
label: '督查相关信息',
value: '完成',
},
{
label: '项目资料',
value: '',
},
],
}
},
components: {},
mounted() {},
methods: {
fnGetDetail(prjId) {
getPrjInfo({ prjId }).then((res) => {
if (res.code === 200) {
const detailData = res.data
this.items.forEach(v => {
for (const key in detailData) {
if (Object.hasOwnProperty.call(detailData, key)) {
if(v.key === key) {
v.value = detailData[key]
}
}
}
})
}
})
},
},
}
</script>
<style scoped lang="scss">
/deep/ .el-scrollbar__wrap {
margin-right: -8px !important;
}
.label {
width: 120px;
text-align: right;
}
.value {
flex: 1;
text-align: left;
}
.title {
text-align: left;
}
</style>
<!--
* @Description: 智能驾驶舱模块 视图信息组件
* @Version: 2.0
* @Autor: pan
* @Date: 2024-06-05 10:20:36
* @LastEditors: pan
* @LastEditTime: 2024-06-11 15:19:04
-->
<template>
<div>
<el-tabs v-model="activeName" @tab-click="handleSubClick">
<el-tab-pane
:label="item.label"
:name="item.value"
v-for="item in archiBelongOptions"
:key="item.value"
>
</el-tab-pane>
</el-tabs>
<div class="view__wrap flex" v-loading="loading">
<template v-if="viewList.length">
<el-scrollbar>
<div class="view_card p-r-10">
<el-card
class="m-b-16 card-item"
shadow="hover"
v-for="item in viewList"
:key="item.viewId"
@click.native="fnCheckGraph(item)"
>
<div class="view_name">{{ item.viewName }}</div>
<div class="svg">
<img
class="w-100 h-100"
:src="getSvg(item.metaModelSvg)"
alt=""
/>
</div>
</el-card>
</div>
</el-scrollbar>
<div class="mxGraph flex-1">
<img class="w-100 h-100" :src="metaModelData" alt="" />
<!-- <div id="mxGraph_root" class="w-100 h-100"></div> -->
</div>
</template>
<el-empty class="w-100" v-else description="暂无数据"></el-empty>
</div>
</div>
</template>
<script>
import { query_jia_gou_ceng_ci_new } from '@/api/index'
import { getViewInfo } from '@/api/bigScreen'
export default {
props: {
prjId: {
type: Number,
default: null,
},
},
data() {
return {
activeName: '1',
archiBelongOptions: [],
viewList: [],
graph: null,
loading: false,
metaModelData: ''
}
},
components: {},
created() {
this.getArchiBelong()
},
methods: {
getSvg(base64) {
return `data:image/svg+xml;base64,${base64}`
},
fnCheckGraph(item) {
// this.graph.destroy()
// this.initGraph(item.metaModelData)
this.metaModelData = this.getSvg(item.metaModelSvg)
},
handleSubClick() {
this.graph?.destroy()
this.getViewInfo(this.prjId)
},
getArchiBelong() {
query_jia_gou_ceng_ci_new({ typeValue: 'archi_belong' }).then((res) => {
if (res.code == 200) {
this.archiBelongOptions = res.data
this.activeName = this.archiBelongOptions[0].value
} else {
this.$message.warning(res.msg)
}
})
},
getViewInfo(prjId) {
const params = {
prjId,
archiBelongId: this.activeName,
}
this.loading = true
getViewInfo(params)
.then((res) => {
this.loading = false
if (res.code === 200) {
this.viewList = res.data
this.metaModelData = this.getSvg(this.viewList[0].metaModelSvg)
// this.$nextTick(() => {
// this.initGraph(this.viewList[0]?.metaModelData)
// })
} else {
this.viewList = []
}
})
.catch((err) => {
this.loading = false
})
},
// initGraph(xml) {
// if (!xml) return
// this.graph = new mxGraph(document.getElementById('mxGraph_root'))
// this.graph.centerZoom = false // 是否居中缩放
// this.graph.setEnabled(false) // 设置启用,就是允不允许你改变CELL的形状内容。
// const model = this.graph.getModel()
// model.beginUpdate()
// try {
// const parseXml = xml.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&')
// var doc = mxUtils.parseXml(xml)
// var codec = new mxCodec(doc)
// console.log('doc', parseXml)
// codec.decode(doc.documentElement, this.graph.getModel())
// } finally {
// model.endUpdate()
// }
// },
},
destroyed() {
// this.graph.destroy()
},
}
</script>
<style scoped lang="scss">
/deep/ .el-scrollbar__wrap {
margin-right: -8px !important;
}
.view__wrap {
height: calc(100% - 54px);
overflow: hidden;
padding-right: 10px;
.view_card {
.card-item {
background-color: #f5fffe;
cursor: pointer;
.svg {
width: 140px;
height: 100px;
}
}
}
.mxGraph {
overflow: auto;
}
}
</style>
<!--
* @Description: 管理智能驾驶舱
* @Version: 2.0
* @Autor: pan
* @Date: 2024-06-05 09:51:26
* @LastEditors: pan
* @LastEditTime: 2024-06-11 09:29:35
-->
<template>
<div class="w-100 h-100 manageCockpit flex">
<div class="leftTree">
<div class="treeTitle">组织机构</div>
<el-tree
:highlight-current="true"
:data="treeData"
:props="treeProps"
@node-click="handleNodeClick"
></el-tree>
</div>
<div class="flex-1" style="min-width: 0">
<div class="header__wrap p-16">
<div class="header-title m-b-16 align-l font-bold font-18">
发展策划部
</div>
<div class="header-choosePrj align-l">
<el-button class="m-r-20" type="primary" @click="fnChoosePrj()"
>选择项目</el-button
>
<span>您已选择:{{ prjInfo.prjName }}</span>
</div>
</div>
<div class="content__wrap flex">
<ProjectInfo ref="project" style="width: 30%" />
<ViewInfo
style="width: 70%"
:prjId="prjInfo.prjId"
ref="view"
class="flex-1"
/>
</div>
</div>
<!-- 选择项目组件 -->
<ChoosePrjDialog
@selectData="selectData"
:visible.sync="choosePrjVisible"
/>
</div>
</template>
<script>
import ChoosePrjDialog from '@/components/ChoosePrjDialog.vue'
import ProjectInfo from '../components/ProjectInfo.vue'
import ViewInfo from '../components/ViewInfo.vue'
import { queryProjectInfoManageTable } from '@/api/index'
import { getOrgTree } from '@/api/bigScreen'
export default {
name: 'manageCockpit',
components: {
ProjectInfo,
ChoosePrjDialog,
ViewInfo,
},
data() {
return {
choosePrjVisible: false,
prjInfo: {},
treeData: [],
treeProps: {
children: 'children',
label: 'name',
},
}
},
created() {
this.queryProjectInfoManageTable()
this.getOrgTree()
},
methods: {
init() {
this.$refs['project'].fnGetDetail(this.prjInfo.prjId)
this.$refs['view'].getViewInfo(this.prjInfo.prjId)
},
queryProjectInfoManageTable() {
const params = {
current: 1,
pageSize: 1,
}
queryProjectInfoManageTable(params).then((res) => {
if (res.code === 200) {
this.prjInfo = res.data.records[0]
this.init()
} else {
this.$message.warning(res.msg)
}
})
},
getOrgTree() {
getOrgTree().then((res) => {
if (res.code === 200) {
this.treeData = res.data
}
})
},
fnChoosePrj() {
this.choosePrjVisible = true
},
selectData(data) {
console.log(data)
this.prjInfo = data[0]
this.init()
},
handleNodeClick() {},
},
}
</script>
<style scoped lang="scss">
.manageCockpit {
.leftTree {
width: 273px;
display: flex;
flex-direction: column;
border-right: 1px solid #ebeef5;
// height: 100%;
.treeTitle {
height: 60px;
line-height: 60px;
padding: 0 15px;
box-sizing: border-box;
border-bottom: 1px solid #ebeef5;
text-align: left;
font-weight: bold;
}
/deep/ .el-tree {
flex: 1;
min-height: 0;
overflow: auto;
padding-right: 10px;
margin-bottom: 10px;
.el-tree-node__expand-icon.el-icon-caret-right.is-leaf {
background-color: #ffffff !important;
}
.el-tree-node__content:hover {
.is-leaf {
background-color: #f5f7fa !important;
}
}
}
/deep/
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
background-color: #c0ebe4 !important;
color: #999999;
.is-leaf {
background-color: #c0ebe4 !important;
}
}
}
.header__wrap {
border-bottom: 1px solid #ebeef5;
}
.content__wrap {
height: calc(100% - 114px);
}
}
</style>
<!--
* @Description: 项目智能驾驶舱
* @Version: 2.0
* @Autor: pan
* @Date: 2024-06-05 09:51:26
* @LastEditors: pan
* @LastEditTime: 2024-06-11 16:16:47
-->
<template>
<div class="w-100 h-100 manageCockpit flex">
<div class="leftTree">
<div class="treeTitle">组织机构</div>
<el-tree
:highlight-current="true"
:data="treeData"
:props="treeProps"
@node-click="handleNodeClick"
></el-tree>
</div>
<div class="flex-1" style="min-width: 0">
<div class="header__wrap p-16">
<div class="header-title m-b-16 align-l font-bold font-18">
发展策划部
</div>
<div class="header-choosePrj align-l">
<el-button class="m-r-20" type="primary" @click="fnChoosePrj()"
>选择项目</el-button
>
<span>您已选择:{{ prjInfo.prjName }}</span>
</div>
</div>
<div class="content__wrap flex">
<ProjectInfo ref="project" style="width: 30%" />
<ViewInfo
style="width: 70%"
:prjId="prjInfo.prjId"
ref="view"
class="flex-1"
/>
</div>
</div>
<!-- 选择项目组件 -->
<ChoosePrjDialog
@selectData="selectData"
:visible.sync="choosePrjVisible"
/>
</div>
</template>
<script>
import ChoosePrjDialog from '@/components/ChoosePrjDialog.vue'
import ProjectInfo from '../components/ProjectInfo.vue'
import ViewInfo from '../components/ViewInfo.vue'
import { queryProjectInfoManageTable } from '@/api/index'
import { getOrgTree } from '@/api/bigScreen'
export default {
name: 'manageCockpit',
components: {
ProjectInfo,
ChoosePrjDialog,
ViewInfo,
},
data() {
return {
choosePrjVisible: false,
prjInfo: {},
treeData: [],
treeProps: {
children: 'children',
label: 'name',
},
}
},
created() {
this.queryProjectInfoManageTable()
this.getOrgTree()
},
methods: {
init() {
this.$refs['project'].fnGetDetail(this.prjInfo.prjId)
this.$refs['view'].getViewInfo(this.prjInfo.prjId)
},
queryProjectInfoManageTable() {
const params = {
current: 1,
pageSize: 1,
}
queryProjectInfoManageTable(params).then((res) => {
if (res.code === 200) {
this.prjInfo = res.data.records[0]
this.init()
} else {
this.$message.warning(res.msg)
}
})
},
getOrgTree() {
getOrgTree().then((res) => {
if (res.code === 200) {
this.treeData = res.data
}
})
},
fnChoosePrj() {
this.choosePrjVisible = true
},
selectData(data) {
console.log(data)
this.prjInfo = data[0]
this.init()
},
handleNodeClick() {},
},
}
</script>
<style scoped lang="scss">
.manageCockpit {
.leftTree {
width: 273px;
display: flex;
flex-direction: column;
border-right: 1px solid #ebeef5;
// height: 100%;
.treeTitle {
height: 60px;
line-height: 60px;
padding: 0 15px;
box-sizing: border-box;
border-bottom: 1px solid #ebeef5;
text-align: left;
font-weight: bold;
}
/deep/ .el-tree {
flex: 1;
min-height: 0;
overflow: auto;
padding-right: 10px;
margin-bottom: 10px;
.el-tree-node__expand-icon.el-icon-caret-right.is-leaf {
background-color: #ffffff !important;
}
.el-tree-node__content:hover {
.is-leaf {
background-color: #f5f7fa !important;
}
}
}
/deep/
.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content {
background-color: #c0ebe4 !important;
color: #999999;
.is-leaf {
background-color: #c0ebe4 !important;
}
}
}
.header__wrap {
border-bottom: 1px solid #ebeef5;
}
.content__wrap {
height: calc(100% - 114px);
}
}
</style>
import { getPastFiveYearList } from '@/utils'
const chartOptions = {
data() {
return {
chart1SumList: [],
chart1NumList: [],
chart3XAxisData: [],
buildingPrjNumList: [],
prjNumList: [],
prjSumList: [],
buildingPrjSumList: [],
chart4List: [],
chart5List: [],
}
},
computed: {
chart1Options() {
return {
backgroundColor: '#fff',
tooltip: {
show: true,
trigger: 'item',
formatter: '{b}: {c} ({d}%)',
},
legend: {
orient: 'vertical',
right: '0%',
bottom: 0,
data: [
'统推项目金额',
'自建项目金额',
'统推项目数量',
'自建项目数量',
],
},
series: [
{
type: 'pie',
selectedMode: 'single',
radius: ['58%', '83%'],
color: ['#627bf5', '#90a1f8', '#f09b69', '#f7cd96'],
label: {
position: 'inner',
formatter: '{d}%',
textStyle: {
color: '#fff',
fontWeight: 'bold',
fontSize: 12,
},
},
labelLine: {
show: false,
},
data: this.chart1SumList,
},
{
type: 'pie',
radius: ['25%', '58%'],
color: ['#627bf5', '#90a1f8', '#f09b69', '#f7cd96'],
label: {
position: 'inner',
formatter: '{d}%',
textStyle: {
color: '#ffffff',
fontWeight: 'bold',
fontSize: 12,
},
},
data: this.chart1NumList,
},
],
}
},
chart3Options() {
return {
color: ['#67a6a4', '#8e9dec'],
tooltip: {
trigger: 'axis',
axisPointer: { type: 'cross' },
},
grid: {
left: '5%',
},
legend: {
left: '5%',
data: ['在建数量', '项目数量', '在建项目金额', '项目金额'],
},
xAxis: [
{
type: 'category',
data: this.chart3XAxisData,
axisTick: {
show: false,
},
axisLine: {
show: false,
// lineStyle: {
// color: '#ccc'
// }
},
axisLabel: {
color: '#333',
},
},
],
yAxis: [
{
type: 'value',
name: '个',
// min: 0,
// max: Math.max(...this.buildingPrjNumList, ...this.prjNumList),
// interval: 20,
axisLabel: {
formatter: '{value}',
},
splitLine: {
show: false,
},
axisLine: {
show: false,
},
},
{
type: 'value',
name: '万元',
// min: 0,
// max: Math.max(...this.buildingPrjSumList, ...this.prjSumList),
// interval: Math.max(...this.buildingPrjNumList) / 10,
axisLabel: {
formatter: '{value}',
},
},
],
series: [
{
name: '在建数量',
type: 'bar',
yAxisIndex: 0,
data: this.buildingPrjNumList,
},
{
name: '项目数量',
type: 'bar',
yAxisIndex: 0,
data: this.prjNumList,
},
{
name: '在建项目金额',
type: 'line',
yAxisIndex: 1,
data: this.buildingPrjSumList,
},
{
name: '项目金额',
type: 'line',
yAxisIndex: 1,
data: this.prjSumList,
},
],
}
},
chart4Options() {
return {
color: '#f7c667',
tooltip: {
trigger: 'axis',
},
xAxis: {
type: 'category',
data: getPastFiveYearList(),
axisTick: {
show: false,
},
axisLine: {
show: false,
},
},
yAxis: {
type: 'value',
splitLine: {
lineStyle: {
type: 'dashed',
},
},
},
series: [
{
data: this.chart4List,
type: 'line',
},
],
}
},
chart5Options() {
return {
tooltip: {
trigger: 'axis',
},
xAxis: {
type: 'category',
data: getPastFiveYearList(),
axisTick: {
show: false,
},
axisLine: {
show: false,
},
},
yAxis: {
type: 'value',
splitLine: {
lineStyle: {
type: 'dashed',
},
},
},
series: this.chart5List,
}
},
},
methods: {},
}
export default chartOptions
<!--
* @Description: 电网数字化项目建设分析
* @Version: 2.0
* @Autor: pan
* @Date: 2024-05-27 14:10:12
* @LastEditors: pan
* @LastEditTime: 2024-06-07 16:12:37
-->
<template>
<div class="w-100 h-100 p-10 digitalizeBuildAnalysis">
<div class="filter-year m-b-10">
<el-date-picker
:editable="false"
v-model="year"
format="yyyy 年"
value-format="yyyy"
type="year"
placeholder="选择年"
:clearable="false"
@change="initData"
>
</el-date-picker>
</div>
<div class="container">
<el-row>
<el-col :span="8">
<chart-box chart-title="统建/自建项目占比">
<BaseChart :option="chart1Options" ref="chart1" />
</chart-box>
</el-col>
<el-col :span="16">
<chart-box class="m-l-30" chart-title="总部统推系统/项目情况">
<div class="chart2 w-100 h-100 flex">
<div
class="card-item flex-column"
v-for="(item, index) in cardItems"
:key="index"
>
<div class="card-title">{{ item.title }}</div>
<div class="card-value">
<count-to
:start-val="0"
:end-val="item.value"
:duration="2000"
separator=","
autoplay
/>
<span>{{ suffixText(item.title) }}</span>
</div>
</div>
</div>
</chart-box>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<chart-box height="330px" chart-title="各省自建项目情况">
<BaseChart :option="chart3Options" ref="chart3" />
</chart-box>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<chart-box height="330px" chart-title="统推项目近五年走势">
<BaseChart :option="chart4Options" ref="chart4" />
</chart-box>
</el-col>
<el-col :span="16">
<chart-box height="330px" chart-title="各省自建项目近五年走势">
<div class="flex h-100">
<div class="flex">
<el-checkbox-group
v-model="checkList"
@change="handleCheckChange"
>
<el-checkbox
:label="item.orgCode"
v-for="(item, idx) in provinceList"
:key="item.orgCode"
><span class="province-name">{{ item.orgSimpleName }}</span
><i
:style="{ backgroundColor: provinceLineColor[idx].color }"
class="icon-line"
></i
></el-checkbox>
</el-checkbox-group>
</div>
<BaseChart :option="chart5Options" ref="chart5" />
</div>
</chart-box>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import ChartBox from '@/components/Charts/ChartBox.vue'
import BaseChart from '@/components/Charts/BaseChart.vue'
import CountTo from '@/components/VueCountTo/index.vue'
import {
getProjPercent,
getHQEndYearProjInfo,
getProEndYearProjInfoNum,
getProEndYearProjInfoAmount,
getLastYearHqProjNum,
getLastYearByProProjNum,
getProinceList,
} from '@/api/bigScreen'
import chartOptions from './chartOptions.mixins'
import { getPastFiveYearList, debounce } from '@/utils'
import { provinceLineColor } from '@/config'
export default {
name: 'digitalizeBuildAnalysis',
components: {
ChartBox,
BaseChart,
CountTo,
},
mixins: [chartOptions],
data() {
return {
year: new Date().format('yyyy'),
cardItems: [
// {
// title: '统推系统数量',
// value: ''
// },
{
title: '统推项目数量',
value: 0,
},
{
title: '在建统推项目数量',
value: 0,
},
{
title: '项目总金额',
value: 0,
},
{
title: '在建项目总金额',
value: 0,
},
],
checkList: ['002'],
provinceList: [],
provinceLineColor,
}
},
mounted() {
this.initData()
},
methods: {
initData() {
this.getProjPercent()
this.getHQEndYearProjInfo()
this.getProvincePrjInfo()
this.getLastYearHqProjNum()
this.getProinceList()
},
// 统推/自建项目占比
getProjPercent() {
getProjPercent({ year: this.year }).then((res) => {
if (res.code === 200) {
const buildType1 = res.data.find((v) => v.build_type == 1) || {}
const buildType2 = res.data.find((v) => v.build_type == 2) || {}
this.chart1SumList = [
{
value: buildType1.amount,
name: '统推项目金额',
},
{
value: buildType2.amount,
name: '自建项目金额',
},
]
this.chart1NumList = [
{
value: buildType1.count,
name: '统推项目数量',
},
{
value: buildType2.count,
name: '自建项目数量',
},
]
} else {
this.$message.warning(res.msg)
}
})
},
// 总部统推系统/项目情况
getHQEndYearProjInfo() {
getHQEndYearProjInfo({ year: this.year }).then((res) => {
if (res.code === 200) {
this.cardItems[0].value = res.data.count
this.cardItems[1].value = res.data.now_count
this.cardItems[2].value = res.data.amount ? res.data.amount : 0
this.cardItems[3].value = res.data.now_amount
? res.data.now_amount
: 0
} else {
this.$message.warning(res.msg)
}
})
},
// 各省自建项目情况
getProvincePrjInfo() {
this.$refs.chart3.chart.showLoading({
text: '加载中...',
color: SystemConfig.DEFAULT_PRIMARY_COLOR,
textColor: '#000',
maskColor: 'rgba(255, 255, 255, 0.2)',
zlevel: 0,
})
this.buildingPrjNumList = []
this.prjNumList = []
this.prjSumList = []
this.buildingPrjSumList = []
const params = { year: this.year }
Promise.all([
getProEndYearProjInfoNum(params),
getProEndYearProjInfoAmount(params),
])
.then((res) => {
this.$refs.chart3.chart.hideLoading()
this.chart3XAxisData = res[0].data.map((v) => v.orgName)
res[0].data.forEach((v) => {
this.buildingPrjNumList.push(v.totalNowNum || 0)
this.prjNumList.push(v.totalNum || 0)
})
res[1].data.forEach((v) => {
this.prjSumList.push(v.amount || 0)
this.buildingPrjSumList.push(v.nowAmount || 0)
})
})
.catch((err) => {
console.log(err)
})
},
// 统推项目近五年走势
getLastYearHqProjNum() {
getLastYearHqProjNum({ year: this.year }).then((res) => {
if (res.code === 200) {
const fiveYear = getPastFiveYearList()
this.chart4List = fiveYear.map((v) => {
const obj = res.data.find((r) => r.year == v) || {}
return obj.totalNum || 0
})
} else {
this.$message.warning(res.msg)
}
})
},
getProinceList() {
getProinceList().then((res) => {
if (res.code === 200) {
this.provinceList = res.data
this.getLastYearByProProjNum()
}
})
},
// 各省自建项目近五年走势
getLastYearByProProjNum() {
const params = {
year: this.year,
orgCodes: this.checkList.join(','),
}
this.$refs.chart5?.chart.showLoading({
text: '加载中...',
color: SystemConfig.DEFAULT_PRIMARY_COLOR,
textColor: '#000',
maskColor: 'rgba(255, 255, 255, 0.2)',
zlevel: 0,
})
getLastYearByProProjNum(params).then((res) => {
this.$refs.chart5?.chart.hideLoading()
if (res.code === 200) {
const fiveYear = getPastFiveYearList()
this.chart5List = res.data.map((v) => {
const data = fiveYear.map((f) => {
return v[`${f}年`] || 0
})
const colorObj =
provinceLineColor.find((c) => c.name === v.simpleName) || {}
return {
data,
color: colorObj.color,
name: v.simpleName,
type: 'line',
}
})
} else {
this.$message.warning(res.msg)
}
})
},
suffixText(title) {
if (title.includes('数量')) {
return '个'
} else {
return '万元'
}
},
handleCheckChange: debounce(function () {
this.getLastYearByProProjNum()
}, 1000),
},
}
</script>
<style scoped lang="scss">
.digitalizeBuildAnalysis {
box-sizing: border-box;
overflow-y: auto;
}
.chart2 {
background-color: #8693f3;
border-radius: 5px;
}
.card-item {
padding: 20px 10px;
box-sizing: border-box;
position: relative;
width: 25%;
.card-title {
font-size: 16px;
margin-top: 20px;
color: #ffffff;
font-weight: 500;
}
.card-value {
color: #ffffff;
font-size: 26px;
display: flex;
align-items: center;
justify-content: flex-end;
flex: 1;
font-weight: bold;
}
&:not(:last-child)::after {
content: '';
position: absolute;
right: 0;
top: 30px;
width: 1px;
height: calc(100% - 60px);
background-color: #ffffff;
}
}
/deep/ .el-checkbox-group {
width: 320px;
display: flex;
flex-wrap: wrap;
align-content: flex-start;
.el-checkbox {
margin-right: 0;
width: 33.33%;
display: flex;
margin-bottom: 10px;
.province-name {
width: 40px;
display: inline-block;
text-align: left;
}
.icon-line {
width: 20px;
display: inline-block;
height: 2px;
vertical-align: super;
}
}
}
</style>
...@@ -159,25 +159,25 @@ ...@@ -159,25 +159,25 @@
> >
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column <el-table-column
type="index" type="index"
:index="indexMethod" :index="indexMethod"
label="序号" label="序号"
width="80" width="60"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="assetName" prop="assetName"
label="资产名称" label="资产名称"
width="300" width="150"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="assetNumber" prop="assetNumber"
label="资产编号" label="资产编号"
width="140" width="140"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="eleName" prop="eleName"
...@@ -209,10 +209,10 @@ ...@@ -209,10 +209,10 @@
</el-table-column> </el-table-column>
<!-- <el-table-column prop="parentAssetName" label="上级资产名称" width="300" :show-overflow-tooltip="true" align="center"></el-table-column> --> <!-- <el-table-column prop="parentAssetName" label="上级资产名称" width="300" :show-overflow-tooltip="true" align="center"></el-table-column> -->
<el-table-column <el-table-column
prop="version" prop="version"
label="版本号" label="版本号"
align="center" align="center"
show-overflow-tooltip show-overflow-tooltip
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="状态" label="状态"
...@@ -236,11 +236,6 @@ ...@@ -236,11 +236,6 @@
align="center" align="center"
width="100" width="100"
></el-table-column> ></el-table-column>
<el-table-column
prop="createMan"
label="创建人"
align="center"
></el-table-column>
<el-table-column label="操作" width="440" align="center"> <el-table-column label="操作" width="440" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div <div
......
<template>
<el-dialog
title="选择项目"
:visible.sync="showDialog"
:center="false"
:close-on-click-modal="false"
width="80%"
>
<div class="searchTable">
<list-page>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
>
</table-config>
</template>
</list-page>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleConfirm()" size="mini"
>确 定</el-button
>
</span></el-dialog
>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { queryProjectInfo } from '@/api/interface'
import { buildType, prjPlanClass } from '@/utils/dictionary'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
},
data() {
return {
query: {
url: queryProjectInfo,
method: 'post',
queryParam: {},
},
selectRows: [],
}
},
components: { ListPage, SearchForm, TableConfig },
computed: {
formOptions() {
return [
{
label: '单位', // label文字
prop: 'manageOrgId', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '部门', // label文字
prop: 'manageDeptId', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '系统名称', // label文字
prop: 'appName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '建设类型', // label文字
prop: 'needType', // 字段名
element: 'el-select', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
dictType: 'build_type',
},
]
},
columns() {
return [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageOrgId' },
{ label: '部门', prop: 'manageDeptId' },
{ label: '系统名称', prop: 'appName', width: '200px' },
{
label: '建设类型',
width: '100px',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
},
{
label: '项目名称',
prop: 'prjName',
width: '320px',
},
{
label: '是否续建',
prop: 'prjPlanClass',
options: prjPlanClass,
collectionType: 'prjPlanClass',
},
{ label: '承建单位', prop: 'buildOrg' },
{ label: '项目经理', prop: 'projectManager' },
{ label: '创建人', prop: 'createMan' },
{ label: '创建时间', prop: 'createTime' },
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
clearSelection() {
this.$refs['searchTable'].clearSelection()
},
handleClose() {
this.showDialog = false
this.selectRows = []
this.clearSelection()
},
handleConfirm() {
if (this.selectRows.length === 0) {
return this.$message.warning('请选择至少一条数据')
} else if (this.selectRows.length > 1) {
return this.$message.warning('只能选择一条数据')
}
this.$emit('selectData', this.selectRows)
this.handleClose()
},
// 表格勾选的数据
selectionChange(data) {
console.log('selectionChange', data)
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
::v-deep .el-dialog__body {
height: 500px;
}
</style>
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
prop="manageOrgId" prop="manageOrgId"
label="建设单位" label="建设单位"
align="center" align="center"
width="160" width="280"
show-overflow-tooltip show-overflow-tooltip
:formatter=" :formatter="
(row, column, cellValue, index) => (row, column, cellValue, index) =>
...@@ -109,6 +109,7 @@ ...@@ -109,6 +109,7 @@
label="业务部门" label="业务部门"
show-overflow-tooltip show-overflow-tooltip
align="center" align="center"
width="280"
:formatter=" :formatter="
(row, column, cellValue, index) => (row, column, cellValue, index) =>
formatterDept(row, column, cellValue, index, 'sysDeptOptions') formatterDept(row, column, cellValue, index, 'sysDeptOptions')
...@@ -118,7 +119,7 @@ ...@@ -118,7 +119,7 @@
prop="appName" prop="appName"
label="系统名称" label="系统名称"
align="center" align="center"
width="200" width="280"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column label="建设类型" align="center"> <el-table-column label="建设类型" align="center">
...@@ -131,7 +132,7 @@ ...@@ -131,7 +132,7 @@
prop="prjName" prop="prjName"
label="项目名称" label="项目名称"
align="center" align="center"
width="200" width="280"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
> >
<template slot-scope="{ row }"> <template slot-scope="{ row }">
...@@ -146,18 +147,18 @@ ...@@ -146,18 +147,18 @@
<span v-else-if="scope.row.prjPlanClass == 2">续建</span> <span v-else-if="scope.row.prjPlanClass == 2">续建</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="buildOrg" label="承建单位" align="center"> <el-table-column :show-overflow-tooltip="true" prop="buildOrg" label="承建单位" width="280" align="center">
<template v-slot="scope"> <template v-slot="scope">
<span>{{ scope.row.buildOrg | orgNameFilter(that) }}</span> <span>{{ scope.row.buildOrg | orgNameFilter(that) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="projAmount" label="项目金额" align="right"> <el-table-column prop="projAmount" label="项目金额(万元)" width="150" align="right">
<template v-slot="scope"> <template v-slot="scope">
<span style="font-weight: bold">{{ scope.row.projAmount | formatMoney }}</span> <span style="font-weight: bold">{{ scope.row.projAmount | formatMoney }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!--项目启动日期--> <!--项目启动日期-->
<el-table-column prop="projectInitiationTime" label="项目启动日期" align="center"> <el-table-column prop="projectInitiationTime" label="项目启动日期" width="120" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.projectInitiationTime }}</span> <span>{{ scope.row.projectInitiationTime }}</span>
</template> </template>
...@@ -244,7 +245,7 @@ ...@@ -244,7 +245,7 @@
></el-input> ></el-input>
</el-form-item> </el-form-item>
<!--项目金额-只可以输入金额,不能超过12位--> <!--项目金额-只可以输入金额,不能超过12位-->
<el-form-item label="项目金额:" prop="let6" style="width: 30%"> <el-form-item label="项目金额(万元):" prop="let6" style="width: 30%">
<el-input <el-input
v-model="ruleForm.let6" v-model="ruleForm.let6"
maxlength="12" maxlength="12"
...@@ -606,7 +607,7 @@ ...@@ -606,7 +607,7 @@
<span v-else></span> <span v-else></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="buildOrg" label="承建单位" align="center"> <el-table-column :show-overflow-tooltip="true" prop="buildOrg" label="承建单位" align="center">
<template v-slot="scope"> <template v-slot="scope">
<span>{{ scope.row.buildOrg | orgNameFilter(that) }}</span> <span>{{ scope.row.buildOrg | orgNameFilter(that) }}</span>
</template> </template>
...@@ -679,17 +680,17 @@ ...@@ -679,17 +680,17 @@
<script> <script>
import ProjectDetail from '@/views/projectInfoManage/ProjectDetail' import ProjectDetail from '@/views/projectInfoManage/ProjectDetail'
import { import {
queryProjectInfoManageTable,
getDianXingAnLiSelectData,
editDeleteProjectInfoManageTable,
querysystemInfoManageTable,
addProjectManageTable, addProjectManageTable,
getPrjInfoDetail, deleteProjectInfoManageTable,
editDeleteProjectInfoManageTable,
getDeptOption, getDeptOption,
getDianXingAnLiSelectData,
getOrgOption, getOrgOption,
deleteProjectInfoManageTable getPrjInfoDetail,
queryProjectInfoManageTable,
querysystemInfoManageTable
} from '@/api/index.js' } from '@/api/index.js'
import {MessageBox, Message} from 'element-ui' import {Message, MessageBox} from 'element-ui'
import $ from 'jquery' import $ from 'jquery'
import {getDictTypeOptions} from '@/utils' import {getDictTypeOptions} from '@/utils'
......
...@@ -6,57 +6,57 @@ ...@@ -6,57 +6,57 @@
<div class="search_menu_item"> <div class="search_menu_item">
<span class="search_title">建设单位</span> <span class="search_title">建设单位</span>
<el-select <el-select
v-model="searchParams.let1" v-model="searchParams.let1"
placeholder="请选择" placeholder="请选择"
class="search_item" class="search_item"
filterable filterable
> >
<el-option <el-option
v-for="item in sysOrgOptions" v-for="item in sysOrgOptions"
:key="item.orgId" :key="item.orgId"
:label="item.orgName" :label="item.orgName"
:value="item.orgId" :value="item.orgId"
></el-option> ></el-option>
</el-select> </el-select>
</div> </div>
<div class="search_menu_item"> <div class="search_menu_item">
<span class="search_title">业务部门</span> <span class="search_title">业务部门</span>
<el-select <el-select
filterable filterable
v-model="searchParams.let2" v-model="searchParams.let2"
placeholder="请选择" placeholder="请选择"
class="search_item" class="search_item"
> >
<el-option <el-option
v-for="item in sysDeptOptions" v-for="item in sysDeptOptions"
:key="item.orgId" :key="item.orgId"
:label="item.orgName" :label="item.orgName"
:value="item.orgId" :value="item.orgId"
></el-option> ></el-option>
</el-select> </el-select>
</div> </div>
<div class="search_menu_item"> <div class="search_menu_item">
<span class="search_title">系统名称</span> <span class="search_title">系统名称</span>
<el-input <el-input
v-no-backslash v-no-backslash
v-model="searchParams.let3" v-model="searchParams.let3"
maxlength="100" maxlength="100"
placeholder="请输入内容" placeholder="请输入内容"
class="search_item" class="search_item"
></el-input> ></el-input>
</div> </div>
<div class="search_menu_item"> <div class="search_menu_item">
<span class="search_title">建设类型</span> <span class="search_title">建设类型</span>
<el-select <el-select
v-model="searchParams.let4" v-model="searchParams.let4"
placeholder="请选择" placeholder="请选择"
class="search_item" class="search_item"
> >
<el-option <el-option
v-for="item in ziJianLeiXing" v-for="item in ziJianLeiXing"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
</div> </div>
...@@ -64,17 +64,17 @@ ...@@ -64,17 +64,17 @@
<div class="search_menu_btn_container"> <div class="search_menu_btn_container">
<div class="query_btn" @click="search_table"> <div class="query_btn" @click="search_table">
<img <img
class="btn_icon" class="btn_icon"
src="@/assets/archi-ele-list/search.png" src="@/assets/archi-ele-list/search.png"
alt="" alt=""
/> />
<p>查询</p> <p>查询</p>
</div> </div>
<div class="reset_btn" @click="reset"> <div class="reset_btn" @click="reset">
<img <img
class="btn_icon" class="btn_icon"
src="@/assets/archi-ele-list/reset.png" src="@/assets/archi-ele-list/reset.png"
alt="" alt=""
/> />
<p>重置</p> <p>重置</p>
</div> </div>
...@@ -82,49 +82,44 @@ ...@@ -82,49 +82,44 @@
</div> </div>
<div class="search_btn"> <div class="search_btn">
<el-button type="primary" size="medium" @click="toDetails" <el-button type="primary" size="medium" @click="toDetails"
>概设遵从情况</el-button >概设遵从情况
</el-button
> >
</div> </div>
<el-table <el-table
:height="tableHeight" :height="tableHeight"
v-loading="loading" v-loading="loading"
@selection-change="select_table_rows" @selection-change="select_table_rows"
:data="tableData" :data="tableData"
stripe stripe
border border
> >
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column <el-table-column
type="index" type="index"
:index="indexMethod" :index="indexMethod"
label="序号" label="序号"
width="80" width="80"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="manageOrgId" prop="manageOrgName"
label="建设单位" label="建设单位"
align="center" align="center"
:formatter=" width="300"
(row, column, cellValue, index) =>
formatterColumn(row, column, cellValue, index, 'sysOrgOptions')
"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="manageDeptId" prop="manageDeptName"
label="业务部门" label="业务部门"
align="center" align="center"
:formatter=" width="400"
(row, column, cellValue, index) =>
formatterColumn(row, column, cellValue, index, 'sysDeptOptions')
"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="appName" prop="appName"
label="系统名称" label="系统名称"
align="center" align="center"
width="200" width="400"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column prop="buildType" label="建设类型" align="center"> <el-table-column prop="buildType" label="建设类型" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -133,11 +128,11 @@ ...@@ -133,11 +128,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="prjName" prop="prjName"
label="项目名称" label="项目名称"
align="center" align="center"
width="200" width="300"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column label="是否续建" align="center"> <el-table-column label="是否续建" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -146,99 +141,109 @@ ...@@ -146,99 +141,109 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="manageOrgId" prop="buildOrg"
label="承建单位" label="承建单位"
align="center" align="center"
width="400"
:formatter="
(row, column, cellValue, index) =>
formatterColumn(row, column, cellValue, index, 'sysBuildOrgOptions')
"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="projectManager" prop="projectManager"
label="项目经理" label="项目经理"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column prop="remark" label="安全架构遵从" align="center"> <el-table-column prop="remark" label="安全架构遵从" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="check(scope.row, '1')" <el-button type="text" @click="check(scope.row, '1')"
>查看</el-button >查看
</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="部署架构审查" align="center"> <el-table-column prop="remark" label="部署架构审查" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="check(scope.row, '2')" <el-button type="text" @click="check(scope.row, '2')"
>查看</el-button >查看
</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="技术架构遵从" align="center"> <el-table-column prop="remark" label="技术架构遵从" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="check(scope.row, '3')" <el-button type="text" @click="check(scope.row, '3')"
>查看</el-button >查看
</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="应用架构遵从" align="center"> <el-table-column prop="remark" label="应用架构遵从" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="check(scope.row, '4')" <el-button type="text" @click="check(scope.row, '4')"
>查看</el-button >查看
</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="物理数据架构遵从" align="center"> <el-table-column prop="remark" label="物理数据架构遵从" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="check(scope.row, '5')" <el-button type="text" @click="check(scope.row, '5')"
>查看</el-button >查看
</el-button
> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination <el-pagination
background background
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="pager.current" :current-page="pager.current"
:page-sizes="pager.sizes" :page-sizes="pager.sizes"
:page-size="pager.size" :page-size="pager.size"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="pager.total" :total="pager.total"
> >
</el-pagination> </el-pagination>
</div> </div>
<el-dialog <el-dialog
:title="is_add_edit == 'add' ? '新建字典' : '编辑字典'" :title="is_add_edit == 'add' ? '新建字典' : '编辑字典'"
:visible.sync="add_dialog" :visible.sync="add_dialog"
:center="false" :center="false"
:close-on-click-modal="false" :close-on-click-modal="false"
width="60%" width="60%"
> >
<el-form <el-form
:model="ruleForm" :model="ruleForm"
ref="form" ref="form"
:rules="rules" :rules="rules"
style="display: flex; flex-wrap: wrap" style="display: flex; flex-wrap: wrap"
> >
<el-form-item label="字典名称:" prop="let1"> <el-form-item label="字典名称:" prop="let1">
<el-input <el-input
v-no-backslash v-no-backslash
v-model="ruleForm.let1" v-model="ruleForm.let1"
maxlength="100" maxlength="100"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="字典标识:" prop="let2"> <el-form-item label="字典标识:" prop="let2">
<el-input <el-input
v-no-backslash v-no-backslash
v-model="ruleForm.let2" v-model="ruleForm.let2"
maxlength="100" maxlength="100"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item class="cross1" label="描述:" prop="let3"> <el-form-item class="cross1" label="描述:" prop="let3">
<el-input <el-input
v-no-backslash v-no-backslash
v-model="ruleForm.let3" v-model="ruleForm.let3"
type="textarea" type="textarea"
:rows="3" :rows="3"
maxlength="200" maxlength="200"
show-word-limit show-word-limit
placeholder="请输入内容" placeholder="请输入内容"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -251,14 +256,10 @@ ...@@ -251,14 +256,10 @@
</template> </template>
<script> <script>
import { import {getDeptOption, getDianXingAnLiSelectData, getGaiSheJiaGouZunCongJiaChaTable, getOrgOption,} from '@/api/index.js'
getDianXingAnLiSelectData, import {Message} from 'element-ui'
getGaiSheJiaGouZunCongJiaChaTable,
getOrgOption,
getDeptOption,
} from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import $ from 'jquery' import $ from 'jquery'
import {getDictTypeOptions} from "@/utils";
export default { export default {
name: 'reviewArchiFollowCheck', name: 'reviewArchiFollowCheck',
...@@ -314,7 +315,8 @@ export default { ...@@ -314,7 +315,8 @@ export default {
}, },
methods: { methods: {
formatterColumn(row, column, cellValue, index, options) { formatterColumn(row, column, cellValue, index, options) {
const obj = this[options]?.find((v) => v.orgId == cellValue) || {} console.log(cellValue)
const obj = this[options]?.find((v) => v.value == cellValue) || {}
return obj.label return obj.label
}, },
getDicts() { getDicts() {
...@@ -328,6 +330,9 @@ export default { ...@@ -328,6 +330,9 @@ export default {
this.sysOrgOptions = res.data this.sysOrgOptions = res.data
} }
}) })
getDictTypeOptions('build_company').then((res) => {
this.sysBuildOrgOptions = res
})
}, },
indexMethod(index) { indexMethod(index) {
return (this.pager.current - 1) * this.pager.size + index + 1 return (this.pager.current - 1) * this.pager.size + index + 1
...@@ -354,17 +359,21 @@ export default { ...@@ -354,17 +359,21 @@ export default {
} }
const prjId = this.selectRows[0].prjId const prjId = this.selectRows[0].prjId
this.$router.push( this.$router.push(
`/main/reviewArchiFollowCheckDetails?prjId=${prjId}&type=1`, `/main/reviewArchiFollowCheckDetails?prjId=${prjId}&type=1`,
() => {}, () => {
() => {}, },
() => {
},
) )
}, },
check(row, type) { check(row, type) {
//查看点击 //查看点击
this.$router.push( this.$router.push(
`/main/reviewArchiFollowCheckDetails?prjId=${row.prjId}&type=${type}`, `/main/reviewArchiFollowCheckDetails?prjId=${row.prjId}&type=${type}`,
() => {}, () => {
() => {}, },
() => {
},
) )
}, },
save_dicy() { save_dicy() {
...@@ -408,11 +417,11 @@ export default { ...@@ -408,11 +417,11 @@ export default {
const search_menu_height = $('.search_menu').height() const search_menu_height = $('.search_menu').height()
const search_btn_height = $('.search_btn').outerHeight(true) const search_btn_height = $('.search_btn').outerHeight(true)
this.tableHeight = this.tableHeight =
table_container_height - table_container_height -
search_menu_height - search_menu_height -
search_btn_height - search_btn_height -
90 + 90 +
'px' 'px'
}, },
search_table() { search_table() {
//搜索 //搜索
...@@ -516,9 +525,11 @@ export default { ...@@ -516,9 +525,11 @@ export default {
color: #0d867f; color: #0d867f;
border: 0; border: 0;
} }
.el-button--text { .el-button--text {
color: #0d867f; color: #0d867f;
} }
/deep/ .el-input-group__append { /deep/ .el-input-group__append {
background-color: #0d867f; background-color: #0d867f;
color: #fff; color: #fff;
......
...@@ -3,22 +3,23 @@ ...@@ -3,22 +3,23 @@
<list-page> <list-page>
<!-- 查询表单插槽 --> <!-- 查询表单插槽 -->
<template #formWrap> <template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" /> <SearchForm @onSearch="querySearch" :form-options="formOptions"/>
</template> </template>
<!-- 中部操作按钮 --> <!-- 中部操作按钮 -->
<template #operationWrap> <template #operationWrap>
<el-button type="primary" size="medium" plain @click="toDetails" <el-button type="primary" size="medium" plain @click="toDetails"
>架构政策审查</el-button >架构政策审查
</el-button
> >
</template> </template>
<!-- 表格插槽 --> <!-- 表格插槽 -->
<template #tableWrap> <template #tableWrap>
<table-config <table-config
ref="searchTable" ref="searchTable"
@selection-change="selectionChange" @selection-change="selectionChange"
:query="query" :query="query"
:columns="columns" :columns="columns"
id-key="elementId" id-key="elementId"
> >
</table-config> </table-config>
</template> </template>
...@@ -31,10 +32,11 @@ import ListPage from '@/components/ListPage.vue' ...@@ -31,10 +32,11 @@ import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue' import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue' import TableConfig from '@/components/TableConfig.vue'
import { queryAppArchiControlRequirements } from '@/api/interface' import {queryAppArchiControlRequirements} from '@/api/interface'
import { getOrgOption, getDeptOption } from '@/api/index' import {getDeptOption, getOrgOption} from '@/api/index'
import { prjPlanClass } from '@/utils/dictionary' import {prjPlanClass} from '@/utils/dictionary'
import { getDictTypeOptions } from '@/utils' import {getDictTypeOptions} from '@/utils'
export default { export default {
name: 'batchPlanManagement', name: 'batchPlanManagement',
components: { components: {
...@@ -93,30 +95,26 @@ export default { ...@@ -93,30 +95,26 @@ export default {
}, },
columns() { columns() {
return [ return [
{ type: 'selection', width: '55px' }, {type: 'selection', width: '55px'},
{ label: '序号', type: 'index', width: '80px' }, {label: '序号', type: 'index', width: '80px'},
{ {
label: '建设单位', label: '建设单位',
prop: 'manageOrgId', prop: 'manageOrgName',
options: this.sysOrgOptions, width: '300px',
collectionType: true,
width: '120px',
}, },
{ {
label: '业务部门', label: '业务部门',
prop: 'manageDeptId', prop: 'manageDeptName',
options: this.sysDeptOptions, width: '300px',
collectionType: true,
width: '120px',
}, },
{ label: '系统名称', width: '280px', prop: 'appName' }, {label: '系统名称', width: '280px', prop: 'appName'},
{ {
label: '建设类型', label: '建设类型',
prop: 'buildType', prop: 'buildType',
options: this.buildTypeOptions, options: this.buildTypeOptions,
collectionType: 'build_type', collectionType: 'build_type',
}, },
{ label: '项目名称', width: '295px', prop: 'prjName' }, {label: '项目名称', width: '295px', prop: 'prjName'},
{ {
label: '是否续建', label: '是否续建',
prop: 'prjPlanClass', prop: 'prjPlanClass',
...@@ -128,13 +126,13 @@ export default { ...@@ -128,13 +126,13 @@ export default {
prop: 'buildOrg', prop: 'buildOrg',
options: this.sysBuildOrgOptions, options: this.sysBuildOrgOptions,
collectionType: true, collectionType: true,
width: '120px', width: '300px',
}, },
{ {
label: '运安符合性审查', label: '运安符合性审查',
prop: 'version3', prop: 'version3',
type: 'operation', type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }], actionButtons: [{title: '查看', type: 'text'}],
callback: (row, title) => { callback: (row, title) => {
this.fnToDetailsTab('1', row.prjId) this.fnToDetailsTab('1', row.prjId)
}, },
...@@ -143,7 +141,7 @@ export default { ...@@ -143,7 +141,7 @@ export default {
label: '功能满足审查', label: '功能满足审查',
prop: 'version4', prop: 'version4',
type: 'operation', type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }], actionButtons: [{title: '查看', type: 'text'}],
callback: (row, title) => { callback: (row, title) => {
this.fnToDetailsTab('2', row.prjId) this.fnToDetailsTab('2', row.prjId)
}, },
...@@ -152,7 +150,7 @@ export default { ...@@ -152,7 +150,7 @@ export default {
label: '运行可靠性审查', label: '运行可靠性审查',
prop: 'version5', prop: 'version5',
type: 'operation', type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }], actionButtons: [{title: '查看', type: 'text'}],
callback: (row, title) => { callback: (row, title) => {
this.fnToDetailsTab('3', row.prjId) this.fnToDetailsTab('3', row.prjId)
}, },
...@@ -161,7 +159,7 @@ export default { ...@@ -161,7 +159,7 @@ export default {
label: '系统实用性审查', label: '系统实用性审查',
prop: 'version6', prop: 'version6',
type: 'operation', type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }], actionButtons: [{title: '查看', type: 'text'}],
callback: (row, title) => { callback: (row, title) => {
this.fnToDetailsTab('4', row.prjId) this.fnToDetailsTab('4', row.prjId)
}, },
...@@ -170,7 +168,7 @@ export default { ...@@ -170,7 +168,7 @@ export default {
label: '系统安全性审查', label: '系统安全性审查',
prop: 'version8', prop: 'version8',
type: 'operation', type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }], actionButtons: [{title: '查看', type: 'text'}],
callback: (row, title) => { callback: (row, title) => {
this.fnToDetailsTab('5', row.prjId) this.fnToDetailsTab('5', row.prjId)
}, },
...@@ -179,7 +177,7 @@ export default { ...@@ -179,7 +177,7 @@ export default {
label: '资源复用性审查', label: '资源复用性审查',
prop: 'version7', prop: 'version7',
type: 'operation', type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }], actionButtons: [{title: '查看', type: 'text'}],
callback: (row, title) => { callback: (row, title) => {
this.fnToDetailsTab('6', row.prjId) this.fnToDetailsTab('6', row.prjId)
}, },
...@@ -215,7 +213,7 @@ export default { ...@@ -215,7 +213,7 @@ export default {
}) })
} }
}) })
getDictTypeOptions('sys_build_org').then((res) => { getDictTypeOptions('build_company').then((res) => {
this.sysBuildOrgOptions = res this.sysBuildOrgOptions = res
}) })
}, },
...@@ -237,7 +235,7 @@ export default { ...@@ -237,7 +235,7 @@ export default {
if (this.selectRows.length > 1) { if (this.selectRows.length > 1) {
return this.$message.warning('只能选择一条数据') return this.$message.warning('只能选择一条数据')
} }
const { name, prjId } = this.selectRows[0] const {name, prjId} = this.selectRows[0]
this.$router.push({ this.$router.push({
path: '/main/reviewArchiPoliticeCheckDetails', path: '/main/reviewArchiPoliticeCheckDetails',
query: { query: {
......
...@@ -3,26 +3,27 @@ ...@@ -3,26 +3,27 @@
<list-page> <list-page>
<!-- 查询表单插槽 --> <!-- 查询表单插槽 -->
<template #formWrap> <template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" /> <SearchForm @onSearch="querySearch" :form-options="formOptions"/>
</template> </template>
<!-- 中部操作按钮 --> <!-- 中部操作按钮 -->
<template #operationWrap> <template #operationWrap>
<el-button <el-button
icon="el-icon-document-add" icon="el-icon-document-add"
type="primary" type="primary"
size="medium" size="medium"
plain plain
@click="toDetails()" @click="toDetails()"
>评审情况(概要设计)</el-button >评审情况(概要设计)
</el-button
> >
</template> </template>
<!-- 表格插槽 --> <!-- 表格插槽 -->
<template #tableWrap> <template #tableWrap>
<table-config <table-config
ref="searchTable" ref="searchTable"
@selection-change="selectionChange" @selection-change="selectionChange"
:query="query" :query="query"
:columns="columns" :columns="columns"
> >
</table-config> </table-config>
</template> </template>
...@@ -35,10 +36,11 @@ import ListPage from '@/components/ListPage.vue' ...@@ -35,10 +36,11 @@ import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue' import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue' import TableConfig from '@/components/TableConfig.vue'
import { queryPrelDesInspecte } from '@/api/interface' import {queryPrelDesInspecte} from '@/api/interface'
import { getOrgOption, getDeptOption } from '@/api/index' import {getDeptOption, getOrgOption} from '@/api/index'
import { prjPlanClass, completionStatus } from '@/utils/dictionary' import {completionStatus, prjPlanClass} from '@/utils/dictionary'
import { getDictTypeOptions } from '@/utils' import {getDictTypeOptions} from '@/utils'
export default { export default {
name: 'reviewSituation', name: 'reviewSituation',
data() { data() {
...@@ -98,21 +100,17 @@ export default { ...@@ -98,21 +100,17 @@ export default {
}, },
columns() { columns() {
let arr = [ let arr = [
{ type: 'selection', width: '55px' }, {type: 'selection', width: '55px'},
{ label: '序号', type: 'index', width: '80px' }, {label: '序号', type: 'index', width: '80px'},
{ {
label: '建设单位', label: '建设单位',
prop: 'manageOrgId', prop: 'manageOrgName',
options: this.sysOrgOptions, width: '300px',
collectionType: true,
width: '120px',
}, },
{ {
label: '业务部门', label: '业务部门',
prop: 'manageDeptId', prop: 'manageDeptName',
options: this.sysDeptOptions, width: '300px',
collectionType: true,
width: '120px',
}, },
{ {
label: '系统名称', label: '系统名称',
...@@ -128,7 +126,7 @@ export default { ...@@ -128,7 +126,7 @@ export default {
}, },
{ {
label: '项目名称', label: '项目名称',
width: '200px', width: '320px',
prop: 'prjName', prop: 'prjName',
}, },
{ {
...@@ -143,7 +141,7 @@ export default { ...@@ -143,7 +141,7 @@ export default {
prop: 'buildOrg', prop: 'buildOrg',
options: this.sysBuildOrgOptions, options: this.sysBuildOrgOptions,
collectionType: true, collectionType: true,
width: '120px', width: '300px',
}, },
{ {
label: '项目经理', label: '项目经理',
...@@ -216,7 +214,7 @@ export default { ...@@ -216,7 +214,7 @@ export default {
}) })
} }
}) })
getDictTypeOptions('sys_build_org').then((res) => { getDictTypeOptions('build_company').then((res) => {
this.sysBuildOrgOptions = res this.sysBuildOrgOptions = res
}) })
}, },
......
...@@ -417,8 +417,8 @@ export default { ...@@ -417,8 +417,8 @@ export default {
item['caseType_'] = result1 ? result1.label : '' item['caseType_'] = result1 ? result1.label : ''
item['projectType_'] = result2 ? result2.label : '' item['projectType_'] = result2 ? result2.label : ''
item['problemType_'] = result2 ? result3.label : '' item['problemType_'] = result3 ? result3.label : ''
item['problemLevel_'] = result2 ? result4.label : '' item['problemLevel_'] = result4 ? result4.label : ''
}) })
this.pager.current = res.data.current this.pager.current = res.data.current
this.pager.total = res.data.total this.pager.total = res.data.total
......
...@@ -323,8 +323,8 @@ export default { ...@@ -323,8 +323,8 @@ export default {
item['caseType_'] = result1 ? result1.label : '' item['caseType_'] = result1 ? result1.label : ''
item['projectType_'] = result2 ? result2.label : '' item['projectType_'] = result2 ? result2.label : ''
item['problemType_'] = result2 ? result3.label : '' item['problemType_'] = result3 ? result3.label : ''
item['problemLevel_'] = result2 ? result4.label : '' item['problemLevel_'] = result4 ? result4.label : ''
}) })
this.pager.current = res.data.current this.pager.current = res.data.current
this.pager.total = res.data.total this.pager.total = res.data.total
......
function isFirstCol(n) {
return (n - 1) % 3 === 0
}
function isSecondCol(n) {
return n % 2 === 0
}
// function isThirdCol(n) {
// return n % 3 === 0
// }
function getItemX(index) {
if (isFirstCol(index)) {
return 16.25
} else if (isSecondCol(index)) {
return 167.25
} else {
return 318.75
}
}
function getBoxX(index) {
return 50 + (index % 2 === 0 ? 500 : 0)
}
function getItemY(index) {
return Math.ceil(index / 3) * 50
}
/**
* @description: 获取每一大块的Y坐标 Math.ceil(index / 2) * 20 代表换行数据后要加的间距
* @param {Number} index 索引(加一过了)
* @param {Array} data
* @return {Number}
* @author: pan
*/
function getBoxY(index, data) {
// console.log('getHeight', Math.ceil(index / 2) * getHeight(data))
// console.log('(index > 2 ? 20 : 0)', index > 2 ? 20 : 0)
return Math.ceil(index / 2) * getHeight(data) + Math.ceil(index / 2) * 20
}
function getHeight(data) {
// 取最大数据量的高度来设置最大高度
let maxArrayLength = 0
data.forEach((v) => {
if (v.children.length > maxArrayLength) {
maxArrayLength = v.children.length
}
})
// console.log('maxArrayLength', maxArrayLength)
return 50 + Math.ceil(maxArrayLength / 3) * (40 + 10)
}
// 数据成图, 拼接drawio的xml
export function handleXmlTemplate() {
const data = [
{
assetName: '人力资源',
children: [
{
assetName: '组织管理',
},
{
assetName: '员工管理',
},
{
assetName: '培训开发',
},
{
assetName: '薪酬福利管理',
},
{
assetName: '绩效管理',
},
{
assetName: '人力资源统计分析',
},
{
assetName: '企业业务流程管理',
},
{
assetName: '干部管理',
},
{
assetName: '人力资源规划计划',
},
],
},
{
assetName: '人力资源',
children: [
{
assetName: '组织管理',
},
{
assetName: '员工管理',
},
{
assetName: '培训开发',
},
{
assetName: '薪酬福利管理',
},
{
assetName: '绩效管理',
},
{
assetName: '人力资源统计分析',
},
],
},
{
assetName: '人力资源3',
children: [
{
assetName: '组织管理',
},
{
assetName: '员工管理',
},
{
assetName: '培训开发',
},
{
assetName: '薪酬福利管理',
},
{
assetName: '绩效管理',
},
{
assetName: '人力资源统计分析',
},
{
assetName: '企业业务流程管理',
},
{
assetName: '干部管理',
},
{
assetName: '人力资源规划计划',
},
],
},
{
assetName: '人力资源',
children: [
{
assetName: '组织管理',
},
{
assetName: '员工管理',
},
{
assetName: '培训开发',
},
{
assetName: '薪酬福利管理',
},
{
assetName: '绩效管理',
},
{
assetName: '人力资源统计分析',
},
{
assetName: '企业业务流程管理',
},
{
assetName: '干部管理',
},
{
assetName: '人力资源规划计划',
},
],
},
{
assetName: '人力资源',
children: [
{
assetName: '组织管理',
},
{
assetName: '员工管理',
},
{
assetName: '培训开发',
},
{
assetName: '薪酬福利管理',
},
{
assetName: '绩效管理',
},
{
assetName: '人力资源统计分析',
},
],
},
{
assetName: '人力资源3',
children: [
{
assetName: '组织管理',
},
{
assetName: '员工管理',
},
{
assetName: '培训开发',
},
{
assetName: '薪酬福利管理',
},
{
assetName: '绩效管理',
},
{
assetName: '人力资源统计分析',
},
{
assetName: '企业业务流程管理',
},
{
assetName: '干部管理',
},
{
assetName: '人力资源规划计划',
},
],
},
]
let template = `<mxGraphModel dx="1393" dy="684" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/>`
for (let index = 0; index < data.length; index++) {
const element = data[index]
template += `<mxCell id="iT7zhlySpOYr2a2o4UYg-${
index + 2
}" value="&lt;font style=&quot;font-size: 24px;&quot;&gt;${
element.assetName
}&lt;/font&gt;" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;container=1;collapsible=0;;fillColor=#c7ffd2;attr=[{&quot;name&quot;:&quot;cn_name&quot;,&quot;value&quot;:null,&quot;id&quot;:80,&quot;controlType&quot;:0},{&quot;name&quot;:&quot;en_name&quot;,&quot;value&quot;:null,&quot;id&quot;:81,&quot;controlType&quot;:0}];eleId=1;eaLevel=2;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="${getBoxX(index + 1)}" y="${getBoxY(
index + 1,
data,
)}" width="470" height="${getHeight(data)}" as="geometry"/>
</mxCell>`
for (let index2 = 0; index2 < data[index].children.length; index2++) {
const element2 = data[index].children[index2]
template += `<mxCell id="iT7zhlySpOYr2a2o4UYg-${index}-${index2}" value="${
element2.assetName
}" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-${
index + 2
}">
<mxGeometry x="${getItemX(index2 + 1)}" y="${getItemY(
index2 + 1,
)}" width="135" height="40" as="geometry"/>
</mxCell>`
}
}
template += `</root></mxGraphModel>`
return template
}
// export const template = `
// <mxGraphModel dx="1393" dy="684" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
// <root>
// <mxCell id="0"/>
// <mxCell id="1" parent="0"/>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-2" value="&lt;font style=&quot;font-size: 24px;&quot;&gt;人力资源&lt;/font&gt;" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;container=1;collapsible=0;;fillColor=#c7ffd2;attr=[{&quot;name&quot;:&quot;cn_name&quot;,&quot;value&quot;:null,&quot;id&quot;:80,&quot;controlType&quot;:0},{&quot;name&quot;:&quot;en_name&quot;,&quot;value&quot;:null,&quot;id&quot;:81,&quot;controlType&quot;:0}];eleId=1;eaLevel=2;verticalAlign=top;" vertex="1" parent="1">
// <mxGeometry x="50" y="50" width="470" height="200" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-3" value="员工管理" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="167.25" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-4" value="培训开发" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="318.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-5" value="组织管理" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="16.25" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-6" value="薪酬福利管理" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="16.25" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-7" value="企业业务流程管理" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="16.25" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-8" value="绩效管理" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="166.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-9" value="干部管理" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="167.25" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-10" value="人力资源统计分析" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="318.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-11" value="人力资源规划计划" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-2">
// <mxGeometry x="318.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-12" value="&lt;span style=&quot;font-size: 24px;&quot;&gt;生产检修&lt;/span&gt;" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;container=1;collapsible=0;;fillColor=#c7ffd2;attr=[{&quot;name&quot;:&quot;cn_name&quot;,&quot;value&quot;:null,&quot;id&quot;:80,&quot;controlType&quot;:0},{&quot;name&quot;:&quot;en_name&quot;,&quot;value&quot;:null,&quot;id&quot;:81,&quot;controlType&quot;:0}];eleId=1;eaLevel=2;verticalAlign=top;" vertex="1" parent="1">
// <mxGeometry x="540.5" y="50" width="470" height="200" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-13" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="15.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-14" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="166.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-15" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="318.25" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-16" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="15.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-17" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="166.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-18" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="318.25" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-19" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="15.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-20" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="166.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-21" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-12">
// <mxGeometry x="318.25" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-22" value="&lt;span style=&quot;font-size: 24px;&quot;&gt;电网建设&lt;/span&gt;" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;container=1;collapsible=0;;fillColor=#c7ffd2;attr=[{&quot;name&quot;:&quot;cn_name&quot;,&quot;value&quot;:null,&quot;id&quot;:80,&quot;controlType&quot;:0},{&quot;name&quot;:&quot;en_name&quot;,&quot;value&quot;:null,&quot;id&quot;:81,&quot;controlType&quot;:0}];eleId=1;eaLevel=2;verticalAlign=top;" vertex="1" parent="1">
// <mxGeometry x="540.5" y="276" width="470" height="200" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-23" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="15.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-24" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="166.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-25" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="318.25" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-26" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="15.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-27" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="166.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-28" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="318.25" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-29" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="15.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-30" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="166.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-31" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-22">
// <mxGeometry x="318.25" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-32" value="&lt;span style=&quot;font-size: 24px;&quot;&gt;规划计划&lt;/span&gt;" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;container=1;collapsible=0;;fillColor=#c7ffd2;attr=[{&quot;name&quot;:&quot;cn_name&quot;,&quot;value&quot;:null,&quot;id&quot;:80,&quot;controlType&quot;:0},{&quot;name&quot;:&quot;en_name&quot;,&quot;value&quot;:null,&quot;id&quot;:81,&quot;controlType&quot;:0}];eleId=1;eaLevel=2;verticalAlign=top;" vertex="1" parent="1">
// <mxGeometry x="50" y="276" width="470" height="200" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-33" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="15.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-34" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="166.75" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-35" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="318.25" y="50" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-36" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="15.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-37" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="166.75" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-38" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="318.25" y="100" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-39" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="15.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-40" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="166.75" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// <mxCell id="iT7zhlySpOYr2a2o4UYg-41" value="XXX" style="html=1;outlineConnect=0;whiteSpace=wrap;shape=mxgraph.archimate3.application;appType=actor;archiType=square;fillColor=#a1bf8d;fillColor=#9ef5af;fillColor=#c7ffd2;;fillColor=#c7ffd2;attr=[];container=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="iT7zhlySpOYr2a2o4UYg-32">
// <mxGeometry x="318.25" y="150" width="135" height="40" as="geometry"/>
// </mxCell>
// </root>
// </mxGraphModel>
// `
...@@ -15,7 +15,7 @@ function resolve(dir) { ...@@ -15,7 +15,7 @@ function resolve(dir) {
// const ip = '192.168.137.146'; // 谢皓 // const ip = '192.168.137.146'; // 谢皓
// const ip = '2068224he2.51mypc.cn'; // 谢皓 // const ip = '2068224he2.51mypc.cn'; // 谢皓
const ip = '192.168.0.102' const ip = '192.168.8.120'
// const ip = '192.168.0.13'; // const ip = '192.168.0.13';
// const ip = '192.168.137.229' // const ip = '192.168.137.229'
module.exports = defineConfig({ module.exports = defineConfig({
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!