Commit 9223b210 by liuyong

修改bug

2 parents 237375f5 6d4d32cc
Showing with 9942 additions and 2885 deletions
NODE_ENV = 'development'
VUE_APP_BASE_URL = "/api"
VUE_APP_BASE_URL = ""
NODE_ENV = 'production'
VUE_APP_BASE_URL = "http://43.143.211.42:7003"
VUE_APP_BASE_URL = "http://192.168.0.120:80"
......@@ -11,6 +11,7 @@
"@wangeditor/editor-for-vue": "^1.0.2",
"axios": "^1.6.2",
"core-js": "^3.8.3",
"echarts": "^5.5.0",
"element-ui": "^2.15.14",
"jquery": "^3.7.1",
"scss": "^0.2.4",
......
function initSetScratchpad() {//左侧便签本初始化数据
function initSetScratchpad() {
//左侧便签本初始化数据
$.ajax({
method: "post",
url: `http://${ajaxUrl}:7003/short-cut-model/qSCMList`,
method: 'post',
url: `http://${ajaxUrl}/eadc-architecture/short-cut-model/qSCMList`,
data: JSON.stringify({}),
success: function(result) {
let images = [];
result.data.forEach(item => {
success: function (result) {
let images = []
result.data.forEach((item) => {
images.push({
xml: item.icon,
h: item.height,
w: item.width,
title: item.title ? item.title : null
title: item.title ? item.title : null,
})
})
// console.log(images)
let xml = '<mxlibrary>'+JSON.stringify(images, null, 2)+'</mxlibrary>';
let xml = '<mxlibrary>' + JSON.stringify(images, null, 2) + '</mxlibrary>'
let request = window.indexedDB.open('database', 2);
let request = window.indexedDB.open('database', 2)
request.onsuccess = function (event) {
let db = request.result;
let trx = db.transaction('filesInfo', 'readwrite');
let trx2 = db.transaction('files', 'readwrite');
let db = request.result
let trx = db.transaction('filesInfo', 'readwrite')
let trx2 = db.transaction('files', 'readwrite')
trx.objectStore('filesInfo').put({
title: '.scratchpad',
size: xml.length,
lastModified: Date.now(),
type: 'L'
type: 'L',
})
trx2.objectStore('files').put({
title: '.scratchpad',
data: xml
data: xml,
})
}
},
error: function(error) {
error: function (error) {
console.error(error)
}
});
},
})
// const images = [
// {
......@@ -55,32 +55,33 @@ function initSetScratchpad() {//左侧便签本初始化数据
// 若为压缩的xml,则内容是diagram的内容
}
function saveScratchpad(data) {//左侧便签本保存数据
function saveScratchpad(data) {
//左侧便签本保存数据
let params = [];
if(data.length > 0) {
data.forEach(item => {
let params = []
if (data.length > 0) {
data.forEach((item) => {
params.push({
icon: item.xml,
height: item.h,
width: item.w,
title: item.title ? item.title : null,
sort: 1
sort: 1,
})
})
}else {
params = [];
} else {
params = []
}
$.ajax({
method: "post",
url: `http://${ajaxUrl}:7003/short-cut-model/cSCModel`,
method: 'post',
url: `http://${ajaxUrl}/eadc-architecture/short-cut-model/cSCModel`,
data: JSON.stringify(params),
contentType: 'application/json',
success: function(result) {
success: function (result) {
console.log(result)
},
error: function(error) {
error: function (error) {
console.error(error)
}
});
},
})
}
// const ajaxUrl = '172.20.10.3:7003';
const ajaxUrl = '43.143.211.42';
// const ajaxUrl = '43.143.211.42';
const ajaxUrl = '192.168.0.120:80'
This diff could not be displayed because it is too large.
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title><%= htmlWebpackPlugin.options.title %></title>
<link type="text/css" rel="stylesheet" href="./jsmind/jsmind.css" />
<script type="text/javascript" src="./jsmind/jsmind.js"></script>
<script type="text/javascript" src="./jsmind/jsmind.draggable-node.js"></script>
<script
type="text/javascript"
src="./jsmind/jsmind.draggable-node.js"
></script>
<script type="text/javascript" src="./jsmind/dom-to-image.js"></script>
<script type="text/javascript" src="./jsmind/jsmind.screenshot.js"></script>
<script type="text/javascript" src="./echarts.min.js"></script>
<!-- <script type="text/javascript" src="./echarts.min.js"></script> -->
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
<strong
>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
properly without JavaScript enabled. Please enable it to
continue.</strong
>
</noscript>
<div id="app"></div>
<!-- <script type="text/javascript" src="http://192.168.0.186:9001/web-apps/apps/api/documents/api.js"></script> -->
......@@ -23,19 +30,20 @@
<!-- built files will be auto injected -->
</body>
<style>
html,body{
html,
body {
height: 100%;
overflow: hidden;
margin: 0;
padding: 0;
}
::-webkit-scrollbar{
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track{
::-webkit-scrollbar-track {
background-color: #fff;
}
::-webkit-scrollbar-thumb{
::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: #ccc;
}
......
import { get, post, download } from '@/utils/http';
export function query_jia_gou_yuan_su_guan_xi_table(params) {//查询架构元素管理表格
return post('/network/ele/', params);
}
export function getDrawioLeftStandardGraph(params) {//查询画布左侧标准图形
return post('/network/ma-ml/archi-list', params);
}
export function getDrawioLeftCommonGraph(params) {//查询画布左侧常规图形
return post('/network/ma-ml/archi-list2', params);
}
export function save_drawio_attribute(params) {//保存画布属性
return post('/network/ma-ml/updateEleRelBatch', params);
import { get, post, download } from '@/utils/http'
import {
EADC_ARRCHITECTURE,
EADC_KNOWLEDGE_POOL,
EADC_SHARED_ABILITY,
} from '@/config/micromodule'
export function query_jia_gou_yuan_su_guan_xi_table(params) {
//查询架构元素管理表格
return post(EADC_ARRCHITECTURE + '/ele/', params)
}
export function getDrawioLeftStandardGraph(params) {
//查询画布左侧标准图形
return post(EADC_ARRCHITECTURE + '/ma-ml/archi-list', params)
}
export function getDrawioLeftCommonGraph(params) {
//查询画布左侧常规图形
return post(EADC_ARRCHITECTURE + '/ma-ml/archi-list2', params)
}
export function save_drawio_attribute(params) {
//保存画布属性
return post(EADC_ARRCHITECTURE + '/ma-ml/updateEleRelBatch', params)
}
// 导入列表
export function offlineQuery(params) {
return post(`/network/anasz-smart-screen/offlineQuery/`, params);
return post(EADC_ARRCHITECTURE + `/anasz-smart-screen/offlineQuery/`, params)
}
export function add_jia_gou_ceng_ci(params) {// 新增架构层次
return post('/network/ele/ad-archi-lv', params);
export function add_jia_gou_ceng_ci(params) {
// 新增架构层次
return post(EADC_ARRCHITECTURE + '/ele/ad-archi-lv', params)
}
export function query_jia_gou_ceng_ci(params) {//查询架构层次
return post('/network/ele/archi-lv-list', params);
export function query_jia_gou_ceng_ci(params) {
//查询架构层次
return post(EADC_ARRCHITECTURE + '/ele/archi-lv-list', params)
}
export function add_jia_gou_gui_shu(params) {// 新增架构归属
return post('/network/ele/ad-archi-blg', params);
export function add_jia_gou_gui_shu(params) {
// 新增架构归属
return post(EADC_ARRCHITECTURE + '/ele/ad-archi-blg', params)
}
export function query_jia_gou_gui_shu(params) {// 查询架构归属
return post('/network/ele/archi-blg-list', params);
export function query_jia_gou_gui_shu(params) {
// 查询架构归属
return post(EADC_ARRCHITECTURE + '/ele/archi-blg-list', params)
}
export function query_jia_gou_gui_shu_belong_icon(params) {// 查询架构归属分类下的图标
return post('/network/graph-mx-pool/qGMXPs', params);
export function query_jia_gou_gui_shu_belong_icon(params) {
// 查询架构归属分类下的图标
return post(EADC_ARRCHITECTURE + '/graph-mx-pool/qGMXPs', params)
}
export function delete_jia_gou_gui_shu(params) {// 删除架构元素列表某项
return post('/network/ele/del-ele', params);
export function delete_jia_gou_gui_shu(params) {
// 删除架构元素列表某项
return post(EADC_ARRCHITECTURE + '/ele/del-ele', params)
}
export function version_release_jia_gou_gui_shu(params) {// 版本发布
return post('/network/ele/updEleBatch', params);
export function version_release_jia_gou_gui_shu(params) {
// 版本发布
return post(EADC_ARRCHITECTURE + '/ele/updEleBatch', params)
}
export function add_jia_gou_yuan_su(params) {// 架构元素管理,新建
return post('/network/ele/ad-ele', params);
export function add_jia_gou_yuan_su(params) {
// 架构元素管理,新建
return post(EADC_ARRCHITECTURE + '/ele/ad-ele', params)
}
export function edit_jia_gou_yuan_su(params) {// 架构元素管理,新建
return post('/network/ele/upd-ele', params);
export function edit_jia_gou_yuan_su(params) {
// 架构元素管理,新建
return post(EADC_ARRCHITECTURE + '/ele/upd-ele', params)
}
export function add_yuan_mo_xing(params) {// 元模型管理,新建
return post('/network/ma-ml/add', params);
export function add_yuan_mo_xing(params) {
// 元模型管理,新建
return post(EADC_ARRCHITECTURE + '/ma-ml/add', params)
}
// 架构元素关系管理
// 列表查询
export function getJGYSGLlist(params) {
return post('/network/ele-rel/', params);
return post(EADC_ARRCHITECTURE + '/ele-rel/', params)
}
// 新建元素(state暂存2发布1)
export function getJGYSGLAdd(params) {
return post('/network/ele-rel/ad-ele-rel', params);
return post(EADC_ARRCHITECTURE + '/ele-rel/ad-ele-rel', params)
}
// 编辑元素(state暂存2发布1)
export function getJGYSGLUpdate(params) {
return post('/network/ele-rel/upd-ele-rel', params);
return post(EADC_ARRCHITECTURE + '/ele-rel/upd-ele-rel', params)
}
// 批量发布
export function getJGYSGLUpdateBatch(params) {
return post('/network/ele-rel/batchupd-ele-rel', params);
return post(EADC_ARRCHITECTURE + '/ele-rel/batchupd-ele-rel', params)
}
// 删除元素
export function getJGYSGLDel(params) {
return post('/network/ele-rel/del-ele-rel', params);
return post(EADC_ARRCHITECTURE + '/ele-rel/del-ele-rel', params)
}
// 查询画布跳转的表格数据
export function get_drawio_transform_table(params) {
return post('/network/ma-ml/fdBmd', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/fdBmd', params)
}
// 查询元模型管理页面
export function get_yuan_mo_xing_list(params) {
return post('/network/ma-ml/', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/', params)
}
// 元模型管理页面的删除
export function delete_yuan_mo_xing_list(params) {
return post('/network/ma-ml/del', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/del', params)
}
// 元模型管理页面画布详情
export function query_yuan_mo_xing_details(params) {
return post('/network/ma-ml/gBMMId', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/gBMMId', params)
}
// 架构视图配置
// 列表查询
export function getJGSTPZlist(params) {
return post('/network/archi-vw/', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/', params)
}
// 新建视图(state暂存2发布1)
export function getJGSTPZAdd(params) {
return post('/network/archi-vw/ad-archi-vw', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/ad-archi-vw', params)
}
// 编辑视图(state暂存2发布1)
export function getJGSTPZUpdate(params) {
return post('/network/archi-vw/upd-archi_vw', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/upd-archi_vw', params)
}
// 批量发布
export function getJGSTPZUpdateBatch(params) {
return post('/network/archi-vw/batchupd-vw', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/batchupd-vw', params)
}
// 删除视图
export function getJGSTPZDel(params) {
return post('/network/archi-vw/del-vw', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/del-vw', params)
}
// 获取视图名称列表
export function getViewNameList(params) {
return post('/network/archi-vw/vw-names', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/vw-names', params)
}
// 获取元素和元素关系列表
export function getEleList(params) {
return post('/network/archi-vw/ele-list', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/ele-list', params)
}
export function gtEleRelList(params) {
return post('/network/archi-vw/rel-list', params);
return post(EADC_ARRCHITECTURE + '/archi-vw/rel-list', params)
}
// 元模型字典管理
// 列表查询
export function getYMXZDGLlist(params) {
return post('/network/ma-ml-dicy/', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/', params)
}
// 新建字典
export function getYMXZDGLAdd(params) {
return post('/network/ma-ml-dicy/add', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/add', params)
}
// 编辑字典(state暂存2发布1)
export function getYMXZDGLUpdate(params) {
return post('/network/ma-ml-dicy/upd', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/upd', params)
}
// 批量发布
// export function getYMXZDGLUpdateBatch(params) {
......@@ -139,448 +155,579 @@ export function getYMXZDGLUpdate(params) {
// }
// 删除字典
export function getYMXZDGLDel(params) {
return post('/network/ma-ml-dicy/del-dicy-proy', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/del-dicy-proy', params)
}
// 自定义保存文件
export function save_drawio_xml_and_svg(params) {
return post('/network/ma-ml/upMxGraph', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/upMxGraph', params)
}
// 版本发布
export function save_drawio_version(params) {
return post('/network/ma-ml/updArchiMetaModel', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/updArchiMetaModel', params)
}
// 获取字典数据
export function getYMXZDGLProyList(params) {
return post('/network/ma-ml-dicy/proy-list', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/proy-list', params)
}
// 新增字典数据
export function getYMXZDGLProyAdd(params) {
return post('/network/ma-ml-dicy/add-dicy-proy', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/add-dicy-proy', params)
}
// 编辑字典数据
export function getYMXZDGLProyUpdate(params) {
return post('/network/ma-ml-dicy/upd-dicy-proy', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/upd-dicy-proy', params)
}
// 删除字典数据
export function getYMXZDGLProyDel(params) {
return post('/network/ma-ml-dicy/del-proy', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/del-proy', params)
}
// 架构视图管理,树数据
export function getArchiViewManage(params) {
return post('/network/archi-vw-detail/qViewTree', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/qViewTree', params)
}
// 架构视图管理,获取具体图形卡片数据
export function getArchiViewManageDetail(params) {
return post('/network/archi-vw-detail/', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/', params)
}
// 架构视图管理,增加卡片数据
export function addArchiViewManage(params) {
return post('/network/archi-vw-detail/cViewDetail', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/cViewDetail', params)
}
// 架构视图管理,删除卡片数据
export function deleteArchiViewManage(params) {
return post('/network/archi-vw-detail/del', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/del', params)
}
// 架构视图管理, 卡片数据详情
export function queryArchiViewManageCardDetails(params) {
return post('/network/archi-vw-detail/iViewDetail', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/iViewDetail', params)
}
// 架构视图管理, 保存画布数据
export function saveArchiViewManageCardDetails(params) {
return post('/network/archi-vw-detail/upMxGraph', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/upMxGraph', params)
}
// 架构视图管理, 画布版本发布
export function saveVersionArchiViewManageCardDetails(params) {
return post('/network/archi-vw-detail/uViewDetail', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/uViewDetail', params)
}
// 架构视图管理, 保存画布对应的表格数据
export function getArchiViewManageTable(params) {
return post('/network/archi-vw-detail/fdVd', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/fdVd', params)
}
// 技术政策结构化-列表
export function getJiShuZhengCeJieGouHuaTable(params) {
return post('/kl-tech-policy/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-tech-policy/', params)
}
// 技术政策结构化-导出
export function exportJiShuZhengCeJieGouHuaTable(params) {
return download('/excelUtil/exportKtp', params);
return download('/excelUtil/exportKtp', params)
}
// 技术政策结构化-新增
export function addJiShuZhengCeJieGouHuaTable(params) {
return post('/kl-tech-policy/add', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-tech-policy/add', params)
}
// 技术政策结构化-编辑,删除,启用,停用
export function editJiShuZhengCeJieGouHuaTable(params) {
return post('/kl-tech-policy/upd', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-tech-policy/upd', params)
}
// 典型案例库管理-所有下拉值
export function getDianXingAnLiSelectData(params) {
// return post('/shared/vi/dict/gDictByKey', params);
return post('/file/dict/gDictByKey', params);
return post(EADC_SHARED_ABILITY + '/dict/gDictByKey', params)
}
//所有下拉值
export function gAllDictKey(params) {
// return post('/shared/vi/dict/gDictByKey', params);
return post('/file/dict/gAllDictKey', params);
return post(EADC_SHARED_ABILITY + '/dict/gAllDictKey', params)
}
// 典型案例库管理-导出
export function exportFileDianXingAnLiSelectData(params) {
// return download('/knowledge/vi/excel/etTc', params);
return download('/excel/etTc', params);
return download(EADC_KNOWLEDGE_POOL + '/excel/etTc', params)
}
// 报告模板结构化-新增
export function addReportTemplateFabric(params) {
return post('/kl-report-temp/adKlReportTemp', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-report-temp/adKlReportTemp', params)
}
// 报告模板结构化-编辑,删除
export function editReportTemplateFabric(params) {
return post('/kl-report-temp/updKlReportTemp', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-report-temp/updKlReportTemp', params)
}
// 技术政策库关联使用-列表
export function getJiShuZhengCeGuanLianShiYongTable(params) {
return post('/kl-tech-policy-link/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-tech-policy-link/', params)
}
// 报告模板结构化-列表
export function get_BaoGaoMoBanJieGouHua_Table(params) {
return post('/kl-report-temp/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-report-temp/', params)
}
// 报告模板关联使用-列表
export function get_BaoGaoMoBanGuanLianShiYong_Table(params) {
return post('/kl-report-temp-link/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-report-temp-link/', params)
}
// 报告模板关联使用-导出
export function export_BaoGaoMoBanGuanLianShiYong_Table(params) {
return download('/excelUtil/exportRtl', params);
return download(EADC_KNOWLEDGE_POOL + '/excelUtil/exportRtl', params)
}
// 专家人才库管理
// 列表查询
export function getETPManageList(params) {
return post('/kl-talent-pool/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/', params)
}
// 新建专家人才库
export function getETPManageAdd(params) {
return post('/kl-talent-pool/adKlTalent', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/adKlTalent', params)
}
// 编辑专家人才库
export function getETPManageUpdate(params) {
return post('/kl-talent-pool/updKlTalent', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/updKlTalent', params)
}
// 删除专家人才库
export function getETPManageDel(params) {
return post('/kl-talent-pool/delKlTalentPool', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/delKlTalentPool', params)
}
// 批量删除专家人才库
export function getETPManageDelBatch(params) {
return post('/kl-talent-pool/updKlTalentBatch', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/updKlTalentBatch', params)
}
// 专家库名称下拉
export function getETPManagePoolName(params) {
return post('/kl-talent-pool/gtTalentPool', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/gtTalentPool', params)
}
// 新增专家库名称
export function getETPManagePoolNameAdd(params) {
return post('/kl-talent-pool/adTalentPool', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-talent-pool/adTalentPool', params)
}
// 典型案例库管理
// 列表查询
export function getTypicalExampleList(params) {
return post('/kl-typical-case/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-typical-case/', params)
}
// 新建典型案例
export function getTypicalExampleAdd(params) {
return post('/kl-typical-case/cTypicalCase', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-typical-case/cTypicalCase', params)
}
// 编辑典型案例
export function getTypicalExampleUpdate(params) {
return post('/kl-typical-case/uTypicalCase', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-typical-case/uTypicalCase', params)
}
// 删除典型案例
export function getTypicalExampleDel(params) {
return post('/kl-typical-case/del', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-typical-case/del', params)
}
// 典型案例导出
export function getTypicalExampleExcel(params) {
return download('/excel/etTc', params);
return download('/excel/etTc', params)
}
// 总体架构资产文档库
// 列表查询
export function getDocPoolList(params) {
return post('/kl-doc-pool/', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-pool/', params)
}
// 新建总体架构资产文档
export function getDocPoolAdd(params) {
return post('/kl-doc-pool/cDocPool', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-pool/cDocPool', params)
}
// 技术政策结构化,批量删除
export function deleteAllJiShuZhengCeJieGouHua(params) {
return post('/kl-tech-policy/upd-batch', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-tech-policy/upd-batch', params)
}
// 报告模版结构化,批量删除
export function deleteAllBaoGaoMoBanJieGouHua(params) {
return post('/kl-report-temp/updKlReportTempBatch', params);
return post(
EADC_KNOWLEDGE_POOL + '/kl-report-temp/updKlReportTempBatch',
params,
)
}
// 报告模版关联使用,批量删除
export function deleteAllBaoGaoMoBanGuanLianShiYong(params) {
return post('/kl-report-temp-link/updKlReportTempLinkBatch', params);
return post(
EADC_KNOWLEDGE_POOL + '/kl-report-temp-link/updKlReportTempLinkBatch',
params,
)
}
// 报告模版关联使用,删除,编辑
export function deleteBaoGaoMoBanGuanLianShiYong(params) {
return post('/kl-report-temp-link/updKlReportTempLink', params);
return post(
EADC_KNOWLEDGE_POOL + '/kl-report-temp-link/updKlReportTempLink',
params,
)
}
// 总体架构资产文档导出
export function getDocPoolExcel(params) {
return download('/excel/etDp', params);
return download('/excel/etDp', params)
}
// 报告模版关联使用,新增
export function addBaoGaoMoBanGuanLianShiYong(params) {
return post('/kl-report-temp-link/adKlReportTempLink', params);
return post(
EADC_KNOWLEDGE_POOL + '/kl-report-temp-link/adKlReportTempLink',
params,
)
}
// 报告模版关联使用-模版名称
export function getMoBanMingCheng(params) {
return post('/kl-report-temp/gtKlReportTemp', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-report-temp/gtKlReportTemp', params)
}
// 架构资产
// 获取列表
export function getArchiAssetManageList(params) {
return post('/network/arc-ast-bi/', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-bi/', params)
}
// 新增
export function getArchiAssetManageAdd(params) {
return post('/network/arc-ast-bi/ad', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-bi/ad', params)
}
// 修改
export function getArchiAssetManageUpdate(params) {
return post('/network/arc-ast-bi/upd', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-bi/upd', params)
}
// 企业中台服务清单, 获取列表
export function getComCenterServeList(params) {
return post('/network/arc-aby-iy/selectList', params);
return post(EADC_ARRCHITECTURE + '/arc-aby-iy/selectList', params)
}
// 企业中台服务清单,发布和取消发
export function comCenterServeListRelease(params) {
return post('/network/arc-aby-iy/upd', params);
return post(EADC_ARRCHITECTURE + '/arc-aby-iy/upd', params)
}
// 查看详情
export function getComCenterServeDetail(params) {
return post('/network/arc-aby-iy/', params);
return post(EADC_ARRCHITECTURE + '/arc-aby-iy/', params)
}
// 资产架构,表格
export function getZiChanJiaGouTable(params) {
return post('/network/arc-ast-info/', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-info/', params)
}
// 资产架构编辑
export function editZiChanJiaGouTable(params) {
return post('/network/arc-ast-info/upd', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-info/upd', params)
}
// 资产架构,删除,批量删除
export function deleteMoreZiChanJiaGouTable(params) {
return post('/network/arc-ast-info/delBatch', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-info/delBatch', params)
}
// 资产架构,新增
export function addMoreZiChanJiaGouTable(params) {
return post('/network/arc-ast-info/ad', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-info/ad', params)
}
// 资产架构,上级节点
export function queryZiChanJiaGouShangJiJieDian(params) {
return post('/network/framework/treeForNode', params);
return post(EADC_ARRCHITECTURE + '/framework/treeForNode', params)
}
// 资产架构,组件类型
export function queryZiChanJiaGouZuJianLeiXing(params) {
return post('/network/ele/archi-ele-list', params);
return post(EADC_ARRCHITECTURE + '/ele/archi-ele-list', params)
}
// 资产架构,组件类型选择后查询表单
export function queryZuJianLeiXingBelongForm(params) {
return post('/network/ma-ml-dicy/proy-list', params);
return post(EADC_ARRCHITECTURE + '/ma-ml-dicy/proy-list', params)
}
// 资产架构,模版下载
export function exportZhiChanJiaGou(params) {
return download('/network/framework/execlTemplate', params);
return download(EADC_ARRCHITECTURE + '/framework/execlTemplate', params)
}
// 资产架构,导入
export function importZhiChanJiaGou(params) {
return post('/network/framework/easyExeclImport', params);
return post(EADC_ARRCHITECTURE + '/framework/easyExeclImport', params)
}
// 资产架构,关联资产
export function queryGuanLianZiChanSelect(params) {
return post('/network/arc-ast-info/assetList', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-info/assetList', params)
}
// 日志管理,列表
export function queryLogManageTable(params) {
return post('/network/sysEventLog/', params);
return post(EADC_ARRCHITECTURE + '/sysEventLog/', params)
}
// 日志管理,存储上限
export function queryLogManageStorageUpper(params) {
return post('/network/dictDetail/details', params);
return post(EADC_ARRCHITECTURE + '/dictDetail/details', params)
}
// 日志管理,总记录
export function queryLogManageAllLog(params) {
return post('/network/sysEventLog/getTjCount', params);
return post(EADC_ARRCHITECTURE + '/sysEventLog/getTjCount', params)
}
// 现状资产架构,表格
export function getCurrentZiChanJiaGouTable(params) {
return post('/network/arc-ast-now/', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-now/', params)
}
// 系统资产架构,表格
export function getTotalZiChanJiaGouTable(params) {
return post('/network/arc-ast-sys/', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/', params)
}
// 思维导图
export function queryMindData(params) {
return post('/network/archi-vw-detail/fdBmdTree/', params);
return post(EADC_ARRCHITECTURE + '/archi-vw-detail/fdBmdTree/', params)
}
// 演进策略和路线
export function queryEvoluteFunAndLine(params) {
return post('/network/arc-at-ev-road/', params);
return post(EADC_ARRCHITECTURE + '/arc-at-ev-road/', params)
}
// 演进策略和路线的批量删除,批量发布,批量取消发布
export function evoluteFunAndLineDeleteReleaseCancel(params) {
return post('/network/arc-at-ev-road/updBatch', params);
return post(EADC_ARRCHITECTURE + '/arc-at-ev-road/updBatch', params)
}
// 演进策略和路线的删除,编辑,单个发布,单个取消发布
export function evoluteFunAndLineDeleteMore(params) {
return post('/network/arc-at-ev-road/upd', params);
return post(EADC_ARRCHITECTURE + '/arc-at-ev-road/upd', params)
}
// 演进策略和路线的新增
export function evoluteFunAndLineAdd(params) {
return post('/network/arc-at-ev-road/ad', params);
return post(EADC_ARRCHITECTURE + '/arc-at-ev-road/ad', params)
}
// 架构视图左侧图元
export function queryArchiGraph(params) {
return post('/network/ma-ml/archi-asset-list', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/archi-asset-list', params)
}
// 元模型字典管理表格
export function queryCircleModelDicyTable(params) {
return post('/network/archi-model-dict/', params);
return post(EADC_ARRCHITECTURE + '/archi-model-dict/', params)
}
// 元模型字典管理,新增
export function addCircleModelDicyTable(params) {
return post('/network/archi-model-dict/cModelDict', params);
return post(EADC_ARRCHITECTURE + '/archi-model-dict/cModelDict', params)
}
// 元模型字典管理,编辑
export function editCircleModelDicyTable(params) {
return post('/network/archi-model-dict/uModelDict', params);
return post(EADC_ARRCHITECTURE + '/archi-model-dict/uModelDict', params)
}
// 元模型字典管理,发布,停用
export function releaseAndStopCircleModelDicyTable(params) {
return post('/network/archi-model-dict/pModelDict', params);
return post(EADC_ARRCHITECTURE + '/archi-model-dict/pModelDict', params)
}
// 元模型字典管理,字典维护列表
export function queryDicyUpdateTable(params) {
return post('/network/archi-model-dict/dModelDict', params);
return post(EADC_ARRCHITECTURE + '/archi-model-dict/dModelDict', params)
}
// 元模型字典管理,字典维护列表的新增
export function dicyUpdateTableAdd(params) {
return post('/network/archi-model-dict-detail/cModelDict', params);
return post(
EADC_ARRCHITECTURE + '/archi-model-dict-detail/cModelDict',
params,
)
}
// 元模型字典管理,字典维护列表的编辑
export function dicyUpdateTableEdit(params) {
return post('/network/archi-model-dict-detail/uModelDict', params);
return post(
EADC_ARRCHITECTURE + '/archi-model-dict-detail/uModelDict',
params,
)
}
// 元模型字典管理,字典维护列表的删除
export function dicyUpdateTableDelete(params) {
return post('/network/archi-model-dict-detail/del', params);
return post(EADC_ARRCHITECTURE + '/archi-model-dict-detail/del', params)
}
// 架构视图管理,清单列表
export function queryViewManageQingDan(params) {
return post('/network/ma-ml/asset-ele-list', params);
return post(EADC_ARRCHITECTURE + '/ma-ml/asset-ele-list', params)
}
// 总体架构资产可视化展示,左侧树
export function archiAssetShowTree(params) {
return post('/network/archi-asset-view/assetLevel', params);
return post(EADC_ARRCHITECTURE + '/archi-asset-view/assetLevel', params)
}
// 总体架构资产智能搜索,左侧树
export function archiIntelligenceSearchTree(params) {
return post('/network/archi-asset-view/assetTree', params);
return post(EADC_ARRCHITECTURE + '/archi-asset-view/assetTree', params)
}
// 总体架构资产智能搜索,架构版本
export function archiIntelligenceSearchVersionList(params) {
return post('/network/archi-asset-view/assetV', params);
return post(EADC_ARRCHITECTURE + '/archi-asset-view/assetV', params)
}
// 系统信息管理,表格
export function querysystemInfoManageTable(params) {
return post('/network/app-info/', params);
return post(EADC_ARRCHITECTURE + '/app-info/', params)
}
// 系统信息管理,新增
export function addasystemInfoManageTable(params) {
return post('/network/app-info/ad', params);
return post(EADC_ARRCHITECTURE + '/app-info/ad', params)
}
// 系统信息管理,编辑和删除
export function editDeleteSystemInfoManageTable(params) {
return post('/network/app-info/upd', params);
return post(EADC_ARRCHITECTURE + '/app-info/upd', params)
}
// 项目信息管理,表格
export function queryProjectInfoManageTable(params) {
return post('/network/prj-info/', params);
return post(EADC_ARRCHITECTURE + '/prj-info/', params)
}
// 项目信息管理,新增
export function addProjectManageTable(params) {
return post('/network/prj-info/ad', params);
return post(EADC_ARRCHITECTURE + '/prj-info/ad', params)
}
// 项目信息管理,编辑和删除
export function editDeleteProjectInfoManageTable(params) {
return post('/network/prj-info/upd', params);
return post(EADC_ARRCHITECTURE + '/prj-info/upd', params)
}
// 文档在线编辑,查询目录树
export function queryDocumentCatalog(params) {
return post('/kl-doc-parser/qryTitleTree', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-parser/qryTitleTree', params)
}
// 文档在线编辑,查询文档详情
export function queryDocumentDetails(params) {
return post('/kl-doc-parser/qryById', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-parser/qryById', params)
}
// 文档在线编辑,删除
export function deleteDocument(params) {
return post('/kl-doc-parser/delTtile', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-parser/delTtile', params)
}
// 文档在线编辑,新增或修改章节
export function addEditDocument(params) {
return post('/kl-doc-parser/savOrUptTitle', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-parser/savOrUptTitle', params)
}
// 文档解析
export function documentResolve(params) {
return post('/kl-doc-parser/docParser', params);
return post(EADC_KNOWLEDGE_POOL + '/kl-doc-parser/docParser', params)
}
// 系统资产架构,批量删除,删除
export function deleteSystemTable(params) {
return post('/network/arc-ast-sys/delBatch', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/delBatch', params)
}
// 系统资产架构,新增
export function addSystemTable(params) {
return post('/network/arc-ast-sys/ad', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/ad', params)
}
// 系统资产架构,编辑
export function editSystemTable(params) {
return post('/network/arc-ast-sys/upd', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/upd', params)
}
// 系统资产架构,维护资产要素保存
export function systemArchiSaveFactor(params) {
return post('/network/arc-ast-sys/extend', params);
return post(EADC_ARRCHITECTURE + '/arc-ast-sys/extend', params)
}
// 评审情况(概要设计)分页查询
export function getPrelDesInspecteTable(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/', params)
}
// 保存评审意见接口
export function savePrelDesInspecte(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/cComment/', params)
}
// 根据项目ID和类型查询对应评审意见
export function detailPrelDesInspecte(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/qReview/', params)
}
// 根据项目ID和架构归属ID查询对应架构视图
export function qViewPrelDesInspecte(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/qView/', params)
}
// 根据项目ID获取word片段表格
export function getqPrelDesInspecteWordTable(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/qWordTable/', params)
}
// 概设架构遵从检查-列表
export function getGaiSheJiaGouZunCongJiaChaTable(params) {
return post('/network/app-archi-control-requirements/', params);
return post(EADC_ARRCHITECTURE + '/app-archi-control-requirements/', params)
}
// 概设架构遵从检查, 右侧图片
export function getReviewArchiFollowCheckRightGraph(params) {
return post('/network/app-archi-control-requirements/qView', params);
return post(
EADC_ARRCHITECTURE + '/app-archi-control-requirements/qView',
params,
)
}
// 概设架构遵从检查, 保存
export function saveReviewArchiFollowCheckRightSuggestion(params) {
return post('/network/app-archi-control-requirements/cComment', params);
return post(
EADC_ARRCHITECTURE + '/app-archi-control-requirements/cComment',
params,
)
}
export function getWordImg(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/qWordPic', params)
}
// 根据需求ID获取word片段表格
export function getWordTable(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/qWordTable', params)
}
// 获取评审片段word
export function getReviewNorm(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/gtReviewNorm', params)
}
// 获取评审片段table
export function getQWordTable(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/qWordTable', params)
}
// 概设材料审查-架构遵从-根据项目ID获取word片段图片
export function getQWordPic_(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/qWordPic', params)
}
// 获取评审片段img
export function getQWordPic(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/qWordPic', params)
}
// 概要设计评审保存
export function saveExamine(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/sComment', params)
}
// 概设架构遵从检查, 保存
export function queryReviewArchiFollowCheckRightSuggestionDetails(params) {
return post('/network/app-archi-control-requirements/qReview', params);
return post(
EADC_ARRCHITECTURE + '/app-archi-control-requirements/qReview',
params,
)
}
// 批次计划查询
export function queryBatchPlan(params) {
return post(EADC_ARRCHITECTURE + '/bat-plan-info/', params)
}
// 新增批次计划
export function addBatchPlan(params) {
return post(EADC_ARRCHITECTURE + '/bat-plan-info/ad', params)
}
// 修改批次计划
export function editBatchPlan(params) {
return post(EADC_ARRCHITECTURE + '/bat-plan-info/upd', params)
}
// 导出重复建设风险报告
export function exportRiskReport(params) {
return download(EADC_ARRCHITECTURE + '/prel-des-rvw/exportRiskReport', params)
}
// 获取检查结果重复数
export function getByKeword(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/getByKeword', params)
}
// 需求管理-新增接口
export function addNeedInfo(params) {
return post(EADC_ARRCHITECTURE + '/need-info/ad', params)
}
// 需求管理-更新接口
export function editNeedInfo(params) {
return post(EADC_ARRCHITECTURE + '/need-info/upd', params)
}
export function queryPrjNeedFile(params) {
return post(EADC_ARRCHITECTURE + '/prj-need-file/', params)
}
// 概设材料意见编制- 新增(推送)
export function addConceptualViewOrg(params) {
return post(EADC_ARRCHITECTURE + '/online-rev-wr/ad', params)
}
// 概设材料意见编制- 更新
export function editConceptualViewOrg(params) {
return post(EADC_ARRCHITECTURE + '/online-rev-wr/upd', params)
}
// 概设材料意见编制-需求评审情况
export function qyNeedReview(params) {
return post(EADC_ARRCHITECTURE + '/online-rev-wr/qyNeedReview', params)
}
export function editFeedback(params) {
return post(EADC_ARRCHITECTURE + '/prj-need-file/upd', params)
}
// 架构督查-督查通报管理
export function updReportManage(params) {
return post(EADC_ARRCHITECTURE + '/reportManage/upd', params)
}
export function delReportManage(params) {
return post(EADC_ARRCHITECTURE + '/reportManage/del', params)
}
// 接口url
import { EADC_ARRCHITECTURE } from '@/config/micromodule'
// 列表接口url
// 批量计划管理分页查询
export const batchPlanManagement = '/network/bat-plan-info/'
export const batchPlanManagement = EADC_ARRCHITECTURE + '/bat-plan-info/'
// 概设材料审查 - 技术路线分页查询
export const queryConceptualReview = EADC_ARRCHITECTURE + '/prel-des-rvw/' ///network/prel-des-rvw/
export const queryAppArchiControlRequirements =
EADC_ARRCHITECTURE + '/app-archi-control-requirements/'
// 需求管理-需求发布分页查询
export const queryDemandManagement = EADC_ARRCHITECTURE + '/need-info/'
// 项目列表
export const queryProjectInfo = EADC_ARRCHITECTURE + '/prj-info/'
// 概设材料意见编制
export const queryConceptualViewOrg = EADC_ARRCHITECTURE + '/online-rev-wr/qy/'
// 系统架构管控要求-评审情况(概要设计)-分页查询
export const queryPrelDesInspecte = EADC_ARRCHITECTURE + '/prel-des-inspecte/'
// 概设关联业务管理 - 概设统计分析
export const queryQyNeedReviewCount =
EADC_ARRCHITECTURE + '/online-rev-wr/qyNeedReviewCount'
// 概设关联业务管理 - 总体架构维护
export const queryArcAstSys = EADC_ARRCHITECTURE + '/arc-ast-sys/'
// 架构督查- 督查通报管理列表
export const querySupervisionNotifyManagement =
EADC_ARRCHITECTURE + '/reportManage/selectReportManage'
// 架构督查- 督查问题整改列表
export const querySupervisionProblem =
EADC_ARRCHITECTURE + '/rectifyReform/selectRectifyReform'
// 概设评审基础管理
export const queryConceptualBaseManagement = EADC_ARRCHITECTURE + '/int-info/'
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-14 10:33:49
* @LastEditTime: 2024-03-26 15:54:50
-->
<!-- /**
* 搜索栏公共组件
......@@ -17,17 +17,24 @@
:label-width="labelWidth"
:label-position="labelPosition"
>
<el-form-item
<el-col
:span="item.span || 8"
v-for="(item, index) in formOptions"
:key="newKeys[index]"
:prop="item.prop"
:label="item.label"
:rules="item.rules"
>
<SearchFormItem v-model="formData[item.prop]" :itemOptions="item" />
</el-form-item>
<el-form-item :prop="item.prop" :label="item.label" :rules="item.rules">
<!-- 自定义插槽,可用于特殊表单块 -->
<slot></slot>
<template v-if="item.__slotName">
<slot :name="item.__slotName" :data="item"></slot>
</template>
<SearchFormItem
v-else
v-model="formData[item.prop]"
:itemOptions="item"
/>
</el-form-item>
</el-col>
</el-form>
</div>
</template>
......@@ -78,7 +85,6 @@ export default {
formData: {},
}
},
computed: {
newKeys() {
return this.formOptions.map((v) => {
......@@ -108,9 +114,10 @@ export default {
},
// 获取表单数据
getData() {
this.onValidate(() => {
this.$emit('getData', this.formData)
})
return this.formData
// this.onValidate(() => {
// this.$emit('getData', this.formData)
// })
},
// 导出
onExport() {
......@@ -139,7 +146,6 @@ export default {
<style lang="scss" scoped>
.form-box {
// display: flex;
margin-top: 10px;
.btn-box {
display: flex;
......@@ -149,21 +155,19 @@ export default {
display: flex;
flex-wrap: wrap;
/deep/ .el-form-item__label {
margin-bottom: 10px;
flex-shrink: 0;
color: #000;
}
.el-form-item {
margin-bottom: 0;
// display: flex;
&.is-error {
margin-bottom: 25px;
}
}
// el-input宽度
/deep/ .form-item {
.el-input {
width: 220px !important;
.el-input,
.el-select {
width: 100% !important;
}
.el-rate {
display: flex;
height: 40px;
align-items: center;
}
}
}
......
......@@ -4,10 +4,18 @@
* @Autor: pan
* @Date: 2024-03-12 14:01:57
* @LastEditors: pan
* @LastEditTime: 2024-03-12 16:02:21
* @LastEditTime: 2024-03-15 14:24:23
-->
<template>
<div class="list-page">
<!-- 一级tab切换栏 -->
<div class="tabWrap">
<slot name="tabWrap" />
</div>
<!-- 二级tab切换栏 -->
<div class="subTabWrap">
<slot name="subTabWrap" />
</div>
<!-- 头部搜索区域 -->
<div class="formWrap">
<slot name="formWrap" />
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-14 08:59:05
* @LastEditTime: 2024-03-18 09:56:15
-->
<!-- /**
* 搜索栏公共组件
......@@ -37,8 +37,7 @@
<!-- 自定义插槽,可用于特殊表单块 -->
<slot></slot>
</el-form>
<el-form-item>
<!-- 提交按钮 -->
<div class="btn-box">
<el-button
......@@ -50,16 +49,6 @@
@click="onSearch"
>查询</el-button
>
<!-- <el-button
v-if="btnItems.includes('export')"
size="mini"
type="primary"
class="btn-export"
@click="onExport"
>导出</el-button
> -->
<el-button
size="medium"
type="default"
......@@ -69,6 +58,8 @@
>重置</el-button
>
</div>
</el-form-item>
</el-form>
</div>
</template>
......@@ -87,6 +78,7 @@ export default {
* initValue: '阿黄', // 字段初始值
* placeholder: '请输入用户名', // elementui组件属性
* rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
* dictType: 'build_type', // 如果是字典下拉框,传这个字段,值是对应的字典
* events: { // elementui组件方法
* input (val) {
* console.log(val)
......@@ -191,6 +183,7 @@ export default {
}
.el-form {
display: flex;
flex-wrap: wrap;
/deep/ .el-form-item__label {
// padding-right: 0;
margin-bottom: 10px;
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 15:11:47
* @LastEditors: pan
* @LastEditTime: 2024-03-13 16:54:21
* @LastEditTime: 2024-03-26 15:30:38
-->
<template>
<div class="form-item">
......@@ -33,12 +33,31 @@
>
<el-option
v-for="item in itemOptions.options"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item[handleSelectValue]"
:label="item[handleSelectLabel]"
:value="item[handleSelectValue]"
></el-option>
</el-select>
<el-radio-group
v-if="isRadio"
v-bind="bindProps"
v-on="bindEvents"
v-model="currentVal"
>
<el-radio
v-for="item in itemOptions.options"
:key="item.value"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group>
<el-rate
v-if="isRate"
v-bind="bindProps"
v-on="bindEvents"
v-model="currentVal"
></el-rate>
<!-- datetimerange/daterange -->
<!-- <el-date-picker
v-if="isDatePickerDateRange"
......@@ -79,7 +98,6 @@
:type="itemOptions.type"
clearable
placeholder="请选择日期"
style="width: 300px"
></el-date-picker>
<el-cascader
v-if="isCascader"
......@@ -115,6 +133,18 @@ export default {
},
computed: {
handleSelectValue() {
if (this.itemOptions.keyOption) {
return this.itemOptions.keyOption['value']
}
return 'value'
},
handleSelectLabel() {
if (this.itemOptions.keyOption) {
return this.itemOptions.keyOption['label']
}
return 'label'
},
// 双向绑定数据值
currentVal: {
get() {
......@@ -155,6 +185,14 @@ export default {
isSelect() {
return this.itemOptions.element === 'el-select'
},
// el-radio
isRadio() {
return this.itemOptions.element === 'el-radio'
},
// el-rate
isRate() {
return this.itemOptions.element === 'el-rate'
},
// el-date-picker (type: datetimerange/daterange)
isDatePickerDateRange() {
const isDatePicker = this.itemOptions.element === 'el-date-picker'
......@@ -185,9 +223,19 @@ export default {
},
},
created() {},
created() {
// 字典下拉框处理
if (this.isSelect && this.itemOptions.dictType) {
this.getDictTypeOptions(this.itemOptions.dictType)
}
},
methods: {
/**
* @description: 获取下拉框字典,并缓存
* @param {String} key 对应字典接口的参数值
* @author: pan
*/
async getDictTypeOptions(key) {
var dictTypeOptions = []
var storedDic = localStorage.getItem('dic_' + key)
......@@ -196,20 +244,13 @@ export default {
} else {
const params = { key }
const res = await getDianXingAnLiSelectData(params)
if (res.code !== 200) return
dictTypeOptions = res.data
const jsonStr = JSON.stringify(res.data)
localStorage.setItem('dic_' + key, jsonStr)
// await getDianXingAnLiSelectData(params).then((res) => {
// if (res.code === 200) {
// var options = res.data
// var jsonStr = JSON.stringify(options)
// localStorage.setItem('dic_' + key, jsonStr)
// dictTypeOptions = res.data
// console.log(dictTypeOptions)
// }
// })
}
return dictTypeOptions
this.itemOptions.options = dictTypeOptions
this.$forceUpdate()
},
},
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-11 14:53:40
* @LastEditors: pan
* @LastEditTime: 2024-03-14 09:46:17
* @LastEditTime: 2024-03-22 17:17:18
-->
<!-- 示例
columns: [{ label: '头像', prop: 'avatar', align: 'center', __slotName: 'avatar',callback: (row, title) => {
......@@ -27,6 +27,7 @@
<template>
<div class="tableConfig">
<el-table
ref="tableConfig"
class="config-table"
v-loading="loading"
v-bind="$attrs"
......@@ -72,6 +73,11 @@
v-for="items in item.actionButtons"
:key="items.title"
v-bind="items"
:disabled="
items.disabledCallback
? items.disabledCallback(scope.row, items.title)
: false
"
@click="item.callback(scope.row, items.title)"
><span v-if="!items.circle">{{ items.title }}</span></el-button
>
......@@ -207,9 +213,15 @@ export default {
this.queryData()
},
methods: {
clearSelection() {
this.$refs.tableConfig.clearSelection()
},
handleToText(item, state) {
console.log(item, state)
const obj = item.options.find((v) => v.value === state) || {}
let val = state
if (!val) {
val = item.emptyToNum || 0
}
const obj = item.options.find((v) => v.value == val) || {}
return obj['label']
},
/**
......
......@@ -14,17 +14,17 @@
import vabOnlyOffice from './index.vue'
export default {
components: { vabOnlyOffice },
components: {vabOnlyOffice},
data() {
return {
documentServerUrl: 'http://121.201.2.228:53327/',
documentServerUrl: 'http://43.143.211.42:19231/',
config: {
document: {
fileType: 'doc',
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '737bb9e67f',
key: '71df19fbd1',
// 文件名
title: 'text.docx',
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -33,7 +33,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://172.20.10.9:9997/downloadFile/22',
url: 'http://43.143.211.42:7006/downloadFile/29',
},
documentType: 'word',
height: '100%',
......@@ -52,7 +52,7 @@ export default {
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.8.120:9997/callback?fileId=22',
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
},
},
}
......
// 架构元模型
export const EADC_ARRCHITECTURE = '/eadc-architecture'
// 共享能力
export const EADC_SHARED_ABILITY = '/eadc-shared-ability'
// 架构知识库
export const EADC_KNOWLEDGE_POOL = '/eadc-knowledge-pool'
......@@ -2,17 +2,45 @@ import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import * as echarts from 'echarts'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import './styles/element-variables.scss'
import initDirective from './directive'
initDirective(Vue)
Vue.prototype.$echarts = echarts
Vue.config.productionTip = false
Vue.use(ElementUI)
Date.prototype.format = function (fmt) {
if (!fmt) {
fmt = 'yyyy-MM-dd hh:mm:ss'
}
var o = {
'M+': this.getMonth() + 1, // 月份
'd+': this.getDate(), // 日
'h+': this.getHours(), // 小时
'm+': this.getMinutes(), // 分
's+': this.getSeconds(), // 秒
'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
S: this.getMilliseconds(), // 毫秒
}
if (/(y+)/.test(fmt))
fmt = fmt.replace(
RegExp.$1,
(this.getFullYear() + '').substr(4 - RegExp.$1.length),
)
for (let k in o) {
if (new RegExp('(' + k + ')').test(fmt))
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length),
)
}
return fmt
}
new Vue({
router,
store,
......
......@@ -244,6 +244,62 @@ const routes = [
name: 'batchPlanManagement',
component: () => import('@/views/batchPlanManagement/index.vue'),
},
{
path: '/main/conceptualReview', // 概设材料审查列表
name: 'conceptualReview',
component: () => import('@/views/conceptualReview/index.vue'),
},
{
path: '/main/conceptualExamine', // 概设材料审查页面
name: 'conceptualExamine',
component: () => import('@/views/conceptualReview/Examine.vue'),
},
{
path: '/main/demandManagement', // 需求管理列表页
name: 'demandManagement',
component: () => import('@/views/demandManagement/index.vue'),
},
{
path: '/main/conceptualViewOrg', // 概设材料意见编制
name: 'conceptualViewOrg',
component: () => import('@/views/conceptualViewOrg/index.vue'),
},
{
path: '/main/conceptualBaseManagement', // 概设评审基础管理
name: 'conceptualBaseManagement',
component: () => import('@/views/conceptualBaseManagement/index.vue'),
},
{
path: '/main/onlineReview', // 评审意见编制- 在线辅助审核
name: 'onlineReview',
component: () => import('@/views/conceptualViewOrg/OnlineReview.vue'),
},
{
path: '/main/conceptualRelated', // 概设关联业务管理
name: 'conceptualRelated',
component: () => import('@/views/conceptualRelated/index.vue'),
},
{
path: '/main/supervisionNotifyManagement', // 架构督查督查通报管理
name: 'supervisionNotifyManagement',
component: () =>
import('@/views/supervisionNotifyManagement/index.vue'),
},
{
path: '/main/supervisionProblemEdit', // 架构督查督查问题整改
name: 'supervisionProblemEdit',
component: () => import('@/views/supervisionProblemEdit/index.vue'),
},
{
path: '/main/architectureFollowExamine', // 架构督查架构遵从检查
name: 'architectureFollowExamine',
component: () => import('@/views/architectureFollowExamine/index.vue'),
},
{
path: '/main/artPolicyExamine', // 架构督查-技术政策审查
name: 'artPolicyExamine',
component: () => import('@/views/artPolicyExamine/index.vue'),
},
],
},
]
......
......@@ -114,4 +114,5 @@ $color-primary: #0d867f;
.searchTable {
width: 100%;
height: 100%;
}
......@@ -5,3 +5,76 @@ export const approvalStatusOptions = [
{ label: '审批通过', value: 3 },
{ label: '驳回', value: 4 },
]
// 是否续建
export const prjPlanClass = [
{ label: '否', value: 1 },
{ label: '是', value: 2 },
]
export const buildType = [
{ label: '统推', value: '1' },
{ label: '自建', value: '2' },
]
// 评审材料名称枚举
export const archiPrjReviewEnum = [
{ label: '一致性评审', value: 'CONFORMANCE_REVIEW' },
// { label: '架构遵从', value: 'ARCHITECTURE_CONFORMANCE' },
{ label: '关键技术深度评审', value: 'KEY_TECHNOLOGY_REVIEW' },
{ label: '功能深度评审', value: 'FUNCTIONAL_DEPTH_REVIEW' },
{ label: '数据深度评审', value: 'DATA_DEPTH_REVIEW' },
{ label: '安全架构遵从', value: 'SECURITY_ARCHITECTURE_CONFORMANCE' },
{ label: '部署架构审查', value: 'DEPLOYMENT_ARCHITECTURE_REVIEW' },
{ label: '技术架构遵从', value: 'TECHNICAL_ARCHITECTURE_CONFORMANCE' },
{ label: '应用架构遵从', value: 'APPLICATION_ARCHITECTURE_CONFORMANCE' },
{
label: '物理数据架构遵从',
value: 'PHYSICAL_DATA_ARCHITECTURE_CONFORMANCE',
},
{ label: '运安符合性审查', value: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW' },
{ label: '功能满足审查', value: 'FUNCTIONAL_SATISFACTION_REVIEW' },
{ label: '运行可靠性审查', value: 'OPERATIONAL_RELIABILITY_REVIEW' },
{ label: '系统实用性审查', value: 'SYSTEM_PRACTICALITY_REVIEW' },
{ label: '系统安全性审查', value: 'SYSTEM_SECURITY_REVIEW' },
{ label: '资源复用性审查', value: 'RESOURCE_REUSABILITY_REVIEW' },
{ label: '报告规范性', value: 'REPORT_NORM' },
{ label: '架构遵从', value: 'FRAMEWORK_OBEY' },
{ label: '技术路线', value: 'TECH_ROUTE' },
{ label: '功能偏差', value: 'FUNCTION_UNLIKE' },
{ label: '系统部署', value: 'APP_DEP' },
{ label: '系统集成', value: 'APP_INT' },
{ label: '系统安全', value: 'APP_SAFE' },
{ label: '功能重复风险', value: 'FUNCTION_S_RISK' },
{ label: '数据重复录入风险', value: 'DATA_S_INSERT_RISK' },
]
// 材料清单
export const materialOptions = [
{ label: '技术规范书', value: '技术规范书' },
{ label: '可行性研究报告', value: '可行性研究报告' },
{ label: '需求规格说明书', value: '需求规格说明书' },
{ label: '概要设计说明书', value: '概要设计说明书' },
{ label: '安全防护方案', value: '安全防护方案' },
{ label: '其他', value: '其他' },
]
// 推送状态
export const pushStateOptions = [
{ label: '已反馈', value: 1 },
{ label: '未反馈', value: 0 },
]
// 在线评审状态
export const onlineApprovalStatusOptions = [
{ label: '待评审', value: 2 },
{ label: '通过', value: 1 },
{ label: '未通过', value: 0 },
]
// 发送状态
export const sendStateOptions = [
{ label: '发送成功', value: 1 },
{ label: '未发送', value: 2 },
{ label: '发送失败', value: 3 },
]
export const completionStatus = [
{ label: '未完成', value: 0 },
{ label: '已完成', value: 1 },
]
......@@ -5,7 +5,7 @@
<div class="left_container">
<img src="@/assets/main/system_logo.png" alt="" class="system_logo" />
<!-- <img src="@/assets/system_logo.png" alt="" class="system_logo" @click="jumpPage('在线文档编制')"> -->
<div class="logo_title">数字化架构设计与管控微应用</div>
<div class="logo_title">数字化架构设计与管控支撑工具</div>
</div>
<div class="operate_menu">
<div class="operate_menu_item">
......@@ -27,11 +27,13 @@
<div class="menu_container">
<el-popover
placement="bottom"
width="420"
class="menu_item"
style="margin-right: 80px; cursor: pointer; position: relative"
v-model="visible1"
trigger="hover"
:width="item.width"
v-for="(item, index) in menuOptions"
:key="index"
ref="popoverRef"
>
<div slot="reference">
<img
......@@ -45,635 +47,46 @@
alt=""
/>
<span class="menu_title">架构全景大屏及智能驾驶舱</span>
<span class="menu_title">{{ item.name }}</span>
<p class="under_line"></p>
</div>
<div class="menu_1_container">
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">架构全景智能大屏</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">XX网数字化项目建设分析</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">公司架构蓝图实现情况分析</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">智能驾驶舱</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">管理智能驾驶舱</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">业务智能驾驶舱</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">项目智能驾驶舱</span>
</div>
</div>
</div>
</el-popover>
<el-popover
placement="bottom"
width="440"
class="menu_item"
style="margin-right: 80px; cursor: pointer; position: relative"
v-model="visible2"
trigger="hover"
>
<div slot="reference">
<img
class="menu_icon"
src="@/assets/main/1icon_default.png"
alt=""
/>
<img
class="menu_icon_active"
src="@/assets/main/1icon_press.png"
alt=""
/>
<span class="menu_title">总体架构资产设计与维护</span>
<p class="under_line"></p>
</div>
<div class="menu_1_container">
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">架构元模型管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'架构元模型管理',
'架构元素管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构元素管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'架构元模型管理',
'架构元素关系管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构元素关系管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'架构元模型管理',
'元模型管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">元模型管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'架构元模型管理',
'架构视图配置',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构视图配置</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'架构元模型管理',
'元模型字典管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">元模型字典管理</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">总体架构资产维护</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'架构资产管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构资产管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'架构视图管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构视图管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'企业中台服务清单',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">企业中台服务清单</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'现状架构资产管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">现状架构资产管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'架构演进路线资产管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构演进路线资产管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'总体架构资产可视化展示',
)
"
class="menu_1_item flex"
v-for="(item2, index2) in item.children"
:key="index2"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">总体架构资产可视化展示</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'总体架构资产设计与维护',
'总体架构资产维护',
'总体架构资产智能搜索',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">总体架构资产智能搜索</span>
</div>
</div>
</div>
</el-popover>
<el-popover
placement="bottom"
width="1100"
class="menu_item"
v-model="visible3"
style="margin-right: 80px; cursor: pointer; position: relative"
trigger="hover"
>
<div slot="reference">
<img
class="menu_icon"
src="@/assets/main/2icon_default.png"
alt=""
/>
<img
class="menu_icon_active"
src="@/assets/main/2icon_press.png"
alt=""
/>
<span class="menu_title">系统架构设计与管控</span>
<p class="under_line"></p>
</div>
<div class="menu_1_container">
<div class="menu_1_item">
<div class="flex-column">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">系统架构资产管理</span>
<span style="margin-left: 5px">{{ item2.name }}</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构图设计',
'系统信息管理',
item3.path,
index,
item.name,
item2.name,
item3.name,
)
"
v-for="(item3, index3) in item2.children"
:key="index3"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">系统信息管理</span>
<span style="margin-left: 5px">{{ item3.name }}</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构图设计',
'项目信息管理',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">项目信息管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构图设计',
'系统架构资产维护',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">系统架构资产维护</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">系统架构设计</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构设计',
'系统架构视图设计',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">系统架构视图设计</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构设计',
'概设阶段架构设计',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设阶段架构设计</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage('系统架构设计与管控', '系统架构设计', '其他视图设计')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">其他视图设计</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">系统架构管控要求</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构管控要求',
'评审情况(概要设计)',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">评审情况(概要设计)</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构管控要求',
'概设架构遵从检查',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设架构遵从检查</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage(
'系统架构设计与管控',
'系统架构管控要求',
'概设架构政策审查',
)
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设架构政策审查</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">概要设计评审</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage('系统架构设计与管控', '概要设计评审', '批次计划管理')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">批次计划管理</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">需求管理</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设材料审查</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设材料意见编制</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设关联业务管理</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设评审基础管理</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">架构督查</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">收集资料配置</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">督查材料收集</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构督查分析</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">督查通报管理</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">督查问颗整改</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构遵从检查</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">技术政策审查</span>
</div>
</div>
</div>
</el-popover>
<el-popover
placement="bottom"
width="220"
class="menu_item"
style="margin-right: 80px; cursor: pointer; position: relative"
v-model="visible4"
trigger="hover"
>
<div slot="reference">
<img
class="menu_icon"
src="@/assets/main/4icon_default.png"
alt=""
/>
<img
class="menu_icon_active"
src="@/assets/main/4icon_press.png"
v-show="index2 < item.children.length - 1"
:key="index2"
class="menu_1_item_line m-l-40"
src="@/assets/main/line.png"
alt=""
/>
<span class="menu_title">架构资产服务与辅助分析</span>
<p class="under_line"></p>
</div>
<div class="menu_1_container">
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">架构资产服务与辅助分析</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">架构遵从符合度检查</span>
</div>
<div class="menu_1_item_subtitle">
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">技术政策符合度检查</span>
</div>
</div>
</div>
</el-popover>
<el-popover
placement="bottom"
width="700"
v-model="visible5"
class="menu_item"
style="cursor: pointer; position: relative"
trigger="hover"
>
<div slot="reference">
<img
class="menu_icon"
src="@/assets/main/5icon_default.png"
alt=""
/>
<img
class="menu_icon_active"
src="@/assets/main/5icon_press.png"
alt=""
/>
<span class="menu_title">架构知识库</span>
<p class="under_line"></p>
</div>
<div class="menu_1_container">
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">专家人才库</span>
</div>
<div
class="menu_1_item_subtitle"
@click="jumpPage('架构知识库', '专家人才库', '专家人才库管理')"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">专家人才库管理</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">技术政策库</span>
</div>
<div
class="menu_1_item_subtitle"
@click="jumpPage('架构知识库', '技术政策库', '技术政策结构化')"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">技术政策结构化</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage('架构知识库', '技术政策库', '技术政策库关联使用')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">技术政策库关联使用</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">报告模板库</span>
</div>
<div
class="menu_1_item_subtitle"
@click="jumpPage('架构知识库', '报告模板库', '报告模板结构化')"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">报告模板结构化</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage('架构知识库', '报告模板库', '报告模板关联使用')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">报告模板关联使用</span>
</div>
</div>
<img class="menu_1_item_line" src="@/assets/main/line.png" alt="" />
<div class="menu_1_item">
<div class="menu_1_item_title">
<img src="@/assets/main/2img.png" alt="" />
<span style="margin-left: 5px">典型案例库</span>
</div>
<div
class="menu_1_item_subtitle"
@click="jumpPage('架构知识库', '典型案例库', '典型案例库管理')"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">典型案例库管理</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage('架构知识库', '典型案例库', '典型案例库关联使用')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">典型案例库关联使用</span>
</div>
<div
class="menu_1_item_subtitle"
@click="
jumpPage('架构知识库', '典型案例库', '总体架构资产文档库')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">总体架构资产文档库</span>
</div>
</div>
</div>
</el-popover>
......@@ -682,6 +95,18 @@
<el-breadcrumb-item>{{ breadcrumb1 }}</el-breadcrumb-item>
<el-breadcrumb-item>{{ breadcrumb2 }}</el-breadcrumb-item>
<el-breadcrumb-item>{{ breadcrumb3 }}</el-breadcrumb-item>
<!-- <el-breadcrumb-item
v-for="(item, index) in breadcrumbList"
:key="item.path"
class="flex"
>
<div
class="el-breadcrumb__inner is-link"
@click="onBreadcrumbClick(item, index)"
>
<span class="breadcrumb-title">{{ item.name }}</span>
</div>
</el-breadcrumb-item> -->
</el-breadcrumb>
</div>
<div class="left_menu_and_drawio_container">
......@@ -694,7 +119,7 @@
</template>
<script>
import $ from 'jquery'
import { menuOptions } from './menu'
export default {
components: {},
data() {
......@@ -707,6 +132,7 @@ export default {
breadcrumb1: '总体架构资产设计与维护',
breadcrumb2: '架构元模型管理',
breadcrumb3: '架构元素管理',
menuOptions: menuOptions,
}
},
mounted() {
......@@ -724,274 +150,295 @@ export default {
$(this).find('.under_line').css('display', 'none')
},
)
},
computed: {
breadcrumbList() {
return (
this.$store.getters.breadcrumbListGet[
this.$route.matched[this.$route.matched.length - 1].path
] || []
)
},
},
methods: {
onBreadcrumbClick(item, index) {
if (index !== this.breadcrumbList.length - 1) this.$router.push(item.path)
},
openDrawIO() {
// window.open(window.location.origin + '/drawio/index.html?id=23', '_self');//编辑
// window.open(window.location.origin + '/drawio/index.html', '_self');//新增
},
jumpPage(breadcrumb1_, breadcrumb2_, breadcrumb3_) {
jumpPage(path, popoverIndex, breadcrumb1_, breadcrumb2_, breadcrumb3_) {
this.breadcrumb1 = breadcrumb1_
this.breadcrumb2 = breadcrumb2_
this.breadcrumb3 = breadcrumb3_
this.$router.push(path)
this.$refs.popoverRef[popoverIndex].doClose()
// switch (breadcrumb3_) {
// case '架构元素管理':
// this.$router.push(
// '/main/archiEleList',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '架构元素关系管理':
// this.$router.push(
// '/main/archi-ele-rela',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '架构视图配置':
// this.$router.push(
// '/main/archi-view-config',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '元模型字典管理':
// this.$router.push(
// '/main/meta-model-dic',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '元模型管理':
// this.$router.push(
// '/main/metaModelList',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '架构资产管理':
// this.$router.push(
// '/main/busiAssetslist',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '架构视图管理':
// this.$router.push(
// '/main/archiViewManage',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '企业中台服务清单':
// this.$router.push(
// '/main/comCenterServeList',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '现状架构资产管理':
// this.$router.push(
// '/main/currentAssetsList',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '架构演进路线资产管理':
// this.$router.push(
// '/main/archiEvoluteLine',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '总体架构资产可视化展示':
// this.$router.push(
// '/main/archiAssetVisualShow',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '总体架构资产智能搜索':
// this.$router.push(
// '/main/archiIntelligenceSearch',
// () => {},
// () => {},
// )
// this.visible2 = false
// break
// case '在线文档编制':
// this.$router.push(
// '/main/doc-demo',
// () => {},
// () => {},
// )
// break
// case '系统信息管理':
// this.$router.push(
// '/main/systemInfoManage',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '项目信息管理':
// this.$router.push(
// '/main/projectInfoManage',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '系统架构资产维护':
// this.$router.push(
// '/main/archiAssetManage',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '系统架构视图设计':
// this.$router.push(
// '/main/systemArchiViewDesign',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
switch (breadcrumb3_) {
case '架构元素管理':
this.$router.push(
'/main/archiEleList',
() => {},
() => {},
)
this.visible2 = false
break
case '架构元素关系管理':
this.$router.push(
'/main/archi-ele-rela',
() => {},
() => {},
)
this.visible2 = false
break
case '架构视图配置':
this.$router.push(
'/main/archi-view-config',
() => {},
() => {},
)
this.visible2 = false
break
case '元模型字典管理':
this.$router.push(
'/main/meta-model-dic',
() => {},
() => {},
)
this.visible2 = false
break
case '元模型管理':
this.$router.push(
'/main/metaModelList',
() => {},
() => {},
)
this.visible2 = false
break
case '架构资产管理':
this.$router.push(
'/main/busiAssetslist',
() => {},
() => {},
)
this.visible2 = false
break
case '架构视图管理':
this.$router.push(
'/main/archiViewManage',
() => {},
() => {},
)
this.visible2 = false
break
case '企业中台服务清单':
this.$router.push(
'/main/comCenterServeList',
() => {},
() => {},
)
this.visible2 = false
break
case '现状架构资产管理':
this.$router.push(
'/main/currentAssetsList',
() => {},
() => {},
)
this.visible2 = false
break
case '架构演进路线资产管理':
this.$router.push(
'/main/archiEvoluteLine',
() => {},
() => {},
)
this.visible2 = false
break
case '总体架构资产可视化展示':
this.$router.push(
'/main/archiAssetVisualShow',
() => {},
() => {},
)
this.visible2 = false
break
case '总体架构资产智能搜索':
this.$router.push(
'/main/archiIntelligenceSearch',
() => {},
() => {},
)
this.visible2 = false
break
case '在线文档编制':
this.$router.push(
'/main/doc-demo',
() => {},
() => {},
)
break
case '系统信息管理':
this.$router.push(
'/main/systemInfoManage',
() => {},
() => {},
)
this.visible3 = false
break
case '项目信息管理':
this.$router.push(
'/main/projectInfoManage',
() => {},
() => {},
)
this.visible3 = false
break
case '系统架构资产维护':
this.$router.push(
'/main/archiAssetManage',
() => {},
() => {},
)
this.visible3 = false
break
case '系统架构视图设计':
this.$router.push(
'/main/systemArchiViewDesign',
() => {},
() => {},
)
this.visible3 = false
break
case '概设阶段架构设计':
this.$router.push(
'/main/summaryArchiDesign',
() => {},
() => {},
)
this.visible3 = false
break
case '其他视图设计':
this.$router.push(
'/main/otherArchiDesign',
() => {},
() => {},
)
this.visible3 = false
break
case '评审情况(概要设计)':
this.$router.push(
'/main/reviewSituation',
() => {},
() => {},
)
this.visible3 = false
break
case '概设架构遵从检查':
this.$router.push(
'/main/reviewArchiFollowCheck',
() => {},
() => {},
)
this.visible3 = false
break
case '概设架构政策审查':
this.$router.push(
'/main/reviewArchiPoliticeCheck',
() => {},
() => {},
)
this.visible3 = false
break
case '技术政策结构化':
this.$router.push(
'/main/techPoliticsFabric',
() => {},
() => {},
)
this.visible5 = false
break
case '技术政策库关联使用':
this.$router.push(
'/main/techPoliticsRelativeUse',
() => {},
() => {},
)
this.visible5 = false
break
case '报告模板结构化':
this.$router.push(
'/main/reportTemplateFabric',
() => {},
() => {},
)
this.visible5 = false
break
case '典型案例库管理':
this.$router.push(
'/main/typicalExampleManage',
() => {},
() => {},
)
this.visible5 = false
break
case '典型案例库关联使用':
this.$router.push(
'/main/typicalExampleRelativeUse',
() => {},
() => {},
)
this.visible5 = false
break
case '总体架构资产文档库':
this.$router.push(
'/main/totalArchiPropertyDocument',
() => {},
() => {},
)
this.visible5 = false
break
case '专家人才库管理':
this.$router.push(
'/main/etp-Manage',
() => {},
() => {},
)
this.visible5 = false
break
case '报告模板关联使用':
this.$router.push(
'/main/reportTemplateRelativeUse',
() => {},
() => {},
)
this.visible5 = false
break
case '批次计划管理':
this.$router.push(
'/main/batchPlanManagement',
() => {},
() => {},
)
this.visible5 = false
break
}
// case '概设阶段架构设计':
// this.$router.push(
// '/main/summaryArchiDesign',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '其他视图设计':
// this.$router.push(
// '/main/otherArchiDesign',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '评审情况(概要设计)':
// this.$router.push(
// '/main/reviewSituation',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '概设架构遵从检查':
// this.$router.push(
// '/main/reviewArchiFollowCheck',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '概设架构政策审查':
// this.$router.push(
// '/main/reviewArchiPoliticeCheck',
// () => {},
// () => {},
// )
// this.visible3 = false
// break
// case '技术政策结构化':
// this.$router.push(
// '/main/techPoliticsFabric',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '技术政策库关联使用':
// this.$router.push(
// '/main/techPoliticsRelativeUse',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '报告模板结构化':
// this.$router.push(
// '/main/reportTemplateFabric',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '典型案例库管理':
// this.$router.push(
// '/main/typicalExampleManage',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '典型案例库关联使用':
// this.$router.push(
// '/main/typicalExampleRelativeUse',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '总体架构资产文档库':
// this.$router.push(
// '/main/totalArchiPropertyDocument',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '专家人才库管理':
// this.$router.push(
// '/main/etp-Manage',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '报告模板关联使用':
// this.$router.push(
// '/main/reportTemplateRelativeUse',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '批次计划管理':
// this.$router.push(
// '/main/batchPlanManagement',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// case '概设材料审查':
// this.$router.push(
// '/main/conceptualReview',
// () => {},
// () => {},
// )
// this.visible5 = false
// break
// }
},
},
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/styles/common.scss';
.main {
height: 100%;
}
......@@ -1042,7 +489,7 @@ export default {
font-size: 14px;
font-weight: 500;
display: flex;
background-color: rgb(255, 255, 255, 0.2);
background-color: rgba(255, 255, 255, 0.2);
border-radius: 19px 19px 19px 19px;
margin-right: 24px;
justify-content: space-around;
......
export const menuOptions = [
{
name: '架构全景大屏及智能驾驶舱',
width: '420',
children: [
{
name: '架构全景智能大屏',
children: [
{
name: 'XX网数字化项目建设分析',
path: '',
},
{
name: '公司架构蓝图实现情况分析',
path: '',
},
],
},
{
name: '智能驾驶舱',
children: [
{
name: '管理智能驾驶舱',
path: '',
},
{
name: '业务智能驾驶舱',
path: '',
},
{
name: '项目智能驾驶舱',
path: '',
},
],
},
],
},
{
name: '总体架构资产设计与维护',
width: '440',
children: [
{
name: '架构元模型管理',
children: [
{
name: '架构元素管理',
path: '/main/archiEleList',
},
{
name: '架构元素关系管理',
path: '/main/archi-ele-rela',
},
{
name: '元模型管理',
path: '/main/metaModelList',
},
{
name: '架构视图配置',
path: '/main/archi-view-config',
},
{
name: '元模型字典管理',
path: '/main/meta-model-dic',
},
],
},
{
name: '总体架构资产维护',
children: [
{
name: '架构资产管理',
path: '/main/busiAssetslist',
},
{
name: '架构视图管理',
path: '/main/archiViewManage',
},
{
name: '企业中台服务清单',
path: '/main/comCenterServeList',
},
{
name: '现状架构资产管理',
path: '/main/currentAssetsList',
},
{
name: '架构演进路线资产管理',
path: '/main/archiEvoluteLine',
},
{
name: '总体架构资产可视化展示',
path: '/main/archiAssetVisualShow',
},
{
name: '总体架构资产智能搜索',
path: '/main/archiIntelligenceSearch',
},
],
},
],
},
{
name: '系统架构设计与管控',
width: '1100',
children: [
{
name: '系统架构资产管理',
children: [
{
name: '系统信息管理',
path: '/main/systemInfoManage',
},
{
name: '项目信息管理',
path: '/main/projectInfoManage',
},
{
name: '系统架构资产维护',
path: '/main/archiAssetManage',
},
],
},
{
name: '系统架构设计',
children: [
{
name: '系统架构视图设计',
path: '/main/systemArchiViewDesign',
},
{
name: '概设阶段架构设计',
path: '/main/summaryArchiDesign',
},
{
name: '其他视图设计',
path: '/main/otherArchiDesign',
},
],
},
{
name: '系统架构管控要求',
children: [
{
name: '评审情况(概要设计)',
path: '/main/reviewSituation',
},
{
name: '概设架构遵从检查',
path: '/main/reviewArchiFollowCheck',
},
{
name: '概设架构政策审查',
path: '/main/reviewArchiPoliticeCheck',
},
],
},
{
name: '概要设计评审',
children: [
{
name: '批次计划管理',
path: '/main/batchPlanManagement',
},
{
name: '需求管理',
path: '/main/demandManagement',
},
{
name: '概设材料审查',
path: '/main/conceptualReview',
children: [
{
name: '审查',
path: '/main/conceptualExamine',
},
],
},
{
name: '概设材料意见编制',
path: '/main/conceptualViewOrg',
},
{
name: '概设关联业务管理',
path: '/main/conceptualRelated',
},
{
name: '概设评审基础管理',
path: '/main/conceptualBaseManagement',
},
],
},
{
name: '架构督查',
children: [
{
name: '收集资料配置',
path: '',
},
{
name: '督查材料收集',
path: '',
},
{
name: '架构督查分析',
path: '',
},
{
name: '督查通报管理',
path: '/main/supervisionNotifyManagement',
},
{
name: '督查问题整改',
path: '/main/supervisionProblemEdit',
},
{
name: '架构遵从检查',
path: '/main/architectureFollowExamine',
},
{
name: '技术政策审查',
path: '/main/artPolicyExamine',
},
],
},
],
},
{
name: '架构资产服务与辅助分析',
width: '220',
children: [
{
name: '架构资产服务与辅助分析',
children: [
{
name: '架构遵从符合度检查',
path: '',
},
{
name: '技术政策符合度检查',
path: '',
},
],
},
],
},
{
name: '架构知识库',
width: '700',
children: [
{
name: '专家人才库',
children: [
{
name: '专家人才库管理',
path: '/main/etp-Manage',
},
],
},
{
name: '技术政策库',
children: [
{
name: '技术政策结构化',
path: '/main/techPoliticsFabric',
},
{
name: '技术政策库关联使用',
path: '/main/techPoliticsRelativeUse',
},
],
},
{
name: '报告模板库',
children: [
{
name: '报告模板结构化',
path: '/main/reportTemplateFabric',
},
{
name: '报告模板关联使用',
path: '/main/reportTemplateRelativeUse',
},
],
},
{
name: '典型案例库',
children: [
{
name: '典型案例库管理',
path: '/main/typicalExampleManage',
},
{
name: '典型案例库关联使用',
path: '/main/typicalExampleRelativeUse',
},
{
name: '总体架构资产文档库',
path: '/main/totalArchiPropertyDocument',
},
],
},
],
},
]
<template>
<div class="archiIntelligenceSearch">
<div class="left_container">
<div class="search_menu_item" style="margin-top: 15px;">
<div class="search_menu_item" style="margin-top: 15px">
<span class="search_title">架构内容:</span>
<!-- <el-input v-no-backslash v-model="query_item1" placeholder="请输入" style="width: 300px;" maxlength="100"></el-input> -->
<el-input placeholder="请输入内容" v-no-backslash v-model="query_item1" clearable style="width: 300px;">
<el-input
placeholder="请输入内容"
v-no-backslash
v-model="query_item1"
clearable
style="width: 300px"
>
<template slot="append">
<div style="cursor: pointer;width: 50px;height: 35px;display: flex;justify-content: center;align-items: center;" @click="select1">
<div
style="
cursor: pointer;
width: 50px;
height: 35px;
display: flex;
justify-content: center;
align-items: center;
"
@click="select1"
>
<i class="el-icon-search"></i>
</div>
</template>
......@@ -14,8 +30,19 @@
</div>
<div class="search_menu_item">
<span class="search_title">架构版本:</span>
<el-select v-model="query_item2" clearable placeholder="请选择" style="width: 300px;" @change="select2">
<el-option v-for="item in archiList" :key="item.versionId" :label="item.versionName" :value="item.versionId"></el-option>
<el-select
v-model="query_item2"
clearable
placeholder="请选择"
style="width: 300px"
@change="select2"
>
<el-option
v-for="item in archiList"
:key="item.versionId"
:label="item.versionName"
:value="item.versionId"
></el-option>
</el-select>
</div>
<el-tree
......@@ -28,11 +55,12 @@
node-key="id"
:check-strictly="true"
@check="treeCheckChange"
ref="tree">
ref="tree"
>
</el-tree>
</div>
<div class="right_container">
<div id="echartsContainer" style="width: 100%;height: 100%;"></div>
<div id="echartsContainer" style="width: 100%; height: 100%"></div>
</div>
</div>
</template>
......@@ -40,10 +68,10 @@
<script>
import {
archiIntelligenceSearchTree,
archiIntelligenceSearchVersionList
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
archiIntelligenceSearchVersionList,
} from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import $ from 'jquery'
export default {
name: 'ArchiIntelligenceSearch',
......@@ -53,96 +81,100 @@ export default {
myChart: null,
query_item1: null,
query_item2: null,
archiList: []
};
archiList: [],
}
},
mounted(){
this.getTreeData();
this.getVisionList();
mounted() {
this.getTreeData()
this.getVisionList()
},
methods: {
select1() {
this.getTreeData();
this.getTreeData()
},
select2(data) {
if(this.myChart) {
this.myChart.dispose();
if (this.myChart) {
this.myChart.dispose()
}
this.getTreeData();
this.getTreeData()
},
echarts1(seriesData, linkData) {
this.myChart = echarts.init(document.getElementById('echartsContainer'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer'),
)
var option = {
tooltip: {
formatter: function (x) {
return x.data.name;
}
return x.data.name
},
},
series: [
{
type: 'graph',
layout: 'force',
roam: true,
symbolSize: [ 120, 60 ],
symbolSize: [120, 60],
label: {
normal: {
show: true,
width: 80,
overflow: 'truncate',
textStyle: {
fontSize: 12
fontSize: 12,
},
},
}
},
lineStyle: {
normal: {
opacity: 0.9,
width: 5,
curveness: 0
}
curveness: 0,
},
},
force: {
// repulsion: 500,
repulsion: 1000, //节点之间的斥力因子。
edgeLength: 100 //边的两个节点之间的距离,这个距离也会受 repulsion。
edgeLength: 100, //边的两个节点之间的距离,这个距离也会受 repulsion。
},
// edgeSymbol: ['circle', 'arrow'],
data: seriesData,
links: linkData
links: linkData,
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
getVisionList() {//查询架构版本
archiIntelligenceSearchVersionList({}).then(res => {
if(res.code == 200) {
this.archiList = res.data;
getVisionList() {
//查询架构版本
archiIntelligenceSearchVersionList({}).then((res) => {
if (res.code == 200) {
this.archiList = res.data
}
});
})
},
getTreeData() {//查询左侧树
getTreeData() {
//查询左侧树
const params = {
"assetName": this.query_item1,
"versionId": this.query_item2,
assetName: this.query_item1,
versionId: this.query_item2,
}
archiIntelligenceSearchTree(params).then(res => {
if(res.code == 200) {
this.treeData = res.data;
archiIntelligenceSearchTree(params).then((res) => {
if (res.code == 200) {
this.treeData = res.data
}
});
})
},
treeCheckChange(data, tree) {//左侧树勾选
let seriesData = [], linkData = [];
treeCheckChange(data, tree) {
//左侧树勾选
let seriesData = [],
linkData = []
if(tree.checkedNodes.length > 0) {
tree.checkedNodes.forEach(item => {
if(!item.targetList){
return;
if (tree.checkedNodes.length > 0) {
tree.checkedNodes.forEach((item) => {
if (!item.targetList) {
return
}
seriesData.push({
name: item.assetName,
......@@ -151,12 +183,12 @@ export default {
draggable: true,
itemStyle: {
normal: {
color: item.color
color: item.color,
},
}
});
if(item.targetList.length > 0) {
item.targetList.forEach(item2 => {
},
})
if (item.targetList.length > 0) {
item.targetList.forEach((item2) => {
seriesData.push({
name: item2.assetName,
id: item2.assetCode,
......@@ -164,9 +196,9 @@ export default {
draggable: true,
itemStyle: {
normal: {
color: item2.color
color: item2.color,
},
},
}
})
linkData.push({
source: item.assetCode,
......@@ -188,60 +220,57 @@ export default {
new_arr2.push(seriesData[i])
}
}
seriesData = new_arr2;
this.echarts1(seriesData, linkData);
seriesData = new_arr2
}else {
this.myChart.dispose();
this.echarts1(seriesData, linkData)
} else {
this.myChart.dispose()
}
},
}
},
}
</script>
<style>
</style>
<style></style>
<style scoped>
.filter-tree{
.filter-tree {
width: 300px;
height: calc(100% - 120px);
overflow-y: auto;
display: inline-block;
}
/deep/ .is-leaf {
}
/deep/ .is-leaf {
background-color: #fff !important;
}
.search_menu_item{
}
.search_menu_item {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 10px;
}
.search_title{
}
.search_title {
font-size: 14px;
color: #606291;
flex-shrink: 0;
margin-right: 10px;
}
.archiIntelligenceSearch{
}
.archiIntelligenceSearch {
width: 100%;
height: 100%;
display: flex;
}
.left_container{
}
.left_container {
width: 25%;
margin-right: 20px;
height: 100%;
border: 1px solid #ccc;
text-align: center;
}
.right_container{
}
.right_container {
width: 75%;
height: 100%;
pornhub: hidden;
}
/deep/ .el-input-group__append{
}
/deep/ .el-input-group__append {
padding: 0;
}
}
</style>
<template>
<template>
......@@ -8,26 +8,23 @@
default-expand-all
node-key="assetId"
@node-click="treeClick"
ref="tree">
ref="tree"
>
</el-tree>
<div class="right_container">
<div id="echartsContainer" style="width: 800px;height: 500px;"></div>
<div id="echartsContainer" style="width: 800px; height: 500px"></div>
</div>
</div>
</template>
<script>
import {
archiAssetShowTree,
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
import { archiAssetShowTree } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import $ from 'jquery'
export default {
name: 'ArchiAssetVisualShow',
components: {
},
components: {},
data() {
return {
treeData: [
......@@ -35,88 +32,92 @@ export default {
{ id: 'APP', name: '应用架构', children: [] },
{ id: 'DATA', name: '数据架构', children: [] },
{ id: 'TECH', name: '技术架构', children: [] },
{ id: 'SAFE', name: '安全架构', children: [] }
{ id: 'SAFE', name: '安全架构', children: [] },
],
myChart: null
};
myChart: null,
}
},
mounted(){
this.getTreeData('BUSI');
this.echarts1();
mounted() {
this.getTreeData('BUSI')
this.echarts1()
},
methods: {
echarts1(seriesData, linkData) {
this.myChart = echarts.init(document.getElementById('echartsContainer'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer'),
)
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: {
type: 'value'
type: 'value',
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
type: 'bar',
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
getTreeData(type) {//查询左侧树
getTreeData(type) {
//查询左侧树
const params = {
"assetEnum": type
assetEnum: type,
}
archiAssetShowTree(params).then(res => {
if(res.code == 200) {
this.treeData.forEach(item => {
if(item.id == type) {
item.children = res.data;
archiAssetShowTree(params).then((res) => {
if (res.code == 200) {
this.treeData.forEach((item) => {
if (item.id == type) {
item.children = res.data
}
})
}
});
})
},
treeClick(data, node, e) {//树点击的时候
treeClick(data, node, e) {
//树点击的时候
// console.log(data.assetId);
const type = [ 'BUSI', 'APP', 'DATA', 'TECH', 'SAFE' ];
if(type.includes(data.id)) {
this.getTreeData(data.id);
}
}
const type = ['BUSI', 'APP', 'DATA', 'TECH', 'SAFE']
if (type.includes(data.id)) {
this.getTreeData(data.id)
}
},
},
}
</script>
<style scoped>
.archiAssetVisualShow{
.archiAssetVisualShow {
width: 100%;
height: 100%;
display: flex;
align-items: center;
}
.filter-tree{
}
.filter-tree {
width: 300px;
height: 100%;
overflow-y: auto;
border-right: 1px solid #ccc;
}
.right_container{
}
.right_container {
width: calc(100% - 300px);
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
/deep/ .is-leaf {
}
/deep/ .is-leaf {
background-color: #fff !important;
}
}
</style>
<template>
<div class="tab1">
<div class="containerLeft">
<p style="text-align: left;margin-left: 20px;">业务域</p>
<p style="text-align: left; margin-left: 20px">业务域</p>
<el-divider></el-divider>
<div class="buttonContainer">
<span v-for="item in leftData" :key="item.assetId">
<el-button style="margin: 10px 20px;" @click="showCurrent(item)">{{ item.assetName }}</el-button>
<el-button style="margin: 10px 20px" @click="showCurrent(item)">{{
item.assetName
}}</el-button>
</span>
</div>
</div>
<div class="containerCenter">
<el-collapse accordion v-for="item in centerData" :key="item.assetId" style="margin-bottom: 20px;">
<el-collapse
accordion
v-for="item in centerData"
:key="item.assetId"
style="margin-bottom: 20px"
>
<el-collapse-item>
<template slot="title">
<div style="width: 100%;display: flex;align-items: center;padding-left: 20px;">
<div
style="
width: 100%;
display: flex;
align-items: center;
padding-left: 20px;
"
>
<el-button size="medium">{{ item.assetName }}</el-button>
<p style="width: 76%;margin-left: 20px;border-top: 1px dotted #000;"></p>
<p
style="
width: 76%;
margin-left: 20px;
border-top: 1px dotted #000;
"
></p>
</div>
</template>
<span v-for="item2 in item.children" :key="item2.assetId">
<el-button style="margin: 10px 20px;">{{ item2.assetName }}</el-button>
<el-button style="margin: 10px 20px">{{
item2.assetName
}}</el-button>
</span>
</el-collapse-item>
</el-collapse>
</div>
<div class="containerRight">
<div id="echartsContainer" style="width: 800px;height: 500px;"></div>
<div id="echartsContainer" style="width: 800px; height: 500px"></div>
</div>
</div>
</template>
<script>
import {
archiAssetShowTree
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default {
import { archiAssetShowTree } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab1',
components: {
},
components: {},
data() {
return {
leftData: [],
centerData: []
};
centerData: [],
}
},
mounted(){
this.echarts1();
this.getLeftData();
mounted() {
this.echarts1()
this.getLeftData()
},
methods: {
showCurrent(data) {
this.centerData = data.children;
this.centerData = data.children
},
getLeftData() {
const params = {
"assertType": "ARCHI_BUSINESS"
assertType: 'ARCHI_BUSINESS',
}
archiAssetShowTree(params).then(res => {
if(res.code == 200) {
this.leftData = res.data;
}else {
archiAssetShowTree(params).then((res) => {
if (res.code == 200) {
this.leftData = res.data
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
})
},
echarts1() {
this.myChart = echarts.init(document.getElementById('echartsContainer'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer'),
)
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: {
type: 'value'
type: 'value',
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
type: 'bar',
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
}
}
},
}
</script>
<style>
.el-tabs__nav{
.el-tabs__nav {
margin-left: 20px;
}
}
</style>
<style scoped>
.tab1{
.tab1 {
height: calc(100% - 20px);
display: flex;
}
.buttonContainer{
}
.buttonContainer {
height: calc(100% - 90px);
overflow-y: auto;
text-align: left;
}
/deep/ .el-collapse-item__content{
}
/deep/ .el-collapse-item__content {
text-align: left;
}
.containerLeft{
}
.containerLeft {
width: 20%;
height: 100%;
border-right: 2px solid #ccc;
}
.containerCenter{
}
.containerCenter {
width: 35%;
height: 100%;
border-right: 2px solid #ccc;
overflow-y: auto;
}
.containerRight{
}
.containerRight {
width: 45%;
height: 100%;
}
.el-button--primary{
background: rgba(13,134,127,1);
}
.el-button--primary {
background: rgba(13, 134, 127, 1);
color: #fff;
border: 0;
}
}
</style>
<template>
<div class="tab2">
<div class="containerLeft">
<p style="text-align: left;margin-left: 20px;">业务域</p>
<p style="text-align: left; margin-left: 20px">业务域</p>
<el-divider></el-divider>
<div class="buttonContainer">
<span v-for="item in leftData" :key="item.assetId">
<el-button style="margin: 10px 20px;" @click="showCurrent(item)">{{ item.assetName }}</el-button>
<el-button style="margin: 10px 20px" @click="showCurrent(item)">{{
item.assetName
}}</el-button>
</span>
</div>
</div>
<div class="containerCenter">
<el-collapse accordion v-for="item in centerData" :key="item.assetId" style="margin-bottom: 20px;">
<el-collapse
accordion
v-for="item in centerData"
:key="item.assetId"
style="margin-bottom: 20px"
>
<el-collapse-item>
<template slot="title">
<div style="width: 100%;display: flex;align-items: center;padding-left: 20px;">
<div
style="
width: 100%;
display: flex;
align-items: center;
padding-left: 20px;
"
>
<el-button size="medium">{{ item.assetName }}</el-button>
<p style="width: 76%;margin-left: 20px;border-top: 1px dotted #000;"></p>
<p
style="
width: 76%;
margin-left: 20px;
border-top: 1px dotted #000;
"
></p>
</div>
</template>
<span v-for="item2 in item.children" :key="item2.assetId">
<el-button style="margin: 10px 20px;">{{ item2.assetName }}</el-button>
<el-button style="margin: 10px 20px">{{
item2.assetName
}}</el-button>
</span>
</el-collapse-item>
</el-collapse>
</div>
<div class="containerRight">
<div id="echartsContainer2" style="width: 800px;height: 500px;"></div>
<div id="echartsContainer2" style="width: 800px; height: 500px"></div>
</div>
</div>
</template>
<script>
import {
archiAssetShowTree
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default {
import { archiAssetShowTree } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab2',
components: {
},
components: {},
data() {
return {
leftData: [],
centerData: []
};
centerData: [],
}
},
mounted(){
this.echarts1();
this.getLeftData();
mounted() {
this.echarts1()
this.getLeftData()
},
methods: {
showCurrent(data) {
this.centerData = data.children;
this.centerData = data.children
},
getLeftData() {
const params = {
"assertType": "ARCHI_APPLICATION"
assertType: 'ARCHI_APPLICATION',
}
archiAssetShowTree(params).then(res => {
if(res.code == 200) {
this.leftData = res.data;
}else {
archiAssetShowTree(params).then((res) => {
if (res.code == 200) {
this.leftData = res.data
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
})
},
echarts1() {
this.myChart = echarts.init(document.getElementById('echartsContainer2'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer2'),
)
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: {
type: 'value'
type: 'value',
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
type: 'bar',
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
}
}
},
}
</script>
<style>
.el-tabs__nav{
.el-tabs__nav {
margin-left: 20px;
}
}
</style>
<style scoped>
.tab2{
.tab2 {
height: calc(100% - 20px);
display: flex;
}
/deep/ .el-collapse-item__content{
}
/deep/ .el-collapse-item__content {
text-align: left;
}
.buttonContainer{
}
.buttonContainer {
height: calc(100% - 90px);
overflow-y: auto;
text-align: left;
}
.containerLeft{
}
.containerLeft {
width: 20%;
height: 100%;
border-right: 2px solid #ccc;
}
.containerCenter{
}
.containerCenter {
width: 35%;
height: 100%;
border-right: 2px solid #ccc;
overflow-y: auto;
}
.containerRight{
}
.containerRight {
width: 45%;
height: 100%;
}
.el-button--primary{
background: rgba(13,134,127,1);
}
.el-button--primary {
background: rgba(13, 134, 127, 1);
color: #fff;
border: 0;
}
}
</style>
<template>
<div class="tab3">
<div class="containerLeft">
<p style="text-align: left;margin-left: 20px;">业务域</p>
<p style="text-align: left; margin-left: 20px">业务域</p>
<el-divider></el-divider>
<div class="buttonContainer">
<span v-for="item in leftData" :key="item.assetId">
<el-button style="margin: 10px 20px;" @click="showCurrent(item)">{{ item.assetName }}</el-button>
<el-button style="margin: 10px 20px" @click="showCurrent(item)">{{
item.assetName
}}</el-button>
</span>
</div>
</div>
<div class="containerCenter">
<el-collapse accordion v-for="item in centerData" :key="item.assetId" style="margin-bottom: 20px;">
<el-collapse
accordion
v-for="item in centerData"
:key="item.assetId"
style="margin-bottom: 20px"
>
<el-collapse-item>
<template slot="title">
<div style="width: 100%;display: flex;align-items: center;padding-left: 20px;">
<div
style="
width: 100%;
display: flex;
align-items: center;
padding-left: 20px;
"
>
<el-button size="medium">{{ item.assetName }}</el-button>
<p style="width: 76%;margin-left: 20px;border-top: 1px dotted #000;"></p>
<p
style="
width: 76%;
margin-left: 20px;
border-top: 1px dotted #000;
"
></p>
</div>
</template>
<span v-for="item2 in item.children" :key="item2.assetId">
<el-button style="margin: 10px 20px;">{{ item2.assetName }}</el-button>
<el-button style="margin: 10px 20px">{{
item2.assetName
}}</el-button>
</span>
</el-collapse-item>
</el-collapse>
</div>
<div class="containerRight">
<div id="echartsContainer3" style="width: 800px;height: 500px;"></div>
<div id="echartsContainer3" style="width: 800px; height: 500px"></div>
</div>
</div>
</template>
<script>
import {
archiAssetShowTree
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default {
import { archiAssetShowTree } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab3',
components: {
},
components: {},
data() {
return {
leftData: [],
centerData: []
};
centerData: [],
}
},
mounted(){
this.echarts1();
this.getLeftData();
mounted() {
this.echarts1()
this.getLeftData()
},
methods: {
showCurrent(data) {
this.centerData = data.children;
this.centerData = data.children
},
getLeftData() {
const params = {
"assertType": "ARCHI_DATA"
assertType: 'ARCHI_DATA',
}
archiAssetShowTree(params).then(res => {
if(res.code == 200) {
this.leftData = res.data;
}else {
archiAssetShowTree(params).then((res) => {
if (res.code == 200) {
this.leftData = res.data
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
})
},
echarts1() {
this.myChart = echarts.init(document.getElementById('echartsContainer3'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer3'),
)
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: {
type: 'value'
type: 'value',
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
type: 'bar',
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
}
}
},
}
</script>
<style>
.el-tabs__nav{
.el-tabs__nav {
margin-left: 20px;
}
}
</style>
<style scoped>
.tab3{
.tab3 {
height: calc(100% - 20px);
display: flex;
}
/deep/ .el-collapse-item__content{
}
/deep/ .el-collapse-item__content {
text-align: left;
}
.buttonContainer{
}
.buttonContainer {
height: calc(100% - 90px);
overflow-y: auto;
text-align: left;
}
.containerLeft{
}
.containerLeft {
width: 20%;
height: 100%;
border-right: 2px solid #ccc;
}
.containerCenter{
}
.containerCenter {
width: 35%;
height: 100%;
border-right: 2px solid #ccc;
overflow-y: auto;
}
.containerRight{
}
.containerRight {
width: 45%;
height: 100%;
}
.el-button--primary{
background: rgba(13,134,127,1);
}
.el-button--primary {
background: rgba(13, 134, 127, 1);
color: #fff;
border: 0;
}
}
</style>
<template>
<div class="tab4">
<div class="containerLeft">
<p style="text-align: left;margin-left: 20px;">业务域</p>
<p style="text-align: left; margin-left: 20px">业务域</p>
<el-divider></el-divider>
<div class="buttonContainer">
<span v-for="item in leftData" :key="item.assetId">
<el-button style="margin: 10px 20px;" @click="showCurrent(item)">{{ item.assetName }}</el-button>
<el-button style="margin: 10px 20px" @click="showCurrent(item)">{{
item.assetName
}}</el-button>
</span>
</div>
</div>
<div class="containerCenter">
<el-collapse accordion v-for="item in centerData" :key="item.assetId" style="margin-bottom: 20px;">
<el-collapse
accordion
v-for="item in centerData"
:key="item.assetId"
style="margin-bottom: 20px"
>
<el-collapse-item>
<template slot="title">
<div style="width: 100%;display: flex;align-items: center;padding-left: 20px;">
<div
style="
width: 100%;
display: flex;
align-items: center;
padding-left: 20px;
"
>
<el-button size="medium">{{ item.assetName }}</el-button>
<p style="width: 76%;margin-left: 20px;border-top: 1px dotted #000;"></p>
<p
style="
width: 76%;
margin-left: 20px;
border-top: 1px dotted #000;
"
></p>
</div>
</template>
<span v-for="item2 in item.children" :key="item2.assetId">
<el-button style="margin: 10px 20px;">{{ item2.assetName }}</el-button>
<el-button style="margin: 10px 20px">{{
item2.assetName
}}</el-button>
</span>
</el-collapse-item>
</el-collapse>
</div>
<div class="containerRight">
<div id="echartsContainer4" style="width: 800px;height: 500px;"></div>
<div id="echartsContainer4" style="width: 800px; height: 500px"></div>
</div>
</div>
</template>
<script>
import {
archiAssetShowTree
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default {
import { archiAssetShowTree } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab4',
components: {
},
components: {},
data() {
return {
leftData: [],
centerData: []
};
centerData: [],
}
},
mounted(){
this.echarts1();
this.getLeftData();
mounted() {
this.echarts1()
this.getLeftData()
},
methods: {
showCurrent(data) {
this.centerData = data.children;
this.centerData = data.children
},
getLeftData() {
const params = {
"assertType": "ARCHI_TECHNOLOGY"
assertType: 'ARCHI_TECHNOLOGY',
}
archiAssetShowTree(params).then(res => {
if(res.code == 200) {
this.leftData = res.data;
}else {
archiAssetShowTree(params).then((res) => {
if (res.code == 200) {
this.leftData = res.data
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
})
},
echarts1() {
this.myChart = echarts.init(document.getElementById('echartsContainer4'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer4'),
)
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: {
type: 'value'
type: 'value',
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
type: 'bar',
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
}
}
},
}
</script>
<style>
.el-tabs__nav{
.el-tabs__nav {
margin-left: 20px;
}
}
</style>
<style scoped>
.tab4{
.tab4 {
height: calc(100% - 20px);
display: flex;
}
/deep/ .el-collapse-item__content{
}
/deep/ .el-collapse-item__content {
text-align: left;
}
.buttonContainer{
}
.buttonContainer {
height: calc(100% - 90px);
overflow-y: auto;
text-align: left;
}
.containerLeft{
}
.containerLeft {
width: 20%;
height: 100%;
border-right: 2px solid #ccc;
}
.containerCenter{
}
.containerCenter {
width: 35%;
height: 100%;
border-right: 2px solid #ccc;
overflow-y: auto;
}
.containerRight{
}
.containerRight {
width: 45%;
height: 100%;
}
.el-button--primary{
background: rgba(13,134,127,1);
}
.el-button--primary {
background: rgba(13, 134, 127, 1);
color: #fff;
border: 0;
}
}
</style>
<template>
<div class="tab5">
<div class="containerLeft">
<p style="text-align: left;margin-left: 20px;">业务域</p>
<p style="text-align: left; margin-left: 20px">业务域</p>
<el-divider></el-divider>
<div class="buttonContainer">
<span v-for="item in leftData" :key="item.assetId">
<el-button style="margin: 10px 20px;" @click="showCurrent(item)">{{ item.assetName }}</el-button>
<el-button style="margin: 10px 20px" @click="showCurrent(item)">{{
item.assetName
}}</el-button>
</span>
</div>
</div>
<div class="containerCenter">
<el-collapse accordion v-for="item in centerData" :key="item.assetId" style="margin-bottom: 20px;">
<el-collapse
accordion
v-for="item in centerData"
:key="item.assetId"
style="margin-bottom: 20px"
>
<el-collapse-item>
<template slot="title">
<div style="width: 100%;display: flex;align-items: center;padding-left: 20px;">
<div
style="
width: 100%;
display: flex;
align-items: center;
padding-left: 20px;
"
>
<el-button size="medium">{{ item.assetName }}</el-button>
<p style="width: 76%;margin-left: 20px;border-top: 1px dotted #000;"></p>
<p
style="
width: 76%;
margin-left: 20px;
border-top: 1px dotted #000;
"
></p>
</div>
</template>
<span v-for="item2 in item.children" :key="item2.assetId">
<el-button style="margin: 10px 20px;">{{ item2.assetName }}</el-button>
<el-button style="margin: 10px 20px">{{
item2.assetName
}}</el-button>
</span>
</el-collapse-item>
</el-collapse>
</div>
<div class="containerRight">
<div id="echartsContainer5" style="width: 800px;height: 500px;"></div>
<div id="echartsContainer5" style="width: 800px; height: 500px"></div>
</div>
</div>
</template>
<script>
import {
archiAssetShowTree
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default {
import { archiAssetShowTree } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab5',
components: {
},
components: {},
data() {
return {
leftData: [],
centerData: []
};
centerData: [],
}
},
mounted(){
this.echarts1();
this.getLeftData();
mounted() {
this.echarts1()
this.getLeftData()
},
methods: {
showCurrent(data) {
this.centerData = data.children;
this.centerData = data.children
},
getLeftData() {
const params = {
"assertType": "ARCHI_SAFE"
assertType: 'ARCHI_SAFE',
}
archiAssetShowTree(params).then(res => {
if(res.code == 200) {
this.leftData = res.data;
}else {
archiAssetShowTree(params).then((res) => {
if (res.code == 200) {
this.leftData = res.data
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
})
},
echarts1() {
this.myChart = echarts.init(document.getElementById('echartsContainer5'));
this.myChart = this.$echarts.init(
document.getElementById('echartsContainer5'),
)
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
yAxis: {
type: 'value'
type: 'value',
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
type: 'bar',
},
],
}
]
};
this.myChart.setOption(option);
this.myChart.setOption(option)
},
}
}
},
}
</script>
<style>
.el-tabs__nav{
.el-tabs__nav {
margin-left: 20px;
}
}
</style>
<style scoped>
.tab5{
.tab5 {
height: calc(100% - 20px);
display: flex;
}
.buttonContainer{
}
.buttonContainer {
height: calc(100% - 90px);
overflow-y: auto;
text-align: left;
}
/deep/ .el-collapse-item__content{
}
/deep/ .el-collapse-item__content {
text-align: left;
}
.containerLeft{
}
.containerLeft {
width: 20%;
height: 100%;
border-right: 2px solid #ccc;
}
.containerCenter{
}
.containerCenter {
width: 35%;
height: 100%;
border-right: 2px solid #ccc;
overflow-y: auto;
}
.containerRight{
}
.containerRight {
width: 45%;
height: 100%;
}
.el-button--primary{
background: rgba(13,134,127,1);
}
.el-button--primary {
background: rgba(13, 134, 127, 1);
color: #fff;
border: 0;
}
}
</style>
<!--
* @Description: 架构督查-架构遵从检查
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-26 18:27:18
* @LastEditors: pan
* @LastEditTime: 2024-03-26 19:08:43
-->
<template>
<div class="architectureFollowExamine">
<el-tabs class="m-lr-10" v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
lazy
>
<keep-alive>
<component :is="item.componentTag"></component>
</keep-alive>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import Tab1 from './tab1.vue'
import Tab2 from './tab2.vue'
import Tab3 from './tab3.vue'
import Tab4 from './tab4.vue'
import Tab5 from './tab5.vue'
export default {
name: 'architectureFollowExamine',
data() {
return {
activeName: '1',
tabOptions: [
{ label: '业务架构遵从', name: '1', componentTag: 'Tab1' },
{ label: '应用架构遵从', name: '2', componentTag: 'Tab2' },
{ label: '数据架构遵从', name: '3', componentTag: 'Tab3' },
{ label: '技术架构遵从', name: '4', componentTag: 'Tab4' },
{ label: '安全数据架构遵从', name: '5', componentTag: 'Tab5' },
],
componentTag: '',
}
},
components: {
Tab1,
Tab2,
Tab3,
Tab4,
Tab5,
},
mounted() {},
methods: {},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
.architectureFollowExamine {
width: 100%;
& > div {
height: 100%;
}
::v-deep .el-tabs__content {
height: calc(100% - 55px);
.el-tab-pane {
height: 100%;
}
}
}
</style>
<template>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>系统业务架构视图</span>
</div>
<div class="left_container_content flex-1">
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段业务架构视图</span>
</div>
</div>
<div class="right_container_content flex-1">
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">备注</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab1',
components: {},
data() {
return {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
prjId: this.$route.query.prjId,
reviewState: this.isMeet,
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>系统应用架构视图</span>
</div>
<div class="left_container_content flex-1">
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段应用架构视图</span>
</div>
</div>
<div class="right_container_content flex-1">
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">备注</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab2',
components: {},
data() {
return {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>系统数据架构视图</span>
</div>
<div class="left_container_content flex-1">
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段数据架构视图</span>
</div>
</div>
<div class="right_container_content flex-1">
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">备注</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab3',
components: {},
data() {
return {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>系统技术架构视图</span>
</div>
<div class="left_container_content flex-1">
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段技术架构视图</span>
</div>
</div>
<div class="right_container_content flex-1">
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">备注</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab4',
components: {},
data() {
return {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>系统安全架构视图</span>
</div>
<div class="left_container_content flex-1">
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段安全架构视图</span>
</div>
</div>
<div class="right_container_content flex-1">
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">备注</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab5',
components: {},
data() {
return {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<!--
* @Description: 架构督查-技术政策审查
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-26 18:27:18
* @LastEditors: pan
* @LastEditTime: 2024-03-26 19:26:03
-->
<template>
<div class="searchTable">
<list-page>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
>
</table-config>
</template>
</list-page>
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { updReportManage, delReportManage } from '@/api/index.js'
import { querySupervisionNotifyManagement } from '@/api/interface'
import { buildType } from '@/utils/dictionary'
export default {
name: 'supervisionNotifyManagement',
components: {
ListPage,
SearchForm,
TableConfig,
},
data() {
return {
selectRows: [],
query: {
url: querySupervisionNotifyManagement,
method: 'post',
queryParam: {},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
computed: {
formOptions() {
return [
{
label: '年度', // label文字
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
},
{
label: '建设类型',
width: '100px',
prop: 'buildType',
element: 'el-select', // 指定elementui组件
dictType: 'build_type',
placeholder: '请选择', // elementui组件属性
},
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
},
columns() {
return [
// { label: '序号', type: 'index', width: '80px' },
{ label: '年份', prop: 'year', width: '100px' },
{
label: '建设类型', // label文字
prop: 'buildType', // 字段名
options: buildType,
collectionType: true,
width: '120px',
},
{
label: '项目名称',
prop: 'prjName',
},
{
label: '操作',
type: 'operation',
width: '240px',
actionButtons: [
{
title: '审查',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '查看结果',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-view',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
},
},
created() {},
methods: {
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '审查':
// this.fnEdit(row)
break
case '查看结果':
// this.fnEdit(row)
break
default:
break
}
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
......@@ -4,17 +4,19 @@
:visible.sync="showDialog"
:close-on-click-modal="false"
width="60%"
@close="handleClose()"
@open="handleOpen"
>
<div>
<Form
@getData="getFormData"
ref="addForm"
:form-options="formOptions"
label-width="120px"
></Form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="showDialog = false" size="mini">取 消</el-button>
<el-button type="primary" @click="handleImport" size="mini"
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit" size="mini"
>提 交</el-button
>
</span></el-dialog
......@@ -23,6 +25,8 @@
<script>
import Form from '@/components/Form.vue'
import { addBatchPlan, editBatchPlan } from '@/api'
export default {
props: {
title: {
......@@ -33,6 +37,10 @@ export default {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {}
......@@ -48,11 +56,11 @@ export default {
prop: 'batName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
rules: [],
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '创建人', // label文字
prop: 'batName', // 字段名
prop: 'createMan', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
......@@ -60,20 +68,20 @@ export default {
},
{
label: '创建时间', // label文字
prop: 'planReviewDate', // 字段名
prop: 'createTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
initValue: '', // 字段初始值
initValue: new Date().format('yyyy-MM-dd'), // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
label: '年度', // label文字
prop: 'planReviewDate', // 字段名
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
initValue: '', // 字段初始值
initValue: new Date().format('yyyy'), // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
......@@ -87,10 +95,12 @@ export default {
},
{
label: '备注', // label文字
prop: 'planReviewDate', // 字段名
prop: 'remark', // 字段名
type: 'textarea',
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
]
},
......@@ -102,10 +112,70 @@ export default {
this.$emit('update:visible', value)
},
},
isEdit() {
if (this.title === '修改批次计划') {
return true
} else {
return false
}
},
},
mounted() {},
methods: {
getFormData(formData) {},
handleSubmit() {
this.$refs['addForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['addForm'].getData()
const typeApi = this.isEdit ? editBatchPlan : addBatchPlan
const params = {
...this.rowData,
...formInfo,
state: 1,
}
typeApi(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
}
})
})
},
handleClose() {
this.showDialog = false
this.formOptions.forEach((v) => {
if (v.prop === 'createTime') {
v.initValue = new Date().format('yyyy-MM-dd')
} else if (v.prop === 'year') {
v.initValue = new Date().format('yyyy')
} else {
v.initValue = ''
}
})
this.$refs['addForm'].addInitValue()
this.$refs['addForm'].onReset()
},
handleOpen() {
if (Object.keys(this.rowData).length) {
this.formOptions.forEach((v) => {
v.initValue = this.rowData[v.prop]
})
this.$nextTick(() => {
this.$refs['addForm'].addInitValue()
})
} else {
this.$nextTick(() => {
this.$refs['addForm'].addInitValue()
this.$refs['addForm'].onReset()
})
}
},
},
}
</script>
......
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="30%"
@close="handleClose()"
@open="handleOpen"
>
<div>
<template>
<el-radio v-model="radio" :label="3">同意</el-radio>
<el-radio v-model="radio" :label="4">不同意</el-radio>
</template>
<Form
ref="addForm"
:form-options="formOptions"
label-width="120px"
></Form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit" size="mini"
>提 交</el-button
>
</span></el-dialog
>
</template>
<script>
import Form from '@/components/Form.vue'
import { editBatchPlan } from '@/api/index.js'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
radio: 3,
}
},
components: {
Form,
},
computed: {
formOptions() {
return [
{
label: '意见描述', // label文字
prop: 'remark', // 字段名
type: 'textarea',
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
handleSubmit() {
this.$refs['addForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['addForm'].getData()
const params = {
...this.rowData,
...formInfo,
state: this.radio,
}
editBatchPlan(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
} else {
this.$message.error(res.msg)
}
})
})
},
handleClose() {
this.showDialog = false
this.formOptions.forEach((v) => {
v.initValue = ''
})
this.radio = 3
this.$refs['addForm'].addInitValue()
this.$refs['addForm'].onReset()
},
handleOpen() {
this.$refs['addForm'].onReset()
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
......@@ -30,7 +30,18 @@
</list-page>
<!-- 新增弹窗 -->
<Add :visible.sync="visible" title="新增批次计划"></Add>
<Add
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
></Add>
<ApprovalDialog
:row-data="rowData"
@querySearch="querySearch"
title="审批"
:visible.sync="approvalVisible"
/>
</div>
</template>
......@@ -39,8 +50,9 @@ import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import Add from './Add.vue'
import ApprovalDialog from './ApprovalDialog.vue'
import { getDianXingAnLiSelectData } from '@/api/index.js'
import { editBatchPlan } from '@/api/index.js'
import { batchPlanManagement } from '@/api/interface'
import { approvalStatusOptions } from '@/utils/dictionary'
export default {
......@@ -49,10 +61,10 @@ export default {
SearchForm,
TableConfig,
Add,
ApprovalDialog,
},
data() {
return {
constructionTypeOptions: [],
selectRows: [],
query: {
url: batchPlanManagement,
......@@ -60,6 +72,9 @@ export default {
queryParam: {},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
computed: {
......@@ -138,23 +153,13 @@ export default {
},
],
callback: (row, title) => {
this.fnToDetailsTab('1')
this.fnOperation(row, title)
},
},
]
},
},
created() {
console.log('batchPlanManagement', batchPlanManagement)
const params = {
key: 'build_type',
}
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
this.constructionTypeOptions = res.data
}
})
},
created() {},
methods: {
// 表格勾选的数据
selectionChange(data) {
......@@ -168,6 +173,85 @@ export default {
this.$refs.searchTable.queryData()
},
fnAdd() {
this.rowData = {}
this.dialogTitle = '新增批次计划'
this.visible = true
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '修改':
this.fnEdit(row)
break
case '删除':
this.fnDel(row)
break
case '提交':
this.fnSubmit(row)
break
case '审批':
this.fnApproval(row)
break
default:
break
}
},
fnApproval(row) {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row) {
this.$confirm('是否确认提交?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
state: 2,
}
editBatchPlan(params).then((res) => {
if (res.code === 200) {
this.$message.success('提交成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
delFlag: 1,
}
editBatchPlan(params).then((res) => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error('删除失败')
}
})
})
.catch(() => {})
},
fnEdit(row) {
this.dialogTitle = '修改批次计划'
this.rowData = row
this.visible = true
},
},
......
<!--
* @Description: 概设评审基础管理 integration-info-controller
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-21 20:58:31
* @LastEditors: pan
* @LastEditTime: 2024-03-26 17:31:29
-->
<template>
<div class="searchTable">
<list-page>
<template #tabWrap>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<template #operationWrap>
<template>
<el-button
type="primary"
icon="el-icon-document-add"
size="medium"
plain
>新建</el-button
>
<el-button
type="primary"
icon="el-icon-download"
size="medium"
plain
v-if="activeName === '1'"
>导出</el-button
>
</template>
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
:key="activeName"
>
<template #filesValue="{ data }">
<span>{{ handleFileName(data) }}</span>
</template>
</table-config>
</template>
</list-page>
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { queryConceptualBaseManagement } from '@/api/interface'
import { editNeedInfo } from '@/api'
import { buildType, approvalStatusOptions } from '@/utils/dictionary'
export default {
name: 'conceptualBaseManagement',
data() {
return {
query: {
url: queryConceptualBaseManagement,
method: 'post',
queryParam: {},
},
activeName: '1',
tabOptions: [
{ label: '组织机构管理', name: '1' },
{ label: '集成管理', name: '2' },
],
selectRows: {},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
components: { ListPage, SearchForm, TableConfig },
computed: {
formOptions() {
let arr = []
if (this.activeName === '1') {
arr = [
{
label: '机构名称', // label文字
prop: 'orgName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '主体类型', // label文字
prop: 'type', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
},
]
} else {
arr = [
{
label: '事项名称', // label文字
prop: 'orgName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '状态', // label文字
prop: 'type', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
},
]
}
return arr
},
columns() {
let arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
]
if (this.activeName === '1') {
arr = [
...arr,
{
label: '机构名称',
prop: 'orgName',
width: '300px',
},
{
label: '主体类型',
prop: 'createTime',
},
{
label: '上级单位',
// width: '120px',
prop: 'state2',
},
]
} else {
arr = [
...arr,
{
label: '事项名称',
prop: 'orgName',
width: '200px',
},
{
label: '创建人',
prop: 'createMan',
},
{
label: '创建时间',
prop: 'createTime',
},
{
label: '事项描述',
prop: 'des',
},
{
label: '状态',
prop: 'state',
},
]
}
arr = [
...arr,
{
label: '备注',
prop: 'remark',
},
{
label: '操作',
type: 'operation',
width: '200px',
actionButtons: [
{
title: '编辑',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
},
],
callback: (row, title) => {
// this.fnOperation(row, title)
},
},
]
return arr
},
},
mounted() {},
methods: {
fnAdd() {
this.dialogTitle = '新增需求'
this.rowData = {}
this.visible = true
},
// 处理所需材料名称显示
handleFileName(scope) {
const filesValue = JSON.parse(scope.row.filesValue)
if (!filesValue) return
const str = filesValue.map((v) => v.name)
return str.join(',')
},
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
handleClick(tab, event) {
// console.log(tab, event)
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '编辑':
this.fnEdit(row)
break
case '删除':
this.fnDel(row)
break
case '提交':
this.fnSubmit(row)
break
case '审批':
this.fnApproval(row)
break
case '发布':
this.fnRelease(row)
break
default:
break
}
},
fnRelease(row) {
this.$confirm('是否确认发布?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
state: 1,
filesValue: JSON.parse(row.filesValue),
}
editNeedInfo(params).then((res) => {
if (res.code === 200) {
this.$message.success('发布成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnApproval(row) {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row) {
this.$confirm('是否确认提交?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
approveState: 2,
filesValue: JSON.parse(row.filesValue),
}
editNeedInfo(params).then((res) => {
if (res.code === 200) {
this.$message.success('提交成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnEdit(row) {
this.dialogTitle = '修改需求'
this.rowData = row
this.visible = true
},
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
filesValue: JSON.parse(row.filesValue),
delFlag: 1,
}
editNeedInfo(params).then((res) => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error('删除失败')
}
})
})
.catch(() => {})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
<!--
* @Description: tab1查/online-rev-wr/qyNeedReviewCount tab2系统架构资产 isExtend传0 同步更新调用继承接口isExtend传0
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-21 20:58:31
* @LastEditors: pan
* @LastEditTime: 2024-03-25 14:16:37
-->
<template>
<div class="searchTable">
<list-page>
<template #tabWrap>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<template #subTabWrap>
<el-tabs
v-if="activeName === '1'"
v-model="activeName2_1"
@tab-click="handleSubClick"
>
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in subTabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
<el-tabs v-else v-model="activeName2_2" @tab-click="handleSubClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in subTabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<!-- <template #operationWrap>
<el-button
v-if="activeName === '2'"
icon="el-icon-document-add"
type="primary"
size="medium"
plain
>同步更新</el-button
>
</template> -->
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
>
<template #percent="{ data }">
<span> {{ handlePercent(data) }}</span>
</template>
</table-config>
</template>
</list-page>
</div>
</template>
<script>
// import { getWordImg } from '@/api/index'
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { queryQyNeedReviewCount, queryArcAstSys } from '@/api/interface'
import { exportRiskReport } from '@/api/index'
import { archiPrjReviewEnum, buildType } from '@/utils/dictionary'
// import { str } from './base64'
export default {
name: 'conceptualReview',
data() {
return {
src: '',
selectRows: [],
query: {
url: queryQyNeedReviewCount,
method: 'post',
queryParam: {
countType: 1,
},
},
activeName: '1',
tabOptions: [
{ label: '概设统计分析', name: '1' },
{ label: '总体架构维护', name: '2' },
],
activeName2_1: '1',
subTabOptions1: [
{ label: '各单位概设统计', name: '1' },
{ label: '各批次系统统计', name: '2' },
],
activeName2_2: '1',
subTabOptions2: [
{ label: '业务架构', name: '1' },
{ label: '应用架构', name: '2' },
{ label: '数据架构', name: '3' },
{ label: '技术架构', name: '4' },
{ label: '安全架构', name: '5' },
],
archiTypeList: [
'ARCHI_BUSINESS',
'ARCHI_APPLICATION',
'ARCHI_DATA',
'ARCHI_TECHNOLOGY',
'ARCHI_SAFE',
],
}
},
components: {
ListPage,
SearchForm,
TableConfig,
},
computed: {
getCountType() {
if (this.activeName === '1') {
if (this.activeName2_1 === '1') {
return 1
} else {
return 2
}
} else {
return undefined
}
},
subTabOptions() {
if (this.activeName === '1') {
return this.subTabOptions1
} else {
return this.subTabOptions2
}
},
formOptions() {
return [
{
label: '统计时间', // label文字
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请选择', // elementui组件属性
},
]
},
columns() {
let arr = []
if (this.activeName === '1') {
if (this.activeName2_1 === '1') {
arr = [
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位名称', prop: 'manageOrgName' },
{ label: '概设需求数(个)', prop: 'needCount' },
{ label: '概设材料通过数(个)', prop: 'reviewPassCount' },
{ label: '概设通过比(%)', __slotName: 'percent' },
]
} else {
arr = [
{ label: '序号', type: 'index', width: '80px' },
{ label: '批次', prop: 'batName' },
{ label: '项目需求数(个)', prop: 'needCount' },
{ label: '项目通过数(个)', prop: 'reviewPassCount' },
{ label: '项目通过比(%)', __slotName: 'percent' },
]
}
} else {
arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '资产名称', prop: 'assetName' },
{ label: '资产类型(所属元素)', prop: 'eleName' },
{
label: '来源',
prop: 'isExtend',
options: [],
collectionType: true,
},
{ label: '创建人', prop: 'createMan' },
{ label: '创建时间', prop: 'createTime' },
{
label: '操作',
type: 'operation',
width: '200px',
actionButtons: [
{
title: '同步更新',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
],
callback: (row, title) => {},
},
]
}
return arr
},
},
mounted() {},
methods: {
handlePercent(scope) {
const item = scope.row
if (item.reviewPassCount && item.needCount) {
return (item.reviewPassCount / item.needCount).toFixed(2) * 100 + '%'
}
},
// 材料解析
fnMaterialAnalysis() {
if (this.selectRows.length == 0) {
return this.$message.warning('请选择一条数据')
}
// xxx
},
// 导出重复建设风险报告
handlExportRiskReport() {
const params = {
title: '功能重复风险',
comment: '',
}
exportRiskReport(params).then((res) => {
const url = window.URL.createObjectURL(
new Blob([res], { type: 'application/octet-stream' }),
)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `重复建设风险报告.doc`)
document.body.appendChild(link)
link.click()
window.URL.revokeObjectURL(url) // 释放内存
})
},
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
getArchiType() {},
handleClick(tab, event) {
if (this.activeName === '2') {
this.query.url = queryArcAstSys
this.query.queryParam.isExtend = 0
this.query.queryParam.countType = undefined
this.query.queryParam.archiAssetState = 2
this.query.queryParam.archiStage = 2
if (!this.query.queryParam.archiType) {
this.query.queryParam.archiType = this.archiTypeList[0]
}
} else {
this.query.queryParam.archiType = undefined
this.query.url = queryQyNeedReviewCount
this.query.queryParam.isExtend = undefined
this.query.queryParam.archiAssetState = undefined
this.query.queryParam.archiStage = undefined
this.query.queryParam.countType = this.getCountType
}
console.log('refs', this.$refs.searchTable)
this.$refs.searchTable.queryData()
},
handleSubClick(tab, event) {
this.query.queryParam.countType = this.getCountType
if (this.activeName === '2') {
this.query.queryParam.archiType =
this.archiTypeList[+this.activeName2_2 - 1]
}
this.$refs.searchTable.queryData()
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
<!--
* @Description: tab3: 2word tab4: only+ table tab5: only + word tab6: only + word tab7: only + word tab8: + table tab9: + table
* @Version: 2.0
/prj-need-file/
* "busiId": 项目,
"busiIdType": 1,
* @Autor: pan
* @Date: 2024-03-21 20:58:31
* @LastEditors: pan
* @LastEditTime: 2024-03-22 19:51:11
-->
<template>
<div class="flex-column m-10 w-100 conceptualExamine">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<!-- <img :src="leftSrc" alt="" /> -->
<template v-if="tab !== '8' && tab !== '9'">
<div
class="office w-100 h-100"
v-if="leftContentType === 'onlyoffice'"
>
<vab-only-office
id="office-preview"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
<template v-else>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</template>
</template>
<Tab8Left v-else :tab="tab" @toRemark="toRemark" />
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<div
class="right_container_content flex-1"
v-loading="rightLoading"
element-loading-text="加载中"
>
<div
class="office w-100 h-100"
v-if="rightContentType === 'onlyoffice'"
>
<vab-only-office
id="office-preview2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
<template v-else>
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</template>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="p-l-20 bottom_container_title">{{ examinName }}</span>
</div>
<div class="flex">
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="tab === '8'"
@click="handlExportRiskReport()"
>导出重复建设风险报告</el-button
>
<el-button type="primary" size="medium" @click="fnSave()"
>保存结果</el-button
>
</div>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="输入审查结果"
></el-input>
<template v-if="tab === '1'">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="p-l-20 bottom_container_title">报告规范性</span>
</div>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent2"
v-no-backslash
class="w-100"
placeholder="输入审查结果"
></el-input>
</template>
</div>
</div>
</template>
<script>
import Tab8Left from '@/views/conceptualReview/Tab8Left'
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getReviewNorm,
getQWordTable,
getQWordPic,
saveExamine,
exportRiskReport,
getQWordPic_,
} from '@/api'
export default {
name: 'conceptualExamine',
components: {
Tab8Left,
vabOnlyOffice,
},
data() {
return {
resultContent: '',
resultContent2: '',
tab: '',
examinName: '',
row: {},
leftSrc: '',
leftLoading: false,
rightLoading: false,
leftBaseOptions: [],
rightBaseOptions: [],
leftContentTyp: [],
rightContentType: [],
documentServerUrl: 'http://43.143.211.42:19231/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
},
},
}
},
created() {
this.tab = this.$route.query.tab
this.examinName = this.$route.query.examinName
this.row = JSON.parse(this.$route.query.row)
this.resultContent = this.row.reviewSuggestion || ''
this.leftContentType = this.$route.query.leftContentType
this.rightContentType = this.$route.query.rightContentType
if (this.tab === '8' || this.tab === '9') {
this.getRightContent()
} else {
if (this.leftContentType !== 'onlyoffice') {
this.getLeftContent()
}
if (this.rightContentType !== 'onlyoffice') {
this.getRightContent()
}
}
},
computed: {
getLeftApi() {
if (this.leftContentType === 'word') {
return getReviewNorm
} else if (this.leftContentType === 'img') {
if (this.tab === '2') {
// 王勇接口
return getQWordPic_
} else {
// 李振接口
return getQWordPic
}
} else if (this.leftContentType === 'table') {
return getQWordTable
} else {
return ''
}
},
getRightApi() {
if (this.rightContentType === 'word') {
return getReviewNorm
} else if (this.rightContentType === 'img') {
if (this.tab === '2') {
// 王勇接口
return getQWordPic_
} else {
// 李振接口
return getQWordPic
}
} else if (this.rightContentType === 'table') {
return getQWordTable
} else {
return ''
}
},
},
methods: {
// 带入到备注
toRemark(str) {
this.resultContent = this.resultContent
? this.resultContent + '\n' + str
: str
},
getLeftContent() {
if (!this.getLeftApi) return
this.leftLoading = true
const { needId, prjId, archiPrjReviewEnum } = this.row
const params = {
needId,
prjId,
archiPrjReviewEnum,
}
this.getLeftApi(params).then((res) => {
this.leftLoading = false
if (res.code === 200) {
this.leftBaseOptions = res.data.docParserList.map(
(v) => `data:image/png;base64,${v.docContent}`,
)
}
})
},
getRightContent() {
if (!this.getRightApi) return
this.rightLoading = true
const { needId, prjId, archiPrjReviewEnum } = this.row
const params = {
needId,
prjId,
archiPrjReviewEnum,
}
this.getRightApi(params).then((res) => {
this.rightLoading = false
if (res.code === 200) {
this.rightBaseOptions = res.data.docParserList.map(
(v) => `data:image/png;base64,${v.docContent}`,
)
}
})
},
fnSave() {
const params = {
...this.row,
reviewState: 1,
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveExamine(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
}
})
},
// 导出重复建设风险报告
handlExportRiskReport() {
const params = {
title: '功能重复风险',
comment: this.resultContent,
}
exportRiskReport(params).then((res) => {
const url = window.URL.createObjectURL(
new Blob([res], { type: 'application/octet-stream' }),
)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `重复建设风险报告.doc`)
document.body.appendChild(link)
link.click()
window.URL.revokeObjectURL(url) // 释放内存
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
.conceptualExamine {
height: calc(100% - 20px);
overflow-y: auto;
}
</style>
<template>
<div class="Tab8Left p-10">
<el-card class="box-card m-b-20" shadow="never">
<div slot="header" class="clearfix">
<span>检测范围</span>
</div>
<div class="item" v-for="item in checkList" :key="item.value">
<span>- {{ item.label }}</span>
</div>
</el-card>
<el-input
v-debounce:input="getByKeword"
v-model="keyWord"
class="m-b-10"
placeholder="在相关台账搜索关键字,出结果"
></el-input>
<el-card
class="box-card"
shadow="never"
v-loading="keyWordLoading"
element-loading-text="加载中"
>
<div slot="header" class="clearfix">
<span>检测结果</span>
</div>
<div class="item" v-show="showResult">
<el-alert :closable="false" :title="resultTitle" type="warning" />
<div>其中:</div>
<div v-for="(item, index) in checkList" :key="item.value">
{{ item.label + ':【' + repeatList[index + 1] + '】' }}
</div>
<el-button class="m-t-10" type="primary" @click="toRemark()"
>带入到备注</el-button
>
</div>
</el-card>
</div>
</template>
<script>
import { getDianXingAnLiSelectData, getByKeword } from '@/api/index.js'
export default {
prop: {
tab: {
type: String,
default: '',
},
},
data() {
return {
checkList: [],
repeatList: {
// 0: 50,
// 1: 1,
// 2: 2,
// 3: 3,
},
// once: false,
keyWord: '',
keyWordLoading: false,
}
},
components: {},
computed: {
showResult() {
if (Object.keys(this.repeatList).length) {
return true
}
return false
},
tipsText() {
if (this.tab === '8') {
return `经检测,关键字:${this.keyWord},在系统历史功能、组件台账,功能类别中,总计重复数`
} else {
return `经检测,关键字:${this.keyWord},在数据中台数据台账、主数据台账,数据实体类别中,总计重复数`
}
},
totalNum() {
let num = 0
for (const key in this.repeatList) {
if (Object.hasOwnProperty.call(this.repeatList, key)) {
const val = this.repeatList[key]
num += val
}
}
return num
},
resultTitle() {
return `${this.tipsText}:【${this.totalNum}】`
},
strCancat() {
let str = `关键字:${this.keyWord},总计重复数:【${this.totalNum}】 \n`
this.checkList.forEach((v, i) => {
str += `${v.label}:【${v.num}${
i != this.checkList.length ? '\n' : ''
}`
})
return str
},
},
async mounted() {
this.getDictTypeOptions('check_range', (list) => {
this.checkList = list
})
},
methods: {
getByKeword() {
this.keyWordLoading = true
const checkRange = this.checkList.map((v) => v.value).join(',')
const params = {
keyWord: this.keyWord,
checkRange,
}
getByKeword(params).then((res) => {
this.keyWordLoading = false
if (res.code === 200) {
this.repeatList = res.data
this.checkList = this.checkList.map((v, i) => {
return { ...v, num: res.data[i + 1] }
})
}
})
},
toRemark() {
// if (this.once) {
// return this.$message.warning('已带入到备注,请勿重复操作')
// }
// this.once = true
this.$emit('toRemark', this.strCancat)
},
async getDictTypeOptions(key, callback) {
var dictTypeOptions = []
var storedDic = localStorage.getItem('dic_' + key)
if (storedDic) {
dictTypeOptions = JSON.parse(storedDic)
} else {
const params = { key }
const res = await getDianXingAnLiSelectData(params)
dictTypeOptions = res.data
const jsonStr = JSON.stringify(res.data)
if (jsonStr) {
localStorage.setItem('dic_' + key, jsonStr)
}
}
callback(dictTypeOptions)
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
.clearfix {
text-align: left;
}
.item {
display: flex;
align-items: flex-start;
flex-direction: column;
}
</style>
<template>
<div class="searchTable">
<!-- <img style="width: 300px; height: 300px" :src="src" alt="" /> -->
<list-page>
<template #tabWrap>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<template #subTabWrap>
<el-tabs
v-if="activeName === '2'"
v-model="activeName2"
@tab-click="handleSubClick"
>
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in subTabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<template #operationWrap>
<el-button
v-if="activeName === '1'"
icon="el-icon-document-add"
type="primary"
size="medium"
plain
@click="fnMaterialAnalysis()"
>材料解析</el-button
>
<template v-if="activeName === '2'">
<el-button
icon="el-icon-document-add"
type="primary"
size="medium"
plain
v-if="showBatchBtn"
@click="fnBatchExamine()"
>批量审查</el-button
>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="activeName2 === '1'"
>导出报告</el-button
>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="activeName2 === '4'"
>导出技术偏差分析表</el-button
>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="activeName2 === '8'"
@click="handlExportRiskReport()"
>导出重复建设风险报告</el-button
>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="activeName2 === '9'"
>导出重复录入风险报告</el-button
>
</template>
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
id-key="elementId"
>
</table-config>
</template>
</list-page>
</div>
</template>
<script>
// import { getWordImg } from '@/api/index'
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { queryConceptualReview } from '@/api/interface'
import { exportRiskReport } from '@/api/index'
import { archiPrjReviewEnum, buildType } from '@/utils/dictionary'
// import { str } from './base64'
export default {
name: 'conceptualReview',
data() {
return {
src: '',
constructionTypeOptions: [],
selectRows: [],
query: {
url: queryConceptualReview,
method: 'post',
queryParam: {
reviewEnum: 'TECH_ROUTE',
},
},
activeName: '1',
tabOptions: [
{ label: '概设材料解析', name: '1' },
{ label: '概设材料审查', name: '2' },
],
activeName2: '1',
subTabOptions: [
{ label: '报告规范性', name: '1' },
{ label: '架构遵从', name: '2' },
{ label: '技术路线', name: '3' },
{ label: '功能偏差', name: '4' },
{ label: '系统部署', name: '5' },
{ label: '系统集成', name: '6' },
{ label: '系统安全', name: '7' },
{ label: '功能重复风险', name: '8' },
{ label: '数据重复录入风险', name: '9' },
],
examinName: [
'报告完整性',
'架构遵从关系审查结果',
'合规性检查',
'备注',
'备注',
'备注',
'备注',
'备注',
'备注',
],
activeSubTabItem: {
label: '报告规范性',
value: 'REPORT_NORM',
name: '1',
},
leftContentTypeOptions: [
'onlyoffice',
'img',
'word',
'onlyoffice',
'onlyoffice',
'onlyoffice',
'onlyoffice',
null,
null,
],
rightContentTypeOptions: [
'onlyoffice',
'img',
'word',
'table',
'word',
'word',
'word',
'table',
'table',
'table',
],
}
},
components: {
ListPage,
SearchForm,
TableConfig,
},
computed: {
formOptions() {
return [
{
label: '批次年度', // label文字
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
label: '批次计划', // label文字
prop: 'batName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '需求名称', // label文字
prop: 'needName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '建设类型', // label文字
prop: 'needType', // 字段名
element: 'el-select', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请选择', // elementui组件属性
dictType: 'build_type',
},
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
]
},
columns() {
let arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '批次年度', prop: 'year' },
{ label: '批次名称', prop: 'batName', width: '200px' },
{
label: '需求名称',
width: '300px',
prop: 'needName',
},
{
label: '项目名称',
prop: 'prjName',
width: '320px',
},
]
// 这里处理不同tab下,展示的列也有所不同
if (this.activeName === '1') {
arr = [
...arr,
{
label: '建设类型',
width: '100px',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
},
{ label: '技术路线表', width: '120px', prop: 'buildType1' },
{ label: '架构遵从表', width: '120px', prop: 'buildType2' },
{ label: '功能清单', width: '100px', prop: 'buildType3' },
{ label: '数据实体清单', width: '120px', prop: 'buildType4' },
{ label: '集成系统清单', width: '120px', prop: 'buildType5' },
]
} else {
arr = [
...arr,
{
label: '建设类型',
width: '100px',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
},
]
switch (this.activeName2) {
case '1':
arr = [
...arr,
{ label: '完整性', prop: 'createMan' },
{ label: '规范性', prop: 'createTime', width: '120px' },
{ label: '审查结果', prop: 'reviewSuggestion', width: '120px' },
]
break
case '2':
arr = [
...arr,
{
label: '架构遵从关系审查结果',
prop: 'remark',
width: '220px',
},
]
break
case '3':
arr = [
...arr,
{
label: '合规性检查',
prop: 'reviewSuggestion',
width: '220px',
},
]
break
default:
arr = [
...arr,
{
label: '备注',
prop: 'reviewSuggestion',
width: '220px',
},
]
break
}
arr = [
...arr,
{
label: '操作',
type: 'operation',
width: '100px',
// fixed: 'right',
actionButtons: [
{
title: '审查',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
],
callback: (row, title) => {
this.fnToexamine(row)
},
},
]
}
return arr
},
showBatchBtn() {
const arr = ['1', '2', '3', '4']
if (arr.includes(this.activeName2)) {
return true
}
return false
},
},
mounted() {},
methods: {
// 材料解析
fnMaterialAnalysis() {
if (this.selectRows.length == 0) {
return this.$message.warning('请选择一条数据')
}
// xxx
},
// 导出重复建设风险报告
handlExportRiskReport() {
const params = {
title: '功能重复风险',
comment: '',
}
exportRiskReport(params).then((res) => {
const url = window.URL.createObjectURL(
new Blob([res], { type: 'application/octet-stream' }),
)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `重复建设风险报告.doc`)
document.body.appendChild(link)
link.click()
window.URL.revokeObjectURL(url) // 释放内存
})
},
// 批量审查
fnBatchExamine() {},
// 跳转到审查页面
fnToexamine(row) {
this.$router.push({
path: '/main/conceptualExamine',
query: {
tab: this.activeName2,
examinName: this.examinName[+this.activeName2 - 1],
leftContentType: this.leftContentTypeOptions[+this.activeName2 - 1],
rightContentType: this.rightContentTypeOptions[+this.activeName2 - 1],
row: JSON.stringify({
...row,
archiPrjReviewEnum: this.getArchiPrjReviewEnum(),
}),
},
})
},
getArchiPrjReviewEnum() {
const obj = archiPrjReviewEnum.find(
(v) => v.label === this.activeSubTabItem.label,
)
return obj.value || ''
},
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
handleClick(tab, event) {
// console.log(tab, event)
// this.activeSubTabItem = tab
this.query.queryParam.reviewEnum = this.getArchiPrjReviewEnum()
this.$refs.searchTable.queryData()
},
handleSubClick(tab, event) {
// console.log(tab, event)
this.activeSubTabItem = tab
this.query.queryParam.reviewEnum = this.getArchiPrjReviewEnum()
this.$refs.searchTable.queryData()
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
<!--
* @Description: 修改材料反馈
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-21 14:29:32
* @LastEditors: pan
* @LastEditTime: 2024-03-24 19:05:44
-->
<template>
<div>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="60%"
@close="handleClose()"
@open="fnQueryPrjNeedFile()"
>
<div>
<div style="text-align: left; margin-left: 10px">资料上传:</div>
<el-table :data="tableData" stripe border>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="name"
label="资料类型"
align="center"
></el-table-column>
<el-table-column label="资料名称" align="center">
<template slot-scope="scope">
<el-upload
class="upload-demo"
action="/eadc-shared-ability/oss/upload"
ref="upload"
:on-remove="
(file, fileList) => handleRemove(file, fileList, scope.row)
"
:on-success="
(res, file, fileList) =>
handleFileUploadSuccess(res, file, fileList, scope.row)
"
:limit="1"
:file-list="scope.row.fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button @click="fnOperation()" type="primary" size="mini"
>反馈</el-button
>
</span></el-dialog
>
</div>
</template>
<script>
import { editFeedback } from '@/api'
import { materialOptions } from '@/utils/dictionary'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
tableData: [],
}
},
components: {},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
fnOperation() {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
let params = {
...this.rowData,
busiId: this.rowData.prjId,
busiIdType: 1,
busiFileName: '概要设计说明书',
onlineReviewState: 2,
ideaType: 1,
}
editFeedback(params).then((res) => {
loading.close()
if (res.code === 200) {
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
} else {
this.$message.error(res.msg)
}
})
},
handleClose() {
this.showDialog = false
},
// 文件上传逻辑
handleRemove(file, fileList, row) {
//文件移出
row = []
},
handleFileUploadSuccess(res, file, fileList, row) {
//文件上传
row.fileList = [
{
fileName: file.name,
fileId: file.response.data.fileId,
fileUrl: file.response.data.viewUrl,
},
]
console.log('file', row)
},
fnQueryPrjNeedFile() {
const list = this.rowData.fileList?.split(',')
this.tableData = list.map((v) => {
if (v === '概要设计说明书') {
return {
name: v,
fileList: [],
}
}
})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="30%"
@close="handleClose()"
>
<div>
<Form
ref="addForm"
:form-options="formOptions"
label-width="120px"
></Form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit()" size="mini"
>反 馈</el-button
>
</span></el-dialog
>
</template>
<script>
import Form from '@/components/Form.vue'
import { addConceptualViewOrg } from '@/api'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {}
},
components: {
Form,
},
computed: {
formOptions() {
return [
{
label: '修改完成时间', // label文字
prop: 'excessTime', // 字段名
type: 'datetime',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
element: 'el-date-picker', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
rules: [{ required: true, trigger: 'change', message: '不能为空' }],
span: 24,
},
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
handleSubmit() {
this.$refs['addForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['addForm'].getData()
const params = {
...this.rowData,
...formInfo,
ideaType: 1,
}
console.log('formInfo', formInfo)
addConceptualViewOrg(params).then((res) => {
loading.close()
if (res.code === 200) {
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
} else {
this.$message.error(res.msg)
}
})
})
},
handleClose() {
this.showDialog = false
this.formOptions.forEach((v) => {
v.initValue = ''
})
this.$refs['addForm'].addInitValue()
this.$refs['addForm'].onReset()
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<template>
<div class="flex-column m-10 w-100 conceptualExamine">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审情况</span>
</div>
<div class="left_container_content flex-1">
<OnlineReviewLeft />
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<div
class="right_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="p-lr-20 bottom_container_title">评审结果</span>
<div class="flex-c">
<span class="m-r-10">在线评审状态:</span>
<el-radio v-model="onlineReviewState" :label="1">通过</el-radio>
<el-radio v-model="onlineReviewState" :label="2">不通过</el-radio>
</div>
</div>
<div class="flex">
<el-button type="primary" size="medium" @click="fnSave()"
>保存结果</el-button
>
</div>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="输入审查结果"
></el-input>
</div>
</div>
</template>
<script>
import OnlineReviewLeft from '@/views/conceptualViewOrg/OnlineReviewLeft'
import { getReviewNorm, editConceptualViewOrg, exportRiskReport } from '@/api'
export default {
name: 'OnlineReview',
components: {
OnlineReviewLeft,
},
data() {
return {
resultContent: '',
row: {},
leftLoading: false,
leftBaseOptions: [],
rightBaseOptions: [],
onlineReviewState: 1,
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.resultContent = this.row.reviewSuggestion || ''
// if (this.tab === '8') {
// this.leftLoading = false
// } else {
// this.getReviewNorm()
// }
},
methods: {
getReviewNorm() {
const { needId } = this.row
const params = {
needId,
}
getReviewNorm(params).then((res) => {
if (res.code === 200) {
this.leftLoading = false
this.leftBaseOptions = res.data.docParserList.map(
(v) => `data:image/png;base64,${v.docContent}`,
)
// this.leftSrc = `data:image/png;base64,${res.data.docParserList[0].docContent}`
}
})
},
fnSave() {
const params = {
...this.row,
reviewState: 1,
onlineReviewState: this.onlineReviewState,
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
editConceptualViewOrg(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
.conceptualExamine {
height: calc(100% - 20px);
overflow-y: auto;
}
</style>
<template>
<div class="Tab8Left p-10">
<el-card
class="box-card m-b-20"
v-for="item in cardList"
:key="item.value"
shadow="never"
>
<div slot="header" class="clearfix">
<span class="m-r-20 bold">{{ item.requireName }}</span>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="item.requireName === '功能偏差'"
>导出技术偏差分析表</el-button
>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="item.requireName === '功能重复风险'"
>导出重复建设风险报告</el-button
>
<el-button
icon="el-icon-download"
type="primary"
size="medium"
plain
v-if="item.requireName === '数据重复录入风险'"
>导出重复录入风险报告</el-button
>
</div>
<div class="flex-column" style="text-align: left">
<div v-if="item.requireName === '架构遵从'">架构遵从关系审查结果:</div>
<div v-else-if="item.requireName === '技术路线'">合规性检查结果:</div>
<div v-else>审查结果:</div>
<div>{{ item.reviewSuggestion }}</div>
</div>
</el-card>
</div>
</template>
<script>
import { qyNeedReview } from '@/api/index.js'
import { exportRiskReport } from '@/api'
export default {
data() {
return {
cardList: [],
row: {},
}
},
components: {},
computed: {},
created() {
this.row = JSON.parse(this.$route.query.row)
this.fnQyNeedReview()
},
methods: {
fnQyNeedReview() {
qyNeedReview(this.row).then((res) => {
if (res.code === 200) {
this.cardList = res.data
}
})
},
// 导出重复建设风险报告
handlExportRiskReport() {
const params = {
title: '功能重复风险',
comment: this.resultContent,
}
exportRiskReport(params).then((res) => {
const url = window.URL.createObjectURL(
new Blob([res], { type: 'application/octet-stream' }),
)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `重复建设风险报告.doc`)
document.body.appendChild(link)
link.click()
window.URL.revokeObjectURL(url) // 释放内存
})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
.clearfix {
text-align: left;
}
.item {
display: flex;
align-items: flex-start;
flex-direction: column;
}
.bold {
font-weight: bold;
}
</style>
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="60%"
@close="handleClose()"
@open="handleOpen()"
>
<div>
<el-input
type="textarea"
v-model="comments"
:autosize="{ minRows: 6 }"
placeholder="请输入内容"
></el-input>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit()" size="mini"
>保 存</el-button
>
</span></el-dialog
>
</template>
<script>
import { editConceptualViewOrg } from '@/api'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
comments: '',
baseComments: `1.概要设计技术方案内容完整\n2.概要设计技术方案在架构设计、开发运行、系统集成、部署方式和安全防护设计等方面符合公司信息化总体架构和技术政司 梅文明 2策要求。\n3.项目承建单位在后续开发、测试、上线等阶段,加强所用开源软件的选型评估和安全、技术测试,确保符合公司信息化总体架构、信息安全和信息系统上线运行相关规定。综上所述,本项目概要设计技术方案满足立项建设目标,符合公司信息化总体架构和技术政策要求,能够指导后期详细设计家和研发实施工作。`,
}
},
components: {},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
handleSubmit() {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const params = {
...this.rowData,
reviewSuggestion: this.comments,
ideaType: 2,
}
editConceptualViewOrg(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
}
})
},
handleClose() {
this.showDialog = false
},
handleOpen() {
if (!this.comments) {
this.comments = this.rowData.reviewSuggestion
? this.rowData.reviewSuggestion
: this.baseComments
}
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<template>
<div class="searchTable">
<list-page>
<template #tabWrap>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<!-- <template #operationWrap>
<template v-if="activeName === '2'">
<el-button type="primary" size="medium" plain>正式评审意见</el-button>
<el-button type="primary" size="medium" plain>发送评审意见</el-button>
</template>
</template> -->
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
:key="activeName"
>
</table-config>
</template>
</list-page>
<MaterialPush
title="材料推送"
:visible.sync="materialPushVisible"
:row-data="rowData"
@querySearch="querySearch"
/>
<MaterialFeedback
title="材料反馈"
:visible.sync="materialFeedbackVisible"
:row-data="rowData"
@querySearch="querySearch"
/>
<ReviewComments
title="正式评审意见"
:visible.sync="reviewCommentsVisible"
:row-data="rowData"
@querySearch="querySearch"
/>
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import MaterialPush from './MaterialPush.vue'
import MaterialFeedback from './MaterialFeedback'
import ReviewComments from './ReviewComments.vue'
import { queryConceptualViewOrg } from '@/api/interface'
import { editConceptualViewOrg } from '@/api'
import {
pushStateOptions,
onlineApprovalStatusOptions,
sendStateOptions,
} from '@/utils/dictionary'
export default {
name: 'conceptualViewOrg',
data() {
return {
query: {
url: queryConceptualViewOrg,
method: 'post',
queryParam: {
ideaType: 1,
},
},
activeName: '1',
tabOptions: [
{ label: '概设材料修改', name: '1' },
{ label: '意见生成与流转', name: '2' },
],
selectRows: {},
rowData: {},
materialPushVisible: false,
materialFeedbackVisible: false,
reviewCommentsVisible: false,
}
},
components: {
ListPage,
SearchForm,
TableConfig,
MaterialPush,
MaterialFeedback,
ReviewComments,
},
computed: {
formOptions() {
let arr = [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '需求名称', // label文字
prop: 'needName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '年度', // label文字
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
label: '批次计划', // label文字
prop: 'batName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '创建时间', // label文字
prop: 'createTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
},
]
return arr
},
columns() {
let arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '年度', prop: 'year' },
{ label: '批次名称', prop: 'batName', width: '200px' },
{
label: '需求名称',
width: '300px',
prop: 'needName',
},
{
label: '项目名称',
prop: 'prjName',
width: '320px',
},
{
label: '关联机构',
width: '200px',
prop: 'orgName',
},
{
label: '材料',
width: '200px',
prop: 'fileList',
},
]
if (this.activeName === '1') {
arr = [
...arr,
{
label: '推送状态',
prop: 'state',
options: pushStateOptions,
collectionType: 'state',
},
{
label: '修改剩余时间',
prop: 'createTime',
width: '120px',
},
{
label: '在线评审状态',
width: '120px',
prop: 'onlineReviewState',
options: onlineApprovalStatusOptions,
collectionType: 'approveState',
},
]
} else {
arr = [
...arr,
{
label: '发送状态',
prop: 'sendState',
options: sendStateOptions,
collectionType: 'sendState',
},
]
}
arr = [
...arr,
{
label: '意见内容',
prop: 'remark',
width: '200px',
},
]
if (this.activeName === '1') {
arr = [
...arr,
{
label: '操作',
type: 'operation',
width: '400px',
actionButtons: [
{
title: '材料推送',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '修改材料反馈',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '在线辅助审核',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
} else {
arr = [
...arr,
{
label: '操作',
type: 'operation',
width: '400px',
actionButtons: [
{
title: '正式评审意见',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '发送评审意见',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
}
return arr
},
},
mounted() {},
methods: {
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
handleClick(tab, event) {
this.query.queryParam.ideaType = +this.activeName
// console.log(tab, event)
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '材料推送':
this.fnOpenDialog(row, 'materialPushVisible')
break
case '修改材料反馈':
this.fnOpenDialog(row, 'materialFeedbackVisible')
break
case '在线辅助审核':
this.$router.push({
path: '/main/onlineReview',
query: {
row: JSON.stringify(row),
},
})
break
case '正式评审意见':
this.fnOpenDialog(row, 'reviewCommentsVisible')
break
case '发送评审意见':
this.fnSend(row)
break
default:
break
}
},
fnSend(row) {
this.$confirm('是否确认发布评审意见?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
sendState: 1,
ideaType: 2,
}
editConceptualViewOrg(params).then((res) => {
if (res.code === 200) {
this.$message.success('提交成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnOpenDialog(row, visible) {
this.rowData = row
this[visible] = true
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
<template>
<div>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="60%"
@close="handleClose()"
@open="handleOpen"
>
<div>
<Form ref="addForm" :form-options="formOptions" label-width="120px">
<!-- 选择项目自定义 -->
<template slot="choosePrj" slot-scope="{ data }">
<el-input v-model="prjInfo.prjName" readonly>
<div slot="append" @click="operation('openChoosePrj', data)">
选择项目
</div>
</el-input>
</template>
</Form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit" size="mini"
>提 交</el-button
>
</span></el-dialog
>
<ChoosePrjDialog
@selectData="selectData"
title="选择项目"
:visible.sync="choosePrjVisible"
/>
</div>
</template>
<script>
import Form from '@/components/Form.vue'
import ChoosePrjDialog from './ChoosePrjDialog.vue'
import { addNeedInfo, editNeedInfo } from '@/api'
import { materialOptions } from '@/utils/dictionary'
import { queryBatchPlan } from '@/api/index'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
prjInfo: {
prjName: '',
prjId: '',
prjCode: '',
},
choosePrjVisible: false,
batchPlanManagementList: [],
}
},
components: {
Form,
ChoosePrjDialog,
},
computed: {
formOptions() {
return [
{
label: '批次计划', // label文字
prop: 'batPlanId', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
options: this.batchPlanManagementList,
keyOption: {
label: 'batName',
value: 'batPlanId',
},
filterable: true,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '批次年度', // label文字
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
// initValue: new Date().format('yyyy'), // 字段初始值
placeholder: '请选择', // elementui组件属性
rules: [{ required: true, trigger: 'change', message: '不能为空' }],
},
{
label: '选择项目', // label文字
prop: 'prjName', // 字段名
__slotName: 'choosePrj',
rules: [{ required: true, trigger: 'change', message: '不能为空' }],
},
{
label: '需求名称', // label文字
prop: 'needName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '关联机构', // label文字
prop: 'orgName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '材料清单', // label文字
prop: 'fileList', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
options: materialOptions,
multiple: true,
rules: [{ required: true, trigger: 'change', message: '不能为空' }],
},
{
label: '创建人', // label文字
prop: 'createMan', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
readonly: true,
},
{
label: '创建时间', // label文字
prop: 'createTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
initValue: new Date().format('yyyy-MM-dd'), // 字段初始值
placeholder: '请选择', // elementui组件属性
readonly: true,
},
{
label: '备注', // label文字
prop: 'remark', // 字段名
type: 'textarea',
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
isEdit() {
if (this.title === '修改需求') {
return true
} else {
return false
}
},
},
mounted() {},
methods: {
selectData(data) {
this.prjInfo = data[0]
this.$nextTick(() => {
this.$set(
this.$refs['addForm'].formData,
'prjName',
this.prjInfo.prjName,
)
this.$refs['addForm'].$refs['formRef'].clearValidate('prjName')
})
},
operation() {
this.choosePrjVisible = true
},
handleAddParams() {
const formInfo = this.$refs['addForm'].getData()
// 获取批次计划的id,code ,name
const { batName, batPlanCode, batPlanId } =
this.batchPlanManagementList.find(
(v) => formInfo.batPlanId === v.batPlanId,
) || {}
const params = {
...this.rowData,
...formInfo,
approveState: 1,
needType: 1,
filesValue: undefined,
prjId: this.prjInfo.prjId,
prjCode: this.prjInfo.prjCode,
batName,
batPlanCode,
batPlanId,
}
return params
},
handleSubmit() {
this.$refs['addForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const typeApi = this.isEdit ? editNeedInfo : addNeedInfo
typeApi(this.handleAddParams()).then((res) => {
loading.close()
if (res.code === 200) {
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
} else {
this.$message.error(res.msg)
}
})
})
},
handleClose() {
this.showDialog = false
this.formOptions.forEach((v) => {
if (v.prop === 'createTime') {
v.initValue = new Date().format('yyyy-MM-dd')
} else {
v.initValue = ''
}
})
this.prjInfo = {}
this.$refs['addForm'].addInitValue()
this.$refs['addForm'].onReset()
},
async handleOpen() {
// batchPlanManagementList
const batchRes = await queryBatchPlan({ current: 1, pageSize: 100 })
this.batchPlanManagementList = batchRes.data.records
if (Object.keys(this.rowData).length) {
for (const key in this.prjInfo) {
if (Object.hasOwnProperty.call(this.prjInfo, key)) {
this.prjInfo[key] = this.rowData[key]
}
}
this.$nextTick(() => {
this.$refs['addForm'].$refs['formRef'].clearValidate('prjName')
})
this.formOptions.forEach((v) => {
if (v.prop === 'fileList') {
v.initValue = this.rowData[v.prop].split(',')
} else {
v.initValue = this.rowData[v.prop]
}
})
this.$nextTick(() => {
this.$refs['addForm'].addInitValue()
})
} else {
this.$nextTick(() => {
this.$refs['addForm'].addInitValue()
this.$refs['addForm'].onReset()
})
}
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
::v-deep .el-input-group__append {
background-color: $color-primary;
color: #fff;
cursor: pointer;
}
</style>
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="30%"
@close="handleClose()"
>
<div>
<template>
<el-radio v-model="radio" :label="3">同意</el-radio>
<el-radio v-model="radio" :label="4">不同意</el-radio>
</template>
<Form
ref="approvalForm"
:form-options="formOptions"
label-width="120px"
></Form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit" size="mini"
>提 交</el-button
>
</span></el-dialog
>
</template>
<script>
import Form from '@/components/Form.vue'
import { editNeedInfo } from '@/api/index.js'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
radio: 3,
}
},
components: {
Form,
},
computed: {
formOptions() {
return [
{
label: '意见描述', // label文字
prop: 'remark', // 字段名
type: 'textarea',
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
handleSubmit() {
this.$refs['approvalForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['approvalForm'].getData()
const params = {
...formInfo,
approveState: this.radio,
needId: this.rowData.needId,
state: this.rowData.state,
}
editNeedInfo(params).then((res) => {
loading.close()
if (res.code === 200) {
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
} else {
this.$message.error(res.msg)
}
})
})
},
handleClose() {
this.formOptions.forEach((v) => {
v.initValue = ''
})
this.radio = 3
this.$refs['approvalForm'].addInitValue()
this.$refs['approvalForm'].onReset()
this.showDialog = false
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<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>
<!--
* @Description: 需求提报-保存state 2 提交approveState 2
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-20 17:53:35
* @LastEditors: pan
* @LastEditTime: 2024-03-21 16:03:23
-->
<template>
<div>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="60%"
@close="handleClose()"
@open="fnQueryPrjNeedFile()"
>
<div>
<div style="text-align: left; margin-left: 10px">资料清单:</div>
<el-table :data="tableData" stripe border>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="busiFileName"
label="资料类型"
align="center"
></el-table-column>
<el-table-column label="资料名称" align="center">
<template slot-scope="scope">
<el-upload
class="upload-demo"
action="/eadc-shared-ability/oss/upload"
ref="upload"
:on-remove="
(file, fileList) => handleRemove(file, fileList, scope.row)
"
:on-success="
(res, file, fileList) =>
handleFileUploadSuccess(res, file, fileList, scope.row)
"
:limit="1"
:file-list="scope.row.fileUrl ? [scope.row] : []"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button @click="fnOperation('save')" size="mini">保 存</el-button>
<el-button type="primary" @click="fnOperation('submit')" size="mini"
>提 交</el-button
>
</span></el-dialog
>
</div>
</template>
<script>
import { editNeedInfo, queryPrjNeedFile } from '@/api'
import { materialOptions } from '@/utils/dictionary'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
tableData: [],
}
},
components: {},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
fnOperation(type) {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
let params = {
approveState: this.rowData.approveState,
needId: this.rowData.needId,
state: this.rowData.state,
}
if (type === 'save') {
params = {
...params,
state: 2,
}
} else {
params = {
...params,
approveState: 2,
}
}
editNeedInfo(params).then((res) => {
loading.close()
if (res.code === 200) {
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
} else {
this.$message.error(res.msg)
}
})
},
handleClose() {
this.showDialog = false
},
// 文件上传逻辑
handleRemove(file, fileList, row) {
//文件移出
row = []
},
handleFileUploadSuccess(res, file, fileList, row) {
//文件上传
row = {
fileName: file.name,
fileId: file.response.data.fileId,
fileUrl: file.response.data.viewUrl,
}
console.log('file', row)
},
fnQueryPrjNeedFile() {
console.log('this.rowData', this.rowData)
let busiFileNameList = this.rowData.fileList?.split(',')
const params = {
busiFileNameList,
busiId: this.rowData.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
this.tableData = res.data.map((v) => {
return {
...v,
name: v.fileName,
url: v.fileUrl,
}
})
}
})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<template>
<div class="searchTable">
<list-page>
<template #tabWrap>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
>
</el-tab-pane>
</el-tabs>
</template>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<template #operationWrap>
<el-button
v-if="activeName === '1'"
icon="el-icon-document-add"
type="primary"
size="medium"
plain
@click="fnAdd()"
>新建</el-button
>
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
:key="activeName"
>
</table-config>
</template>
</list-page>
<!-- 新增弹窗 -->
<Add
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
></Add>
<ApprovalDialog
:row-data="rowData"
@querySearch="querySearch"
title="审批"
:visible.sync="approvalVisible"
/>
<DemandSubDialog
:row-data="rowData"
@querySearch="querySearch"
title="需求提报"
:visible.sync="demandSubVisible"
/>
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import Add from './Add.vue'
import ApprovalDialog from './ApprovalDialog.vue'
import DemandSubDialog from '@/views/demandManagement/DemandSubDialog'
import { queryDemandManagement } from '@/api/interface'
import { editNeedInfo } from '@/api'
import { buildType, approvalStatusOptions } from '@/utils/dictionary'
export default {
name: 'demandManagement',
data() {
return {
query: {
url: queryDemandManagement,
method: 'post',
queryParam: {
needType: 1,
},
},
activeName: '1',
tabOptions: [
{ label: '需求发布', name: '1' },
{ label: '需求确认', name: '2' },
],
selectRows: {},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
demandSubVisible: false,
}
},
components: {
ListPage,
SearchForm,
TableConfig,
Add,
ApprovalDialog,
DemandSubDialog,
},
computed: {
formOptions() {
let arr = [
{
label: '需求名称', // label文字
prop: 'needName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '年度', // label文字
prop: 'year', // 字段名
type: 'year',
valueFormat: 'yyyy',
element: 'el-date-picker', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
label: '批次计划', // label文字
prop: 'batName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
]
if (this.activeName === '1') {
arr = [
...arr,
{
label: '创建时间', // label文字
prop: 'createTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
},
]
} else {
arr = [
...arr,
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
]
}
return arr
},
columns() {
let arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '批次年度', prop: 'year' },
{ label: '批次名称', prop: 'batName', width: '200px' },
{
label: '项目名称',
prop: 'prjName',
width: '320px',
},
{
label: '需求名称',
width: '300px',
prop: 'needName',
},
{
label: '关联组织机构',
width: '200px',
prop: 'orgName',
},
{
label: '所需材料',
width: '200px',
prop: 'fileList',
},
]
if (this.activeName === '1') {
arr = [
...arr,
{ label: '创建人', prop: 'createMan' },
{ label: '创建时间', width: '120px', prop: 'createTime' },
{
label: '状态',
prop: 'approveState',
options: approvalStatusOptions,
collectionType: 'approveState',
},
{ label: '备注', prop: 'remark' },
{
label: '操作',
type: 'operation',
width: '440px',
actionButtons: [
{
title: '编辑',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
disabledCallback: (row, title) => {
if (row.approveState != 1) {
return true
}
},
},
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
disabledCallback: (row, title) => {
if (row.approveState != 1) {
return true
}
},
},
{
title: '提交',
size: 'mini',
icon: 'el-icon-circle-check',
type: 'primary',
plain: true,
disabledCallback: (row, title) => {
if (row.approveState != 1) {
return true
}
},
},
{
title: '审批',
size: 'mini',
icon: 'el-icon-s-check',
type: 'primary',
plain: true,
disabledCallback: (row, title) => {
if (row.approveState != 2) {
return true
}
},
},
{
title: '发布',
size: 'mini',
icon: 'el-icon-s-promotion',
type: 'primary',
plain: true,
disabledCallback: (row, title) => {
if (row.approveState == 3 && row.state == 2) {
return false
} else {
return true
}
},
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
} else {
arr = [
...arr,
{
label: '建设类型',
width: '100px',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
},
// { label: '需求状态', prop: 'needType' },
{
label: '审核状态',
prop: 'approveState',
collectionType: 'approvalStatusOptions',
options: approvalStatusOptions,
},
{ label: '备注', prop: 'remark' },
{
label: '操作',
type: 'operation',
width: '300px',
actionButtons: [
{
title: '需求提报',
size: 'mini',
icon: 'el-icon-circle-check',
type: 'primary',
plain: true,
},
{
title: '提交',
size: 'mini',
icon: 'el-icon-circle-check',
type: 'primary',
plain: true,
},
{
title: '审批',
size: 'mini',
icon: 'el-icon-s-check',
type: 'primary',
plain: true,
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
}
return arr
},
},
mounted() {},
methods: {
fnAdd() {
this.dialogTitle = '新增需求'
this.rowData = {}
this.visible = true
},
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
handleClick(tab, event) {
this.query.queryParam.needType = +this.activeName
// console.log(tab, event)
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '编辑':
this.fnEdit(row)
break
case '删除':
this.fnDel(row)
break
case '提交':
this.fnSubmit(row)
break
case '审批':
this.fnApproval(row)
break
case '发布':
this.fnRelease(row)
break
case '需求提报':
this.fnDemandSub(row)
break
default:
break
}
},
fnDemandSub(row) {
this.rowData = row
this.demandSubVisible = true
},
fnRelease(row) {
this.$confirm('是否确认发布?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
needId: row.needId,
state: 1,
approveState: 1,
needType: 2,
}
editNeedInfo(params).then((res) => {
if (res.code === 200) {
this.$message.success('发布成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnApproval(row) {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row) {
this.$confirm('是否确认提交?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
approveState: 2,
needId: row.needId,
state: row.state,
}
editNeedInfo(params).then((res) => {
if (res.code === 200) {
this.$message.success('提交成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnEdit(row) {
this.dialogTitle = '修改需求'
this.rowData = row
this.visible = true
},
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
needId: row.needId,
delFlag: 1,
state: row.state,
}
editNeedInfo(params).then((res) => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error('删除失败')
}
})
})
.catch(() => {})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
......@@ -162,7 +162,7 @@ export default {
placeholder: '请输入内容...',
MENU_CONF: {
uploadImage: {
server: '/api/file/oss/upload',
server: '/eadc-shared-ability/oss/upload',
fieldName: 'file',
allowedFileTypes: ['image/*'],
metaWithUrl: true, // 参数拼接到 url 上
......
......@@ -131,7 +131,7 @@
<template slot-scope="scope">
<el-upload
class="upload-demo"
action="/api/file/oss/upload"
action="/eadc-shared-ability/oss/upload"
ref="upload"
:on-remove="(file, fileList) => handleRemove(file, fileList, scope.row)"
:on-success="(res, file, fileList) => handleFileUploadSuccess(res, file, fileList, scope.row)"
......
......@@ -115,7 +115,7 @@
<!-- <input @change="fileUpload" type="file" /> -->
<el-upload
class="upload-demo"
action="/api/file/oss/upload"
action="/eadc-shared-ability/oss/upload"
ref="upload"
:on-remove="handleRemove"
:on-success="handleFileUploadSuccess"
......
......@@ -6,32 +6,62 @@
<el-select v-model="select1" class="leftSelect">
<el-option label="本项目-安全防护方案.pdf" value="1"></el-option>
</el-select>
<div class="left_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
<div class="right_container">
<el-alert title="评审内容" type="success" :closable="false"></el-alert>
<el-select v-model="select2" class="rightSelect" @change="select2Change">
<el-select
v-model="select2"
class="rightSelect"
@change="select2Change"
>
<!-- <el-option v-for="item in rightSelect" :key="item.viewDetailsId" :label="item.viewDetailName" :value="item.viewDetailsId"></el-option> -->
<el-option label="系统架构-概设阶段架构设计-安全架构视图" value="1"></el-option>
<el-option
label="系统架构-概设阶段架构设计-安全架构视图"
value="1"
></el-option>
</el-select>
<div style="height: calc(100% - 40px);overflow-y: auto;">
<div style="height: calc(100% - 40px); overflow-y: auto">
<div v-for="item in rightImageArray" :key="item.viewDetailsId">
<img :src="item.metaModelSvg" alt="">
<img :src="item.metaModelSvg" alt="" />
<el-divider></el-divider>
</div>
</div>
</div>
</div>
<div class="bottom_container">
<div style="padding-right: 20px;text-align: left;margin: 15px 0;display: flex;align-items: center;justify-content: space-between;">
<div
style="
padding-right: 20px;
text-align: left;
margin: 15px 0;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<div>
<el-divider direction="vertical"></el-divider>
<span style="margin-right: 50px;">备注</span>
<span style="margin-right: 50px">备注</span>
<!-- <el-radio v-model="radio" label="1">通过</el-radio>
<el-radio v-model="radio" label="0">不通过</el-radio> -->
</div>
<el-button type="primary" size="medium" @click="saveSuggestion">保存备注</el-button>
<el-button type="primary" size="medium" @click="saveSuggestion"
>保存备注</el-button
>
</div>
<el-input type="textarea" :rows="4" v-model="textarea" style="width: 98%;"></el-input>
<el-input
type="textarea"
:rows="4"
v-model="textarea"
style="width: 98%"
></el-input>
</div>
</div>
</template>
......@@ -40,13 +70,14 @@
import {
getReviewArchiFollowCheckRightGraph,
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
export default {
name: 'tab1',
components: {
vabOnlyOffice,
},
data() {
return {
......@@ -57,41 +88,82 @@ export default {
rightImageArray: [],
rightImageSrc: null,
prjId: null,
rightSelect: []
};
rightSelect: [],
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: 'f0db25df77',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.103:7005/downloadFile/289',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.103:7005/callback?fileId=289',
},
mounted(){
this.prjId = this.$route.query.prjId;
},
}
},
mounted() {
this.prjId = this.$route.query.prjId
this.getRightGraph(5);
this.getDetails();
this.getRightGraph(5)
this.getDetails()
},
methods: {
getDetails() {//查看详情,从表格跳转过来的
getDetails() {
//查看详情,从表格跳转过来的
const params = {
archiPrjReviewEnum: 'SECURITY_ARCHITECTURE_CONFORMANCE',
reviewEnum: 'SECURITY_ARCHITECTURE_CONFORMANCE',
prjId: this.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then(res => {
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code == 200) {
this.textarea = res.data.reviewSuggestion;
this.textarea = res.data.reviewSuggestion
}
})
},
getRightGraph(archiBelongId) {//获取右侧图片
getRightGraph(archiBelongId) {
//获取右侧图片
const params = {
archiBelongId: archiBelongId,
prjId: this.prjId,
archiStage: 3
archiStage: 3,
}
getReviewArchiFollowCheckRightGraph(params).then(res => {
getReviewArchiFollowCheckRightGraph(params).then((res) => {
if (res.code == 200) {
if(res.data.length > 0) {
res.data.map(item => {
item.metaModelSvg = 'data:image/svg+xml;base64,'+ item.metaModelSvg;
if (res.data.length > 0) {
res.data.map((item) => {
item.metaModelSvg =
'data:image/svg+xml;base64,' + item.metaModelSvg
})
this.rightImageArray = res.data;
this.rightImageArray = res.data
// this.rightSelect = res.data;
// this.select2 = res.data[0].viewDetailsId;
// this.rightImageSrc = 'data:image/svg+xml;base64,'+ res.data[0].metaModelSvg;
......@@ -99,86 +171,86 @@ export default {
}
})
},
select2Change(data) {//右侧下拉框选择
const res = this.rightSelect.find(item => item.viewDetailsId == data);
select2Change(data) {
//右侧下拉框选择
const res = this.rightSelect.find((item) => item.viewDetailsId == data)
// this.rightImageSrc = 'data:image/svg+xml;base64,'+ res.metaModelSvg;
},
saveSuggestion() {//保存
saveSuggestion() {
//保存
const params = {
"archiPrjReviewEnum": "SECURITY_ARCHITECTURE_CONFORMANCE",
"prjId": this.prjId,
"reviewState": this.radio,
"reviewSuggestion": this.textarea
reviewEnum: 'SECURITY_ARCHITECTURE_CONFORMANCE',
prjId: this.prjId,
reviewState: this.radio,
reviewSuggestion: this.textarea,
}
saveReviewArchiFollowCheckRightSuggestion(params).then(res => {
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
if (res.code == 200) {
Message({
type: "success",
type: 'success',
message: '保存成功',
});
}else {
})
} else {
Message({
type: "error",
type: 'error',
message: res.msg,
});
}
})
}
}
})
},
},
}
</script>
<style scoped>
.tab1{
.tab1 {
height: 100%;
}
.content{
}
.content {
display: flex;
height: 77%;
}
.leftSelect{
}
.leftSelect {
position: absolute;
top: 44px;
left: 22px;
width: 400px;
}
.rightSelect{
}
.rightSelect {
position: absolute;
top: 44px;
left: 22px;
width: 400px;
}
.el-button--primary{
background: rgba(13,134,127,1);
}
.el-button--primary {
background: rgba(13, 134, 127, 1);
color: #fff;
border: 0;
}
/deep/ .el-alert--success.is-light{
background-color: #D5F5F3;
}
/deep/ .el-alert--success.is-light {
background-color: #d5f5f3;
color: #000;
}
/deep/ .el-divider--vertical{
}
/deep/ .el-divider--vertical {
width: 4px;
background-color: #0D867F;
}
.left_container{
background-color: #0d867f;
}
.left_container {
width: 49%;
border: 1px solid #ccc;
margin-right: 1%;
position: relative;
}
.right_container{
}
.right_container {
width: 49%;
border: 1px solid #ccc;
position: relative;
}
.rightImageContainer{
}
.rightImageContainer {
position: absolute;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
}
.bottom_container{
}
}
.bottom_container {
}
</style>
......@@ -69,7 +69,7 @@ export default {
methods: {
getDetails() {//查看详情,从表格跳转过来的
const params = {
archiPrjReviewEnum: 'DEPLOYMENT_ARCHITECTURE_REVIEW',
reviewEnum: 'DEPLOYMENT_ARCHITECTURE_REVIEW',
prjId: this.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then(res => {
......@@ -105,7 +105,7 @@ export default {
},
saveSuggestion() {//保存
const params = {
"archiPrjReviewEnum": "DEPLOYMENT_ARCHITECTURE_REVIEW",
"reviewEnum": "DEPLOYMENT_ARCHITECTURE_REVIEW",
"prjId": this.prjId,
"reviewState": this.radio,
"reviewSuggestion": this.textarea
......
......@@ -70,7 +70,7 @@ export default {
methods: {
getDetails() {//查看详情,从表格跳转过来的
const params = {
archiPrjReviewEnum: 'TECHNICAL_ARCHITECTURE_CONFORMANCE',
reviewEnum: 'TECHNICAL_ARCHITECTURE_CONFORMANCE',
prjId: this.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then(res => {
......@@ -106,7 +106,7 @@ export default {
},
saveSuggestion() {//保存
const params = {
"archiPrjReviewEnum": "TECHNICAL_ARCHITECTURE_CONFORMANCE",
"reviewEnum": "TECHNICAL_ARCHITECTURE_CONFORMANCE",
"prjId": this.prjId,
"reviewState": this.radio,
"reviewSuggestion": this.textarea
......
......@@ -70,7 +70,7 @@ export default {
methods: {
getDetails() {//查看详情,从表格跳转过来的
const params = {
archiPrjReviewEnum: 'APPLICATION_ARCHITECTURE_CONFORMANCE',
reviewEnum: 'APPLICATION_ARCHITECTURE_CONFORMANCE',
prjId: this.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then(res => {
......@@ -106,7 +106,7 @@ export default {
},
saveSuggestion() {//保存
const params = {
"archiPrjReviewEnum": "APPLICATION_ARCHITECTURE_CONFORMANCE",
"reviewEnum": "APPLICATION_ARCHITECTURE_CONFORMANCE",
"prjId": this.prjId,
"reviewState": this.radio,
"reviewSuggestion": this.textarea
......
......@@ -70,7 +70,7 @@ export default {
methods: {
getDetails() {//查看详情,从表格跳转过来的
const params = {
archiPrjReviewEnum: 'PHYSICAL_DATA_ARCHITECTURE_CONFORMANCE',
reviewEnum: 'PHYSICAL_DATA_ARCHITECTURE_CONFORMANCE',
prjId: this.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then(res => {
......@@ -106,7 +106,7 @@ export default {
},
saveSuggestion() {//保存
const params = {
"archiPrjReviewEnum": "PHYSICAL_DATA_ARCHITECTURE_CONFORMANCE",
"reviewEnum": "PHYSICAL_DATA_ARCHITECTURE_CONFORMANCE",
"prjId": this.prjId,
"reviewState": this.radio,
"reviewSuggestion": this.textarea
......
......@@ -9,7 +9,7 @@
lazy
>
<keep-alive>
<component :is="componentTag"></component>
<component :is="item.componentTag"></component>
</keep-alive>
</el-tab-pane>
</el-tabs>
......@@ -22,6 +22,7 @@ import Tab2 from './tab2.vue'
import Tab3 from './tab3.vue'
import Tab4 from './tab4.vue'
import Tab5 from './tab5.vue'
import Tab6 from './tab6.vue'
export default {
name: 'reviewArchiPoliticeCheckDetails',
components: {
......@@ -30,17 +31,18 @@ export default {
Tab3,
Tab4,
Tab5,
Tab6,
},
data() {
return {
activeName: '',
tabOptions: [
{ label: '运安符合性审查', name: '1' },
{ label: '功能满足审查', name: '2' },
{ label: '运行可靠性审查', name: '3' },
{ label: '系统实用性审查', name: '4' },
{ label: '系统安全性审查', name: '5' },
{ label: '资源复用性审查', name: '6' },
{ label: '运安符合性审查', name: '1', componentTag: 'Tab1' },
{ label: '功能满足审查', name: '2', componentTag: 'Tab2' },
{ label: '运行可靠性审查', name: '3', componentTag: 'Tab3' },
{ label: '系统实用性审查', name: '4', componentTag: 'Tab4' },
{ label: '系统安全性审查', name: '5', componentTag: 'Tab5' },
{ label: '资源复用性审查', name: '6', componentTag: 'Tab6' },
],
componentTag: '',
}
......@@ -49,16 +51,16 @@ export default {
const { name } = this.$route.query
if (name) {
this.activeName = name
this.componentTag = `tab${name}`
// this.componentTag = `tab${name}`
} else {
this.activeName = '1'
this.componentTag = 'tab1'
// this.componentTag = 'tab1'
}
},
methods: {
handleClick(tab, event) {
console.log(tab, event)
this.componentTag = `tab${+tab.index + 1}`
// console.log(tab, event)
// this.componentTag = `tab${+tab.index + 1}`
},
},
}
......
......@@ -2,19 +2,28 @@
// 详情部分样式
.content {
flex: 1;
min-height: 400px;
.left_container,
.right_container {
width: 50%;
position: relative;
&_title {
height: 38px;
display: flex;
align-items: center;
font-size: 13px;
font-size: 14px;
background: #dbf4f3;
}
&_content {
border: 1px solid #ccc;
border-top: none;
min-height: 0;
overflow-y: auto;
}
.select-title {
position: absolute;
top: 44px;
left: 22px;
}
}
.icon {
......@@ -22,7 +31,11 @@
font-size: 18px;
}
}
.tab-component {
overflow-y: auto;
}
.bottom_container {
margin-bottom: 10px;
&_title {
position: relative;
&::before {
......
......@@ -31,7 +31,9 @@ import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { getDianXingAnLiSelectData } from '@/api/index.js'
// import { getDianXingAnLiSelectData } from '@/api/index.js'
import { queryAppArchiControlRequirements } from '@/api/interface'
import { prjPlanClass, buildType } from '@/utils/dictionary'
export default {
name: 'batchPlanManagement',
components: {
......@@ -44,7 +46,7 @@ export default {
constructionTypeOptions: [],
selectRows: [],
query: {
url: '/network/ele/',
url: queryAppArchiControlRequirements,
method: 'post',
queryParam: {},
},
......@@ -55,32 +57,31 @@ export default {
return [
{
label: '单位', // label文字
prop: 'username', // 字段名
prop: 'manageOrgId', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '部门', // label文字
prop: 'username1', // 字段名
prop: 'manageDeptId', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '系统名称', // label文字
prop: 'username2', // 字段名
prop: 'appName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '建设类型', // label文字
prop: 'username3', // 字段名
prop: 'buildType', // 字段名
element: 'el-select', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
options: this.constructionTypeOptions,
dictType: 'build_type',
},
]
......@@ -89,20 +90,30 @@ export default {
return [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'elementName' },
{ label: '部门', prop: 'archiLevelName' },
{ label: '系统名称', width: '280px', prop: 'archiBelongName' },
{ label: '建设类型', prop: 'eaLevel' },
{ label: '项目名称', width: '295px', prop: 'content' },
{ label: '是否续建', prop: 'version1' },
{ label: '承建单位', prop: 'version2' },
{ label: '单位', prop: 'manageOrgId' },
{ label: '部门', prop: 'manageDeptId' },
{ label: '系统名称', width: '280px', prop: 'appName' },
{
label: '建设类型',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
},
{ label: '项目名称', width: '295px', prop: 'prjName' },
{
label: '是否续建',
prop: 'prjPlanClass',
options: prjPlanClass,
collectionType: 'prjPlanClass',
},
{ label: '承建单位', prop: 'buildOrg' },
{
label: '运安符合性审查',
prop: 'version3',
type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }],
callback: (row, title) => {
this.fnToDetailsTab('1')
this.fnToDetailsTab('1', row.prjId)
},
},
{
......@@ -111,7 +122,7 @@ export default {
type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }],
callback: (row, title) => {
this.fnToDetailsTab('2')
this.fnToDetailsTab('2', row.prjId)
},
},
{
......@@ -120,7 +131,7 @@ export default {
type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }],
callback: (row, title) => {
this.fnToDetailsTab('3')
this.fnToDetailsTab('3', row.prjId)
},
},
{
......@@ -129,7 +140,7 @@ export default {
type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }],
callback: (row, title) => {
this.fnToDetailsTab('4')
this.fnToDetailsTab('4', row.prjId)
},
},
{
......@@ -138,7 +149,7 @@ export default {
type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }],
callback: (row, title) => {
this.fnToDetailsTab('5')
this.fnToDetailsTab('5', row.prjId)
},
},
{
......@@ -147,22 +158,13 @@ export default {
type: 'operation',
actionButtons: [{ title: '查看', type: 'text' }],
callback: (row, title) => {
this.fnToDetailsTab('6')
this.fnToDetailsTab('6', row.prjId)
},
},
]
},
},
created() {
const params = {
key: 'build_type',
}
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
this.constructionTypeOptions = res.data
}
})
},
created() {},
methods: {
// 表格勾选的数据
selectionChange(data) {
......@@ -182,17 +184,22 @@ export default {
if (this.selectRows.length > 1) {
return this.$message.warning('只能选择一条数据')
}
const { name, prjId } = this.selectRows[0]
this.$router.push({
path: '/main/reviewArchiPoliticeCheckDetails',
query: {},
query: {
name,
prjId,
},
})
},
// 跳转详情指定tab
fnToDetailsTab(name) {
fnToDetailsTab(name, prjId) {
this.$router.push({
path: '/main/reviewArchiPoliticeCheckDetails',
query: {
name,
prjId,
},
})
},
......
<template>
<div class="tab1 flex-column h-100">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">123</div>
<div class="left_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab1-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<div class="right_container_content flex-1">123</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab1-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
</div>
<div class="bottom_container">
......@@ -30,7 +51,9 @@
></el-option>
</el-select>
</div>
<el-button type="primary" size="medium">保存结果</el-button>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
......@@ -38,35 +61,115 @@
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import { getArchiViewManageTable } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab1',
components: {},
components: { vabOnlyOffice },
data() {
return {
resultContent: '',
isMeet: '',
isMeet: null,
selectOptions: [
{
label: '是',
value: '1',
value: 1,
},
{
label: '否',
value: '0',
value: 0,
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
},
},
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
prjId: this.$route.query.prjId,
reviewState: this.isMeet,
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
mounted() {},
methods: {},
}
</script>
<style lang="scss" scoped>
......
<template>
<div class="tab2">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab2-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab2-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
<div class="label m-r-10">是否满足用户实际要求:</div>
<el-select v-model="isMeet" class="leftSelect">
<el-option
v-for="item in selectOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab2',
components: {
},
components: { vabOnlyOffice },
data() {
return {
};
resultContent: '',
isMeet: null,
selectOptions: [
{
label: '是',
value: 1,
},
mounted(){
{
label: '否',
value: 0,
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
},
},
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import './index.scss';
</style>
<template>
<div class="tab3">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab3-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab3-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab3',
components: {
},
components: { vabOnlyOffice },
data() {
return {
};
resultContent: '',
isMeet: '',
selectOptions: [
{
label: '是',
value: '1',
},
mounted(){
{
label: '否',
value: '0',
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
},
},
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import './index.scss';
</style>
<template>
<div class="tab4">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab4-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab4-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab4',
components: {
},
components: { vabOnlyOffice },
data() {
return {
};
resultContent: '',
isMeet: '',
selectOptions: [
{
label: '是',
value: '1',
},
mounted(){
{
label: '否',
value: '0',
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
},
},
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import './index.scss';
</style>
<template>
<div class="tab5">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab5-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab5-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab5',
components: {
},
components: { vabOnlyOffice },
data() {
return {
};
resultContent: '',
isMeet: '',
selectOptions: [
{
label: '是',
value: '1',
},
mounted(){
{
label: '否',
value: '0',
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
},
},
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import './index.scss';
</style>
<template>
<div class="tab6">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab6-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
<vab-only-office
id="office-preview-tab6-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
<div class="label m-r-10">是否达到重复利用以及双轨运行要求:</div>
<el-select v-model="isMeet" class="leftSelect">
<el-option
v-for="item in selectOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab6',
components: {
},
components: { vabOnlyOffice },
data() {
return {
};
resultContent: '',
isMeet: '',
selectOptions: [
{
label: '是',
value: '1',
},
mounted(){
{
label: '否',
value: '0',
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
},
},
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'RESOURCE_REUSABILITY_REVIEW',
prjId: this.$route.query.prjId,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
handleSave() {
const params = {
reviewEnum: 'RESOURCE_REUSABILITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style scoped>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import './index.scss';
</style>
<template>
<div class="reviewSituationDetails">
<el-tabs>
<el-tab-pane label="一致性评审">
<Tab1></Tab1>
</el-tab-pane>
<el-tab-pane label="架构遵从">
<Tab2></Tab2>
</el-tab-pane>
<el-tab-pane label="关键技术深度评审">
<Tab3></Tab3>
</el-tab-pane>
<el-tab-pane label="功能深度评审">
<Tab4></Tab4>
</el-tab-pane>
<el-tab-pane label="数据深度评审">
<Tab5></Tab5>
<div class="reviewArchiPoliticeCheckDetails">
<el-tabs class="m-lr-10" v-model="activeName" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.name"
v-for="item in tabOptions"
:key="item.name"
lazy
>
<keep-alive>
<component :is="item.componentTag"></component>
</keep-alive>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import Tab1 from './tab1.vue';
import Tab2 from './tab2.vue';
import Tab3 from './tab3.vue';
import Tab4 from './tab4.vue';
import Tab5 from './tab5.vue';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
import {
saveArchiViewManageCardDetails
} from '@/api/index.js';
export default {
import Tab1 from './tab1.vue'
import Tab2 from './tab2.vue'
import Tab3 from './tab3.vue'
import Tab4 from './tab4.vue'
import Tab5 from './tab5.vue'
export default {
name: 'reviewSituationDetails',
components: {
Tab1,
......@@ -43,64 +33,38 @@
},
data() {
return {
routerId: null,
};
},
mounted(){
activeName: '1',
tabOptions: [
{ label: '一致性评审', name: '1', componentTag: 'Tab1' },
{ label: '架构遵从', name: '2', componentTag: 'Tab2' },
{ label: '关键技术深度评审', name: '3', componentTag: 'Tab3' },
{ label: '功能深度评审', name: '4', componentTag: 'Tab4' },
{ label: '数据深度评审', name: '5', componentTag: 'Tab5' },
],
componentTag: '',
}
},
created() {},
methods: {
}
}
handleClick(tab, event) {
// console.log(tab, event)
// this.componentTag = `tab${+tab.index + 1}`
},
},
}
</script>
<style>
.confirmClass{
background-color: #0D867F !important;
}
.el-message-box__content{
padding: 60px 15px 60px 15px;
}
</style>
<style scoped>
.el-tabs{
<style lang="scss" scoped>
@import '@/styles/common.scss';
.reviewArchiPoliticeCheckDetails {
width: 100%;
& > div {
height: 100%;
}
/deep/ .el-tabs__item.is-active {
color: #0D867F;
}
/deep/ .el-tabs__item:hover{
color: #0D867F;
}
/deep/ .el-tabs__active-bar{
background-color: #0D867F;
}
/deep/ .el-tabs__content{
height: calc(100% - 38px);
padding: 0;
}
.el-tab-pane{
/deep/ .el-tabs__content {
height: calc(100% - 55px);
.el-tab-pane {
height: 100%;
}
.reviewSituationDetails{
width: 100%;
height: 100%;
display: flex;
position: relative;
}
/deep/ .el-dialog__header{
background-color: #0D867F;
text-align: left;
}
/deep/ .el-dialog__title{
color: #fff;
}
/deep/ .el-dialog__close {
color: #fff;
}
.greenButton{
background-color: #0D867F;
color: #fff;
}
}
</style>
<template>
<div class="reviewSituation">
<div class="table_container">
<div class="search_menu">
<div class="search_menu_item_container">
<div class="search_menu_item">
<span class="search_title">单位</span>
<el-select v-model="searchParams.let1" placeholder="请选择" class="search_item">
<el-option v-for="item in fuHeDu" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
<div class="search_menu_item">
<span class="search_title">部门</span>
<el-select v-model="searchParams.let2" placeholder="请选择" class="search_item">
<el-option v-for="item in fuHeDu" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
<div class="search_menu_item">
<span class="search_title">系统名称</span>
<el-select v-model="searchParams.let3" placeholder="请选择" class="search_item">
<el-option v-for="item in fuHeDu" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
<div class="search_menu_item">
<span class="search_title">建设类型</span>
<el-select v-model="searchParams.let4" placeholder="请选择" class="search_item">
<el-option v-for="item in fuHeDu" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
</div>
<div class="search_menu_btn_container">
<div class="query_btn" @click="search_table">
<img class="btn_icon" src="@/assets/archi-ele-list/search.png" alt="" />
<p>查询</p>
</div>
<div class="reset_btn" @click="reset">
<img class="btn_icon" src="@/assets/archi-ele-list/reset.png" alt="" />
<p>重置</p>
</div>
</div>
</div>
<div class="search_btn">
<el-button type="primary" size="medium" @click="toDetails">评审情况(概要设计)</el-button>
</div>
<el-table :height="tableHeight" v-loading="loading" @selection-change="select_table_rows" :data="tableData" stripe border>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
<el-table-column prop="deptName" label="单位" align="center"></el-table-column>
<el-table-column prop="startTime" label="部门" align="center"></el-table-column>
<el-table-column prop="policyName" label="系统名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="policyContent" label="建设类型" align="center"></el-table-column>
<el-table-column prop="policyContent" label="项目名称" align="center"></el-table-column>
<el-table-column prop="policyContent" label="是否续建" align="center"></el-table-column>
<el-table-column prop="policyContent" label="承建单位" align="center"></el-table-column>
<el-table-column prop="policyContent" label="项目经理" align="center"></el-table-column>
<el-table-column prop="conformCount" label="一致性评审" align="center">
<template slot-scope="scope">
<div>
{{ scope.row.conformCount }}%
</div>
<div class="searchTable">
<list-page>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
</el-table-column>
<el-table-column prop="usefulCount" label="架构遵从" align="center"></el-table-column>
<el-table-column prop="remark" label="关键技术深度评审" align="center"></el-table-column>
<el-table-column prop="remark" label="功能深度评审" align="center"></el-table-column>
<el-table-column prop="remark" label="数据深度评审" align="center"></el-table-column>
</el-table>
<!-- <el-pagination
background
layout="prev, pager, next"
:total="50">
</el-pagination> -->
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pager.current"
:page-sizes="pager.sizes"
:page-size="pager.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pager.total">
</el-pagination>
</div>
<el-dialog
:title="is_add_edit == 'add' ? '新建字典' : '编辑字典'"
:visible.sync="add_dialog"
:center="false"
:close-on-click-modal="false"
width="60%">
<el-form :model="ruleForm" ref="form" :rules="rules" style="display: flex;flex-wrap: wrap;">
<el-form-item label="字典名称:" prop="let1">
<el-input v-no-backslash v-model="ruleForm.let1" maxlength="100"></el-input>
</el-form-item>
<el-form-item label="字典标识:" prop="let2">
<el-input v-no-backslash v-model="ruleForm.let2" maxlength="100"></el-input>
</el-form-item>
<el-form-item class="cross1" label="描述:" prop="let3">
<el-input v-no-backslash v-model="ruleForm.let3" type="textarea" :rows="3" maxlength="200" show-word-limit placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="save_dicy">保存</el-button>
<el-button @click="add_dialog = false">取消</el-button>
</span>
</el-dialog>
<!-- 中部操作按钮 -->
<template #operationWrap>
<el-button
icon="el-icon-document-add"
type="primary"
size="medium"
plain
@click="toDetails()"
>评审情况(概要设计)</el-button
>
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
>
</table-config>
</template>
</list-page>
</div>
</template>
<script>
import {
getJiShuZhengCeGuanLianShiYongTable,
getDianXingAnLiSelectData
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { queryPrelDesInspecte } from '@/api/interface'
import { buildType, prjPlanClass, completionStatus } from '@/utils/dictionary'
export default {
name: 'reviewSituation',
components: {
},
data() {
return {
ruleForm: {
let1: '',
let2: '',
let3: '',
},
rules: {
},
add_dialog: false,
is_add_edit: 'add',
tableData: [],
loading: false,
search_select1: [],
pager: {
current: 1,
sizes: [10, 20, 50, 100, 200],
size: 10,
total: 20 //总条数
},
tableHeight: null,
searchParams: {
let1: null,
let2: null,
let3: null,
let4: null,
},
fuHeDu: [],
selectRows: []
};
query: {
url: queryPrelDesInspecte,
method: 'post',
queryParam: {},
},
mounted(){
window.addEventListener('resize', () => {
this.set_table_height();
})
this.set_table_height();
this.get_table();
this.get_fu_he_du_select().then(res => {
this.fuHeDu = res;
})
selectRows: [],
}
},
components: {
ListPage,
SearchForm,
TableConfig,
},
computed: {
formOptions() {
let arr = [
{
label: '单位', // label文字
prop: 'manageOrgId', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '部门', // label文字
prop: 'manageDeptId', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '系统名称', // label文字
prop: 'appName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '建设类型', // label文字
prop: 'buildType', // 字段名
element: 'el-select', // 指定elementui组件
initValue: undefined, // 字段初始值
placeholder: '请选择', // elementui组件属性
dictType: 'build_type',
},
]
return arr
},
columns() {
let arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageOrgId' },
{ label: '部门', prop: 'manageDeptId', width: '200px' },
{
label: '系统名称',
prop: 'appName',
width: '320px',
},
{
label: '建设类型',
width: '100px',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
},
{
label: '项目名称',
width: '200px',
prop: 'prjName',
},
{
label: '是否续建',
width: '100px',
prop: 'prjPlanClass',
options: prjPlanClass,
collectionType: 'prjPlanClass',
},
{
label: '承建单位',
width: '200px',
prop: 'buildOrg',
},
{
label: '项目经理',
prop: 'projectManager',
},
{
label: '一致性评审',
prop: 'conformanceReview',
options: completionStatus,
collectionType: true,
emptyToNum: 0,
},
{
label: '架构遵从',
prop: 'architecturalCompliance',
options: completionStatus,
collectionType: true,
emptyToNum: 0,
},
{
label: '关键技术深度评审',
prop: 'cruxTechReview',
options: completionStatus,
collectionType: true,
emptyToNum: 0,
},
{
label: '功能深度评审',
prop: 'funcDepthReview',
options: completionStatus,
collectionType: true,
emptyToNum: 0,
},
{
label: '数据深度评审',
prop: 'dataDepthReview',
options: completionStatus,
collectionType: true,
emptyToNum: 0,
},
]
return arr
},
},
mounted() {},
methods: {
select_table_rows(data){//表格的勾选
this.selectRows = data;
},
toDetails() {
if(this.selectRows.length == 0) {
Message({
type: 'warning',
message: '请选择一条数据!'
});
return;
if (this.selectRows.length == 0) {
return this.$message.warning('请选择一条数据!')
}
if(this.selectRows.length >1) {
Message({
type: 'warning',
message: '只能选择一条数据!'
});
return;
if (this.selectRows.length > 1) {
return this.$message.warning('只能选择一条数据!')
}
this.$router.push( `/main/reviewSituationDetails`, () => {}, () => {} );
this.$router.push({
path: '/main/reviewSituationDetails',
query: {
row: JSON.stringify(this.selectRows[0]),
},
save_dicy() {//保存字典
this.$refs.form.validate(valid => {
if(valid) {
}else {
return false;
}
});
},
get_fu_he_du_select() {//符合度下拉
const params = {
key: "tech_compliance"
}
return new Promise((resolve, reject) => {
getDianXingAnLiSelectData(params).then(res => {
if(res.code == 200) {
resolve(res.data);
}
})
})
},
set_table_height() {//动态设置表格高度
const table_container_height = $(".table_container").height();
const search_menu_height = $(".search_menu").height();
const search_btn_height = $(".search_btn").outerHeight(true);
this.tableHeight = table_container_height - search_menu_height - search_btn_height - 90 + 'px';
},
search_table() {//搜索
this.pager.current = 1;
this.get_table();
},
reset() {//重置
this.searchParams.let1 = null;
this.searchParams.let2 = null;
this.searchParams.let3 = null;
this.searchParams.let4 = null;
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
// 每页条数改变
handleSizeChange(val) {
this.pager.current = 1;
this.pager.size = val;
this.get_table();
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
//当前页码改变
handleCurrentChange(val) {
this.pager.current = val;
this.get_table();
},
get_table() {//查询表格数据
this.loading = true;
const params = {
"policyName": this.searchParams.let1,
"conformCount": this.searchParams.let2,
"conformCount": this.searchParams.let3,
"conformCount": this.searchParams.let4,
"current": this.pager.current,
"pageSize": this.pager.size,
};
getJiShuZhengCeGuanLianShiYongTable(params).then(res => {
this.loading = false;
console.log(res)
// res.records.map(item => {
// const startTime_year = String(new Date(item.startTime).getFullYear());
// const startTime_month = String(new Date(item.startTime).getMonth() + 1);
// let startTime_day = String(new Date(item.startTime).getDay());
// startTime_day = startTime_day.length == 1 ? '0' + startTime_day : startTime_day;
// item['startTime_'] = startTime_year + '-' + startTime_month + '-' + startTime_day;
// });
// this.get_fu_he_du_select().then(res2 => {
// res.records.map(item3 => {
// let result1 = res2.find(item2 => item2.value == item3.conformCount);
// item3['conformCount_'] = result1 ? result1.label : '';
// });
// this.tableData = res.records;
// })
this.tableData = res.records;
this.pager.current = res.current;
this.pager.total = res.total;
this.pager.size = res.size;
// if(res.code == 200) {
// this.loading = false;
// console.log(res)
// // this.tableData = res.
// }
});
},
}
}
</script>
<style>
.confirmClass{
background-color: #0D867F !important;
}
.el-message-box__content{
padding: 60px 15px 60px 15px;
}
</style>
<style scoped>
.version_btn{
display: flex;
align-items: center;
justify-content: center;
width: 84px;
height: 32px;
background: rgba(13,134,127,0.1);
border-radius: 6px 6px 6px 6px;
/* border: 1px solid #0D867F; */
font-size: 14px;
color: #0D867F;
cursor: pointer;
margin-left: 15px;
}
.cancel_version_btn{
display: flex;
align-items: center;
justify-content: center;
width: 104px;
height: 32px;
background: rgba(13,134,127,0.1);
border-radius: 6px 6px 6px 6px;
/* border: 1px solid #0D867F; */
font-size: 14px;
color: #0D867F;
cursor: pointer;
margin-left: 15px;
}
.reviewSituation{
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.el-button--primary{
background: rgba(13,134,127,0.1);
color: #0D867F;
border: 0;
}
/deep/ .el-input-group__append{
background-color: #0D867F;
color: #fff;
cursor: pointer;
}
.search_btn{
width: 100%;
display: flex;
margin-top: 50px;
margin-bottom: 20px;
}
.search_menu{
display: flex;
justify-content: space-between;
margin-bottom: 50px;
}
.search_menu_item_container{
display: flex;
align-items: center;
}
.search_menu_btn_container{
display: flex;
align-items: center;
}
.search_menu_item{
display: flex;
align-items: center;
width: 344px;
}
.search_title{
/* width: 20%; */
flex-shrink: 0;
margin-right: 15px;
}
.search_item{
width: 60%;
}
.query_btn{
display: flex;
align-items: center;
justify-content: center;
width: 76px;
height: 32px;
background: rgba(13,134,127,1);
border-radius: 6px 6px 6px 6px;
border: 1px solid #0D867F;
font-size: 14px;
color: #fff;
margin-right: 10px;
cursor: pointer;
}
.reset_btn{
display: flex;
align-items: center;
justify-content: center;
width: 76px;
height: 32px;
background: rgba(244,244,244,1);
border-radius: 6px 6px 6px 6px;
border: 1px solid #ccc;
font-size: 14px;
color: #666;
cursor: pointer;
}
.btn_icon{
margin-right: 10px;
}
.table_container{
width: 97%;
height: calc(100% - 40px);
margin-top: 20px;
}
.el-pagination{
margin-top: 30px;
}
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active{
background-color: #0D867F;
}
/deep/ .el-dialog__header{
background-color: #0D867F;
text-align: left;
}
/deep/ .el-dialog__title{
color: #fff;
}
/deep/ .el-dialog__close {
color: #fff;
}
.greenButton{
background-color: #0D867F;
color: #fff;
}
.el-form-item{
display: flex;
align-items: center;
width: 33%;
}
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
<template>
<div class="tab1">
<div class="content">
<div class="left_container">
<el-alert title="评审标准" type="success" :closable="false"></el-alert>
<el-select v-model="select1" class="leftSelect">
<el-option label="1" value="1"></el-option>
</el-select>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
<div class="right_container">
<el-alert title="评审内容" type="success" :closable="false"></el-alert>
<el-select v-model="select2" class="rightSelect">
<el-option label="1" value="1"></el-option>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
</div>
<div class="bottom_container">
<div style="padding-right: 20px;text-align: left;margin: 15px 0;display: flex;align-items: center;justify-content: space-between;">
<div>
<el-divider direction="vertical"></el-divider>
<span style="margin-right: 50px;">评审意见</span>
<el-radio v-model="radio" label="1">通过</el-radio>
<el-radio v-model="radio" label="2">不通过</el-radio>
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
<div class="label m-r-10">是否满足接入要求:</div>
<el-radio
v-for="item in selectOptions"
v-model="isMeet"
:key="item.value"
:label="item.value"
:value="item.value"
>{{ item.label }}</el-radio
>
</div>
<div class="flex">
<el-button type="primary" size="medium">带入批注</el-button>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div>
<el-button type="primary" size="medium">带入批准</el-button>
</div>
<el-input type="textarea" :rows="4" v-model="textarea" style="width: 98%;"></el-input>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import { savePrelDesInspecte, detailPrelDesInspecte } from '@/api/index.js'
export default {
name: 'tab1',
components: {
},
components: { vabOnlyOffice },
data() {
return {
radio: '1',
textarea: '',
select1: null,
select2: null,
};
resultContent: '',
isMeet: null,
selectOptions: [
{
label: '通过',
value: 1,
},
{
label: '不通过',
value: 0,
},
],
select: '1',
row: {},
documentServerUrl: 'http://43.143.211.42:19231/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
},
mounted(){
},
methods: {
}
}
</script>
<style scoped>
.tab1{
height: 100%;
}
.content{
display: flex;
height: 77%;
}
.leftSelect{
position: absolute;
top: 44px;
left: 22px;
}
.rightSelect{
position: absolute;
top: 44px;
left: 22px;
}
.el-button--primary{
background: rgba(13,134,127,1);
color: #fff;
border: 0;
}
/deep/ .el-alert--success.is-light{
background-color: #D5F5F3;
color: #000;
}
/deep/ .el-divider--vertical{
width: 4px;
background-color: #0D867F;
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'CONFORMANCE_REVIEW',
prjId: this.row.prjId,
}
.left_container{
width: 49%;
border: 1px solid red;
margin-right: 1%;
position: relative;
detailPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
.right_container{
width: 49%;
border: 1px solid red;
position: relative;
})
},
handleSave() {
const params = {
reviewEnum: 'CONFORMANCE_REVIEW',
prjId: this.row.prjId,
reviewState: this.isMeet,
reviewSuggestion: this.resultContent,
}
.bottom_container{
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
savePrelDesInspecte(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab2">
<div class="content">
<div class="left_container">
<el-alert title="评审标准" type="success" :closable="false"></el-alert>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<img v-for="(item, idx) in leftImgs" :key="idx" :src="item" alt="" />
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<img v-for="(item, idx) in rightImgs" :key="idx" :src="item" alt="" />
</div>
<div class="right_container">
<el-alert title="评审内容" type="success" :closable="false"></el-alert>
</div>
</div>
<div class="bottom_container">
<div style="padding-right: 20px;text-align: left;margin: 15px 0;">
<el-divider direction="vertical"></el-divider>
<span style="margin-right: 50px;">审查意见</span>
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">评审结果</span>
<!-- <div class="label m-r-10">是否满足接入要求:</div>
<el-radio
v-for="item in selectOptions"
v-model="isMeet"
:key="item.value"
:label="item.value"
:value="item.value"
>{{ item.label }}</el-radio
> -->
</div>
<!-- <div class="flex">
<el-button type="primary" size="medium">带入批注</el-button>
<el-button type="primary" size="medium" @click="handleSave"
>保存结果</el-button
>
</div> -->
</div>
<el-input type="textarea" :rows="4" v-model="textarea" style="width: 98%;"></el-input>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import { detailPrelDesInspecte, qViewPrelDesInspecte } from '@/api/index.js'
export default {
name: 'tab2',
components: {
},
components: {},
data() {
return {
radio: '1',
textarea: ''
};
resultContent: '',
isMeet: null,
selectOptions: [
{
label: '通过',
value: 1,
},
mounted(){
{
label: '不通过',
value: 0,
},
methods: {
],
select: '1',
row: {},
leftImgs: [],
rightImgs: [],
}
}
</script>
<style scoped>
.tab2{
height: 100%;
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
this.getLeftQview()
this.getRightQview()
},
methods: {
getLeftQview() {
const params = {
archiBelongId: 1,
archiStage: 2,
reviewEnum: 'ARCHITECTURE_CONFORMANCE',
prjId: this.row.prjId,
}
.content{
display: flex;
height: 77%;
qViewPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
} else {
if (res.data.length) {
this.leftImgs = res.data.docParserList.map((v) => {
return `data:image/svg+xml;base64,${v.docContent}`
})
}
.el-button--primary{
background: rgba(13,134,127,1);
color: #fff;
border: 0;
this.$message.error(res.msg)
}
/deep/ .el-alert--success.is-light{
background-color: #D5F5F3;
color: #000;
})
},
getRightQview() {
const params = {
archiBelongId: 1,
archiStage: 3,
reviewEnum: 'ARCHITECTURE_CONFORMANCE',
prjId: this.row.prjId,
}
/deep/ .el-divider--vertical{
width: 4px;
background-color: #0D867F;
qViewPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
if (res.data.length) {
this.rightImgs = res.data.docParserList.map((v) => {
return `data:image/svg+xml;base64,${v.docContent}`
})
}
.left_container{
width: 49%;
border: 1px solid red;
margin-right: 1%;
} else {
this.$message.error(res.msg)
}
.right_container{
width: 49%;
border: 1px solid red;
})
},
getDetail() {
const params = {
reviewEnum: 'ARCHITECTURE_CONFORMANCE',
prjId: this.row.prjId,
}
.bottom_container{
detailPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
// handleSave() {
// const params = {
// reviewEnum: 'CONFORMANCE_REVIEW',
// prjId: this.row.prjId,
// reviewState: this.isMeet,
// reviewSuggestion: this.resultContent,
// }
// const loading = this.$loading({
// lock: true,
// text: '保存中',
// spinner: 'el-icon-loading',
// })
// savePrelDesInspecte(params).then((res) => {
// loading.close()
// if (res.code == 200) {
// this.$message.success('保存成功')
// } else {
// this.$message.error(res.msg)
// }
// })
// },
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab3">
<div class="content">
<div class="left_container">
<el-alert title="评审标准" type="success" :closable="false"></el-alert>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content flex-1">
<img v-for="(item, idx) in leftImgs" :key="idx" :src="item" alt="" />
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<img v-for="(item, idx) in rightImgs" :key="idx" :src="item" alt="" />
</div>
<div class="right_container">
<el-alert title="评审内容" type="success" :closable="false"></el-alert>
</div>
</div>
<div class="bottom_container">
<div style="padding-right: 20px;text-align: left;margin: 15px 0;display: flex;align-items: center;justify-content: space-between;">
<div>
<el-divider direction="vertical"></el-divider>
<span style="margin-right: 50px;">审查意见</span>
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">审查意见</span>
</div>
<div class="flex">
<el-button type="primary" size="medium" @click="handleSave"
>保存意见</el-button
>
</div>
<el-button type="primary" size="medium">保存意见</el-button>
</div>
<el-input type="textarea" :rows="4" v-model="textarea" style="width: 98%;"></el-input>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
savePrelDesInspecte,
detailPrelDesInspecte,
qViewPrelDesInspecte,
getqPrelDesInspecteWordTable,
} from '@/api/index.js'
export default {
name: 'tab3',
components: {
},
components: {},
data() {
return {
radio: '1',
textarea: ''
};
resultContent: '',
isMeet: null,
select: '1',
row: {},
leftImgs: [],
rightImgs: [],
}
},
mounted(){
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
this.getLeftQview()
this.getRightQview()
},
methods: {
getLeftQview() {
const params = {
archiBelongId: 1,
archiStage: 2,
reviewEnum: 'KEY_TECHNOLOGY_REVIEW',
prjId: this.row.prjId,
}
}
</script>
<style scoped>
.tab3{
height: 100%;
qViewPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
if (res.data.length) {
this.leftImgs = res.data.docParserList.map((v) => {
return `data:image/svg+xml;base64,${v.docContent}`
})
}
.content{
display: flex;
height: 77%;
} else {
this.$message.error(res.msg)
}
.el-button--primary{
background: rgba(13,134,127,1);
color: #fff;
border: 0;
})
},
getRightQview() {
const params = {
archiBelongId: 1,
archiStage: 3,
reviewEnum: 'KEY_TECHNOLOGY_REVIEW',
prjId: this.row.prjId,
}
/deep/ .el-alert--success.is-light{
background-color: #D5F5F3;
color: #000;
getqPrelDesInspecteWordTable(params).then((res) => {
if (res.code === 200) {
if (res.data.length) {
this.rightImgs = res.data.docParserList.map((v) => {
return `data:image/svg+xml;base64,${v.docContent}`
})
}
/deep/ .el-divider--vertical{
width: 4px;
background-color: #0D867F;
} else {
this.$message.error(res.msg)
}
.left_container{
width: 49%;
border: 1px solid red;
margin-right: 1%;
})
},
getDetail() {
const params = {
reviewEnum: 'KEY_TECHNOLOGY_REVIEW',
prjId: this.row.prjId,
}
.right_container{
width: 49%;
border: 1px solid red;
detailPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
.bottom_container{
})
},
handleSave() {
const params = {
reviewEnum: 'KEY_TECHNOLOGY_REVIEW',
prjId: this.row.prjId,
reviewState: this.isMeet,
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
savePrelDesInspecte(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab4">
<div class="content">
<div class="left_container">
<el-alert title="评审标准" type="success" :closable="false"></el-alert>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview-tab4-1"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview-tab4-2"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
<div class="right_container">
<el-alert title="评审内容" type="success" :closable="false"></el-alert>
</div>
</div>
<div class="bottom_container">
<div style="padding-right: 20px;text-align: left;margin: 15px 0;display: flex;align-items: center;justify-content: space-between;">
<div>
<el-divider direction="vertical"></el-divider>
<span style="margin-right: 50px;">评审意见</span>
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">审查意见</span>
</div>
<div class="flex">
<el-button type="primary" size="medium" @click="handleSave"
>保存意见</el-button
>
</div>
<el-button type="primary" size="medium">保存意见</el-button>
</div>
<el-input type="textarea" :rows="4" v-model="textarea" style="width: 98%;"></el-input>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import { savePrelDesInspecte, detailPrelDesInspecte } from '@/api/index.js'
export default {
name: 'tab4',
components: {
},
components: { vabOnlyOffice },
data() {
return {
radio: '1',
textarea: ''
};
resultContent: '',
isMeet: null,
select: '1',
row: {},
documentServerUrl: 'http://43.143.211.42:19231/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
},
mounted(){
},
methods: {
}
}
</script>
<style scoped>
.tab4{
height: 100%;
}
.content{
display: flex;
height: 77%;
}
.el-button--primary{
background: rgba(13,134,127,1);
color: #fff;
border: 0;
}
/deep/ .el-alert--success.is-light{
background-color: #D5F5F3;
color: #000;
}
/deep/ .el-divider--vertical{
width: 4px;
background-color: #0D867F;
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
},
methods: {
getDetail() {
const params = {
reviewEnum: 'FUNCTIONAL_DEPTH_REVIEW',
prjId: this.row.prjId,
}
.left_container{
width: 49%;
border: 1px solid red;
margin-right: 1%;
detailPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
.right_container{
width: 49%;
border: 1px solid red;
})
},
handleSave() {
const params = {
reviewEnum: 'FUNCTIONAL_DEPTH_REVIEW',
prjId: this.row.prjId,
reviewState: this.isMeet,
reviewSuggestion: this.resultContent,
}
.bottom_container{
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
savePrelDesInspecte(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<div class="tab5">
<div class="content">
<div class="left_container">
<el-alert title="评审标准" type="success" :closable="false"></el-alert>
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div class="left_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview-tab5"
:documentServerUrl="documentServerUrl"
:config="config"
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<img v-for="(item, idx) in rightImgs" :key="idx" :src="item" alt="" />
</div>
<div class="right_container">
<el-alert title="评审内容" type="success" :closable="false"></el-alert>
</div>
</div>
<div class="bottom_container">
<div style="padding-right: 20px;text-align: left;margin: 15px 0;display: flex;align-items: center;justify-content: space-between;">
<div>
<el-divider direction="vertical"></el-divider>
<span style="margin-right: 50px;">评审意见</span>
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="m-r-50 p-l-20 bottom_container_title">审查意见</span>
</div>
<div class="flex">
<el-button type="primary" size="medium" @click="handleSave"
>保存意见</el-button
>
</div>
<el-button type="primary" size="medium">保存意见</el-button>
</div>
<el-input type="textarea" :rows="4" v-model="textarea" style="width: 98%;"></el-input>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="请输入"
></el-input>
</div>
</div>
</template>
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
savePrelDesInspecte,
detailPrelDesInspecte,
qViewPrelDesInspecte,
} from '@/api/index.js'
export default {
name: 'tab5',
components: {
},
components: { vabOnlyOffice },
data() {
return {
radio: '1',
textarea: ''
};
resultContent: '',
isMeet: null,
select: '1',
row: {},
documentServerUrl: 'http://43.143.211.42:19231/',
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
},
mounted(){
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
},
methods: {
}
}
</script>
<style scoped>
.tab5{
height: 100%;
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
},
},
rightImgs: [],
}
.content{
display: flex;
height: 77%;
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
this.getRightQview()
},
methods: {
getRightQview() {
const params = {
archiBelongId: 1,
archiStage: 3,
reviewEnum: 'DATA_DEPTH_REVIEW',
prjId: this.row.prjId,
busiFileName: '概要设计说明书',
}
.el-button--primary{
background: rgba(13,134,127,1);
color: #fff;
border: 0;
qViewPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
if (res.data.length) {
this.rightImgs = res.data.docParserList.map((v) => {
return `data:image/svg+xml;base64,${v.docContent}`
})
}
/deep/ .el-alert--success.is-light{
background-color: #D5F5F3;
color: #000;
} else {
this.$message.error(res.msg)
}
/deep/ .el-divider--vertical{
width: 4px;
background-color: #0D867F;
})
},
getDetail() {
const params = {
reviewEnum: 'DATA_DEPTH_REVIEW',
prjId: this.row.prjId,
}
.left_container{
width: 49%;
border: 1px solid red;
margin-right: 1%;
detailPrelDesInspecte(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
.right_container{
width: 49%;
border: 1px solid red;
})
},
handleSave() {
const params = {
reviewEnum: 'DATA_DEPTH_REVIEW',
prjId: this.row.prjId,
reviewState: this.isMeet,
reviewSuggestion: this.resultContent,
}
.bottom_container{
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
savePrelDesInspecte(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
</style>
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="50%"
@close="handleClose()"
@open="handleOpen"
>
<div>
<Form
ref="editForm"
:form-options="formOptions"
label-width="120px"
></Form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">取 消</el-button>
<el-button type="primary" @click="handleSubmit" size="mini"
>保 存</el-button
>
</span></el-dialog
>
</template>
<script>
import Form from '@/components/Form.vue'
import { updReportManage } from '@/api'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {}
},
components: {
Form,
},
computed: {
formOptions() {
return [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
span: 12,
// rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '承建单位', // label文字
prop: 'buildOrg', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
span: 12,
},
{
label: '通报时间', // label文字
prop: 'reportTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
span: 12,
},
{
label: '项目评分', // label文字
prop: 'prjScore', // 字段名
element: 'el-rate', // 指定elementui组件
span: 12,
colors: ['#99A9BF', '#F7BA2A', '#FF9900'],
allowHalf: true,
},
{
label: '通报内容', // label文字
prop: 'opinion', // 字段名
type: 'textarea',
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
},
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
handleSubmit() {
this.$refs['editForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['editForm'].getData()
const params = {
...this.rowData,
...formInfo,
}
updReportManage(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
this.showDialog = false
this.handleClose()
this.$emit('querySearch')
}
})
})
},
handleClose() {
this.showDialog = false
this.formOptions.forEach((v) => {
v.initValue = ''
})
this.$refs['editForm'].addInitValue()
this.$refs['editForm'].onReset()
},
handleOpen() {
this.formOptions.forEach((v) => {
if (v.prop === 'prjScore') {
v.initValue = +this.rowData[v.prop]
} else {
v.initValue = this.rowData[v.prop]
}
})
this.$nextTick(() => {
this.$refs['editForm'].addInitValue()
})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<!--
* @Description: 架构督查-督查通报管理
* @Version: 2.0 关闭时提示是否是典型问题
* @Autor: pan
* @Date: 2024-03-26 10:53:48
* @LastEditors: pan
* @LastEditTime: 2024-03-26 16:56:57
-->
<template>
<div class="searchTable">
<list-page>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
>
</table-config>
</template>
</list-page>
<!-- 新增弹窗 -->
<Edit
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
></Edit>
<!-- <ApprovalDialog
:row-data="rowData"
@querySearch="querySearch"
title="审批"
:visible.sync="approvalVisible"
/> -->
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import Edit from './Edit.vue'
import { updReportManage, delReportManage } from '@/api/index.js'
import { querySupervisionNotifyManagement } from '@/api/interface'
import { approvalStatusOptions } from '@/utils/dictionary'
export default {
name: 'supervisionNotifyManagement',
components: {
ListPage,
SearchForm,
TableConfig,
Edit,
},
data() {
return {
selectRows: [],
query: {
url: querySupervisionNotifyManagement,
method: 'post',
queryParam: {},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
computed: {
formOptions() {
return [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
},
columns() {
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '项目名称', prop: 'prjName' },
{ label: '承建单位', prop: 'buildOrg', width: '300px' },
{
label: '通报时间',
width: '160px',
prop: 'reportTime',
},
{ label: '版本号', width: '100px', prop: 'version' },
{ label: '修改意见', prop: 'opinion', width: '220px' },
{
label: '操作',
type: 'operation',
width: '520px',
actionButtons: [
{
title: '编辑',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '查看',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-view',
},
{
title: '提交',
size: 'mini',
icon: 'el-icon-circle-check',
type: 'primary',
plain: true,
},
{
title: '审批',
size: 'mini',
icon: 'el-icon-s-check',
type: 'primary',
plain: true,
},
{
title: '发布',
size: 'mini',
icon: 'el-icon-s-check',
type: 'primary',
plain: true,
},
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
},
},
created() {},
methods: {
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '编辑':
this.fnEdit(row)
break
case '查看':
// this.fnEdit(row)
break
case '提交':
this.fnSubmit(row, '提交')
break
case '审批':
// this.fnApproval(row)
break
case '发布':
this.fnSubmit(row, '发布')
break
case '删除':
this.fnDel(row)
break
default:
break
}
},
fnApproval(row) {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row, text) {
this.$confirm(`是否确认${text}?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
state: text === '提交' ? 1 : 3,
}
updReportManage(params).then((res) => {
if (res.code === 200) {
this.$message.success(`${text}成功`)
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
}
delReportManage(params).then((res) => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error('删除失败')
}
})
})
.catch(() => {})
},
fnEdit(row) {
this.dialogTitle = '编辑通报'
this.rowData = row
this.visible = true
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
<!--
* @Description: 架构督查-督查问题整改
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-26 10:53:48
* @LastEditors: pan
* @LastEditTime: 2024-03-26 17:27:33
-->
<template>
<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"
id-key="elementId"
>
</table-config>
</template>
</list-page>
<!-- 新增弹窗 -->
<!-- <Edit
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
></Edit> -->
<!-- <ApprovalDialog
:row-data="rowData"
@querySearch="querySearch"
title="审批"
:visible.sync="approvalVisible"
/> -->
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
// import Edit from './Edit.vue'
import { updReportManage, delReportManage } from '@/api/index.js'
import { querySupervisionProblem } from '@/api/interface'
import { approvalStatusOptions } from '@/utils/dictionary'
export default {
name: 'supervisionProblemEdit',
components: {
ListPage,
SearchForm,
TableConfig,
// Edit,
},
data() {
return {
selectRows: [],
query: {
url: querySupervisionProblem,
method: 'post',
queryParam: {},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
computed: {
formOptions() {
return [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
},
columns() {
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '项目名称', prop: 'prjName', width: '200px' },
{
label: '承建单位',
width: '160px',
prop: 'buildOrg',
},
{ label: '督查名称', width: '200px', prop: 'supervName' },
{ label: '项目总评价', prop: 'prjOpinion', width: '200px' },
{ label: '项目总评分', prop: 'prjScore', width: '120px' },
{ label: '指标名称', prop: 'indexName', width: '120px' },
{ label: '指标评价', prop: 'indexOpinion' },
{ label: '指标评分', prop: 'score' },
{ label: '整改日期', prop: 'createTime', width: '120px' },
{ label: '整改情况', prop: 'state' },
{ label: '是否典型问题', prop: 'typical' },
{ label: '问题等级', prop: 'level' },
{
label: '操作',
type: 'operation',
width: '380px',
actionButtons: [
{
title: '编辑',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
{
title: '查看',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-view',
},
{
title: '发布',
size: 'mini',
icon: 'el-icon-s-check',
type: 'primary',
plain: true,
},
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
},
},
created() {},
methods: {
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
},
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
fnAdd() {
this.rowData = {}
this.dialogTitle = '新增批次计划'
this.visible = true
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '编辑':
this.fnEdit(row)
break
case '查看':
// this.fnEdit(row)
break
case '提交':
this.fnSubmit(row, '提交')
break
case '审批':
// this.fnApproval(row)
break
case '发布':
this.fnSubmit(row, '发布')
break
case '删除':
this.fnDel(row)
break
default:
break
}
},
fnApproval(row) {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row, text) {
this.$confirm(`是否确认${text}?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
state: text === '提交' ? 1 : 3,
}
updReportManage(params).then((res) => {
if (res.code === 200) {
this.$message.success(`${text}成功`)
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
}
delReportManage(params).then((res) => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error('删除失败')
}
})
})
.catch(() => {})
},
fnEdit(row) {
this.dialogTitle = '编辑通报'
this.rowData = row
this.visible = true
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
</style>
......@@ -101,7 +101,7 @@
<!-- <input @change="fileUpload" type="file" /> -->
<el-upload
class="upload-demo"
action="/api/file/oss/upload"
action="/eadc-shared-ability/oss/upload"
ref="upload"
:on-remove="handleRemove"
:on-success="handleFileUploadSuccess"
......
......@@ -5,54 +5,167 @@
<div class="search_menu_item_container">
<div class="search_menu_item">
<span class="search_title">案例名称</span>
<el-input v-model="searchParams.caseName" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-model="searchParams.caseName"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item">
<span class="search_title">案例类型</span>
<el-select v-model="searchParams.caseType" placeholder="请选择" class="search_item">
<el-option v-for="item in selectData1" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select
v-model="searchParams.caseType"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in selectData1"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<div class="search_menu_item">
<span class="search_title">问题类型</span>
<el-select v-model="searchParams.problemType" placeholder="请选择" class="search_item">
<el-option v-for="item in selectData2" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select
v-model="searchParams.problemType"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in selectData2"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div class="search_menu_btn_container">
<div class="query_btn" @click="search_table">
<img class="btn_icon" src="@/assets/archi-ele-list/search.png" alt="" />
<img
class="btn_icon"
src="@/assets/archi-ele-list/search.png"
alt=""
/>
<p>查询</p>
</div>
<div class="reset_btn" @click="reset">
<img class="btn_icon" src="@/assets/archi-ele-list/reset.png" alt="" />
<img
class="btn_icon"
src="@/assets/archi-ele-list/reset.png"
alt=""
/>
<p>重置</p>
</div>
</div>
</div>
<div class="search_btn">
<el-button type="primary" size="medium" icon="el-icon-document-add" @click="operate('add')">新建</el-button>
<el-button type="primary" size="medium" icon="el-icon-delete" @click="operate('delMultiple')">删除</el-button>
<el-button type="primary" size="medium" icon="el-icon-plus" @click="exportFile">导出</el-button>
<el-button
type="primary"
size="medium"
icon="el-icon-document-add"
@click="operate('add')"
>新建</el-button
>
<el-button
type="primary"
size="medium"
icon="el-icon-delete"
@click="operate('delMultiple')"
>删除</el-button
>
<el-button
type="primary"
size="medium"
icon="el-icon-plus"
@click="exportFile"
>导出</el-button
>
</div>
<el-table :height="tableHeight" @selection-change="handleSelectionChange" v-loading="loading" :data="tableData" stripe border>
<el-table
:height="tableHeight"
@selection-change="handleSelectionChange"
v-loading="loading"
:data="tableData"
stripe
border
>
<!-- <el-table-column type="selection" width="55" :selectable="selectable"></el-table-column> -->
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
<el-table-column prop="caseName" label="案例名称" align="center"></el-table-column>
<el-table-column prop="caseType_" label="案例类型" align="center"></el-table-column>
<el-table-column prop="projectType_" label="项目类型" align="center"></el-table-column>
<el-table-column prop="buildContent" label="建设内容" align="center"></el-table-column>
<el-table-column prop="archiDetail" label="架构详情" align="center" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="problemType_" label="问题类型" align="center"></el-table-column>
<el-table-column prop="problemLevel_" label="问题等级" align="center"></el-table-column>
<el-table-column prop="problemContent" label="问题描述" align="center" :show-overflow-tooltip="true"></el-table-column>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="caseName"
label="案例名称"
align="center"
></el-table-column>
<el-table-column
prop="caseType_"
label="案例类型"
align="center"
></el-table-column>
<el-table-column
prop="projectType_"
label="项目类型"
align="center"
></el-table-column>
<el-table-column
prop="buildContent"
label="建设内容"
align="center"
></el-table-column>
<el-table-column
prop="archiDetail"
label="架构详情"
align="center"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column
prop="problemType_"
label="问题类型"
align="center"
></el-table-column>
<el-table-column
prop="problemLevel_"
label="问题等级"
align="center"
></el-table-column>
<el-table-column
prop="problemContent"
label="问题描述"
align="center"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column label="操作" width="260" align="center">
<template slot-scope="scope">
<div style="display: flex;align-items: center;justify-content: center;">
<el-button icon="el-icon-edit" type="primary" size="mini" @click="operate('edit',scope.row)"> 编辑</el-button>
<el-button class="shanChu_btn" icon="el-icon-delete" size="mini" @click="operate('del',scope.row)">删除</el-button>
<div
style="
display: flex;
align-items: center;
justify-content: center;
"
>
<el-button
icon="el-icon-edit"
type="primary"
size="mini"
@click="operate('edit', scope.row)"
>
编辑</el-button
>
<el-button
class="shanChu_btn"
icon="el-icon-delete"
size="mini"
@click="operate('del', scope.row)"
>删除</el-button
>
</div>
</template>
</el-table-column>
......@@ -65,7 +178,8 @@
:page-sizes="pager.sizes"
:page-size="pager.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pager.total">
:total="pager.total"
>
</el-pagination>
</div>
......@@ -73,7 +187,8 @@
:title="title"
:visible.sync="add_dialog"
:center="false"
width="60%">
width="60%"
>
<div class="add_dialog_content">
<div class="add_dialog_content">
<el-form :model="formData" ref="form">
......@@ -83,12 +198,22 @@
</el-form-item>
<el-form-item label="案例类型:" prop="caseType">
<el-select v-model="formData.caseType" placeholder="请选择">
<el-option v-for="item in selectData1" :key="item.label" :label="item.label" :value="item.value"></el-option>
<el-option
v-for="item in selectData1"
:key="item.label"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目类型:" prop="projectType">
<el-select v-model="formData.projectType" placeholder="请选择">
<el-option v-for="item in selectData3" :key="item.label" :label="item.label" :value="item.value"></el-option>
<el-option
v-for="item in selectData3"
:key="item.label"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="建设内容:" prop="buildContent">
......@@ -96,26 +221,52 @@
</el-form-item>
<el-form-item label="问题类型:" prop="problemType">
<el-select v-model="formData.problemType" placeholder="请选择">
<el-option v-for="item in selectData2" :key="item.label" :label="item.label" :value="item.value"></el-option>
<el-option
v-for="item in selectData2"
:key="item.label"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="问题等级:" prop="problemLevel">
<el-select v-model="formData.problemLevel" placeholder="请选择">
<el-option v-for="item in selectData4" :key="item.label" :label="item.label" :value="item.value"></el-option>
<el-option
v-for="item in selectData4"
:key="item.label"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item class="cross1" label="架构详情:" prop="archiDetail">
<el-input type="textarea" v-model="formData.archiDetail" maxlength="200" show-word-limit></el-input>
<el-input
type="textarea"
v-model="formData.archiDetail"
maxlength="200"
show-word-limit
></el-input>
</el-form-item>
<el-form-item class="cross1" label="问题描述:" prop="problemContent">
<el-input type="textarea" v-model="formData.problemContent" maxlength="200" show-word-limit></el-input>
<el-form-item
class="cross1"
label="问题描述:"
prop="problemContent"
>
<el-input
type="textarea"
v-model="formData.problemContent"
maxlength="200"
show-word-limit
></el-input>
</el-form-item>
</div>
</el-form>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="operate('create')">确定</el-button>
<el-button class="greenButton" @click="operate('create')"
>确定</el-button
>
<el-button @click="add_dialog = false">取消</el-button>
</span>
</el-dialog>
......@@ -130,20 +281,18 @@ import {
getTypicalExampleUpdate,
getTypicalExampleDel,
getTypicalExampleExcel,
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
} from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import $ from 'jquery'
export default {
name: 'TypicalExampleManage',
components: {
},
components: {},
data() {
return {
tableData: [],
add_dialog: false,
title: "",
title: '',
loading: false,
selectList: [],
selectData1: [],
......@@ -151,9 +300,9 @@ export default {
selectData3: [],
selectData4: [],
searchParams: {
caseName: "",
caseType: "",
problemType: "",
caseName: '',
caseType: '',
problemType: '',
},
pager: {
current: 1,
......@@ -169,182 +318,192 @@ export default {
problemType: '',
problemLevel: '',
problemContent: '',
archiDetail: "",
archiDetail: '',
},
tableHeight: null,
};
}
},
mounted(){
mounted() {
window.addEventListener('resize', () => {
this.set_table_height();
this.set_table_height()
})
this.set_table_height();
this.set_table_height()
// 初始化查询列表
this.getList();
this.getList()
// 获取元素列表
this.get_an_li_lei_xing_select().then(res => {
this.selectData1 = res;
});
this.get_wen_ti_lei_xing_select().then(res => {
this.selectData2 = res;
});
this.get_xiang_mu_lei_xing_select().then(res => {
this.selectData3 = res;
});
this.get_wen_ti_deng_ji_select().then(res => {
this.selectData4 = res;
});
this.get_an_li_lei_xing_select().then((res) => {
this.selectData1 = res
})
this.get_wen_ti_lei_xing_select().then((res) => {
this.selectData2 = res
})
this.get_xiang_mu_lei_xing_select().then((res) => {
this.selectData3 = res
})
this.get_wen_ti_deng_ji_select().then((res) => {
this.selectData4 = res
})
},
methods: {
search_table() {//搜索
this.pager.current = 1;
this.getList();
search_table() {
//搜索
this.pager.current = 1
this.getList()
},
// 查询列表
getList() {
this.loading = true;
this.loading = true
const params = {
"caseName": this.searchParams.caseName,
"caseType": this.searchParams.caseType,
"problemType": this.searchParams.problemType,
"current": this.pager.current,
"pageSize": this.pager.size,
};
getTypicalExampleList(params).then(res => {
caseName: this.searchParams.caseName,
caseType: this.searchParams.caseType,
problemType: this.searchParams.problemType,
current: this.pager.current,
pageSize: this.pager.size,
}
getTypicalExampleList(params).then((res) => {
if (res.code == 200) {
this.loading = false;
this.loading = false
Promise.all([
this.get_an_li_lei_xing_select(),
this.get_xiang_mu_lei_xing_select(),
this.get_wen_ti_lei_xing_select(),
this.get_wen_ti_deng_ji_select()
]).then(res2 => {
res.data.records.map(item => {
let result1 = res2[0].find(item2 => item2.value == item.caseType);
let result2 = res2[1].find(item2 => item2.value == item.projectType);
let result3 = res2[2].find(item2 => item2.value == item.problemType);
let result4 = res2[3].find(item2 => item2.value == item.problemLevel);
this.get_wen_ti_deng_ji_select(),
]).then((res2) => {
res.data.records.map((item) => {
let result1 = res2[0].find(
(item2) => item2.value == item.caseType,
)
let result2 = res2[1].find(
(item2) => item2.value == item.projectType,
)
let result3 = res2[2].find(
(item2) => item2.value == item.problemType,
)
let result4 = res2[3].find(
(item2) => item2.value == item.problemLevel,
)
item['caseType_'] = result1 ? result1.label : '';
item['projectType_'] = result2 ? result2.label : '';
item['problemType_'] = result2 ? result3.label : '';
item['problemLevel_'] = result2 ? result4.label : '';
});
this.pager.current = res.data.current;
this.pager.total = res.data.total;
this.pager.size = res.data.size;
this.tableData = res.data.records;
item['caseType_'] = result1 ? result1.label : ''
item['projectType_'] = result2 ? result2.label : ''
item['problemType_'] = result2 ? result3.label : ''
item['problemLevel_'] = result2 ? result4.label : ''
})
this.pager.current = res.data.current
this.pager.total = res.data.total
this.pager.size = res.data.size
this.tableData = res.data.records
})
}
});
})
},
// 重置
reset() {
this.searchParams = {
caseName: "",
caseType: "",
problemType: "",
caseName: '',
caseType: '',
problemType: '',
}
},
// 所有操作
operate(type,item){
this.openType = type;
if (type == "add") {
this.add_dialog = true;
this.title = "新建案例";
this.resetForm();
}else if (type == "edit") {
this.add_dialog = true;
this.title = "编辑案例";
this.formData = item;
this.formData.caseType = String(this.formData.caseType);
this.formData.problemType = String(this.formData.problemType);
this.formData.projectType = String(this.formData.projectType);
this.formData.problemLevel = String(this.formData.problemLevel);
}else if (type == "create") {
if (this.formData.ktcId) {
operate(type, item) {
this.openType = type
if (type == 'add') {
this.add_dialog = true
this.title = '新建案例'
this.resetForm()
} else if (type == 'edit') {
this.add_dialog = true
this.title = '编辑案例'
this.formData = item
this.formData.caseType = String(this.formData.caseType)
this.formData.problemType = String(this.formData.problemType)
this.formData.projectType = String(this.formData.projectType)
this.formData.problemLevel = String(this.formData.problemLevel)
} else if (type == 'create') {
if (this.formData.caseId) {
// 编辑保存
getTypicalExampleUpdate(this.formData).then(res => {
getTypicalExampleUpdate(this.formData).then((res) => {
if (res.code == 200) {
this.$message.success("保存成功");
this.add_dialog = false;
this.getList();
}else{
this.add_dialog = false;
this.$message.error(res.msg);
this.$message.success('保存成功')
this.add_dialog = false
this.getList()
} else {
this.add_dialog = false
this.$message.error(res.msg)
}
});
}else{
})
} else {
// 新建保存
getTypicalExampleAdd(this.formData).then(res => {
getTypicalExampleAdd(this.formData).then((res) => {
if (res.code == 200) {
this.$message.success("保存成功");
this.add_dialog = false;
this.getList();
}else{
this.add_dialog = false;
this.$message.error(res.msg);
this.$message.success('保存成功')
this.add_dialog = false
this.getList()
} else {
this.add_dialog = false
this.$message.error(res.msg)
}
});
})
}
}else if (type == "del") {
} else if (type == 'del') {
// 删除
this.$confirm("确认删除吗", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
this.$confirm('确认删除吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
customClass: 'messageClass',
confirmButtonClass: 'confirmClass',
type: "warning"
}).then(() => {
type: 'warning',
})
.then(() => {
let params = {
ids: [item.ktcId],
};
getTypicalExampleDel(params).then(res => {
}
getTypicalExampleDel(params).then((res) => {
if (res.code == 200) {
this.$message.success("删除成功");
this.getList();
}else{
this.$message.error(res.msg);
this.$message.success('删除成功')
this.getList()
} else {
this.$message.error(res.msg)
}
});
}).catch(() => {
});
}else if (type == "delMultiple") {
})
})
.catch(() => {})
} else if (type == 'delMultiple') {
if (this.selectList.length <= 0) {
this.$message.error("请选择一项进行删除");
return;
this.$message.error('请选择一项进行删除')
return
}
let params = {
ids: [],
};
this.selectList.map(item => {
}
this.selectList.map((item) => {
params.ids.push(item.ktcId)
})
this.$confirm("确认批量删除吗", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
this.$confirm('确认批量删除吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
customClass: 'messageClass',
confirmButtonClass: 'confirmClass',
type: "warning"
}).then(() => {
getTypicalExampleDel(params).then(res => {
type: 'warning',
})
.then(() => {
getTypicalExampleDel(params).then((res) => {
if (res.code == 200) {
this.$message.success("批量删除成功");
this.getList();
}else{
this.$message.error(res.msg);
this.$message.success('批量删除成功')
this.getList()
} else {
this.$message.error(res.msg)
}
});
}).catch(() => {
});
})
})
.catch(() => {})
}
},
// 新建清空表单
resetForm(){
resetForm() {
this.formData = {
caseName: '',
caseType: '',
......@@ -353,278 +512,290 @@ export default {
problemType: '',
problemLevel: '',
problemContent: '',
archiDetail: "",
archiDetail: '',
}
},
exportFile() {//导出
getTypicalExampleExcel(this.searchParams).then(res => {
let blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
let url = URL.createObjectURL(blob);
let link = document.createElement('a');
link.href = url;
document.body.appendChild(link);
link.click();
exportFile() {
//导出
getTypicalExampleExcel(this.searchParams).then((res) => {
let blob = new Blob([res], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
})
let url = URL.createObjectURL(blob)
let link = document.createElement('a')
link.href = url
document.body.appendChild(link)
link.click()
})
},
get_an_li_lei_xing_select() {//案例类型下拉
get_an_li_lei_xing_select() {
//案例类型下拉
const params = {
key: "kl_case_type"
key: 'kl_case_type',
}
return new Promise((resolve, reject) => {
getDianXingAnLiSelectData(params).then(res => {
if(res.code == 200) {
resolve(res.data);
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
resolve(res.data)
}
})
})
},
get_wen_ti_lei_xing_select() {//问题类型下拉
get_wen_ti_lei_xing_select() {
//问题类型下拉
const params = {
key: "kl_question_type"
key: 'kl_question_type',
}
return new Promise((resolve, reject) => {
getDianXingAnLiSelectData(params).then(res => {
if(res.code == 200) {
resolve(res.data);
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
resolve(res.data)
}
})
})
},
get_xiang_mu_lei_xing_select() {//项目类型下拉
get_xiang_mu_lei_xing_select() {
//项目类型下拉
const params = {
key: "kl_project_type"
key: 'kl_project_type',
}
return new Promise((resolve, reject) => {
getDianXingAnLiSelectData(params).then(res => {
if(res.code == 200) {
resolve(res.data);
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
resolve(res.data)
}
})
})
},
get_wen_ti_deng_ji_select() {//问题等级下拉
get_wen_ti_deng_ji_select() {
//问题等级下拉
const params = {
key: "kl_question_level"
key: 'kl_question_level',
}
return new Promise((resolve, reject) => {
getDianXingAnLiSelectData(params).then(res => {
if(res.code == 200) {
resolve(res.data);
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
resolve(res.data)
}
})
})
},
set_table_height() {//动态设置表格高度
const table_container_height = $(".table_container").height();
const search_menu_height = $(".search_menu").height();
const search_btn_height = $(".search_btn").outerHeight(true);
this.tableHeight = table_container_height - search_menu_height - search_btn_height - 90 + 'px';
set_table_height() {
//动态设置表格高度
const table_container_height = $('.table_container').height()
const search_menu_height = $('.search_menu').height()
const search_btn_height = $('.search_btn').outerHeight(true)
this.tableHeight =
table_container_height -
search_menu_height -
search_btn_height -
90 +
'px'
},
selectable(row) {//表格勾选框禁用
if(row.state == 1) {
return false; // 禁用
selectable(row) {
//表格勾选框禁用
if (row.state == 1) {
return false // 禁用
} else {
return true; //不禁用
return true //不禁用
}
},
// 表格多选
handleSelectionChange(e) {
this.selectList = e;
this.selectList = e
},
// 每页条数改变
handleSizeChange(val) {
this.pager.current = 1;
this.pager.size = val;
this.getList();
this.pager.current = 1
this.pager.size = val
this.getList()
},
//当前页码改变
handleCurrentChange(val) {
this.pager.current = val;
this.getList();
this.pager.current = val
this.getList()
},
},
}
}
</script>
<style>
.confirmClass{
background-color: #0D867F !important;
}
.el-message-box__content{
.confirmClass {
background-color: #0d867f !important;
}
.el-message-box__content {
padding: 60px 15px 60px 15px;
}
}
</style>
<style scoped>
.form_item_container{
.form_item_container {
display: flex;
flex-wrap: wrap;
}
.el-form-item{
}
.el-form-item {
display: flex;
width: 33%;
}
.cross1{
}
.cross1 {
width: 100%;
}
/deep/ .cross1 > .el-form-item__content{
}
/deep/ .cross1 > .el-form-item__content {
width: 86.4% !important;
}
.typicalExampleManage{
}
.typicalExampleManage {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.dialog_content_1{
}
.dialog_content_1 {
display: flex;
justify-content: space-between;
}
.el-button--primary{
background: rgba(13,134,127,0.1);
color: #0D867F;
}
.el-button--primary {
background: rgba(13, 134, 127, 0.1);
color: #0d867f;
border: 0;
}
.add_select_item_icon_container{
}
.add_select_item_icon_container {
margin-top: 10px;
text-align: center;
cursor: pointer;
}
/deep/ .el-dialog__header{
background-color: #0D867F;
}
/deep/ .el-dialog__header {
background-color: #0d867f;
text-align: left;
}
/deep/ .el-input-group__append{
background-color: #0D867F;
}
/deep/ .el-input-group__append {
background-color: #0d867f;
color: #fff;
cursor: pointer;
}
/deep/ .el-dialog__title{
}
/deep/ .el-dialog__title {
color: #fff;
}
/deep/ .el-dialog__close {
}
/deep/ .el-dialog__close {
color: #fff;
}
.search_menu{
}
.search_menu {
display: flex;
justify-content: space-between;
}
.search_menu_item_container{
}
.search_menu_item_container {
display: flex;
align-items: center;
}
.search_menu_btn_container{
}
.search_menu_btn_container {
display: flex;
align-items: center;
}
.search_menu_item{
}
.search_menu_item {
display: flex;
align-items: center;
width: 344px;
}
.search_title{
}
.search_title {
/* width: 20%; */
flex-shrink: 0;
margin-right: 15px;
}
.search_item{
}
.search_item {
width: 60%;
}
.search_btn{
}
.search_btn {
width: 100%;
display: flex;
margin-top: 50px;
margin-bottom: 20px;
}
.el-button--default{
}
.el-button--default {
border: 0;
}
.shanChu_btn{
color: #DD6A15;
background-color: #F8EBE2;
}
.tingYong_btn{
color: #DEA82A;
background-color: #FDF6E6;
}
.el-button.is-disabled{
color: #C0C4CC !important;
}
.shanChu_btn {
color: #dd6a15;
background-color: #f8ebe2;
}
.tingYong_btn {
color: #dea82a;
background-color: #fdf6e6;
}
.el-button.is-disabled {
color: #c0c4cc !important;
background-color: #fff !important;
}
.add_btn{
}
.add_btn {
display: flex;
align-items: center;
justify-content: center;
width: 76px;
height: 32px;
background: rgba(13,134,127,0.1);
background: rgba(13, 134, 127, 0.1);
border-radius: 6px 6px 6px 6px;
border: 1px solid #0D867F;
border: 1px solid #0d867f;
font-size: 14px;
color: #0D867F;
color: #0d867f;
cursor: pointer;
}
.version_btn{
}
.version_btn {
display: flex;
align-items: center;
justify-content: center;
width: 104px;
height: 32px;
background: rgba(13,134,127,0.1);
background: rgba(13, 134, 127, 0.1);
border-radius: 6px 6px 6px 6px;
border: 1px solid #0D867F;
border: 1px solid #0d867f;
font-size: 14px;
color: #0D867F;
color: #0d867f;
cursor: pointer;
margin-left: 15px;
}
.query_btn{
}
.query_btn {
display: flex;
align-items: center;
justify-content: center;
width: 76px;
height: 32px;
background: rgba(13,134,127,1);
background: rgba(13, 134, 127, 1);
border-radius: 6px 6px 6px 6px;
border: 1px solid #0D867F;
border: 1px solid #0d867f;
font-size: 14px;
color: #fff;
margin-right: 10px;
cursor: pointer;
}
.reset_btn{
}
.reset_btn {
display: flex;
align-items: center;
justify-content: center;
width: 76px;
height: 32px;
background: rgba(244,244,244,1);
background: rgba(244, 244, 244, 1);
border-radius: 6px 6px 6px 6px;
border: 1px solid #ccc;
font-size: 14px;
color: #666;
cursor: pointer;
}
.btn_icon{
}
.btn_icon {
margin-right: 10px;
}
.table_container{
}
.table_container {
width: 97%;
height: calc(100% - 40px);
margin-top: 20px;
}
.el-pagination{
}
.el-pagination {
margin-top: 30px;
}
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active{
background-color: #0D867F;
}
.greenButton{
background-color: #0D867F;
}
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active {
background-color: #0d867f;
}
.greenButton {
background-color: #0d867f;
color: #fff;
}
}
</style>
const { defineConfig } = require('@vue/cli-service');
const ip = '43.143.211.42';
// const ip = '192.168.52.206';
// const ip = '172.20.10.3';
// const ip = '192.168.39.206';
const { defineConfig } = require('@vue/cli-service')
// const ip = '43.143.211.42'
// const ip = '172.20.10.7' // 李振
// const ip = '172.20.10.9' // 何鹏
const ip = '192.168.0.120'
module.exports = defineConfig({
transpileDependencies: true,
//如果是hash模式, publicPath:"";如果是history, publicPath:"/"
// publicPath: "/",
devServer: {
hot: true,
proxy: {
'/api/file': {
target: `http://${ip}:7005`,
'/eadc-shared-ability': {
target: `http://${ip}:80/`, // 共享能力
changeOrigin: true,
// secure: false,
pathRewrite: { '^/api/file': '' },
// pathRewrite: { '^/api/eadc-shared-ability': '/eadc-shared-ability' },
},
'/api/network': {
target: `http://${ip}:7003`,
'/eadc-architecture': {
target: `http://${ip}:80/`, // 架构元模型
changeOrigin: true,
// secure: false,
pathRewrite: { '^/api/network': '' },
// pathRewrite: { '^/api/network': '' },
},
'/api': {
target: `http://${ip}:7004`,
'/eadc-knowledge-pool': {
target: `http://${ip}:80/`, // 架构知识库
changeOrigin: true,
// secure: false,
pathRewrite: { '^/api': '' },
// pathRewrite: { '^/api': '' },
},
}
},
chainWebpack: config => {
config.plugin('html').tap(args => {
args[0].title = '数字化架构设计与管控微应用';
return args;
},
chainWebpack: (config) => {
config.plugin('html').tap((args) => {
args[0].title = '数字化架构设计与管控支撑工具'
return args
})
},
})
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!