Commit 20133f32 by liuyong

修改bug

2 parents 4c32f942 dedd7eee
Showing with 9400 additions and 2396 deletions
/* guo
架构督查 api
*/
import { EADC_ARRCHITECTURE, EADC_KNOWLEDGE_POOL } from '@/config/micromodule'
// 收集资料配置 查询
export const collectDataSearch = EADC_ARRCHITECTURE + '/Collect/CollectInformation/'
// 弹框内表格查询 prjCode: 不传 查全部 选择传,拼接的id
export const collectDataConfiguration = EADC_ARRCHITECTURE + '/Collect/information/'
// 督查材料收集 查询
export const supervisionData = EADC_ARRCHITECTURE + '/Collect/supervisionData/'
// 架构督查分析 查询 tab1 tab2
export const architectureInspectionAnalysis = EADC_ARRCHITECTURE + '/supervIndex/selectSupervIndex'
export const selectSupervAnalysis = EADC_ARRCHITECTURE + '/supervAnalysis/selectSupervAnalysis'
// 详情 tab1 tab2
export const architectureDetail = EADC_ARRCHITECTURE + '/supervIndex/selectSupervIndex'
// 政策 查询 添加查询
export const artPolicyExamine = EADC_ARRCHITECTURE + '/klTechPolicyCheck/'
export const artPolicyExamineAdd = EADC_KNOWLEDGE_POOL + '/kl-tech-policy/'
// 审查 查询
export const examineSearch = EADC_ARRCHITECTURE + '/prj-info/'
......@@ -661,6 +661,14 @@ export function getQWordTable(params) {
export function getQWordPic_(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-inspecte/qWordPic', params)
}
// 概设材料审查-查询概设材料解析内容
export function analysisQryContent(params) {
return post(EADC_ARRCHITECTURE + '/ads-parser-content/qryContent', params)
}
// 概设材料审查-概设材料解析
export function analysisConceptual(params) {
return post(EADC_ARRCHITECTURE + '/ads-parser-content/adsParser', params)
}
// 获取评审片段img
export function getQWordPic(params) {
return post(EADC_ARRCHITECTURE + '/prel-des-rvw/qWordPic', params)
......@@ -728,10 +736,54 @@ 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)
}
// 架构督查-督查问题整改-更新
export function updRectifyReform(params) {
return post(EADC_ARRCHITECTURE + '/rectifyReform/fb', params)
}
// 概设评审基础管理 --新增事项
export function addMatterInfo(params) {
return post(EADC_ARRCHITECTURE + '/int-info/ad', params)
}
// 概设评审基础管理 --修改事项
export function updMatterInfo(params) {
return post(EADC_ARRCHITECTURE + '/int-info/upd', params)
}
// 概设评审基础管理 --新增组织机构
export function addOrgInfo(params) {
return post(EADC_ARRCHITECTURE + '/org-info/ad', params)
}
// 概设评审基础管理 --修改组织机构
export function updOrgInfo(params) {
return post(EADC_ARRCHITECTURE + '/org-info/upd', params)
}
// 架构遵从检查-保存评审意见
export function saveArchitectureFollows(params) {
return post(EADC_ARRCHITECTURE + '/architectureFollows/ad', params)
}
// 架构遵从检查-查询评审意见
export function viewArchitectureFollows(params) {
return post(EADC_ARRCHITECTURE + '/architectureFollows/qReview', params)
}
// 架构遵从检查-查询对应架构视图
export function qViewArchitectureFollows(params) {
return post(EADC_ARRCHITECTURE + '/architectureFollows/qView', params)
}
// 项目信息管理-查看项目详情
export function getPrjInfoDetail(params) {
return post(EADC_ARRCHITECTURE + '/prj-info/qryPrj', params)
}
// 系统信息管理-查看系统详情
export function getSystemInfoDetail(params) {
return post(EADC_ARRCHITECTURE + '/app-info/dApp', params)
}
export function postRequest(url, params) {
return post(EADC_ARRCHITECTURE + url, params)
}
......@@ -30,5 +30,10 @@ export const querySupervisionNotifyManagement =
export const querySupervisionProblem =
EADC_ARRCHITECTURE + '/rectifyReform/selectRectifyReform'
// 概设评审基础管理
// 概设评审基础管理-集成管理
export const queryConceptualBaseManagement = EADC_ARRCHITECTURE + '/int-info/'
// 概设评审基础管理-组织机构管理
export const queryConceptualBaseOrg = EADC_ARRCHITECTURE + '/org-info/'
// 架构遵从检查列表
export const queryArchitectureFollowExamine =
EADC_ARRCHITECTURE + '/architectureFollows/'
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-26 15:54:50
* @LastEditTime: 2024-03-27 09:47:20
-->
<!-- /**
* 搜索栏公共组件
......@@ -158,6 +158,9 @@ export default {
flex-shrink: 0;
color: #000;
}
/deep/ .el-form-item__content {
text-align: left;
}
// el-input宽度
/deep/ .form-item {
.el-input,
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:01:57
* @LastEditors: pan
* @LastEditTime: 2024-03-15 14:24:23
* @LastEditTime: 2024-03-29 20:23:32
-->
<template>
<div class="list-page">
......@@ -52,5 +52,8 @@ export default {
flex: 1;
min-height: 180px;
}
.formWrap {
border-bottom: 1px solid #e2e2e2;
}
}
</style>
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-18 09:56:15
* @LastEditTime: 2024-03-28 17:01:26
-->
<!-- /**
* 搜索栏公共组件
......@@ -47,6 +47,7 @@
class="btn-search"
icon="el-icon-search"
@click="onSearch"
v-preventReClick
>查询</el-button
>
<el-button
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-11 14:53:40
* @LastEditors: pan
* @LastEditTime: 2024-03-22 17:17:18
* @LastEditTime: 2024-03-27 17:22:37
-->
<!-- 示例
columns: [{ label: '头像', prop: 'avatar', align: 'center', __slotName: 'avatar',callback: (row, title) => {
......@@ -97,7 +97,12 @@
</template>
<!-- 字典值匹配 如后端给state: 0 页面要渲染成已停用-->
<template v-else-if="item.collectionType" #default="scope">
<span> {{ handleToText(item, scope.row[item.prop]) }}</span>
<span
:class="item.class ? item.class(scope.row) : null"
@click="item?.callback(scope.row)"
>
{{ handleToText(item, scope.row[item.prop]) }}</span
>
</template>
</el-table-column>
</template>
......
......@@ -161,11 +161,12 @@ export default {
},
mounted() {
let url = this.documentServerUrl
console.log('url', url)
if (!url.endsWith('/')) {
url += '/'
}
const docApiUrl = `${url}web-apps/apps/api/documents/api.js`
console.log('docApiUrl', docApiUrl)
loadScript(docApiUrl, 'onlyoffice-api-script')
.then(() => this.onLoad())
.catch((err) => console.error(err))
......
// onlyoffice 文档url
export const documentServerUrl = 'http://192.168.0.120/'
export const documentServerUrl2 = 'http://192.168.0.120:18050/'
export default function initDirective(vue) {
/** 节流 */
vue.directive('throttle', {
inserted: function (el, binding) {
let stop = false;
let stop = false
el.addEventListener(binding.arg, (e) => {
if (stop) return;
if (stop) return
binding.value(e)
stop = true;
stop = true
setTimeout(() => {
stop = false
}, 500)
})
}
},
})
/** 防抖 */
vue.directive('debounce', {
inserted: function (el, binding) {
let stopTime;
let stopTime
el.addEventListener(binding.arg, (e) => {
clearTimeout(stopTime);
clearTimeout(stopTime)
stopTime = setTimeout(binding.value, 1000, e)
})
}
},
})
vue.directive('no-backslash', {
......@@ -31,21 +30,36 @@ export default function initDirective(vue) {
// 绑定 @input 监听方法
el.addEventListener('input', function (event) {
// 获取输入的值
const value = event.target.value;
const value = event.target.value
// 使用正则表达式检测特殊字(根据需要匹配相应限制字符)
const regex = /(?:')|(?:-- )|(\/\*(?:.|[\n\r])*?\*\/)|(\b(select|update|and|or|delete|insert|truncate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\b)/i;
// const regex =
// /(?:')|(?:-- )|(\/\*(?:.|[\n\r])*?\*\/)|(\b(select|update|and|or|delete|insert|truncate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\b)/i
const regex = /[<>?!]|(select\s[\w|*]+\sfrom)/i
// 如果输入值包含特殊字符,则替换为空格
if (regex.test(value)) {
// 使用 replace 方法替换特殊字为空格
const newValue = value.replace(regex, ' ');
const newValue = value.replace(regex, ' ')
// 将新值设置回输入框
event.target.value = newValue;
event.target.value = newValue
// 触发 @input 事件,使其更新组件中的数据
vnode.componentInstance.$emit('input', newValue);
vnode.componentInstance.$emit('input', newValue)
}
});
})
},
});
}
})
vue.directive('preventReClick', {
inserted: function (el, binding) {
el.addEventListener('click', () => {
if (!el.disabled) {
el.disabled = true
setTimeout(() => {
el.disabled = false
}, binding.value || 1500)
}
})
},
})
}
......@@ -8,10 +8,12 @@ import 'element-ui/lib/theme-chalk/index.css'
import './styles/element-variables.scss'
import initDirective from './directive'
import { postRequest } from '@/api/index'
initDirective(Vue)
Vue.prototype.$echarts = echarts
Vue.config.productionTip = false
Vue.prototype.$postRequest = postRequest
Vue.use(ElementUI)
Date.prototype.format = function (fmt) {
......
......@@ -69,6 +69,9 @@ const routes = [
{
path: '/main/metaModelListDetails', //元模型管理详情
name: 'metaModelListDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/meta-model-list/details.vue'),
},
{
......@@ -127,6 +130,9 @@ const routes = [
{
path: '/main/archiViewManageDetails', //架构视图管理详情
name: 'archiViewManageDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/archi-view-manage/details.vue'),
},
{
......@@ -182,11 +188,17 @@ const routes = [
{
path: '/main/systemArchiViewDesignDetails', //系统架构视图设计详情
name: 'systemArchiViewDesignDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/systemArchiViewDesign/details.vue'),
},
{
path: '/main/documentEdit', //文档编辑
name: 'documentEdit',
meta: {
showGoBack: true,
},
component: () => import('@/views/documentEdit/index.vue'),
},
{
......@@ -197,6 +209,9 @@ const routes = [
{
path: '/main/summaryArchiDesignDetails', //概设阶段视图设计详情
name: 'summaryArchiDesignDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/summaryArchiDesign/details.vue'),
},
{
......@@ -207,6 +222,9 @@ const routes = [
{
path: '/main/otherArchiDesignDetails', //其他视图设计详情
name: 'otherArchiDesignDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/otherArchiDesign/details.vue'),
},
{
......@@ -217,6 +235,9 @@ const routes = [
{
path: '/main/reviewSituationDetails', //评审情况(概要设计),详情
name: 'reviewSituationDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/reviewSituation/details.vue'),
},
{
......@@ -227,6 +248,9 @@ const routes = [
{
path: '/main/reviewArchiFollowCheckDetails', //概设架构遵从审查,详情
name: 'reviewArchiFollowCheckDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/reviewArchiFollowCheck/details.vue'),
},
{
......@@ -237,6 +261,9 @@ const routes = [
{
path: '/main/reviewArchiPoliticeCheckDetails', //概设架构政策审查,详情
name: 'reviewArchiPoliticeCheckDetails',
meta: {
showGoBack: true,
},
component: () => import('@/views/reviewArchiPoliticeCheck/details.vue'),
},
{
......@@ -252,6 +279,9 @@ const routes = [
{
path: '/main/conceptualExamine', // 概设材料审查页面
name: 'conceptualExamine',
meta: {
showGoBack: true,
},
component: () => import('@/views/conceptualReview/Examine.vue'),
},
{
......@@ -272,6 +302,9 @@ const routes = [
{
path: '/main/onlineReview', // 评审意见编制- 在线辅助审核
name: 'onlineReview',
meta: {
showGoBack: true,
},
component: () => import('@/views/conceptualViewOrg/OnlineReview.vue'),
},
{
......@@ -296,10 +329,41 @@ const routes = [
component: () => import('@/views/architectureFollowExamine/index.vue'),
},
{
path: '/main/architectureFollowExamineDetails', // 架构督查 - 架构遵从检查-详情
name: 'architectureFollowExamineDetails',
meta: {
showGoBack: true,
},
component: () =>
import('@/views/architectureFollowExamine/details.vue'),
},
{
path: '/main/artPolicyExamine', // 架构督查-技术政策审查
name: 'artPolicyExamine',
component: () => import('@/views/artPolicyExamine/index.vue'),
},
{
path: '/main/collectDataConfiguration', // 架构督查 - 收集资料配置
name: 'collectDataConfiguration',
component: () => import('@/views/collectDataConfiguration/index.vue'),
},
{
path: '/main/supervisionDatacollection', // 架构督查 - 督查资料收集
name: 'supervisionDataCollection',
component: () => import('@/views/supervisionDataCollection/index.vue'),
},
{
path: '/main/architectureInspectionAnalysis', // 架构督查 - 架构督查分析
name: 'architectureInspectionAnalysis',
component: () =>
import('@/views/architectureInspectionAnalysis/index.vue'),
},
{
path: '/main/examine', // 架构督查 - 架构督查分析
name: 'examine',
component: () => import('@/views/artPolicyExamine/Examine.vue'),
},
],
},
]
......
......@@ -2,16 +2,15 @@ import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import { getAllBreadcrumbList } from '@/utils'
import { menuOptions } from '@/views/Main/menu'
export default new Vuex.Store({
state: {
},
state: {},
getters: {
// 递归处理后的所有面包屑导航列表
breadcrumbListGet: (state) => getAllBreadcrumbList(menuOptions),
},
mutations: {
},
actions: {
},
modules: {
}
mutations: {},
actions: {},
modules: {},
})
$color-primary: #0d867f;
$color-primary: #0d857f;
/deep/ .el-dialog__header {
background-color: $color-primary;
text-align: left;
......@@ -17,3 +17,9 @@ $color-primary: #0d867f;
/deep/ .el-dialog__headerbtn:hover .el-dialog__close {
color: #fff;
}
/deep/ .el-table th.el-table__cell {
background-color: #f2f9f9 !important;
font-weight: bold;
// font-size: 16px;
color: #333333;
}
/* 面包屑动画 */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all 0.5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all 0.5s;
}
.breadcrumb-leave-active {
position: absolute;
}
/*
架构督查 收集资料配置
*/
// 状态
export const stateCode = [
{ label: '未发布', value: 0 },
{ label: '已发布', value: 1 },
]
// 指标级别
export const indexLevel = [
{ label: '一级指标', value: '1' },
{ label: '二级指标', value: '2' },
{ label: '三级指标', value: '3' },
]
// 材料类型
export const materialTypeList = [
{ label: '项目可行性研究报告', value: '0'},
{ label: '技术规范书', value: '1'},
{ label: '项目启动文件', value: '2'},
{ label: '业务需求说明书', value: '3'},
{ label: '软件需求说明书', value: '4'},
{ label: '概要设计说明书', value: '5'},
{ label: '详细设计说明书', value: '6'},
{ label: '数据库设计说明书', value: '7'},
{ label: '实施方案', value: '8'},
{ label: '安全防护方案', value: '9'},
{ label: '系统部署方案', value: '10'},
{ label: '系统应急预案及快速恢复方案', value: '11'},
]
export const superStateCode = [
{ label: '未发布', value: 0 },
{ label: '已发布', value: 1 },
]
\ No newline at end of file
......@@ -78,3 +78,49 @@ export const completionStatus = [
{ label: '未完成', value: 0 },
{ label: '已完成', value: 1 },
]
export const subjectType = [
{ label: '总部', value: 1 },
{ label: '省公司', value: 2 },
]
export const collectState = [
{ label: '已停用', value: 0 },
{ label: '已发布', value: 1 },
{ label: '暂存', value: 2 },
]
export const whether = [
{ label: '否', value: 0 },
{ label: '是', value: 1 },
]
export const analysisState = [
{ label: '未解析', value: 0 },
{ label: '已解析', value: 1 },
{ label: '解析失败', value: 2 },
]
export const architectureFollowsReviewEnum = [
{
label: '业务架构遵从',
value: 'BUSINESS_ARCHITECTURE_CONFORMANCE_SUPERVISE',
},
{
label: '应用架构遵从',
value: 'APPLICATION_ARCHITECTURE_CONFORMANCE_SUPERVISE',
},
{
label: '技术架构遵从',
value: 'TECHNICAL_ARCHITECTURE_CONFORMANCE_SUPERVISE',
},
{ label: '数据架构遵从', value: 'DATA_ARCHITECTURE_CONFORMANCE_SUPERVISE' },
{
label: '安全架构遵从',
value: 'SECURITY_ARCHITECTURE_CONFORMANCE_SUPERVISE',
},
]
export const rectificationState = [
{ label: '待整改', value: 0 },
{ label: '已整改', value: 1 },
{ label: '整改未通过', value: 2 },
{ label: '已关闭', value: 3 },
]
import { getDianXingAnLiSelectData } from '@/api/index.js'
export const base64ToBlob = function (base64Data) {
// const arr = base64Data.split(',')
// const fileType = arr[0].match(/:(.*?);/)[1]
const bstr = atob(base64Data)
let l = bstr.length
const u8Arr = new Uint8Array(l)
while (l--) {
u8Arr[l] = bstr.charCodeAt(l)
}
return new Blob([u8Arr], {
type: 'image',
})
}
/**
* @description 使用递归找出所有面包屑存储到 vuex 中
* @param {Array} menuList 菜单列表
* @param {Array} parent 父级菜单
* @param {Object} result 处理后的结果
* @returns {Object}
*/
export const getAllBreadcrumbList = (menuList, parent = [], result = {}) => {
for (const item of menuList) {
result[item.path] = [...parent, item]
if (item.children)
getAllBreadcrumbList(item.children, result[item.path], result)
}
return result
}
/**
* @description: 获取字典方法
* @param {String} key 查询字典的key
* @return {Array} 对应字典集合
* @author: pan
*/
export async function getDictTypeOptions(key) {
var dictTypeOptions = []
var storedDic = localStorage.getItem('dic_' + key)
if (storedDic) {
dictTypeOptions = JSON.parse(storedDic)
} 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)
}
// console.log('dictTypeOptions', dictTypeOptions)
return dictTypeOptions
}
.isActive {
color: $color-primary !important;
}
.goBack {
cursor: pointer;
}
.main {
height: 100%;
}
.top_menu_container {
/* margin-bottom: 20px; */
height: 125px;
}
.left_menu_and_drawio_container {
display: flex;
height: calc(100% - 178px);
width: calc(100% - 40px);
margin: 30px 20px 20px 20px;
border-top: 6px solid #0d867f;
box-shadow: 10px 10px 30px 30px rgba(201, 226, 225, 1);
}
.el-breadcrumb {
height: 30px;
margin-left: 20px;
line-height: 30px;
}
/* .left_menu_container{
width: 6%;
} */
.logo_title_container {
height: 64px;
display: flex;
align-items: center;
background-color: rgb(13, 134, 127);
color: #fff;
justify-content: space-between;
}
.left_container {
display: flex;
align-items: center;
}
.logo_title {
font-weight: bold;
font-size: 25px;
}
.system_logo {
width: 42px;
margin-left: 20px;
margin-right: 20px;
}
.operate_menu {
width: 350px;
height: 35px;
font-size: 14px;
font-weight: 500;
display: flex;
background-color: rgba(255, 255, 255, 0.2);
border-radius: 19px 19px 19px 19px;
margin-right: 24px;
justify-content: space-around;
align-items: center;
}
.line {
height: 16px;
border: 0.5px solid #fff;
}
.operate_title {
margin-left: 6px;
}
.menu_title {
font-size: 18px;
font-weight: bold;
color: #666;
position: relative;
&::before {
content: '';
position: absolute;
// background: url('@/assets/main/4icon_default.png') no-repeat center;
background-size: cover;
width: 20px;
height: 20px;
position: absolute;
left: -25px;
top: 9%;
}
&:hover {
color: $color-primary;
}
&_0::before {
background: url('@/assets/main/4icon_default.png') no-repeat center;
background-size: cover;
}
&_0:hover {
&::before {
background: url('@/assets/main/4icon_press.png') no-repeat center;
background-size: cover;
}
}
&_1::before {
background: url('@/assets/main/1icon_default.png') no-repeat center;
background-size: cover;
}
&_1:hover {
&::before {
background: url('@/assets/main/1icon_press.png') no-repeat center;
background-size: cover;
}
}
&_2::before {
background: url('@/assets/main/2icon_default.png') no-repeat center;
background-size: cover;
}
&_2:hover {
&::before {
background: url('@/assets/main/2icon_press.png') no-repeat center;
background-size: cover;
}
}
&_3::before {
background: url('@/assets/main/3icon_default.png') no-repeat center;
background-size: cover;
}
&_3:hover {
&::before {
background: url('@/assets/main/3icon_press.png') no-repeat center;
background-size: cover;
}
}
&_4::before {
background: url('@/assets/main/5icon_default.png') no-repeat center;
background-size: cover;
}
&_4:hover {
&::before {
background: url('@/assets/main/5icon_press.png') no-repeat center;
background-size: cover;
}
}
&.isActive {
&::after {
content: '';
position: absolute;
bottom: -17px;
left: -20px;
width: calc(100% + 20px);
height: 4px;
background-color: $color-primary;
}
}
&_0.isActive::before {
background: url('@/assets/main/4icon_press.png') no-repeat center;
background-size: cover;
}
&_1.isActive::before {
background: url('@/assets/main/1icon_press.png') no-repeat center;
background-size: cover;
}
&_2.isActive::before {
background: url('@/assets/main/2icon_press.png') no-repeat center;
background-size: cover;
}
&_3.isActive::before {
background: url('@/assets/main/3icon_press.png') no-repeat center;
background-size: cover;
}
&_4.isActive::before {
background: url('@/assets/main/5icon_press.png') no-repeat center;
background-size: cover;
}
}
.under_line {
position: absolute;
bottom: -25px;
left: 0;
width: 100%;
height: 6px;
background-color: #0d867f;
display: none;
}
.operate_menu_item {
display: flex;
align-items: center;
cursor: pointer;
}
/deep/ .is-leaf {
background-color: rgb(245, 246, 250) !important;
}
.menu_icon {
width: 20px;
height: 20px;
position: absolute;
left: -25px;
top: 9%;
}
.menu_icon_active {
width: 20px;
height: 20px;
position: absolute;
left: -25px;
top: 9%;
display: none;
}
.menu_container {
display: flex;
align-items: center;
justify-content: center;
height: 60px;
}
.menu_1_container {
display: flex;
justify-content: space-around;
}
.menu_1_item_line {
width: 1px;
height: 240px;
}
.menu_1_item_title {
color: #666;
font-weight: bold;
font-size: 16px;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.menu_1_item_subtitle {
display: flex;
align-items: center;
margin-bottom: 10px;
cursor: pointer;
}
.menu_1_item_subtitle:hover {
color: #0d867f;
}
......@@ -36,7 +36,7 @@
ref="popoverRef"
>
<div slot="reference">
<img
<!-- <img
class="menu_icon"
src="@/assets/main/4icon_default.png"
alt=""
......@@ -45,10 +45,16 @@
class="menu_icon_active"
src="@/assets/main/4icon_press.png"
alt=""
/>
<span class="menu_title">{{ item.name }}</span>
<p class="under_line"></p>
/> -->
<span
class="menu_title"
:class="[
{ isActive: isTopMenuActive(index) },
`menu_title_${index}`,
]"
>{{ item.name }}</span
>
<!-- <p class="under_line"></p> -->
</div>
<div class="menu_1_container">
<div
......@@ -77,7 +83,11 @@
:key="index3"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">{{ item3.name }}</span>
<span
style="margin-left: 5px"
:class="{ isActive: isActive(item3.path) }"
>{{ item3.name }}</span
>
</div>
</div>
<img
......@@ -91,13 +101,15 @@
</div>
</el-popover>
</div>
<div class="flex-b-c">
<el-breadcrumb separator="/">
<el-breadcrumb-item>{{ breadcrumb1 }}</el-breadcrumb-item>
<!-- <el-breadcrumb-item>{{ breadcrumb1 }}</el-breadcrumb-item>
<el-breadcrumb-item>{{ breadcrumb2 }}</el-breadcrumb-item>
<el-breadcrumb-item>{{ breadcrumb3 }}</el-breadcrumb-item>
<!-- <el-breadcrumb-item
<el-breadcrumb-item>{{ breadcrumb3 }}</el-breadcrumb-item> -->
<transition-group name="breadcrumb">
<el-breadcrumb-item
v-for="(item, index) in breadcrumbList"
:key="item.path"
:key="item.name"
class="flex"
>
<div
......@@ -106,8 +118,28 @@
>
<span class="breadcrumb-title">{{ item.name }}</span>
</div>
</el-breadcrumb-item> -->
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
<div class="flex-c m-r-20 goBack" v-if="showGoBack" @click="fnGoBack()">
<svg
t="1711716188307"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="4258"
width="16"
height="16"
>
<path
d="M927.2 610.5c0 143-116.3 259.4-259.3 259.4H196.1c-12.9 0-23.4-10.4-23.4-23.4 0-12.9 10.4-23.4 23.4-23.4h471.7c117.2 0 212.6-95.4 212.6-212.6S785 397.8 667.8 397.8h-458l199.6 199.6c9.1 9.1 9.1 23.9 0 33-4.6 4.6-10.5 6.8-16.5 6.8s-11.9-2.3-16.5-6.8L137 391.1c-9.1-9.1-9.1-23.9 0-33l239.6-239.5c9.1-9.1 23.9-9.1 33 0s9.1 23.9 0 33L210 351.2h457.9c143 0 259.3 116.3 259.3 259.3z"
p-id="4259"
></path>
</svg>
<span>返回目录</span>
</div>
</div>
</div>
<div class="left_menu_and_drawio_container">
<!-- <div class="left_menu_container">
......@@ -118,7 +150,7 @@
</div>
</template>
<script>
import $ from 'jquery'
// import $ from 'jquery'
import { menuOptions } from './menu'
export default {
components: {},
......@@ -136,20 +168,20 @@ export default {
}
},
mounted() {
$('.menu_item').hover(
function () {
$(this).find('.menu_title').css('color', '#0D867F')
$(this).find('.menu_icon').css('display', 'none')
$(this).find('.menu_icon_active').css('display', 'inline-block')
$(this).find('.under_line').css('display', 'block')
},
function () {
$(this).find('.menu_title').css('color', '#666')
$(this).find('.menu_icon').css('display', 'inline-block')
$(this).find('.menu_icon_active').css('display', 'none')
$(this).find('.under_line').css('display', 'none')
},
)
// $('.menu_item').hover(
// function () {
// $(this).find('.menu_title').css('color', '#0D867F')
// $(this).find('.menu_icon').css('display', 'none')
// $(this).find('.menu_icon_active').css('display', 'inline-block')
// $(this).find('.under_line').css('display', 'block')
// },
// function () {
// $(this).find('.menu_title').css('color', '#666')
// $(this).find('.menu_icon').css('display', 'inline-block')
// $(this).find('.menu_icon_active').css('display', 'none')
// $(this).find('.under_line').css('display', 'none')
// },
// )
},
computed: {
breadcrumbList() {
......@@ -159,8 +191,29 @@ export default {
] || []
)
},
showGoBack() {
return this.$route.meta.showGoBack
},
},
methods: {
fnGoBack() {
this.$router.go(-1)
},
isTopMenuActive(index) {
if (
JSON.stringify(this.menuOptions[index]).includes(this.$route.path) &&
this.$route.path != '/main'
) {
return true
}
},
isActive(path) {
if (path === this.$route.path) {
return true
} else {
return false
}
},
onBreadcrumbClick(item, index) {
if (index !== this.breadcrumbList.length - 1) this.$router.push(item.path)
},
......@@ -439,135 +492,7 @@ export default {
<style lang="scss" scoped>
@import '@/styles/common.scss';
.main {
height: 100%;
}
.top_menu_container {
/* margin-bottom: 20px; */
height: 125px;
}
.left_menu_and_drawio_container {
display: flex;
height: calc(100% - 178px);
width: calc(100% - 40px);
margin: 30px 20px 20px 20px;
border-top: 6px solid #0d867f;
box-shadow: 10px 10px 30px 30px rgba(201, 226, 225, 1);
}
.el-breadcrumb {
height: 30px;
margin-left: 20px;
line-height: 30px;
}
/* .left_menu_container{
width: 6%;
} */
.logo_title_container {
height: 64px;
display: flex;
align-items: center;
background-color: rgb(13, 134, 127);
color: #fff;
justify-content: space-between;
}
.left_container {
display: flex;
align-items: center;
}
.logo_title {
font-weight: bold;
font-size: 25px;
}
.system_logo {
width: 42px;
margin-left: 20px;
margin-right: 20px;
}
.operate_menu {
width: 350px;
height: 35px;
font-size: 14px;
font-weight: 500;
display: flex;
background-color: rgba(255, 255, 255, 0.2);
border-radius: 19px 19px 19px 19px;
margin-right: 24px;
justify-content: space-around;
align-items: center;
}
.line {
height: 16px;
border: 0.5px solid #fff;
}
.operate_title {
margin-left: 6px;
}
.menu_title {
font-size: 18px;
font-weight: bold;
color: #666;
}
.under_line {
position: absolute;
bottom: -25px;
left: 0;
width: 100%;
height: 6px;
background-color: #0d867f;
display: none;
}
.operate_menu_item {
display: flex;
align-items: center;
cursor: pointer;
}
/deep/ .is-leaf {
background-color: rgb(245, 246, 250) !important;
}
.menu_icon {
width: 20px;
height: 20px;
position: absolute;
left: -25px;
top: 9%;
}
.menu_icon_active {
width: 20px;
height: 20px;
position: absolute;
left: -25px;
top: 9%;
display: none;
}
.menu_container {
display: flex;
align-items: center;
justify-content: center;
height: 60px;
}
.menu_1_container {
display: flex;
justify-content: space-around;
}
.menu_1_item_line {
width: 1px;
height: 240px;
}
.menu_1_item_title {
color: #666;
font-weight: bold;
font-size: 16px;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.menu_1_item_subtitle {
display: flex;
align-items: center;
margin-bottom: 10px;
cursor: pointer;
}
.menu_1_item_subtitle:hover {
color: #0d867f;
}
@import '@/styles/transition.scss';
@import '@/styles/elementui.scss';
@import './index.scss';
</style>
......@@ -53,6 +53,12 @@ export const menuOptions = [
{
name: '元模型管理',
path: '/main/metaModelList',
children: [
{
name: '元模型管理详情',
path: '/main/metaModelListDetails',
},
],
},
{
name: '架构视图配置',
......@@ -74,6 +80,12 @@ export const menuOptions = [
{
name: '架构视图管理',
path: '/main/archiViewManage',
children: [
{
name: '架构视图管理详情',
path: '/main/archiViewManageDetails',
},
],
},
{
name: '企业中台服务清单',
......@@ -126,14 +138,32 @@ export const menuOptions = [
{
name: '系统架构视图设计',
path: '/main/systemArchiViewDesign',
children: [
{
name: '系统架构视图设计详情',
path: '/main/systemArchiViewDesignDetails',
},
],
},
{
name: '概设阶段架构设计',
path: '/main/summaryArchiDesign',
children: [
{
name: '概设阶段视图设计详情',
path: '/main/summaryArchiDesignDetails',
},
],
},
{
name: '其他视图设计',
path: '/main/otherArchiDesign',
children: [
{
name: '其他视图设计详情',
path: '/main/otherArchiDesignDetails',
},
],
},
],
},
......@@ -143,14 +173,32 @@ export const menuOptions = [
{
name: '评审情况(概要设计)',
path: '/main/reviewSituation',
children: [
{
name: '评审情况',
path: '/main/reviewSituationDetails',
},
],
},
{
name: '概设架构遵从检查',
path: '/main/reviewArchiFollowCheck',
children: [
{
name: '审查',
path: '/main/reviewArchiFollowCheckDetails',
},
],
},
{
name: '概设架构政策审查',
path: '/main/reviewArchiPoliticeCheck',
children: [
{
name: '审查',
path: '/main/reviewArchiPoliticeCheckDetails',
},
],
},
],
},
......@@ -178,6 +226,12 @@ export const menuOptions = [
{
name: '概设材料意见编制',
path: '/main/conceptualViewOrg',
children: [
{
name: '在线辅助审核',
path: '/main/onlineReview',
},
],
},
{
name: '概设关联业务管理',
......@@ -194,15 +248,15 @@ export const menuOptions = [
children: [
{
name: '收集资料配置',
path: '',
path: '/main/collectDataConfiguration',
},
{
name: '督查材料收集',
path: '',
path: '/main/supervisionDataCollection',
},
{
name: '架构督查分析',
path: '',
path: '/main/architectureInspectionAnalysis',
},
{
name: '督查通报管理',
......@@ -215,6 +269,12 @@ export const menuOptions = [
{
name: '架构遵从检查',
path: '/main/architectureFollowExamine',
children: [
{
name: '遵从检查',
path: '/main/architectureFollowExamineDetails',
},
],
},
{
name: '技术政策审查',
......@@ -279,6 +339,12 @@ export const menuOptions = [
{
name: '报告模板关联使用',
path: '/main/reportTemplateRelativeUse',
children: [
{
path: '/main/documentEdit',
name: '编辑文档',
},
],
},
],
},
......
This diff could not be displayed because it is too large.
<!--
* @Description: 架构督查-架构遵从检查
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-26 18:27:18
* @LastEditors: pan
* @LastEditTime: 2024-03-28 14:18:52
-->
<template>
<div class="architectureFollowExamine">
<el-tabs class="m-lr-10" v-model="activeName">
<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 { getArchiViewManage } from '@/api/index.js'
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: '',
leftSelectOptions: [],
rightSelectOptions: [],
leftSelect: undefined,
rightSelect: undefined,
}
},
components: {
Tab1,
Tab2,
Tab3,
Tab4,
Tab5,
},
created() {
// this.getLeftTree()
// this.getRightTree()
},
methods: {
getLeftTree() {
getArchiViewManage({ archiStage: 2 }).then((res) => {
if (res.code === 200) {
this.leftSelectOptions = res.data
this.leftSelect = this.leftSelectOptions[0].viewId
}
})
},
getRightTree() {
getArchiViewManage({ archiStage: 3 }).then((res) => {
if (res.code === 200) {
this.rightSelectOptions = res.data
this.rightSelect = this.rightSelectOptions[0].viewId
}
})
},
},
}
</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>
<!--
* @Description: 架构督查-架构遵从检查
* @Description: 架构督查-架构遵从检查列表
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-26 18:27:18
* @Date: 2024-03-26 19:31:32
* @LastEditors: pan
* @LastEditTime: 2024-03-26 19:08:43
* @LastEditTime: 2024-03-28 09:44:32
-->
<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
<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"
>
<keep-alive>
<component :is="item.componentTag"></component>
</keep-alive>
</el-tab-pane>
</el-tabs>
</table-config>
</template>
</list-page>
</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 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 { queryArchitectureFollowExamine } from '@/api/interface'
import { buildType } from '@/utils/dictionary'
export default {
name: 'architectureFollowExamine',
components: {
ListPage,
SearchForm,
TableConfig,
},
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' },
selectRows: [],
query: {
url: queryArchitectureFollowExamine,
method: 'post',
queryParam: {},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
computed: {
formOptions() {
return [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '建设类型',
width: '100px',
prop: 'buildType',
element: 'el-select', // 指定elementui组件
dictType: 'build_type',
placeholder: '请选择', // elementui组件属性
},
]
},
columns() {
return [
{ label: '序号', type: 'index', width: '80px' },
{
label: '系统名称',
prop: 'appName',
},
{
label: '建设类型', // label文字
prop: 'buildType', // 字段名
options: buildType,
collectionType: true,
width: '120px',
},
{
label: '项目名称',
prop: 'projectName',
},
{
label: '承建单位',
prop: 'buildOrgName',
},
{
label: '项目经理',
prop: 'projectManager',
},
{
label: '创建人',
prop: 'createMan',
},
{
label: '创建时间',
prop: 'createTime',
},
{
label: '操作',
type: 'operation',
width: '240px',
actionButtons: [
{
title: '遵从检查',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
},
],
componentTag: '',
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) {
this.$router.push({
path: '/main/architectureFollowExamineDetails',
query: {
row: JSON.stringify(row),
},
})
},
},
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>
......@@ -3,15 +3,34 @@
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>系统业务架构视图</span>
</div>
<div class="left_container_content flex-1">
<el-select
class="select-title"
@change="leftSelectChange"
v-model="leftSelect"
>
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in leftSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -21,13 +40,26 @@
<i class="el-icon-caret-right icon"></i>
<span>概设阶段业务架构视图</span>
</div>
<el-select class="select-title" v-model="rightSelect">
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in rightSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div
class="right_container_content flex-1"
v-loading="rightLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -55,8 +87,10 @@
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
saveArchitectureFollows,
viewArchitectureFollows,
qViewArchitectureFollows,
getArchiViewManage,
} from '@/api/index.js'
export default {
name: 'tab1',
......@@ -66,37 +100,106 @@ export default {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
leftLoading: false,
rightLoading: false,
leftSelect: undefined,
leftSelectOptions: [],
rightSelect: undefined,
rightSelectOptions: [],
row: {},
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getLeftTree().then((res) => {
this.getDetail()
})
this.getRightTree()
this.getLeftQview()
this.getRightQview()
},
methods: {
leftSelectChange() {
this.getDetail()
},
commonParams() {
return {
reviewEnum: 'BUSINESS_ARCHITECTURE_CONFORMANCE_SUPERVISE',
appId: this.row.appId,
reviewState: 0,
}
},
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
prjId: this.$route.query.prjId,
...this.commonParams(),
subViewId: this.leftSelect,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
viewArchitectureFollows(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
getLeftTree() {
return getArchiViewManage({ archiStage: 2 }).then((res) => {
if (res.code === 200) {
this.leftSelectOptions = res.data
this.leftSelect = this.leftSelectOptions[0].viewId
}
})
},
getRightTree() {
getArchiViewManage({ archiStage: 3 }).then((res) => {
if (res.code === 200) {
this.rightSelectOptions = res.data
this.rightSelect = this.rightSelectOptions[0].viewId
}
})
},
getLeftQview() {
const params = {
appId: this.row.appId,
archiBelongId: 1,
archiStage: 2,
}
this.leftLoading = true
qViewArchitectureFollows(params).then((res) => {
this.leftLoading = false
if (res.code === 200) {
this.leftBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
getRightQview() {
const params = {
appId: this.row.appId,
archiBelongId: 1,
archiStage: 3,
}
this.rightLoading = true
qViewArchitectureFollows(params).then((res) => {
this.rightLoading = false
if (res.code === 200) {
this.rightBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
handleSave() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
prjId: this.$route.query.prjId,
reviewState: this.isMeet,
...this.commonParams(),
reviewSuggestion: this.resultContent,
subViewId: this.leftSelect,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
saveArchitectureFollows(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
......
......@@ -3,15 +3,34 @@
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>系统应用架构视图</span>
<span>系统业务架构视图</span>
</div>
<el-select
class="select-title"
@change="leftSelectChange"
v-model="leftSelect"
>
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in leftSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="left_container_content flex-1">
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -19,15 +38,28 @@
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段应用架构视图</span>
<span>概设阶段业务架构视图</span>
</div>
<el-select class="select-title" v-model="rightSelect">
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in rightSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div
class="right_container_content flex-1"
v-loading="rightLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -55,8 +87,10 @@
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
saveArchitectureFollows,
viewArchitectureFollows,
qViewArchitectureFollows,
getArchiViewManage,
} from '@/api/index.js'
export default {
name: 'tab2',
......@@ -66,37 +100,106 @@ export default {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
leftLoading: false,
rightLoading: false,
leftSelect: undefined,
leftSelectOptions: [],
rightSelect: undefined,
rightSelectOptions: [],
row: {},
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getLeftTree().then((res) => {
this.getDetail()
})
this.getRightTree()
this.getLeftQview()
this.getRightQview()
},
methods: {
leftSelectChange() {
this.getDetail()
},
commonParams() {
return {
reviewEnum: 'APPLICATION_ARCHITECTURE_CONFORMANCE_SUPERVISE',
appId: this.row.appId,
reviewState: 0,
}
},
getDetail() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
prjId: this.$route.query.prjId,
...this.commonParams(),
subViewId: this.leftSelect,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
viewArchitectureFollows(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
getLeftTree() {
return getArchiViewManage({ archiStage: 2 }).then((res) => {
if (res.code === 200) {
this.leftSelectOptions = res.data
this.leftSelect = this.leftSelectOptions[0].viewId
}
})
},
getRightTree() {
getArchiViewManage({ archiStage: 3 }).then((res) => {
if (res.code === 200) {
this.rightSelectOptions = res.data
this.rightSelect = this.rightSelectOptions[0].viewId
}
})
},
getLeftQview() {
const params = {
appId: this.row.appId,
archiBelongId: 2,
archiStage: 2,
}
this.leftLoading = true
qViewArchitectureFollows(params).then((res) => {
this.leftLoading = false
if (res.code === 200) {
this.leftBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
getRightQview() {
const params = {
appId: this.row.appId,
archiBelongId: 2,
archiStage: 3,
}
this.rightLoading = true
qViewArchitectureFollows(params).then((res) => {
this.rightLoading = false
if (res.code === 200) {
this.rightBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
handleSave() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
...this.commonParams(),
reviewSuggestion: this.resultContent,
subViewId: this.leftSelect,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
saveArchitectureFollows(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
......
......@@ -3,15 +3,34 @@
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>系统数据架构视图</span>
<span>系统业务架构视图</span>
</div>
<el-select
class="select-title"
@change="leftSelectChange"
v-model="leftSelect"
>
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in leftSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="left_container_content flex-1">
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -19,15 +38,28 @@
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段数据架构视图</span>
<span>概设阶段业务架构视图</span>
</div>
<el-select class="select-title" v-model="rightSelect">
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in rightSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div
class="right_container_content flex-1"
v-loading="rightLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -55,8 +87,10 @@
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
saveArchitectureFollows,
viewArchitectureFollows,
qViewArchitectureFollows,
getArchiViewManage,
} from '@/api/index.js'
export default {
name: 'tab3',
......@@ -66,37 +100,106 @@ export default {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
leftLoading: false,
rightLoading: false,
leftSelect: undefined,
leftSelectOptions: [],
rightSelect: undefined,
rightSelectOptions: [],
row: {},
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getLeftTree().then((res) => {
this.getDetail()
})
this.getRightTree()
this.getLeftQview()
this.getRightQview()
},
methods: {
leftSelectChange() {
this.getDetail()
},
commonParams() {
return {
reviewEnum: 'TECHNICAL_ARCHITECTURE_CONFORMANCE_SUPERVISE',
appId: this.row.appId,
reviewState: 0,
}
},
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
prjId: this.$route.query.prjId,
...this.commonParams(),
subViewId: this.leftSelect,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
viewArchitectureFollows(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
getLeftTree() {
return getArchiViewManage({ archiStage: 2 }).then((res) => {
if (res.code === 200) {
this.leftSelectOptions = res.data
this.leftSelect = this.leftSelectOptions[0].viewId
}
})
},
getRightTree() {
getArchiViewManage({ archiStage: 3 }).then((res) => {
if (res.code === 200) {
this.rightSelectOptions = res.data
this.rightSelect = this.rightSelectOptions[0].viewId
}
})
},
getLeftQview() {
const params = {
appId: this.row.appId,
archiBelongId: 3,
archiStage: 2,
}
this.leftLoading = true
qViewArchitectureFollows(params).then((res) => {
this.leftLoading = false
if (res.code === 200) {
this.leftBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
getRightQview() {
const params = {
appId: this.row.appId,
archiBelongId: 3,
archiStage: 3,
}
this.rightLoading = true
qViewArchitectureFollows(params).then((res) => {
this.rightLoading = false
if (res.code === 200) {
this.rightBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
handleSave() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
...this.commonParams(),
reviewSuggestion: this.resultContent,
subViewId: this.leftSelect,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
saveArchitectureFollows(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
......
......@@ -3,15 +3,34 @@
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>系统技术架构视图</span>
<span>系统业务架构视图</span>
</div>
<el-select
class="select-title"
@change="leftSelectChange"
v-model="leftSelect"
>
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in leftSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="left_container_content flex-1">
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -19,15 +38,28 @@
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段技术架构视图</span>
<span>概设阶段业务架构视图</span>
</div>
<el-select class="select-title" v-model="rightSelect">
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in rightSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div
class="right_container_content flex-1"
v-loading="rightLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -55,8 +87,10 @@
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
saveArchitectureFollows,
viewArchitectureFollows,
qViewArchitectureFollows,
getArchiViewManage,
} from '@/api/index.js'
export default {
name: 'tab4',
......@@ -66,37 +100,106 @@ export default {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
leftLoading: false,
rightLoading: false,
leftSelect: undefined,
leftSelectOptions: [],
rightSelect: undefined,
rightSelectOptions: [],
row: {},
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getLeftTree().then((res) => {
this.getDetail()
})
this.getRightTree()
this.getLeftQview()
this.getRightQview()
},
methods: {
leftSelectChange() {
this.getDetail()
},
commonParams() {
return {
reviewEnum: 'DATA_ARCHITECTURE_CONFORMANCE_SUPERVISE',
appId: this.row.appId,
reviewState: 0,
}
},
getDetail() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
prjId: this.$route.query.prjId,
...this.commonParams(),
subViewId: this.leftSelect,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
viewArchitectureFollows(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
getLeftTree() {
return getArchiViewManage({ archiStage: 2 }).then((res) => {
if (res.code === 200) {
this.leftSelectOptions = res.data
this.leftSelect = this.leftSelectOptions[0].viewId
}
})
},
getRightTree() {
getArchiViewManage({ archiStage: 3 }).then((res) => {
if (res.code === 200) {
this.rightSelectOptions = res.data
this.rightSelect = this.rightSelectOptions[0].viewId
}
})
},
getLeftQview() {
const params = {
appId: this.row.appId,
archiBelongId: 4,
archiStage: 2,
}
this.leftLoading = true
qViewArchitectureFollows(params).then((res) => {
this.leftLoading = false
if (res.code === 200) {
this.leftBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
getRightQview() {
const params = {
appId: this.row.appId,
archiBelongId: 4,
archiStage: 3,
}
this.rightLoading = true
qViewArchitectureFollows(params).then((res) => {
this.rightLoading = false
if (res.code === 200) {
this.rightBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
handleSave() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
...this.commonParams(),
reviewSuggestion: this.resultContent,
subViewId: this.leftSelect,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
saveArchitectureFollows(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
......
......@@ -3,15 +3,34 @@
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>系统安全架构视图</span>
<span>系统业务架构视图</span>
</div>
<el-select
class="select-title"
@change="leftSelectChange"
v-model="leftSelect"
>
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in leftSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="left_container_content flex-1">
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -19,15 +38,28 @@
<div class="right_container_title flex-b-c">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>概设阶段安全架构视图</span>
<span>概设阶段业务架构视图</span>
</div>
<el-select class="select-title" v-model="rightSelect">
<el-option
:label="item.viewName"
:value="item.viewId"
v-for="item in rightSelectOptions"
:key="item.viewId"
></el-option>
</el-select>
</div>
<div class="right_container_content flex-1">
<div
class="right_container_content flex-1"
v-loading="rightLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in rightBaseOptions"
:key="idx"
:src="item"
alt=""
class="w-100 h-100"
/>
</div>
</div>
......@@ -55,8 +87,10 @@
<script>
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
saveArchitectureFollows,
viewArchitectureFollows,
qViewArchitectureFollows,
getArchiViewManage,
} from '@/api/index.js'
export default {
name: 'tab5',
......@@ -66,37 +100,106 @@ export default {
resultContent: '',
leftBaseOptions: [],
rightBaseOptions: [],
leftLoading: false,
rightLoading: false,
leftSelect: undefined,
leftSelectOptions: [],
rightSelect: undefined,
rightSelectOptions: [],
row: {},
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getLeftTree().then((res) => {
this.getDetail()
})
this.getRightTree()
this.getLeftQview()
this.getRightQview()
},
methods: {
leftSelectChange() {
this.getDetail()
},
commonParams() {
return {
reviewEnum: 'SECURITY_ARCHITECTURE_CONFORMANCE_SUPERVISE',
appId: this.row.appId,
reviewState: 0,
}
},
getDetail() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
prjId: this.$route.query.prjId,
...this.commonParams(),
subViewId: this.leftSelect,
}
queryReviewArchiFollowCheckRightSuggestionDetails(params).then((res) => {
viewArchitectureFollows(params).then((res) => {
if (res.code === 200) {
this.resultContent = res.data.reviewSuggestion
this.isMeet = res.data.reviewState
}
})
},
getLeftTree() {
return getArchiViewManage({ archiStage: 2 }).then((res) => {
if (res.code === 200) {
this.leftSelectOptions = res.data
this.leftSelect = this.leftSelectOptions[0].viewId
}
})
},
getRightTree() {
getArchiViewManage({ archiStage: 3 }).then((res) => {
if (res.code === 200) {
this.rightSelectOptions = res.data
this.rightSelect = this.rightSelectOptions[0].viewId
}
})
},
getLeftQview() {
const params = {
appId: this.row.appId,
archiBelongId: 5,
archiStage: 2,
}
this.leftLoading = true
qViewArchitectureFollows(params).then((res) => {
this.leftLoading = false
if (res.code === 200) {
this.leftBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
getRightQview() {
const params = {
appId: this.row.appId,
archiBelongId: 5,
archiStage: 3,
}
this.rightLoading = true
qViewArchitectureFollows(params).then((res) => {
this.rightLoading = false
if (res.code === 200) {
this.rightBaseOptions = res.data.map(
(v) => v.metaModelSvg && `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
},
handleSave() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
prjId: this.$route.query.prjId,
reviewState: '0',
...this.commonParams(),
reviewSuggestion: this.resultContent,
subViewId: this.leftSelect,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveReviewArchiFollowCheckRightSuggestion(params).then((res) => {
saveArchitectureFollows(params).then((res) => {
loading.close()
if (res.code == 200) {
this.$message.success('保存成功')
......
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="42%"
@close="handleClose()"
@open="handleOpen"
>
<el-form :inline="true" id="addForm" ref="addForm" :rules="rules" :model="formInfo" label-width="auto" style="text-align: left;">
<template v-if="title == '新增督查指标' || rowData.tab == 'one'">
<el-form-item label="督查方案" prop="supervCode">
<el-select v-model="formInfo.supervCode" size="small" placeholder="请选择" @change="changeSupervCode" :disabled='!display' clearable>
<el-option v-for="item in supervNameList" :key="item.text" :label="item.value" :value="item.text">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="权重" prop="weight">
<el-input type="number" min="0" v-model="formInfo.weight" size="small" placeholder="请输入内容" > </el-input>
</el-form-item>
<br />
<el-form-item label="督查指标" prop="indexName">
<el-radio-group v-model="formInfo.indexLevel" @change="changeRadio" >
<el-radio v-for="item in radioList" :key="item.value" :label="item.value" :disabled='!display'>{{ item.label }}</el-radio >
</el-radio-group>
<br />
<el-select v-if="(formInfo.indexLevel == '2' || formInfo.indexLevel == '3') && display" v-model="formInfo.zhibiao1" size="small" placeholder="请选择" clearable @change="getZhibiaoList('3')">
<el-option v-for="item in zhibiaoList1" :key="item.text" :label="item.value" :value="item.text">
</el-option>
</el-select>
<el-select v-if="formInfo.indexLevel == '3' && display" v-model="formInfo.zhibiao2" size="small" placeholder="请选择" clearable>
<el-option v-for="item in zhibiaoList2" :key="item.text" :label="item.value" :value="item.text">
</el-option>
</el-select>
<el-input v-model="formInfo.indexName" size="small" placeholder="请输入内容" > </el-input>
</el-form-item>
</template>
<template v-if="rowData.tab == 'two'">
<el-form-item label="督查指标名称" prop="indexName">
<el-input v-model="formInfo.indexName" size="small" placeholder="请输入内容" > </el-input>
</el-form-item>
<el-form-item label="评分" prop="score" class="scoreClass">
<el-input type="number" min="1" max='5' v-model="formInfo.score" size="small" placeholder="请输入内容" > </el-input>
</el-form-item>
<br />
<el-form-item label="评审意见" prop="opinion" class="textarea">
<el-input type="textarea" v-model="formInfo.opinion" :rows="3" show-word-limit placeholder="请输入内容" ></el-input>
</el-form-item>
</template>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit" size="mini" >保 存</el-button >
<el-button @click="handleClose()" size="mini">取 消</el-button>
</span>
</el-dialog>
</template>
<script>
import Form from '@/views/collectDataConfiguration/Form.vue'
export default {
components: { Form },
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
edit:{
type: Boolean,
default: false
}
},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
data(){
return {
supervNameList: [],
formInfo: {},
zhibiaoList1: [],
zhibiaoList2: [],
radioList: [
{ value: '1', label: '一级指标' },
{ value: '2', label: '二级指标' },
{ value: '3', label: '三级指标' },
],
display: true,
rules: {
supervCode: [{ required: true, message: '必填项', trigger: 'change' }],
weight: [{ required: true, message: '必填项', trigger: 'blur' }],
indexName: [{ required: true, message: '必填项', trigger: 'blur' }],
score: [{ required: true, message: '必填项', trigger: 'blur' }],
}
}
},
methods: {
getSupervNameList(){
this.$postRequest('/supervIndex/selectDrop', {}).then(res => {
if (res.code === 200) {
this.supervNameList = res.data
} else {
this.supervNameList = []
}
})
},
changeSupervCode(){
// this.changeRadio(this.selectRadio)
this.formInfo.indexLevel = '1'
},
changeRadio(v){
this.selectRadio = v
if(v != '1'){
if(!!this.formInfo.supervCode){
this.getZhibiaoList('2')
}else{
this.$message.warning('请选择督查方案')
}
}
},
getZhibiaoList(level){
this.$postRequest('/supervIndex/selectIndexLevelDrop', {indexLevel: level, supervCode: this.formInfo.supervCode}).then(res => {
if (res.code === 200) {
if(level == '2'){
this.zhibiaoList1 = res.data
}else{
this.zhibiaoList2 = res.data
}
} else {
this.zhibiaoList1 = []
this.zhibiaoList2 = []
}
})
},
handleSubmit() {
this.$refs.addForm.validate((valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
let supervName = this.supervNameList.find(item => item.text == this.formInfo.supervCode).value
let upIndex = this.formInfo.indexLevel - 1 == 0 ? '' : this.formInfo.indexLevel - 1 + ''
let params = this.rowData.tab == 'two' ? {
supervCode: this.formInfo.supervCode,
opinion: this.formInfo.opinion,
score: this.formInfo.score,
id: this.formInfo.id
} : {
...this.formInfo,
supervName,
upIndex
}
let url = this.display ? '/supervIndex/ad' : this.rowData.tab == 'two' ? '/supervIndex/updPf' : '/supervIndex/upd' // 编辑
console.log(params, 'params', url);
this.$postRequest(url, params).then(res => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
this.handleClose()
this.$emit('querySearch', this.display)
}
})
}
})
},
handleClose() {
this.showDialog = false
},
async handleOpen() {
this.getSupervNameList()
if (Object.keys(this.rowData).length) {
this.formInfo = JSON.parse(JSON.stringify(this.rowData))
this.display = false
} else {
this.$nextTick(() => {
this.display = true
this.addInitValue()
this.$refs.addForm.resetFields()
})
}
},
// 添加初始值
addInitValue() {
this.formInfo = {
supervCode: '',
weight: 0,
indexLevel: '1',
// zhibiao1: '',
// zhibiao2: '',
indexName: '',
}
},
}
}
</script>
<style lang="scss" scoped>
@import '@/styles/elementui.scss';
/deep/ .scoreClass {
.el-input {
width: 160px ;
}
}
/deep/ .textarea{
width: 60%;
white-space: nowrap;
.el-form-item__content{
width: 100%;
}
}
.zhibiao1{
float: left;
}
</style>
\ No newline at end of file
<template>
<el-dialog
:title="'指标清单'"
:visible.sync="showDialog"
width="90%"
@close="showDialog = false"
>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
>
</table-config>
</el-dialog>
</template>
<script>
import { architectureDetail } from '@/api/architectureInspection'
import TableConfig from '@/views/collectDataConfiguration/TableConfig.vue'
import { stateCode, indexLevel } from '@/utils/architectureInspectionDis'
export default {
components: { TableConfig },
props: {
title: {
type: String,
default: '',
},
prjCodeDetail: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
},
watch: {
visible: {
handler(v){
if(v){
this.search()
}
}
},
},
data(){
return {
query: {
url: architectureDetail,
method: 'post',
queryParam: {
supervCode: '',
},
},
}
},
computed: {
columns() {
let arr = [
{ label: '序号', type: 'index', width: '80px' },
{ label: '督查方案名称', prop: 'supervName'},
{ label: '督查编码', prop: 'supervCode', width: '150px' },
{ label: '指标名称', prop: 'indexName',width: '150px' },
{ label: '指标级别', prop: 'indexLevel', width: '100px',collectionType: 'indexLevel',
options: indexLevel,
},
{ label: '指标权重', prop: 'weight', width: '100px'},
{ label: '创建时间', prop: 'createTime', width: '100px'},
{ label: '状态', prop: 'state', width: '100px', collectionType: 'stateCode',
options: stateCode,},
]
let operation = [
{
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)
},
},
]
if(this.title == '指标清单'){
return [...arr, ...operation]
}else{
return [...arr,
{ label: '评分', prop: 'score', width: '100px' },
{ label: '评审意见', prop: 'opinion', width: '150px'},
...operation]
}
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
}
},
methods: {
async search(){
if(this.title == '督查名称'){
this.query.queryParam = {
supervCode: this.prjCodeDetail,
state: "1",
indexLevel: "3"
}
}else{
this.query.queryParam = {
supervCode: this.prjCodeDetail,
}
}
this.$nextTick(() => {
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.fnDel(row)
break
default:
break
}
},
// 删除
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
this.$postRequest('/supervIndex/del', {id: row.id}).then(res => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
// 编辑
fnEdit(row) {
this.rowData = row
this.$emit('editClick', row, this.title)
},
}
}
</script>
<style lang="scss" scoped>
@import '@/styles/elementui.scss';
::v-deep .el-dialog__body{
height: 58vh;
}
</style>
\ No newline at end of file
<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 v-if="activeName == '1'">
<el-button type="primary" icon="el-icon-document-add" size="medium" plain @click="fnAdd" >新建</el-button >
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
>
<template #indexLevel="{ data }">
<el-button v-if="data.row.indexLevel" class="detailBtn" size="medium" @click="detailBtn( data.row)">指标清单</el-button >
<span v-else>{{data.row.indexLevel}}</span>
</template>
<template #supervName="{ data }">
<el-button v-if="data.row.supervName" class="detailBtn" size="medium" @click="supervNameDetailBtn( data.row)">{{data.row.supervName}}</el-button >
<span v-else>{{data.row.supervName}}</span>
</template>
</table-config>
</template>
</list-page>
<!-- 新增弹窗 -->
<Add
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
></Add>
<Detail ref="Detail" :prjCodeDetail='detailPrjCode' :title="detailTitle" :visible.sync="visibleDetail" @editClick='fnEdit'/>
</div>
</template>
<script>
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/views/collectDataConfiguration/TableConfig.vue'
import { architectureInspectionAnalysis, selectSupervAnalysis } from '@/api/architectureInspection'
import { stateCode } from '@/utils/architectureInspectionDis'
import Add from './Add.vue'
import Detail from './Detail.vue'
export default {
name: 'architectureInspectionAnalysis',
components: { ListPage, SearchForm, TableConfig, Add, Detail },
computed: {
formOptions() {
if (this.activeName === '1') {
return [
{
label: '督查方案名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
}else{
return [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
}
},
columns() {
if(this.activeName === '1'){
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '督查方案名称', prop: 'supervName', },
{ label: '督查编码', prop: 'supervCode', },
{ label: '指标名称', prop: 'indexName', },
{ label: '指标清单', prop: 'indexLevel', __slotName: 'indexLevel', },
{ label: '指标权重', prop: 'weight', },
{ label: '创建时间', prop: 'createTime', },
{ label: '状态', prop: 'state', width: '120px',
collectionType: 'stateCode',
options: stateCode,},
{
label: '操作', type: 'operation', width: '200px',
actionButtons: [
{
title: '发布',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-circle-check',
disabledCallback: (row, title) => {
return row.state == '1' ? true : false
},
},
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
}else{
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '项目编码', prop: 'prjCode', },
{ label: '项目名称', prop: 'prjName', },
{ label: '承建单位', prop: 'buildOrg', },
{ label: '督查编码', prop: 'supervId', },
{ label: '督查方案名称', prop: 'supervName', __slotName: 'supervName',},
// { label: '指标清单', prop: 'zhibiaoqingdan', __slotName: 'zhibiaoqingdan'},
{ label: '项目评分', prop: 'prjScore', },
{ label: '评审意见', prop: 'opinion', },
{ label: '评审时间', prop: 'opinionTime', },
{ label: '状态', prop: 'state', width: '120px',
collectionType: 'stateCode',
options: stateCode,},
{
label: '操作', type: 'operation', width: '200px',
actionButtons: [
{
title: '发布',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-circle-check',
disabledCallback: (row, title) => {
return row.state == '1' ? true : false
},
},
// {
// title: '删除',
// type: 'danger',
// size: 'mini',
// plain: true,
// icon: 'el-icon-delete',
// },
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
}
},
},
data(){
return {
query: {
url: architectureInspectionAnalysis,
method: 'post',
queryParam: {
prjName: '',
indexLevel: "1"
},
},
rowData: {},
activeName: '1',
tabOptions: [
{ label: '督查指标模型管理', name: '1' },
{ label: '架构督查分析', name: '2' },
],
visible: false,
dialogTitle: '',
detailTitle: '',
rowData: {},
detailPrjCode: '',
visibleDetail: false
}
},
methods: {
querySearch(data = true) {
this.query.queryParam = {
...this.query.queryParam,
// ...data,
}
if(data){
this.$refs.searchTable.queryData()
}else{
this.$refs.Detail.search()
}
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
switch (title) {
case '发布':
this.fnSubmit(row)
break
case '删除':
this.fnDel(row)
break
default:
break
}
},
fnSubmit(row) {
this.$confirm('是否确认发布?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
if(this.activeName == '1'){
this.$postRequest('/supervIndex/fb', {supervCode: row.supervCode}).then(res => {
if (res.code === 200) {
this.$message.success('发布成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
}else{
this.$postRequest('/supervAnalysis/fb', {...row}).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(() => {
this.$postRequest('/supervIndex/del', {supervCode: row.supervCode}).then(res => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
handleClick(tab, event) {
if(tab.name == '1'){
this.query.url = architectureInspectionAnalysis
}else{
this.query.url = selectSupervAnalysis
}
this.querySearch()
},
fnAdd() {
this.visible = true
this.rowData = {}
this.dialogTitle = '新增督查指标'
},
// 编辑
fnEdit(row, detailtitle) {
this.rowData = row
this.visible = true
if(detailtitle == '指标清单'){
this.dialogTitle = '编辑督查指标'
this.rowData.tab = 'one'
}else{
this.dialogTitle = '编辑督查指标'
this.rowData.tab = 'two'
}
},
// 督查清单 详情
detailBtn(v){
this.detailTitle = ''
this.visibleDetail = true
this.detailTitle = '指标清单' // tab1
this.detailPrjCode = v.supervCode
},
// 督查名称 详情
supervNameDetailBtn(v){
this.detailTitle = ''
this.visibleDetail = true
this.detailTitle = '督查名称' // tab2
this.detailPrjCode = v.supervId
}
}
}
</script>
<style lang="scss" scoped>
.detailBtn{
border: none;
background: none;
color: #0d867f;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
\ No newline at end of file
<template>
<el-dialog
:title="'指标清单'"
:visible.sync="showDialog"
width="90%"
@close="showDialog = false"
@open="handleOpen"
>
<el-form :inline="true" id="addForm" ref="addForm" :model="formInfo" label-width="auto" style="text-align: left;">
<el-form-item label="政策名称" prop="policyName">
<el-input v-model="formInfo.policyName" size="small" placeholder="请输入内容" > </el-input>
</el-form-item>
<el-form-item label="" prop="">
<el-button type="primary" @click="querySearch" size="mini" >查询</el-button >
</el-form-item>
</el-form>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
@selection-change="selectionChange"
>
</table-config>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit" size="mini" >保 存</el-button >
<el-button @click="handleClose()" size="mini">取 消</el-button>
</span>
</el-dialog>
</template>
<script>
import TableConfig from '@/views/collectDataConfiguration/TableConfig.vue'
import { artPolicyExamineAdd } from '@/api/architectureInspection'
export default {
components: { TableConfig },
props: {
title: {
type: String,
default: '',
},
prjCodeDetail: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
},
computed: {
columns() {
let arr = [
{ type: 'selection',prop: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '政策名称', prop: 'policyName', width: '100px' },
{ label: '政策描述', prop: 'policyContent', },
{ label: '适用范围', prop: 'scope_', },
{ label: '发布部门', prop: 'deptName', },
{ label: '级别', prop: 'level_', },
{ label: '启用时间', prop: 'startTime', },
{ label: '创建人', prop: 'createMan', },
{ label: '创建时间', prop: 'createTime', },
]
return arr
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
}
},
data(){
return {
formInfo: {
policyName: '',
},
query: {
url: artPolicyExamineAdd,
method: 'post',
queryParam: {
policyName: '',
state: '1'
},
},
selectId: '',
}
},
methods: {
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.query.queryParam.policyName = this.forEach.policyName
this.$refs.searchTable.queryData()
},
selectionChange(data) {
let idArr = []
data.forEach(item => {
idArr.push(item.policyCode)
})
this.selectId = idArr.join(',')
},
handleSubmit(){
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
this.$postRequest('/klTechPolicyCheck/ad/', {policyCode: this.selectId, state: '1'}).then(res => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
this.handleClose()
this.$emit('querySearch')
}
})
},
handleClose() {
this.showDialog = false
},
async handleOpen() {
this.$nextTick(() => {
this.$refs.searchTable.clearSelection()
})
},
}
}
</script>
<style lang="scss" scoped>
@import '@/styles/elementui.scss';
::v-deep .el-dialog__body{
height: 58vh;
}
</style>
\ No newline at end of file
<template>
<div class="tab-component flex-column h-100 searchTable">
<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-tab1-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>
<el-button type="primary" size='mini' class="backBtn" @click="backRoute">返回</el-button>
</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">
<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 {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
export default {
name: 'tab1',
components: { vabOnlyOffice },
data() {
return {
resultContent: '',
isMeet: null,
selectOptions: [
{
label: '是',
value: 1,
},
{
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_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)
}
})
},
backRoute(){
this.$router.push({path: '/main/artPolicyExamine', query: {activeName: '2'}})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
.backBtn{
position: absolute;
right: 10px;
top: 10px;
}
</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 #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" />
<SearchForm ref="SearchForm" @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<template #operationWrap v-if="activeName == '1'">
<el-button type="primary" icon="el-icon-document-add" size="medium" plain @click="fnAdd" >添加</el-button >
</template>
<!-- 表格插槽 -->
<template #tableWrap>
......@@ -24,6 +31,10 @@
</table-config>
</template>
</list-page>
<AddTabelList
@querySearch="querySearch"
:visible.sync="visible"
:title="dialogTitle"/>
</div>
</template>
......@@ -31,90 +42,101 @@
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'
import AddTabelList from './AddTabelList.vue'
import { artPolicyExamine, examineSearch } from '@/api/architectureInspection'
export default {
name: 'supervisionNotifyManagement',
components: {
ListPage,
SearchForm,
TableConfig,
},
name: 'artPolicyExamine',
components: { ListPage, SearchForm, TableConfig, AddTabelList },
data() {
return {
selectRows: [],
query: {
url: querySupervisionNotifyManagement,
url: this.$route.query.activeName ? examineSearch : artPolicyExamine,
method: 'post',
queryParam: {},
},
activeName: this.$route.query.activeName ? this.$route.query.activeName : '1',
tabOptions: [
{ label: '技术政策', name: '1' },
{ label: '审查', name: '2' },
],
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
}
},
computed: {
formOptions() {
if(this.activeName == '2'){
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() {
}else{
return [
// { label: '序号', type: 'index', width: '80px' },
{ label: '年份', prop: 'year', width: '100px' },
{
label: '建设类型', // label文字
prop: 'buildType', // 字段名
options: buildType,
collectionType: true,
width: '120px',
label: '政策名称', // label文字
prop: 'policyName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '项目名称',
prop: 'prjName',
]
}
},
columns() {
if(this.activeName == '2'){
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageOrgId', width: '100px' },
{ label: '部门', prop: 'manageDeptId', width: '100px' },
{ label: '系统名称', prop: 'appName' },
{ label: '建设类型', prop: 'buildType', width: '100px' },
{ label: '项目名称', prop: 'prjName' },
{ label: '项目类型', prop: 'prjPlanClass', width: '100px' },
{ label: '承建单位', prop: 'buildOrg', width: '100px' },
{ label: '项目经理', prop: 'projectManager', width: '100px' },
{ label: '创建人', prop: 'createMan', width: '100px' },
{ label: '创建时间', prop: 'createTime', width: '100px' },
{
label: '操作',
type: 'operation',
width: '240px',
label: '操作', type: 'operation', width: '200px',
actionButtons: [
{
title: '审查',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
icon: 'el-icon-view',
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
}else{
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '政策名称', prop: 'policyName', width: '100px' },
{ label: '政策描述', prop: 'policyContent', },
{ label: '适用范围', prop: 'scope_', },
{ label: '发布部门', prop: 'deptName', },
{ label: '级别', prop: 'level_', },
{ label: '启用时间', prop: 'startTime', },
{ label: '创建人', prop: 'createMan', },
{ label: '创建时间', prop: 'createTime', },
{
title: '查看结果',
type: 'primary',
label: '操作', type: 'operation', width: '200px',
actionButtons: [
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-view',
icon: 'el-icon-delete',
},
],
callback: (row, title) => {
......@@ -122,17 +144,38 @@ export default {
},
},
]
}
},
},
created() {},
methods: {
querySearch(data) {
if(this.activeName == '1'){
this.query.url = artPolicyExamine
this.query.queryParam = {
policyName: undefined
}
}else{
this.query.url = examineSearch
this.query.queryParam = {
prjName: undefined
}
}
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
fnAdd() {
this.visible = true
// this.rowData = {}
this.dialogTitle = '新增督查指标'
},
handleClick(tab, event) {
this.$refs.SearchForm.onReset()
// this.query.queryParam = {}
this.querySearch()
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
......@@ -142,16 +185,36 @@ export default {
fnOperation(row, title) {
switch (title) {
case '审查':
// this.fnEdit(row)
this.fnSubmit(row)
break
case '查看结果':
// this.fnEdit(row)
case '删除':
this.fnDel(row)
break
default:
break
}
},
fnSubmit(row){
this.$router.push('/main/examine')
},
fnDel(row){
this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
this.$postRequest('/klTechPolicyCheck/del/', {id: row.id}).then(res => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
}
},
}
</script>
......
......@@ -63,8 +63,8 @@ export default {
prop: 'createMan', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
rules: [],
// placeholder: '请输入内容', // elementui组件属性
readonly: true,
},
{
label: '创建时间', // label文字
......@@ -74,6 +74,7 @@ export default {
element: 'el-date-picker', // 指定elementui组件
initValue: new Date().format('yyyy-MM-dd'), // 字段初始值
placeholder: '请选择', // elementui组件属性
readonly: true,
},
{
label: '年度', // label文字
......@@ -100,7 +101,6 @@ export default {
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
]
},
......
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="80%"
@close="handleClose()"
@open="handleOpen"
>
<Form
ref="addForm"
:form-options="formOptions"
label-width="120px"
>
<!-- 收集材料类型自定义 -->
<template slot="materialType" slot-scope="{ data }">
<el-checkbox-group v-model="formInfo.materialType">
<el-checkbox v-for="item in materialTypeList" :key="item.label" :label="item.value">{{item.label}}</el-checkbox>
</el-checkbox-group>
</template>
<template slot="supervision" slot-scope="{ data }">
<el-button v-if="Object.keys(rowData).length != 0" class="addBtn" type="primary" size="mini" @click="addTabelList">添加</el-button >
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
id-key="elementId"
>
</table-config>
</template>
</Form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit" size="mini" >保 存</el-button >
<el-button @click="handleClose()" size="mini">取 消</el-button>
</span></el-dialog>
</template>
<script>
import Form from './Form.vue'
import TableConfig from '@/components/TableConfig.vue'
import AddTabelList from './AddTabelList.vue'
import { materialTypeList } from '@/utils/architectureInspectionDis'
import { collectDataConfiguration } from '@/api/architectureInspection'
export default {
components: { Form, TableConfig, AddTabelList },
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
edit:{
type: Boolean,
default: false
}
},
data() {
return {
formInfo: {
materialType: [],
},
materialTypeList,
query: {
url: collectDataConfiguration,
method: 'post',
queryParam: {
prjCode: ''
},
},
selectId: '',
prjCodeDetail: '',
isDetail: true
}
},
watch: {
rowData: {
handler(v){
this.query.queryParam.prjCode = v.supervision ? v.supervision : ''
this.$nextTick(() => {
this.$refs.searchTable.queryData()
})
},
deep: true
},
},
computed: {
formOptions() {
return [
{
label: '督查方案名称', // label文字
prop: 'supervName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
// rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '收集材料类型', // label文字
prop: 'materialType', // 字段名
__slotName: 'materialType',
// rules: [{ required: true, trigger: 'change', message: '不能为空' }],
},
{
label: '开始时间', // label文字
prop: 'createTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
initValue: new Date().format('yyyy-MM-dd'), // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
label: '截止时间', // label文字
prop: 'endTime', // 字段名
type: 'date',
valueFormat: 'yyyy-MM-dd',
element: 'el-date-picker', // 指定elementui组件
initValue: new Date().format('yyyy-MM-dd'), // 字段初始值
placeholder: '请选择', // elementui组件属性
},
{
label: '督查清单', // label文字
prop: 'supervision', // 字段名
__slotName: 'supervision',
// rules: [{ required: true, trigger: 'change', message: '不能为空' }],
},
{
label: '备注', // label文字
prop: 'notes', // 字段名
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
}
},
columns() {
let arr = [
{ label: '序号', type: 'index', prop: '序号', width: '80px' },
{ label: '单位', prop: 'manageDeptId', width: '150px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '项目经理', prop: 'projectManager', width: '200px' },
{ label: '创建人', prop: 'createMan', width: '150px' },
]
if(Object.keys(this.rowData).length != 0){
arr = [
{ label: '序号', type: 'index', prop: '序号', width: '80px' },
{ label: '单位', prop: 'manageDeptId', width: '150px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '项目经理', prop: 'projectManager', width: '200px' },
{ label: '创建人', prop: 'createMan', width: '150px' },
]
}else{
arr = [
{ type: 'selection', prop: 'selection', width: '55px' },
...arr
]
}
return [...arr]
},
},
mounted() {},
methods: {
handleSubmit() {
this.$refs['addForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['addForm'].getData()
let materialType = this.formInfo.materialType.filter(item => !!item).join(',')
let params = !this.edit ? {
...formInfo,
materialType,
supervision: this.selectId
} : {
...this.rowData,
...formInfo,
materialType,
supervision: this.rowData.supervision
}
let url = !this.edit ? '/Collect/ad' : '/Collect/upd' // 编辑
this.$postRequest(url, 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.prop === 'endTime' ) {
v.initValue = new Date().format('yyyy-MM-dd')
}
})
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]
if(v.label == "收集材料类型"){
let val = this.rowData["materialType"]
this.formInfo.materialType = val.split(',')
}
if(v.label == "督查清单"){
this.selectId = v.initValue
}
})
this.$nextTick(() => {
this.$refs['addForm'].addInitValue()
})
} else {
this.$nextTick(() => {
this.$refs['addForm'].onReset()
this.$refs['addForm'].addInitValue()
this.formInfo.materialType = []
})
}
},
addTabelList() {
this.$emit('addList')
},
selectionChange(data) {
this.selectRows = data
let idArr = []
data.forEach(item => {
idArr.push(item.prjCode)
})
this.selectId = idArr.join(',')
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
::v-deep .el-checkbox-group{
text-align: left;
}
.iconAdd{
color: #0d867f;
}
.addBtn{
float: left;
margin-bottom: 10px;
}
::v-deep .el-form{
.el-form-item:nth-last-child(2){
.el-form-item__content{
height: 32vh !important;
}
}
}
</style>
<template>
<div :class="{'addTabelList': isDetail}">
<table-config
ref="searchTable"
@selection-change="selectionChange"
:query="query"
:columns="columns"
id-key="elementId"
>
</table-config>
</div>
</template>
<script>
import TableConfig from '@/components/TableConfig.vue'
import { collectDataConfiguration } from '@/api/architectureInspection'
export default {
components: { TableConfig },
props: {
prjCode: {
type: String,
default: '',
},
isEdit: {
type: Boolean,
default: false
},
isDetail: {
type: Boolean,
default: false
}
},
watch: {
prjCode: {
handler(v){
console.log(v, 'prjCode');
this.query.queryParam.prjCode = v
this.$refs.searchTable.queryData()
},
deep: true
},
isEdit: {
handler(v){
if(v){
this.columns = [
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageDeptId', width: '150px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '项目经理', prop: 'projectManager', width: '200px' },
{ label: '创建人', prop: 'createMan', width: '150px' },
]
}else{
this.columns = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageDeptId', width: '150px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '项目经理', prop: 'projectManager', width: '200px' },
{ label: '创建人', prop: 'createMan', width: '150px' },
]
}
},
}
},
data(){
return {
query: {
url: collectDataConfiguration,
method: 'post',
queryParam: {
prjCode: this.prjCode
},
},
columns: [],
}
},
methods: {
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
this.$emit('selectRows', data)
},
search(){
this.$refs.searchTable.queryData()
}
}
}
</script>
<style lang="scss" scoped>
.addTabelList{
height: 38vh;
}
</style>
\ No newline at end of file
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
width="80%"
@close="handleClose()"
>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
@selection-change="selectionChange"
>
</table-config>
<span slot="footer" class="dialog-footer">
<el-button v-if="title == '督查清单'" type="primary" @click="handleSubmit" size="mini" >保 存</el-button >
<el-button @click="handleClose()" size="mini">取 消</el-button>
</span>
</el-dialog>
</template>
<script>
import { collectDataConfiguration } from '@/api/architectureInspection'
import TableConfig from './TableConfig.vue'
export default {
components: { TableConfig },
props: {
prjCodeDetail: {
type: String,
default: '',
},
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
},
watch: {
prjCodeDetail(v){
this.query.queryParam.prjCode = v
this.search()
},
},
data(){
return {
query: {
url: collectDataConfiguration,
method: 'post',
queryParam: {
prjCode: ''
},
},
selectId: ''
}
},
computed: {
columns() {
let arr = [
{ label: '序号', type: 'index', prop: '序号',width: '80px' },
{ label: '单位', prop: 'manageDeptId', width: '150px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '项目经理', prop: 'projectManager', width: '200px' },
{ label: '创建人', prop: 'createMan', width: '150px' },
]
if(this.title != '督查清单'){
arr = [
{ label: '序号', type: 'index',prop: '序号', width: '80px' },
{ label: '单位', prop: 'manageDeptId', width: '150px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '项目经理', prop: 'projectManager', width: '200px' },
{ label: '创建人', prop: 'createMan', width: '150px' },
]
}else{
arr = [
{ type: 'selection',prop: 'selection', width: '55px' },
...arr,
]
}
return [...arr]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
}
},
methods: {
handleClose() {
this.showDialog = false
},
async search(){
this.$nextTick(() => {
this.$refs.searchTable.queryData()
})
},
selectionChange(data) {
let idArr = []
data.forEach(item => {
idArr.push(item.prjCode)
})
this.selectId = idArr.join(',')
},
handleSubmit(){
this.$emit('selectTabel', this.selectId)
this.handleClose()
}
}
}
</script>
<style lang="scss" scoped>
@import '@/styles/elementui.scss';
::v-deep .el-dialog__body{
height: 36vh;
}
</style>
\ No newline at end of file
<!--
* @Description: 表单组件
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-20 09:29:25
-->
<!-- /**
* 搜索栏公共组件
*/ -->
<template>
<div class="form-box">
<el-form
:model="formData"
ref="formRef"
:label-width="labelWidth"
:label-position="labelPosition"
>
<el-form-item v-for="(item, index) in formOptions"
:key="newKeys[index]" :prop="item.prop" :label="item.label" :rules="item.rules">
<!-- 自定义插槽,可用于特殊表单块 -->
<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-form>
</div>
</template>
<script>
import SearchFormItem from '@/components/SearchFormItem.vue'
export default {
props: {
/**
* 表单配置
* 示例:
* [{
* label: '用户名', // label文字
* prop: 'username', // 字段名
* element: 'el-input', // 指定elementui组件
* initValue: '阿黄', // 字段初始值
* placeholder: '请输入用户名', // elementui组件属性
* rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
* events: { // elementui组件方法
* input (val) {
* console.log(val)
* },
* ...... // 可添加任意elementui组件支持的方法
* }
* ...... // 可添加任意elementui组件支持的属性
* }]
*/
formOptions: {
type: Array,
required: true,
default() {
return []
},
},
labelWidth: {
type: String,
default: '80px',
},
labelPosition: {
type: String,
default: 'right',
},
},
data() {
return {
formData: {},
}
},
computed: {
newKeys() {
return this.formOptions.map((v) => {
return this.createUniqueString()
})
},
},
created() {
this.addInitValue()
},
methods: {
createUniqueString() {
const timestamp = +new Date() + ''
const randomNum = parseInt((1 + Math.random()) * 65536) + ''
return (+(randomNum + timestamp)).toString(32)
},
// 校验
onValidate(callback) {
this.$refs.formRef.validate((valid) => {
if (valid) {
console.log(this.formData)
callback()
}
})
},
// 获取表单数据
getData() {
return this.formData
// this.onValidate(() => {
// this.$emit('getData', this.formData)
// })
},
// 导出
onExport() {
this.onValidate(() => {
this.$emit('onExport', this.formData)
})
},
onReset() {
this.$refs.formRef.resetFields()
},
// 添加初始值
addInitValue() {
const obj = {}
this.formOptions.forEach((v) => {
if (v.initValue !== undefined) {
obj[v.prop] = v.initValue
}
})
this.formData = obj
},
},
components: { SearchFormItem },
}
</script>
<style lang="scss" scoped>
.form-box {
margin-top: 10px;
.btn-box {
display: flex;
height: 38px;
}
.el-form {
// display: flex;
flex-wrap: wrap;
/deep/ .el-form-item__label {
flex-shrink: 0;
color: #000;
}
// el-input宽度
/deep/ .form-item {
text-align: left;
.el-input,
.el-select {
width: 30% !important;
}
}
}
}
</style>
<!--
* @Description: elementui表格组件二次封装
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-11 14:53:40
* @LastEditors: pan
* @LastEditTime: 2024-03-22 17:17:18
-->
<!-- 示例
columns: [{ label: '头像', prop: 'avatar', align: 'center', __slotName: 'avatar',callback: (row, title) => {
// console.log(row)
if (title) {
switch (title) {
case "查看":
return this.dialogShow(row);
}
}
},
}]
使用TableConfig组件
<table-config @fetchData="fetchData" :query="query" :columns="columns">
<template slot="icon" v-slot="scope">
<img slot="icon" width="40" :src="scope.data.row.avatar" />
</template>
</table-config> -->
<template>
<div class="tableConfig">
<el-table
ref="tableConfig"
class="config-table"
v-loading="loading"
v-bind="$attrs"
v-on="listeners"
:data="tableData"
:row-key="idKey"
stripe
border
height="100%"
:row-class-name="tableRowClass"
>
<!-- <el-table-column
v-if="isCheck"
align="center"
width="70"
type="selection"
:reserve-selection="isCheckMemory"
>
</el-table-column> -->
<template v-for="item in columns">
<!-- v-html存在安全问题暂时弃用 -->
<!-- 如果接口返回的内容需要我们解析出来并渲染到页面中 比如:0 代表 已停用 1 代表 已发布 2 代表 暂存 -->
<!-- <el-table-column
v-if="item.type === 'function'"
v-bind="item"
:key="item.prop"
align="center"
>
<template slot-scope="scope">
<span v-html="item.callback && item.callback(scope.row)"></span>
</template>
</el-table-column> -->
<!-- 操作列 -->
<el-table-column
v-if="item.type === 'operation'"
:key="item.prop"
v-bind="item"
align="center"
>
<template #default="scope">
<el-button
class="btn"
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
>
</template>
</el-table-column>
<!-- 普通渲染 -->
<el-table-column
v-else
:key="item.prop"
v-bind="item"
show-overflow-tooltip
align="center"
>
<!-- 自定义插槽 -->
<template v-if="item.__slotName" #default="scope">
<slot :name="item.__slotName" :data="scope"></slot>
</template>
<!-- 字典值匹配 如后端给state: 0 页面要渲染成已停用-->
<template v-else-if="item.collectionType" #default="scope">
<span> {{ handleToText(item, scope.row[item.prop]) }}</span>
</template>
</el-table-column>
</template>
</el-table>
<div class="config-pagenation">
<el-pagination
class="pagination"
background
v-if="hasPagination"
@size-change="sizeChange"
@current-change="currentChange"
:total="pagination.totalRow"
:current-page="pagination.current"
:page-size="pagination.pageSize"
:page-sizes="pageSizes"
:layout="layout"
>
</el-pagination>
</div>
</div>
</template>
<script>
import { get, post } from '@/utils/http'
export default {
name: 'tableConfig',
props: {
// columns: [{ label: '头像', prop: 'avatar', align: 'center', __slotName: 'avatar' }]
// 配置项
columns: {
type: Array,
default: () => [],
},
/**
* 分页需要传入后台的字段
*/
pageParam: {
type: Object,
default() {
return {
pageOffset: 'current',
pageSize: 'pageSize',
}
},
},
// 接口参数
query: {
type: Object,
default() {
return {
url: '',
method: '',
queryParam: {},
}
},
},
/**
* 是否需要跨页勾选
*/
// isCheckMemory: {
// type: Boolean,
// default: false,
// },
// /**
// * 表格行数据的唯一键
// */
idKey: {
type: String,
default: 'id',
},
// 是否显示分页组件
hasPagination: {
type: Boolean,
default: true,
},
layout: {
type: String,
default: 'total, sizes, prev, pager, next, jumper',
},
pageSizes: {
type: Array,
default() {
return [10, 20, 50, 100, 200]
},
},
},
data() {
return {
tableData: [],
pagination: {
current: 1,
pageSize: 10,
totalRow: 0,
},
loading: false,
}
},
computed: {
listeners: function () {
var vm = this
return Object.assign({}, this.$listeners, {
'selection-change': function (val) {
// dosomething
vm.selectData = val
vm.$emit('selection-change', val)
},
})
},
},
created() {
this.queryData()
},
methods: {
clearSelection() {
this.$refs.tableConfig.clearSelection()
},
handleToText(item, state='') {
if(!state) return
if(state.indexOf(',') > -1){
let stateVal = state.split(',')
let labelValue = ''
stateVal.forEach(valItem => {
const arr = item.options.find((v) => v.value == valItem) || {}
labelValue += `,${arr.label}`
});
return labelValue.slice(1, labelValue.length)
}{
let val = state
// if (!val) {
// val = item.emptyToNum || 0
// }
// let obj = item.options.find(item => item.value == val)
const obj = item.options.find((v) => v.value == val) || {}
return obj['label']
}
},
/**
* 切换分页数量
* @param { Number } pageSize 页数
*/
sizeChange(pageSize) {
this.pagination.current = 1
this.pagination.pageSize = pageSize
this.queryData()
},
/**
* 切换页码
* @param { Number } current 页码
*/
currentChange(current) {
this.pagination.current = current
this.queryData(true)
},
async queryData(isReset) {
if (this.query && this.query.url) {
this.tableData = []
this.loading = true
this.pagination.current = isReset ? this.pagination.current : 1
let param = Object.assign({}, this.query.queryParam, {
[this.pageParam.pageOffset]: this.pagination.current,
[this.pageParam.pageSize]: this.pagination.pageSize,
})
// if (this.order.sortName && this.order.sortOrder) {
// param.sortName = this.order.sortName
// param.sortOrder = this.order.sortOrder
// }
let result = null
try {
switch (this.query.method) {
case 'get':
result = await get(this.query.url, param)
break
case 'post':
result = await post(this.query.url, param)
break
default:
result = await get(this.query.url, param)
break
}
} catch (e) {
console.warn(e)
} finally {
this.loading = false
// console.log('result', result)
if(result.data){
const { data } = result
if (result && result.code === 200) {
this.pagination.totalRow = data.total
this.tableData = data.records
this.$emit('fetchData', data)
} else {
this.$message({
type: 'warning',
message: result ? result.msg : '查询失败!',
})
this.tableData = []
this.pagination.current = 1
this.pagination.totalRow = 0
}
}else{
const data = result
this.pagination.totalRow = data.total
this.tableData = data.records
this.$emit('fetchData', data)
}
// console.log();
// if (result && result.code === 200) {
// this.pagination.totalRow = data.total
// this.tableData = data.records
// this.$emit('fetchData', data)
// } else {
// this.$message({
// type: 'warning',
// message: result ? result.msg : '查询失败!',
// })
// this.tableData = []
// this.pagination.current = 1
// this.pagination.totalRow = 0
// }
}
}
},
tableRowClass(val){
// console.log(val, 'tableRowClass');
if(val.row.remind && val.row.remind == '1'){
return 'remindRed'
}
},
},
}
</script>
<style lang="scss" scoped>
.tableConfig {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.config-table {
flex: 1;
}
.config-pagenation {
margin-top: 20px;
margin-bottom: 30px;
}
/deep/ .remindRed{
color: red !important;
}
}
</style>
<template>
<!-- 新增 -->
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="80%"
@close="handleClose()"
>
<AddTabelList @selectRows='selectRows' />
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit" size="mini" >保 存</el-button >
<el-button @click="handleClose()" size="mini">取 消</el-button>
</span></el-dialog>
</template>
<script>
import AddTabelList from './AddTabelList.vue'
export default {
components: { AddTabelList },
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
selectRows() {
return (rows) => {
let idArr = []
rows.forEach(item => {
idArr.push(item.prjCode)
})
this.selectId = idArr.join(',')
}
}
},
data(){
return {
selectId: '',
}
},
methods: {
handleClose() {
this.showDialog = false
},
// selectRows(v){
// console.log(v);
// },
handleSubmit() {
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')
// }
// })
},
}
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="searchTable">
<list-page>
<!-- 查询表单插槽 -->
<template #formWrap>
<SearchForm @onSearch="querySearch" :form-options="formOptions" />
</template>
<!-- 中部操作按钮 -->
<template #operationWrap>
<el-button type="primary" icon="el-icon-document-add" size="medium" plain @click="fnAdd">新建</el-button >
</template>
<!-- 表格插槽 -->
<template #tableWrap>
<table-config
ref="searchTable"
:query="query"
:columns="columns"
id-key="elementId"
>
<template #supervision="{ data }">
<el-button v-if="data.row.supervision" class="detailBtn" size="medium" @click="detailBtn( data.row)">{{data.row.supervision}}</el-button >
<span v-else>{{data.row.supervision}}</span>
</template>
</table-config>
</template>
</list-page>
<!-- 新增弹窗 -->
<Add
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
@addList='addList'
:edit='isEdit'
></Add>
<!-- 详情 -->
<Detail ref="Detail" :prjCodeDetail='detailPrjCode' :visible.sync="visibleDetail" @selectTabel='selectTabel' :title="detailTitle"/>
</div>
</template>
<script>
import AddTabelList from './AddTabelList.vue'
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from './TableConfig.vue'
import { collectDataSearch } from '@/api/architectureInspection'
import Add from './Add.vue'
import Detail from './Detail.vue'
import { materialTypeList, stateCode } from '@/utils/architectureInspectionDis'
export default {
name: 'collectDataConfiguration',
components: { ListPage, SearchForm, TableConfig, Add, AddTabelList, Detail },
computed: {
formOptions() {
return [
{
label: '督查方案名称', // label文字
prop: 'prjCode', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
},
columns() {
return [
{ label: '序号', type: 'index', width: '80px' },
{ label: '督查方案名称', prop: 'supervName', },
{ label: '创建时间', prop: 'createTime', width: '120px' },
{ label: '材料类型', prop: 'materialType',
collectionType: 'materialTypeList',
options: materialTypeList
},
{ label: '截止时间', prop: 'endTime', width: '120px' },
{ label: '督查清单', prop: 'supervision', __slotName: 'supervision', },
{
label: '状态',
prop: 'state',
width: '120px',
collectionType: 'stateCode',
options: stateCode,
},
{ label: '备注', prop: 'notes', width: '100px' },
{
label: '操作',
type: 'operation',
width: '360px',
actionButtons: [
{
title: '编辑',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
// disabledCallback: (row, title) => {
// return row.state == '1' ? true : false
// },
},
{
title: '删除',
type: 'danger',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
disabledCallback: (row, title) => {
return row.state == '1' ? true : false
},
},
{
title: '发布',
size: 'mini',
icon: 'el-icon-circle-check',
type: 'primary',
plain: true,
disabledCallback: (row, title) => {
return row.state == '1' ? true : false
},
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
},
},
data(){
return {
query: {
url: collectDataSearch,
method: 'post',
queryParam: {
supervName: ''
},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
selectRows: [],
selectId: '',
prjCode: '',
detailTitle: '详情',
visibleDetail: false,
detailPrjCode: '',
isEdit: false
}
},
methods: {
querySearch(data) {
this.query.queryParam = {
...this.query.queryParam,
...data,
}
this.$refs.searchTable.queryData()
},
fnAdd() {
this.visible = true
this.rowData = {}
this.dialogTitle = '收集资料配置'
this.isEdit = false
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
* @param {String} title 当前操作按钮名称
* @author: pan
*/
fnOperation(row, title) {
console.log('1111');
switch (title) {
case '编辑':
this.fnEdit(row)
break
case '删除':
this.fnDel(row)
break
case '发布':
this.fnSubmit(row)
default:
break
}
},
fnSubmit(row) {
this.$confirm('是否确认发布?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
const params = {
...row,
state: 2,
}
this.$postRequest('/Collect/fb', {...row}).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,
}
this.$postRequest('/Collect/del', {supervId: row.supervId}).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
this.isEdit = true
},
addList(){
this.detailTitle = '督查清单'
this.detailPrjCode = ''
this.visibleDetail = true
},
// 督查清单 详情
detailBtn(v){
this.detailTitle = '详情'
this.detailPrjCode = v.supervision
this.visibleDetail = true
},
selectTabel(v){
let id = this.rowData.supervision
let arrV = v.split(',')
let arrId = id.split(',')
let arr = [...arrV, ...arrId]
this.rowData.supervision = !!v ? Array.from(new Set(arr)).join(',') : id
// this.rowData.supervision = !!v ? v +','+id : id
},
}
}
</script>
<style lang="scss" scoped>
.detailBtn{
border: none;
background: none;
color: #0d867f;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
\ No newline at end of file
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="50%"
@close="handleClose()"
@open="handleOpen"
>
<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 { addMatterInfo, updMatterInfo } 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: 'matterName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
label: '创建人', // label文字
prop: 'createMan', // 字段名
element: 'el-input', // 指定elementui组件
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组件属性
},
{
label: '事件描述', // label文字
prop: 'matterContent', // 字段名
type: 'textarea',
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
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: {
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 ? updMatterInfo : addMatterInfo
const params = {
...this.rowData,
...formInfo,
state: 2,
}
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 {
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>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="50%"
@close="handleClose()"
@open="handleOpen"
>
<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 { addOrgInfo, updOrgInfo } from '@/api'
import { subjectType } from '@/utils/dictionary'
export default {
name: 'add-org',
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {}
},
components: {
Form,
},
computed: {
formOptions() {
return [
{
label: '主体类型', // label文字
prop: 'subjectType', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
options: subjectType,
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: 'lastOrgName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
disabled: 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: {
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 ? updOrgInfo : addOrgInfo
const params = {
...this.rowData,
...formInfo,
}
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) => {
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>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<!--
* @Description: 概设评审基础管理 integration-info-controller
* @Description: 概设评审基础管理
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-21 20:58:31
* @LastEditors: pan
* @LastEditTime: 2024-03-26 17:31:29
* @LastEditTime: 2024-03-27 10:50:41
-->
<template>
<div class="searchTable">
......@@ -33,6 +33,7 @@
icon="el-icon-document-add"
size="medium"
plain
@click="fnAdd()"
>新建</el-button
>
<el-button
......@@ -60,6 +61,21 @@
</table-config>
</template>
</list-page>
<!-- 组织机构新增/编辑 -->
<AddOrg
:title="dialogTitle"
:row-data="rowData"
@querySearch="querySearch"
:visible.sync="orgVisible"
/>
<!-- 事项新增/编辑 -->
<AddMatter
:title="dialogTitle"
:row-data="rowData"
@querySearch="querySearch"
:visible.sync="matterVisible"
/>
</div>
</template>
......@@ -67,16 +83,21 @@
import ListPage from '@/components/ListPage.vue'
import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import AddOrg from './AddOrg.vue'
import AddMatter from './AddMatter.vue'
import { queryConceptualBaseManagement } from '@/api/interface'
import { editNeedInfo } from '@/api'
import { buildType, approvalStatusOptions } from '@/utils/dictionary'
import {
queryConceptualBaseManagement,
queryConceptualBaseOrg,
} from '@/api/interface'
import { updMatterInfo, updOrgInfo } from '@/api'
import { subjectType, collectState } from '@/utils/dictionary'
export default {
name: 'conceptualBaseManagement',
data() {
return {
query: {
url: queryConceptualBaseManagement,
url: queryConceptualBaseOrg,
method: 'post',
queryParam: {},
},
......@@ -86,13 +107,13 @@ export default {
{ label: '集成管理', name: '2' },
],
selectRows: {},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
orgVisible: false,
matterVisible: false,
}
},
components: { ListPage, SearchForm, TableConfig },
components: { ListPage, SearchForm, TableConfig, AddOrg, AddMatter },
computed: {
formOptions() {
let arr = []
......@@ -106,24 +127,26 @@ export default {
},
{
label: '主体类型', // label文字
prop: 'type', // 字段名
prop: 'subjectType', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
options: subjectType,
},
]
} else {
arr = [
{
label: '事项名称', // label文字
prop: 'orgName', // 字段名
prop: 'matterName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
{
label: '状态', // label文字
prop: 'type', // 字段名
prop: 'state', // 字段名
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
options: collectState,
},
]
}
......@@ -144,12 +167,14 @@ export default {
},
{
label: '主体类型',
prop: 'createTime',
prop: 'subjectType',
options: subjectType,
collectionType: true,
},
{
label: '上级单位',
// width: '120px',
prop: 'state2',
prop: 'lastOrgName',
},
]
} else {
......@@ -157,7 +182,7 @@ export default {
...arr,
{
label: '事项名称',
prop: 'orgName',
prop: 'matterName',
width: '200px',
},
{
......@@ -170,11 +195,13 @@ export default {
},
{
label: '事项描述',
prop: 'des',
prop: 'matterContent',
},
{
label: '状态',
prop: 'state',
options: collectState,
collectionType: true,
},
]
}
......@@ -205,26 +232,31 @@ export default {
},
],
callback: (row, title) => {
// this.fnOperation(row, title)
this.fnOperation(row, title)
},
},
]
return arr
},
getUpdApi() {
if (this.activeName === '1') {
return updOrgInfo
} else {
return updMatterInfo
}
},
},
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(',')
if (this.activeName === '1') {
this.dialogTitle = '新增组织机构'
this.orgVisible = true
} else {
this.dialogTitle = '新增事项'
this.matterVisible = true
}
},
// 表格勾选的数据
selectionChange(data) {
......@@ -238,7 +270,11 @@ export default {
this.$refs.searchTable.queryData()
},
handleClick(tab, event) {
// console.log(tab, event)
if (this.activeName === '1') {
this.query.url = queryConceptualBaseOrg
} else {
this.query.url = queryConceptualBaseManagement
}
},
/**
* @description: 操作按钮
......@@ -254,73 +290,19 @@ export default {
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) {
fnEdit(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()
if (this.activeName === '1') {
this.dialogTitle = '修改组织机构'
this.orgVisible = true
} else {
this.$message.error(res.msg)
this.dialogTitle = '修改事项'
this.matterVisible = true
}
})
})
.catch(() => {})
},
fnEdit(row) {
this.dialogTitle = '修改需求'
this.rowData = row
this.visible = true
},
fnDel(row) {
this.$confirm('是否确认删除?', '提示', {
......@@ -331,10 +313,9 @@ export default {
.then(() => {
const params = {
...row,
filesValue: JSON.parse(row.filesValue),
delFlag: 1,
}
editNeedInfo(params).then((res) => {
this.getUpdApi(params).then((res) => {
if (res.code === 200) {
this.$message.success('删除成功')
this.$refs.searchTable.queryData()
......
<!--
* @Description: tab1查/online-rev-wr/qyNeedReviewCount tab2系统架构资产 isExtend传0 同步更新调用继承接口isExtend传0
* @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
* @LastEditTime: 2024-03-27 11:25:47
-->
<template>
<div class="searchTable">
......@@ -48,17 +48,6 @@
<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
......@@ -77,17 +66,14 @@
</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'
import { systemArchiSaveFactor } from '@/api/index'
export default {
name: 'conceptualReview',
name: 'conceptualRelated',
data() {
return {
src: '',
......@@ -124,6 +110,7 @@ export default {
'ARCHI_TECHNOLOGY',
'ARCHI_SAFE',
],
elementTree: [],
}
},
components: {
......@@ -210,7 +197,9 @@ export default {
icon: 'el-icon-edit',
},
],
callback: (row, title) => {},
callback: (row, title) => {
this.fnOperation(row)
},
},
]
}
......@@ -218,39 +207,32 @@ export default {
return arr
},
},
mounted() {},
methods: {
// 同步更新
fnOperation(row) {
// const extend = []
// extend.push({
// archiType: item.archiType,
// assetIdList: item.checkedCities
// })
const params = {
// extend,
isExtend: 0,
}
systemArchiSaveFactor(params).then((res) => {
if (res.code === 200) {
this.$message.success('同步更新成功')
} else {
this.$message.error(res.msg)
}
})
},
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
......@@ -262,7 +244,6 @@ export default {
}
this.$refs.searchTable.queryData()
},
getArchiType() {},
handleClick(tab, event) {
if (this.activeName === '2') {
this.query.url = queryArcAstSys
......
<template>
<el-dialog
:title="title"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="60%"
@close="handleClose()"
@open="handleOpen()"
>
<div>
<div class="prjName">项目名称:{{ rowData.prjName }}</div>
<el-tabs tab-position="left">
<el-tab-pane :label="item.name" v-for="item in options" :key="item.name"
><div class="content">
{{ item.name }}
</div></el-tab-pane
>
</el-tabs>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">关 闭</el-button>
</span></el-dialog
>
</template>
<script>
import { analysisQryContent } from '@/api/index.js'
export default {
props: {
title: {
type: String,
default: '',
},
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
options: [
{
name: '技术路线表',
},
{
name: '架构遵从表',
},
{
name: '功能清单',
},
{
name: '数据实体清单',
},
{
name: '集成系统清单',
},
],
}
},
components: {},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
mounted() {},
methods: {
handleClose() {
this.showDialog = false
},
handleOpen() {
analysisQryContent(this.rowData).then((res) => {
if (res.code == 200) {
}
})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
.prjName {
font-weight: bold;
text-align: left;
font-size: 20px;
margin-bottom: 20px;
}
.content {
height: 300px;
overflow-y: auto;
}
</style>
......@@ -7,16 +7,29 @@
* @Autor: pan
* @Date: 2024-03-21 20:58:31
* @LastEditors: pan
* @LastEditTime: 2024-03-22 19:51:11
* @LastEditTime: 2024-03-29 09:24:54
-->
<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">
<div
class="left_container m-r-10 flex-column"
:class="{ fullScreen_left: fullScreen }"
>
<div class="left_container_title flex-b-c">
<div>
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<!-- <el-tooltip effect="dark" :content="leftScreenTip" placement="top">
<i
@click="leftFullScreen = !leftFullScreen"
:class="
leftFullScreen ? 'el-icon-circle-close' : 'el-icon-full-screen'
"
></i>
</el-tooltip> -->
</div>
<div
class="left_container_content flex-1"
v-loading="leftLoading"
......@@ -31,7 +44,7 @@
<vab-only-office
id="office-preview"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
<template v-else>
......@@ -46,11 +59,24 @@
<Tab8Left v-else :tab="tab" @toRemark="toRemark" />
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title">
<div
class="right_container flex-column"
:class="{ fullScreen_right: fullScreen }"
>
<div class="right_container_title flex-b-c">
<div>
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-tooltip effect="dark" :content="fullScreenText" placement="top">
<i
@click="fullScreen = !fullScreen"
:class="
fullScreen ? 'el-icon-circle-close' : 'el-icon-full-screen'
"
></i>
</el-tooltip>
</div>
<div
class="right_container_content flex-1"
v-loading="rightLoading"
......@@ -134,7 +160,11 @@ import {
saveExamine,
exportRiskReport,
getQWordPic_,
queryPrjNeedFile,
getReviewArchiFollowCheckRightGraph,
} from '@/api'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'conceptualExamine',
components: {
......@@ -155,15 +185,16 @@ export default {
rightBaseOptions: [],
leftContentTyp: [],
rightContentType: [],
fullScreen: false,
documentServerUrl: 'http://43.143.211.42:19231/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -172,7 +203,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -185,15 +216,18 @@ export default {
customization: {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
selectData: [],
}
},
created() {
......@@ -214,14 +248,29 @@ export default {
}
}
},
mounted() {
if (
this.leftContentType === 'onlyoffice' ||
this.rightContentType === 'onlyoffice'
) {
this.fnQueryPrjNeedFile()
}
},
computed: {
fullScreenText() {
if (this.fullScreen) {
return '退出全屏'
} else {
return '全屏'
}
},
getLeftApi() {
if (this.leftContentType === 'word') {
return getReviewNorm
} else if (this.leftContentType === 'img') {
if (this.tab === '2') {
// 王勇接口
return getQWordPic_
// 谢皓接口
return getReviewArchiFollowCheckRightGraph
} else {
// 李振接口
return getQWordPic
......@@ -237,8 +286,8 @@ export default {
return getReviewNorm
} else if (this.rightContentType === 'img') {
if (this.tab === '2') {
// 王勇接口
return getQWordPic_
// 谢皓接口
return getReviewArchiFollowCheckRightGraph
} else {
// 李振接口
return getQWordPic
......@@ -249,8 +298,41 @@ export default {
return ''
}
},
getDocName() {
if (this.tab === '1') {
return '概要设计说明书'
} else if (['3', '4', '5', '6', '7'].includes(this.tab)) {
return '技术规范书'
}
},
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: [this.getDocName],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
this.selectData = res.data
if (this.selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${this.selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${this.selectData[0].fileId}`
}
}
})
},
// 带入到备注
toRemark(str) {
this.resultContent = this.resultContent
......@@ -265,12 +347,13 @@ export default {
needId,
prjId,
archiPrjReviewEnum,
archiStage: 1,
}
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}`,
this.leftBaseOptions = res.data.map(
(v) => `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
......@@ -287,8 +370,8 @@ export default {
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}`,
this.rightBaseOptions = res.data.map(
(v) => `data:image/png;base64,${v.metaModelSvg}`,
)
}
})
......@@ -314,7 +397,8 @@ export default {
// 导出重复建设风险报告
handlExportRiskReport() {
const params = {
title: '功能重复风险',
title: `${this.row.prjName}重复建设风险报告`,
type: 1,
comment: this.resultContent,
}
exportRiskReport(params).then((res) => {
......
......@@ -75,7 +75,7 @@
size="medium"
plain
v-if="activeName2 === '8'"
@click="handlExportRiskReport()"
@click="handlExportRiskReport('重复建设风险报告', 1)"
>导出重复建设风险报告</el-button
>
<el-button
......@@ -84,6 +84,7 @@
size="medium"
plain
v-if="activeName2 === '9'"
@click="handlExportRiskReport('重复录入风险报告', 2)"
>导出重复录入风险报告</el-button
>
</template>
......@@ -100,18 +101,28 @@
</table-config>
</template>
</list-page>
<AnalysisContent
:row-data="rowData"
title="概设材料解析内容"
:visible.sync="analysisContentVisible"
/>
</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 AnalysisContent from './AnalysisContent'
import { queryConceptualReview } from '@/api/interface'
import { exportRiskReport } from '@/api/index'
import { archiPrjReviewEnum, buildType } from '@/utils/dictionary'
import { exportRiskReport, analysisConceptual } from '@/api/index'
import {
archiPrjReviewEnum,
buildType,
analysisState,
} from '@/utils/dictionary'
// import { str } from './base64'
export default {
name: 'conceptualReview',
......@@ -183,12 +194,15 @@ export default {
'table',
'table',
],
analysisContentVisible: false,
rowData: {},
}
},
components: {
ListPage,
SearchForm,
TableConfig,
AnalysisContent,
},
computed: {
formOptions() {
......@@ -261,11 +275,96 @@ export default {
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' },
{
label: '技术路线表',
width: '120px',
prop: 'techRouteState',
options: analysisState,
collectionType: true,
emptyToNum: 0,
class: (row) => {
if (row['techRouteState'] == 1) {
return 'success'
} else if (row['techRouteState'] == 2) {
return 'error'
}
},
callback: (row) => {
this.viewAnalysisContent(row)
},
},
{
label: '架构遵从表',
width: '120px',
prop: 'archiCompState',
options: analysisState,
collectionType: true,
emptyToNum: 0,
class: (row) => {
if (row['archiCompState'] == 1) {
return 'success'
} else if (row['archiCompState'] == 2) {
return 'error'
}
},
callback: (row) => {
this.viewAnalysisContent(row)
},
},
{
label: '功能清单',
width: '100px',
prop: 'functionListState',
options: analysisState,
collectionType: true,
emptyToNum: 0,
class: (row) => {
if (row['functionListState'] == 1) {
return 'success'
} else if (row['functionListState'] == 2) {
return 'error'
}
},
callback: (row) => {
this.viewAnalysisContent(row)
},
},
{
label: '数据实体清单',
width: '120px',
prop: 'dataEntityListState',
options: analysisState,
collectionType: true,
emptyToNum: 0,
class: (row) => {
if (row['dataEntityListState'] == 1) {
return 'success'
} else if (row['dataEntityListState'] == 2) {
return 'error'
}
},
callback: (row) => {
this.viewAnalysisContent(row)
},
},
{
label: '集成系统清单',
width: '120px',
prop: 'inteGrateSysListState',
options: analysisState,
collectionType: true,
emptyToNum: 0,
class: (row) => {
if (row['inteGrateSysListState'] == 1) {
return 'success'
} else if (row['inteGrateSysListState'] == 2) {
return 'error'
}
},
callback: (row) => {
this.viewAnalysisContent(row)
},
},
]
} else {
arr = [
......@@ -352,18 +451,39 @@ export default {
},
mounted() {},
methods: {
viewAnalysisContent(row) {
this.rowData = row
this.analysisContentVisible = true
},
// 材料解析
fnMaterialAnalysis() {
if (this.selectRows.length == 0) {
return this.$message.warning('请选择一条数据')
}
if (this.selectRows.length > 1) {
return this.$message.warning('只能选择一条数据')
}
analysisConceptual(this.selectRows[0]).then((res) => {
if (res.code === 200) {
this.$message.success('项目解析完成')
} else {
this.$message.error(res.msg)
}
})
// xxx
},
// 导出重复建设风险报告
handlExportRiskReport() {
handlExportRiskReport(title, type) {
if (this.selectRows.length == 0) {
return this.$message.warning('请选择一条数据')
}
if (this.selectRows.length > 1) {
return this.$message.warning('只能选择一条数据')
}
const params = {
title: '功能重复风险',
comment: '',
title: `${this.selectRows[0].prjName}${title}`,
type,
comment: this.selectRows[0].reviewSuggestion,
}
exportRiskReport(params).then((res) => {
const url = window.URL.createObjectURL(
......@@ -371,7 +491,7 @@ export default {
)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `重复建设风险报告.doc`)
link.setAttribute('download', `${title}.doc`)
document.body.appendChild(link)
link.click()
window.URL.revokeObjectURL(url) // 释放内存
......@@ -413,9 +533,13 @@ export default {
this.$refs.searchTable.queryData()
},
handleClick(tab, event) {
// console.log(tab, event)
// this.activeSubTabItem = tab
// if (this.activeName === '1') {
// // this.query.url = queryConceptualAnalysis
// this.query.queryParam.reviewEnum = undefined
// } else {
// // this.query.url = queryConceptualReview
this.query.queryParam.reviewEnum = this.getArchiPrjReviewEnum()
// }
this.$refs.searchTable.queryData()
},
handleSubClick(tab, event) {
......@@ -429,4 +553,10 @@ export default {
</script>
<style scoped lang="scss">
@import '@/styles/common.scss';
/deep/ .success {
color: #13ce66;
}
/deep/ .error {
color: #ff4949;
}
</style>
......@@ -20,15 +20,22 @@
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
<!-- <img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/> -->
<div class="office w-100 h-100">
<vab-only-office
id="office-preview"
: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">
......@@ -59,11 +66,20 @@
<script>
import OnlineReviewLeft from '@/views/conceptualViewOrg/OnlineReviewLeft'
import { getReviewNorm, editConceptualViewOrg, exportRiskReport } from '@/api'
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
getReviewNorm,
editConceptualViewOrg,
exportRiskReport,
queryPrjNeedFile,
} from '@/api'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'OnlineReview',
components: {
OnlineReviewLeft,
vabOnlyOffice,
},
data() {
return {
......@@ -73,6 +89,46 @@ export default {
leftBaseOptions: [],
rightBaseOptions: [],
onlineReviewState: 1,
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '',
// 文件名
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
// download: true, //定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
// edit: true, //定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
width: '100%',
editorConfig: {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
}
},
created() {
......@@ -83,8 +139,26 @@ export default {
// } else {
// this.getReviewNorm()
// }
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getReviewNorm() {
const { needId } = this.row
const params = {
......
......@@ -5,64 +5,166 @@
<div class="search_menu_item_container">
<div class="search_menu_item">
<span class="search_title">专家库名称</span>
<el-input v-model="searchParams.talentPoolName" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-model="searchParams.talentPoolName"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item">
<span class="search_title">专家标签</span>
<el-select v-model="searchParams.tagId" placeholder="请选择" clearable class="search_item">
<el-option v-for="(item,idnex) in selectData3" :key="idnex" :label="item.label" :value="item.value" ></el-option>
<el-select
v-model="searchParams.tagId"
placeholder="请选择"
clearable
class="search_item"
>
<el-option
v-for="(item, idnex) in selectData3"
:key="idnex"
: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.state" placeholder="请选择" clearable class="search_item">
<el-option v-for="(item,idnex) in selectData4" :key="idnex" :label="item.label" :value="item.value" ></el-option>
<el-select
v-model="searchParams.state"
placeholder="请选择"
clearable
class="search_item"
>
<el-option
v-for="(item, idnex) in selectData4"
:key="idnex"
: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-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" :data="tableData" stripe border @selection-change="handleSelectionChange">
<el-table
:height="tableHeight"
:data="tableData"
stripe
border
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" width="55" :selectable="selectInit"></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="talentPoolName" label="专家库名称" align="center"></el-table-column>
<el-table-column prop="deptName" label="单位" width="150" align="center"></el-table-column>
<el-table-column prop="talentName" label="专家名称" align="center"></el-table-column>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="talentPoolName"
label="专家库名称"
align="center"
></el-table-column>
<el-table-column
prop="deptName"
label="单位"
width="150"
align="center"
></el-table-column>
<el-table-column
prop="talentName"
label="专家名称"
align="center"
></el-table-column>
<el-table-column prop="" width="250" label="专家标签" align="center">
<template slot-scope="scope">
<div class="tagName">
<el-tag
v-for="item in scope.row.tagIdlist"
:key="item.tagId">
<el-tag v-for="item in scope.row.tagIdlist" :key="item.tagId">
{{ item.name }}
</el-tag>
</div>
</template>
</el-table-column>
<el-table-column prop="level_" label="专家级别" align="center"></el-table-column>
<el-table-column prop="comments" label="专家评价" align="center"></el-table-column>
<el-table-column prop="state_" label="专家状态" width="150" align="center"></el-table-column>
<el-table-column prop="remark" label="备注" align="center"></el-table-column>
<el-table-column
prop="level_"
label="专家级别"
align="center"
></el-table-column>
<el-table-column
prop="comments"
label="专家评价"
align="center"
></el-table-column>
<el-table-column
prop="state_"
label="专家状态"
width="150"
align="center"
></el-table-column>
<el-table-column
prop="remark"
label="备注"
align="center"
></el-table-column>
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<div style="display: flex;align-items: center;justify-content: center;">
<el-button type="primary" icon="el-icon-edit" size="mini" @click="operate('edit',scope.row)">编辑</el-button>
<el-button class="delBtn" type="primary" 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
type="primary"
icon="el-icon-edit"
size="mini"
@click="operate('edit', scope.row)"
>编辑</el-button
>
<el-button
class="delBtn"
type="primary"
icon="el-icon-delete"
size="mini"
@click="operate('del', scope.row)"
>删除</el-button
>
</div>
</template>
</el-table-column>
......@@ -75,7 +177,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>
......@@ -83,62 +186,122 @@
:title="title"
:visible.sync="add_dialog"
:center="false"
width="55%">
width="55%"
>
<div class="add_dialog_content">
<div class="dialog_content_1">
<div class="dialog_form_item">
<div class="dialog_form_item_title">单位</div>
<el-input v-model="formData.deptName" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-model="formData.deptName"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="dialog_form_item">
<div class="dialog_form_item_title">专家库名称</div>
<el-select v-model="formData.talentPoolName" placeholder="请选择" clearable class="search_item">
<el-select
v-model="formData.talentPoolName"
placeholder="请选择"
clearable
class="search_item"
>
<el-input placeholder="请输入内容" v-model="add_select1_value">
<div slot="append" @click="add_select1">
新增
</div>
<div slot="append" @click="add_select1">新增</div>
</el-input>
<el-option v-for="(item,idnex) in selectData1" :key="idnex" :label="item.talentPoolName" :value="item.talentPoolName" ></el-option>
<el-option
v-for="(item, idnex) in selectData1"
:key="idnex"
:label="item.talentPoolName"
:value="item.talentPoolName"
></el-option>
</el-select>
</div>
<div class="dialog_form_item">
<div class="dialog_form_item_title">专家名称</div>
<el-input v-model="formData.talentName" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-model="formData.talentName"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
</div>
<div class="dialog_content_1">
<div class="dialog_form_item">
<div class="dialog_form_item_title">专家标签</div>
<el-select v-model="formData.taglist" placeholder="请选择" clearable class="search_item" :multiple="true">
<el-option v-for="(item,idnex) in selectData3" :key="idnex" :label="item.label" :value="item.value" ></el-option>
<el-select
v-model="formData.taglist"
placeholder="请选择"
clearable
class="search_item"
:multiple="true"
>
<el-option
v-for="(item, idnex) in selectData3"
:key="idnex"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<div class="dialog_form_item">
<div class="dialog_form_item_title">专家级别</div>
<el-select v-model="formData.level" placeholder="请选择" clearable class="search_item">
<el-option v-for="(item,idnex) in selectData2" :key="idnex" :label="item.label" :value="item.value" ></el-option>
<el-select
v-model="formData.level"
placeholder="请选择"
clearable
class="search_item"
>
<el-option
v-for="(item, idnex) in selectData2"
:key="idnex"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<div class="dialog_form_item">
<div class="dialog_form_item_title">专家评价</div>
<el-input v-model="formData.comments" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-model="formData.comments"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
</div>
<div class="dialog_content_1">
<div class="dialog_form_item">
<div class="dialog_form_item_title">专家状态</div>
<el-select v-model="formData.state" placeholder="请选择" clearable class="search_item">
<el-option v-for="(item,idnex) in selectData4" :key="idnex" :label="item.label" :value="item.value" ></el-option>
<el-select
v-model="formData.state"
placeholder="请选择"
clearable
class="search_item"
>
<el-option
v-for="(item, idnex) in selectData4"
:key="idnex"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div class="dialog_form_item">
<div class="dialog_form_item_title">备注</div>
<el-input type="textarea" :rows="2" placeholder="请输入内容" class="dialog_form_item_content" v-model="formData.remark"></el-input>
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
class="dialog_form_item_content"
v-model="formData.remark"
></el-input>
</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>
......@@ -146,7 +309,6 @@
</template>
<script>
import {
getETPManageList,
getETPManageAdd,
......@@ -156,39 +318,36 @@ import {
getDianXingAnLiSelectData,
getETPManagePoolName,
getETPManagePoolNameAdd,
} from "@/api/index.js";
import $ from 'jquery';
import { MessageBox, Message } from 'element-ui';
} from '@/api/index.js'
import $ from 'jquery'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'etpManage',
components: {
},
components: {},
data() {
return {
tableData: [],
selectList: [],
add_dialog: false,
add_dialog3: false,
title: "",
openType: "",
title: '',
openType: '',
formData: {
deptName: "",
talentPoolName: "",
talentName: "",
deptName: '',
talentPoolName: '',
talentName: '',
taglist: [],
level: "",
comments: "",
state: "",
remark: "",
level: '',
comments: '',
state: '',
remark: '',
talentId: null,
},
searchParams: {
talentPoolName: "",
tagId: "",
state: "",
talentPoolName: '',
tagId: '',
state: '',
},
pager: {
current: 1,
......@@ -201,229 +360,232 @@ export default {
selectData3: [],
selectData4: [],
eleList: [],
radioName: "",
radioName: '',
search_select1: [],
tableHeight: null,
add_select1_value: ''
};
add_select1_value: '',
}
},
mounted() {
window.addEventListener('resize', () => {
this.set_table_height();
this.set_table_height()
})
this.set_table_height();
this.set_table_height()
// 获取元素列表
this.getSelect1();
this.getSelect2().then(res => {
this.selectData2 = res;
});
this.getSelect3().then(res => {
this.selectData3 = res;
});
this.getSelect4().then(res => {
this.selectData4 = res;
});
this.getSelect1()
this.getSelect2().then((res) => {
this.selectData2 = res
})
this.getSelect3().then((res) => {
this.selectData3 = res
})
this.getSelect4().then((res) => {
this.selectData4 = res
})
},
created() {
// 初始化查询列表
this.getList();
this.getList()
},
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 = {
"talentPoolName": this.searchParams.talentPoolName,
"tagId": this.searchParams.tagId,
"state": this.searchParams.state,
"current": this.pager.current,
"pageSize": this.pager.size,
};
getETPManageList(params).then(res => {
Promise.all([ this.getSelect2(), this.getSelect4(), this.getSelect3() ]).then(res2 => {
res.records.map(item => {
if(item.tagIdlist && item.tagIdlist.length > 0) {
res2[2].forEach(item2 => {
item.tagIdlist.map(item3 => {
if(item2.value == item3.tagId) {
item3['name'] = item2.label;
talentPoolName: this.searchParams.talentPoolName,
tagId: this.searchParams.tagId,
state: this.searchParams.state,
current: this.pager.current,
pageSize: this.pager.size,
}
getETPManageList(params).then((res) => {
Promise.all([
this.getSelect2(),
this.getSelect4(),
this.getSelect3(),
]).then((res2) => {
res.records.map((item) => {
if (item.tagIdlist && item.tagIdlist.length > 0) {
res2[2].forEach((item2) => {
item.tagIdlist.map((item3) => {
if (item2.value == item3.tagId) {
item3['name'] = item2.label
}
})
})
}
let result1 = res2[0].find(item2 => item2.value == item.level);
let result2 = res2[1].find(item2 => item2.value == item.state);
item['level_'] = result1 ? result1.label : '';
item['state_'] = result2 ? result2.label : '';
});
this.pager.current = res.current;
this.pager.total = res.total;
this.pager.size = res.size;
this.tableData = res.records;
let result1 = res2[0].find((item2) => item2.value == item.level)
let result2 = res2[1].find((item2) => item2.value == item.state)
item['level_'] = result1 ? result1.label : ''
item['state_'] = result2 ? result2.label : ''
})
this.pager.current = res.current
this.pager.total = res.total
this.pager.size = res.size
this.tableData = res.records
})
})
});
},
// 重置
reset(){
reset() {
this.params = {
talentPoolName: "",
tagId: "",
state: "",
talentPoolName: '',
tagId: '',
state: '',
}
},
// 分页事件
handleSizeChange(val) {
this.page.current = 1;
this.page.size = val;
this.getList();
this.pager.current = 1
this.pager.size = val
this.getList()
},
handleCurrentChange(val) {
this.page.current = val;
this.getList();
this.pager.current = val
this.getList()
},
// 所有操作
operate(type,item){
this.openType = type;
if (type == "add") {
this.add_dialog = true;
this.title = "新建专家人才库";
this.resetForm();
this.formData.talentId = null;
}else if (type == "edit") {
this.add_dialog = true;
this.title = "编辑专家人才库";
this.resetForm();
operate(type, item) {
this.openType = type
if (type == 'add') {
this.add_dialog = true
this.title = '新建专家人才库'
this.resetForm()
this.formData.talentId = null
} else if (type == 'edit') {
this.add_dialog = true
this.title = '编辑专家人才库'
this.resetForm()
// this.formData = item;
this.formData.deptName = item.deptName;
this.formData.talentPoolName = Number(item.talentPoolName);
this.formData.talentName = item.talentName;
this.formData.state = String(item.state);
this.formData.level = String(item.level);
this.formData.taglist = [];
if(item.tagIdlist) {
item.tagIdlist.forEach(item => {
this.formData.taglist.push(String(item.tagId));
});
this.formData.deptName = item.deptName
this.formData.talentPoolName = Number(item.talentPoolName)
this.formData.talentName = item.talentName
this.formData.state = String(item.state)
this.formData.level = String(item.level)
this.formData.taglist = []
if (item.tagIdlist) {
item.tagIdlist.forEach((item) => {
this.formData.taglist.push(String(item.tagId))
})
}
this.formData.comments = item.comments;
this.formData.remark = item.remark;
this.formData.talentId = item.talentId;
}else if (type == "create") {
let tagIdlist_ = [];
this.selectData3.forEach(item1 => {
this.formData.taglist.forEach(item2 => {
this.formData.comments = item.comments
this.formData.remark = item.remark
this.formData.talentId = item.talentId
} else if (type == 'create') {
let tagIdlist_ = []
this.selectData3.forEach((item1) => {
this.formData.taglist.forEach((item2) => {
if (item1.value == item2) {
tagIdlist_.push(
{
tagIdlist_.push({
tagId: item1.value,
}
)
})
}
})
})
const params = { ...this.formData, taglist: tagIdlist_ };
const params = { ...this.formData, taglist: tagIdlist_ }
if (this.formData.talentId) {
// 编辑保存
getETPManageUpdate(params).then(res => {
getETPManageUpdate(params).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);
}
});
}else{
this.$message.success('保存成功')
this.add_dialog = false
this.getList()
} else {
this.add_dialog = false
this.$message.error(res.msg)
}
})
} else {
// 新建保存
getETPManageAdd(params).then(res => {
getETPManageAdd(params).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') {
// 删除
const params = {
talentId: item.talentId,
delFlag: 1,
}
this.$confirm("确认删除吗", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
this.$confirm('确认删除吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
confirmButtonClass: 'confirmClass',
type: "warning"
}).then(() => {
getETPManageUpdate(params).then(res => {
type: 'warning',
})
.then(() => {
getETPManageUpdate(params).then((res) => {
if (res.code == 200) {
this.$message.success("删除成功");
this.getList();
}else{
this.$message.error(res.msg);
}
});
}).catch(() => {
});
}else if (type == "delMultiple") {
this.$message.success('删除成功')
this.getList()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
} else if (type == 'delMultiple') {
if (this.selectList.length <= 0) {
this.$message.error("请选择一项进行删除");
return;
this.$message.error('请选择一项进行删除')
return
}
let params = {
talentId: [],
};
this.selectList.map(item => {
}
this.selectList.map((item) => {
params.talentId.push(item.talentId)
})
this.$confirm("确认批量删除吗", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
this.$confirm('确认批量删除吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
confirmButtonClass: 'confirmClass',
type: "warning"
}).then(() => {
getETPManageDelBatch(params).then(res => {
type: 'warning',
})
.then(() => {
getETPManageDelBatch(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 = {
deptName: "",
talentPoolName: "",
talentName: "",
deptName: '',
talentPoolName: '',
talentName: '',
taglist: [],
level: "",
comments: "",
state: "",
remark: "",
level: '',
comments: '',
state: '',
remark: '',
}
this.labelList = [];
this.labelList = []
},
exportFile() {//导出
exportFile() {
//导出
// getTypicalExampleExcel(this.params).then(res => {
// let blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
// let url = URL.createObjectURL(blob);
......@@ -433,329 +595,336 @@ export default {
// link.click();
// })
},
add_select1() {//新增专家库名称
add_select1() {
//新增专家库名称
const params = {
talentPoolName: this.add_select1_value
talentPoolName: this.add_select1_value,
}
getETPManagePoolNameAdd(params).then(res => {
if(res.code == 200) {
getETPManagePoolNameAdd(params).then((res) => {
if (res.code == 200) {
Message({
type: 'success',
message: '新增成功!'
});
this.getSelect1();
message: '新增成功!',
})
this.getSelect1()
}
})
},
getSelect1() {//专家库下来
getETPManagePoolName().then(res => {
if(res.code == 200) {
this.selectData1 = res.data;
getSelect1() {
//专家库下来
getETPManagePoolName().then((res) => {
if (res.code == 200) {
this.selectData1 = res.data
}
})
},
getSelect2() {//专家级别下拉
getSelect2() {
//专家级别下拉
const params = {
key: "talent_level"
key: 'talent_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)
}
})
})
},
getSelect3() {//专家标签下拉
getSelect3() {
//专家标签下拉
const params = {
key: "talent_tag"
key: 'talent_tag',
}
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)
}
})
})
},
getSelect4() {//专家状态下拉
getSelect4() {
//专家状态下拉
const params = {
key: "talent_status"
key: 'talent_status',
}
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'
},
// 表格多选
handleSelectionChange(e) {
this.selectList = e;
this.selectList = e
},
selectInit(row,index){
if(row.state != "1"){
selectInit(row, index) {
if (row.state != '1') {
return true //可勾选
}else{
} else {
return false //不可勾选
}
},
},
}
</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 lang="scss" scoped>
/deep/ .el-input-group__append{
background-color: #0D867F;
/deep/ .el-input-group__append {
background-color: #0d867f;
color: #fff;
cursor: pointer;
}
/deep/ .el-dialog__header{
background-color: #0D867F;
}
/deep/ .el-dialog__header {
background-color: #0d867f;
text-align: left;
}
/deep/ .el-dialog__title{
}
/deep/ .el-dialog__title {
color: #fff;
}
/deep/ .el-dialog__close {
}
/deep/ .el-dialog__close {
color: #fff;
}
/deep/ .el-tag{
color: #0D867F;
}
.etpManage{
}
/deep/ .el-tag {
color: #0d867f;
}
.etpManage {
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-input{
.el-input {
width: 210px;
}
.el-select{
.el-select {
width: 210px;
}
}
.dialog_form_item3{
}
.dialog_form_item3 {
margin-top: 20px;
display: flex;
align-items: center;
.dialog_form_item3_content1{
.dialog_form_item3_content1 {
display: flex;
align-items: center;
.tu_biao_icon2{
.tu_biao_icon2 {
width: 20px;
}
}
}
.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--primary{
background: rgba(13,134,127,0.1);
color: #0D867F;
.el-button--primary {
background: rgba(13, 134, 127, 0.1);
color: #0d867f;
border: 0;
}
}
.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_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%;
margin-top: 20px;
height: calc(100% - 40px);
.tableIcon{
.tableIcon {
width: 100%;
display: flex;
justify-content: center;
.iconItem{
.iconItem {
width: 30px;
height: 30px;
}
}
.delBtn{
color: #DD6A15;
background-color: #F8EBE2;
}
.stopBtn{
color: #E7A20E;
.delBtn {
color: #dd6a15;
background-color: #f8ebe2;
}
.tagName{
.el-tag{
margin:0 5px;
.stopBtn {
color: #e7a20e;
}
.tagName {
.el-tag {
margin: 0 5px;
}
}
.el-pagination{
}
.el-pagination {
margin-top: 50px;
}
.dialog_form_item{
}
.dialog_form_item {
display: flex;
align-items: center;
margin-bottom: 10px;
.formArea{
.formArea {
width: 900px;
border-radius: 5px;
border: 1px solid #0D867F;
border: 1px solid #0d867f;
margin-top: 10px;
.formLine{
.formLine {
display: flex;
align-items: center;
height: 50px;
margin-left: 10px;
.formItem{
.formItem {
margin-left: 15px;
display: flex;
align-items: center;
.label{
.label {
width: 70px;
text-align: right;
margin-right: 5px;
}
/deep/.el-select{
/deep/.el-select {
width: 140px;
}
/deep/.el-input{
/deep/.el-input {
width: 140px;
}
}
.newBtn{
.newBtn {
margin-left: 15px;
.addItem{
background-color: #0D867F;
.addItem {
background-color: #0d867f;
color: #fff;
}
}
}
}
}
.dialog_form_item_title{
}
.dialog_form_item_title {
flex-shrink: 0;
margin-right: 15px;
width: 100px;
text-align: right;
.reqIcon{
.reqIcon {
color: red;
}
}
/deep/ .el-dialog__header{
}
/deep/ .el-dialog__header {
text-align: left;
}
/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>
<!--
* @Description: 项目信息详情
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-28 16:08:56
* @LastEditors: pan
* @LastEditTime: 2024-03-29 16:06:36
-->
<template>
<div>
<el-dialog
:title="getTitle"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="90%"
@close="handleClose()"
@open="handleOpen()"
>
<div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="基本信息" name="1">
<div class="base-info-item m-t-20">
<div class="base-info-item-title">系统基本信息</div>
<div class="base-info-item-content">
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">单位</div>
<div class="value">{{ detailInfo.manageOrgId }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">部门</div>
<div class="value">{{ detailInfo.manageDeptId }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">关联系统名称</div>
<div class="value">
{{ detailInfo.appName }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">建设类型</div>
<div class="value">{{ detailInfo.buildType }}</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">项目名称</div>
<div class="value">{{ detailInfo.prjName }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">是否续建</div>
<div class="value">
{{ detailInfo.prjPlanClass === 2 ? '是' : '否' }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">前期项目</div>
<div class="value">
{{ detailInfo.agoPrjName }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">承建单位</div>
<div class="value">{{ detailInfo.buildOrg }}</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">项目经理</div>
<div class="value">{{ detailInfo.projectManager }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">创建人</div>
<div class="value">{{ detailInfo.createMan }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">创建时间</div>
<div class="value">{{ detailInfo.createTime }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">修改人</div>
<div class="value">{{ detailInfo.lastUpdateMan }}</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="24" class="flex">
<div class="label">修改时间</div>
<div class="value">{{ detailInfo.lastUpdateTime }}</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="24" class="flex">
<div class="label">项目资料</div>
<div class="value">
<el-table :data="detailInfo.filesValue" stripe border>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="busiFileName"
label="资料类型"
width="300"
align="center"
></el-table-column>
<el-table-column
prop="name2"
width="500"
label="资料名称"
align="center"
></el-table-column>
</el-table>
</div>
</el-col>
</el-row>
</div>
</div>
<div class="base-info-item m-t-20">
<div class="base-info-item-title">系统架构管控要求</div>
<div class="base-info-item-content">
<el-row class="m-t-20">
<el-col :span="8" class="flex">
<div class="label" style="width: 160px">
评审情况(概要设计)
</div>
<div class="value">完成</div>
</el-col>
<el-col :span="8" class="flex">
<div class="label">概设架构遵从检查</div>
<div class="value">完成</div>
</el-col>
<el-col :span="8" class="flex">
<div class="label">概设架构政策审查</div>
<div class="value">完成</div>
</el-col>
</el-row>
</div>
</div>
<div class="base-info-item m-t-20">
<div class="base-info-item-title">概要设计评审情况</div>
<div class="base-info-item-content">
<el-row class="m-t-20">
<el-col :span="8" class="flex">
<div class="label">批次名称</div>
<div class="value">2023第一批次概设评审</div>
</el-col>
<el-col :span="8" class="flex">
<div class="label">需求名称</div>
<div class="value">2023第一批次概设评审需求</div>
</el-col>
<el-col :span="8" class="flex">
<div class="label">关联组织机构</div>
<div class="value">经研院-项目管理部</div>
</el-col>
</el-row>
</div>
</div>
</el-tab-pane>
<!-- <el-tab-pane label="架构资产" name="2">架构资产</el-tab-pane>
<el-tab-pane label="架构视图" name="3">架构视图</el-tab-pane> -->
</el-tabs>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">关 闭</el-button>
</span></el-dialog
>
</div>
</template>
<script>
import { getPrjInfoDetail } from '@/api'
export default {
props: {
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
activeName: '1',
tableData: [],
detailInfo: {},
}
},
components: {},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
getTitle() {
return `项目名称:${this.rowData.prjName}`
},
},
mounted() {},
methods: {
handleClose() {
this.showDialog = false
},
handleOpen() {
getPrjInfoDetail(this.rowData).then((res) => {
if (res.code === 200) {
this.detailInfo = res.data
}
})
},
handleClick() {},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
@import '@/styles/common.scss';
.base-info-item {
&-title {
font-size: 16px;
color: #1ec695;
position: relative;
text-align: left;
padding-left: 20px;
&::before {
content: '';
position: absolute;
left: 0;
top: 2px;
width: 6px;
border-radius: 4px;
height: 20px;
background-color: #1ec695;
}
}
&-content {
// padding: 0 50px;
.label {
font-weight: bold;
margin-right: 30px;
width: 120px;
text-align: right;
}
.value {
flex: 1;
text-align: left;
}
}
}
</style>
......@@ -5,66 +5,212 @@
<div class="search_menu_item_container">
<div class="search_menu_item">
<span class="search_title">单位</span>
<el-input v-no-backslash v-model="searchParams.let1" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<!-- <el-input
v-no-backslash
v-model="searchParams.let1"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input> -->
<el-select
v-model="searchParams.let1"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in sysOrgOptions"
: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-input v-no-backslash v-model="searchParams.let2" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<!-- <el-input
v-no-backslash
v-model="searchParams.let2"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input> -->
<el-select
v-model="searchParams.let2"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in sysDeptOptions"
: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-input v-no-backslash v-model="searchParams.let3" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams.let3"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</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 jianSheLeiXingSelect" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select
v-model="searchParams.let4"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in jianSheLeiXingSelect"
: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="operation('add', null)">新建项目</el-button>
<el-button
type="primary"
size="medium"
icon="el-icon-document-add"
@click="operation('add', null)"
>新建项目</el-button
>
<!-- <el-button type="primary" size="medium" icon="el-icon-document-add" @click="operation('add', null)">续建项目</el-button> -->
<!-- <el-button type="primary" size="medium" icon="el-icon-delete">删除</el-button> -->
</div>
<el-table :height="tableHeight" v-loading="loading" :data="tableData" stripe border>
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
<el-table-column prop="manageOrgId" label="单位" align="center"></el-table-column>
<el-table-column prop="manageDeptId" label="部门" align="center"></el-table-column>
<el-table-column prop="appName" label="系统名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table
:height="tableHeight"
v-loading="loading"
:data="tableData"
stripe
border
>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="manageOrgId"
label="单位"
align="center"
:formatter="
(row, column, cellValue, index) =>
formatterDept(row, column, cellValue, index, 'sysOrgOptions')
"
></el-table-column>
<el-table-column
prop="manageDeptId"
label="部门"
align="center"
:formatter="
(row, column, cellValue, index) =>
formatterDept(row, column, cellValue, index, 'sysDeptOptions')
"
></el-table-column>
<el-table-column
prop="appName"
label="系统名称"
align="center"
width="200"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column label="建设类型" align="center">
<template slot-scope="scope">
<span v-if="scope.row.buildType == 1">统推</span>
<span v-else-if="scope.row.buildType == 2">自建</span>
</template>
</el-table-column>
<el-table-column prop="prjName" label="项目名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table-column
prop="prjName"
label="项目名称"
align="center"
width="200"
:show-overflow-tooltip="true"
>
<template slot-scope="{ row }">
<span class="prjName" @click="openDetail(row)">{{
row.prjName
}}</span>
</template>
</el-table-column>
<el-table-column label="项目类型" align="center">
<template slot-scope="scope">
<span v-if="scope.row.prjPlanClass == 1">新建</span>
<span v-else-if="scope.row.prjPlanClass == 2">续建</span>
</template>
</el-table-column>
<el-table-column prop="buildOrg" label="承建单位" align="center"></el-table-column>
<el-table-column prop="projectManager" label="项目经理" align="center"></el-table-column>
<el-table-column prop="createMan" label="创建人" align="center"></el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
<el-table-column
prop="buildOrg"
label="承建单位"
align="center"
></el-table-column>
<el-table-column
prop="projectManager"
label="项目经理"
align="center"
></el-table-column>
<el-table-column
prop="createMan"
label="创建人"
align="center"
></el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
align="center"
></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="operation('edit', scope.row)" :disabled="scope.row.state == 1">编辑</el-button>
<el-button class="shanChu_btn" icon="el-icon-delete" size="mini" @click="operation('delete', scope.row)" :disabled="scope.row.state == 1">删除</el-button>
<div
style="
display: flex;
align-items: center;
justify-content: center;
"
>
<el-button
icon="el-icon-edit"
type="primary"
size="mini"
@click="operation('edit', scope.row)"
:disabled="scope.row.state == 1"
>编辑</el-button
>
<el-button
class="shanChu_btn"
icon="el-icon-delete"
size="mini"
@click="operation('delete', scope.row)"
:disabled="scope.row.state == 1"
>删除</el-button
>
</div>
</template>
</el-table-column>
......@@ -82,7 +228,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>
<el-dialog
......@@ -90,25 +237,43 @@
:visible.sync="add_dialog"
:center="false"
:close-on-click-modal="false"
width="80%">
<el-form :model="ruleForm" ref="form" :rules="rules" style="display: flex;flex-wrap: wrap;">
<el-form-item label="关联系统:" prop="let1" style="width: 30%;">
width="80%"
>
<el-form
:model="ruleForm"
ref="form"
:rules="rules"
style="display: flex; flex-wrap: wrap"
>
<el-form-item label="关联系统:" prop="let1" style="width: 30%">
<el-input v-model="ruleForm.let1" readonly>
<div slot="append" @click="operation('open_add_dialog2', null)">
选择系统
</div>
</el-input>
</el-form-item>
<el-form-item label="项目名称:" prop="let2" style="width: 30%;margin-left: 46px;">
<el-input v-no-backslash v-model="ruleForm.let2" maxlength="100"></el-input>
<el-form-item
label="项目名称:"
prop="let2"
style="width: 30%; margin-left: 46px"
>
<el-input
v-no-backslash
v-model="ruleForm.let2"
maxlength="100"
></el-input>
</el-form-item>
<el-form-item label="是否续建:" prop="let3" style="width: 30%;">
<el-form-item label="是否续建:" prop="let3" style="width: 30%">
<el-select v-model="ruleForm.let3" clearable placeholder="请选择">
<el-option label="是" :value="2"></el-option>
<el-option label="否" :value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="前期项目:" prop="let4" style="width: 29.5%;margin-left: 10px;">
<el-form-item
label="前期项目:"
prop="let4"
style="width: 29.5%; margin-left: 10px"
>
<el-input v-model="ruleForm.let4" readonly>
<div slot="append" @click="operation('open_add_dialog3', null)">
选择项目
......@@ -123,20 +288,35 @@
</el-input>
</el-form-item> -->
</el-form>
<div style="text-align: left;margin-left: 10px;">项目资料:</div>
<div style="text-align: left; margin-left: 10px">项目资料:</div>
<el-table :data="tableData4" stripe border>
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
<el-table-column prop="tableLet1" label="资料类型" align="center"></el-table-column>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="label"
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)"
: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">
:file-list="scope.row.fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</template>
......@@ -144,65 +324,145 @@
</el-table>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="dialogOperation('save', null)">保存</el-button>
<el-button class="greenButton" @click="dialogOperation('save', null)"
>保存</el-button
>
<el-button @click="add_dialog = false">取消</el-button>
</span>
</el-dialog>
<el-dialog
title='选择系统'
title="选择系统"
:visible.sync="add_dialog2"
:center="false"
:close-on-click-modal="false"
width="80%">
<div class="search_menu" style="justify-content: center;">
width="80%"
>
<div class="search_menu" style="justify-content: center">
<div class="search_menu_item_container">
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">单位</span>
<el-input v-no-backslash v-model="searchParams2.let1" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams2.let1"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">部门</span>
<el-input v-no-backslash v-model="searchParams2.let2" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams2.let2"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">项目名称</span>
<el-input v-no-backslash v-model="searchParams2.let3" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams2.let3"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">建设类型</span>
<el-select v-model="searchParams2.let4" placeholder="请选择" class="search_item">
<el-option v-for="item in jianSheLeiXingSelect" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select
v-model="searchParams2.let4"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in jianSheLeiXingSelect"
: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_table2">
<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="reset2">
<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>
<el-table height="300" v-loading="loading2" @selection-change="select_table_rows" :data="tableData2" stripe border>
<el-table
height="300"
v-loading="loading2"
@selection-change="select_table_rows"
:data="tableData2"
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="manageOrgId" label="单位" align="center"></el-table-column>
<el-table-column prop="manageDeptId" label="部门" align="center"></el-table-column>
<el-table-column prop="appName" label="系统名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="manageOrgId"
label="单位"
align="center"
></el-table-column>
<el-table-column
prop="manageDeptId"
label="部门"
align="center"
></el-table-column>
<el-table-column
prop="appName"
label="系统名称"
align="center"
width="200"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column label="建设类型" align="center">
<template slot-scope="scope">
<span v-if="scope.row.buildType == 1">统推</span>
<span v-else>自建</span>
</template>
</el-table-column>
<el-table-column prop="buildOrg" label="承建单位" align="center"></el-table-column>
<el-table-column prop="projectManager" label="项目经理" align="center"></el-table-column>
<el-table-column prop="createMan" label="创建人" align="center"></el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
<el-table-column
prop="buildOrg"
label="承建单位"
align="center"
></el-table-column>
<el-table-column
prop="projectManager"
label="项目经理"
align="center"
></el-table-column>
<el-table-column
prop="createMan"
label="创建人"
align="center"
></el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
align="center"
></el-table-column>
</el-table>
<el-pagination
background
......@@ -212,75 +472,166 @@
:page-sizes="pager2.sizes"
:page-size="pager2.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pager2.total">
:total="pager2.total"
>
</el-pagination>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="dialogOperation('selectSystem', null)">确定</el-button>
<el-button @click="dialogOperation('cancelSelectSystem', null)">取消</el-button>
<el-button
class="greenButton"
@click="dialogOperation('selectSystem', null)"
>确定</el-button
>
<el-button @click="dialogOperation('cancelSelectSystem', null)"
>取消</el-button
>
</span>
</el-dialog>
<el-dialog
title='选择项目'
title="选择项目"
:visible.sync="add_dialog3"
:center="false"
:close-on-click-modal="false"
width="80%">
<div class="search_menu" style="justify-content: center;">
width="80%"
>
<div class="search_menu" style="justify-content: center">
<div class="search_menu_item_container">
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">单位</span>
<el-input v-no-backslash v-model="searchParams3.let1" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams3.let1"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">部门</span>
<el-input v-no-backslash v-model="searchParams3.let2" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams3.let2"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">系统名称</span>
<el-input v-no-backslash v-model="searchParams.let3" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams.let3"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</div>
<div class="search_menu_item" style="width: auto;">
<div class="search_menu_item" style="width: auto">
<span class="search_title">建设类型</span>
<el-select v-model="searchParams3.let4" placeholder="请选择" class="search_item">
<el-option v-for="item in jianSheLeiXingSelect" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select
v-model="searchParams3.let4"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in jianSheLeiXingSelect"
: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_table3">
<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="reset3">
<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>
<el-table height="300" v-loading="loading3" @selection-change="select_table_row3" :data="tableData3" stripe border>
<el-table
height="300"
v-loading="loading3"
@selection-change="select_table_row3"
:data="tableData3"
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="manageOrgId" label="单位" align="center"></el-table-column>
<el-table-column prop="manageDeptId" label="部门" align="center"></el-table-column>
<el-table-column prop="appName" label="系统名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="manageOrgId"
label="单位"
align="center"
></el-table-column>
<el-table-column
prop="manageDeptId"
label="部门"
align="center"
></el-table-column>
<el-table-column
prop="appName"
label="系统名称"
align="center"
width="200"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column label="建设类型" align="center">
<template slot-scope="scope">
<span v-if="scope.row.buildType == 1">统推</span>
<span v-else>自建</span>
</template>
</el-table-column>
<el-table-column prop="prjName" label="项目名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table-column
prop="prjName"
label="项目名称"
align="center"
width="200"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column label="是否续建" align="center">
<template slot-scope="scope">
<span v-if="scope.row.prjPlanClass == 1"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column prop="buildOrg" label="承建单位" align="center"></el-table-column>
<el-table-column prop="projectManager" label="项目经理" align="center"></el-table-column>
<el-table-column prop="createMan" label="创建人" align="center"></el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
<el-table-column
prop="buildOrg"
label="承建单位"
align="center"
></el-table-column>
<el-table-column
prop="projectManager"
label="项目经理"
align="center"
></el-table-column>
<el-table-column
prop="createMan"
label="创建人"
align="center"
></el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
align="center"
></el-table-column>
</el-table>
<el-pagination
background
......@@ -290,44 +641,61 @@
:page-sizes="pager3.sizes"
:page-size="pager3.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pager3.total">
:total="pager3.total"
>
</el-pagination>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="dialogOperation('selectProject', null)">确定</el-button>
<el-button @click="dialogOperation('cancelSelectProject', null)">取消</el-button>
<el-button
class="greenButton"
@click="dialogOperation('selectProject', null)"
>确定</el-button
>
<el-button @click="dialogOperation('cancelSelectProject', null)"
>取消</el-button
>
</span>
</el-dialog>
<el-dialog
title='选择报告'
title="选择报告"
:visible.sync="add_dialog4"
:center="false"
:close-on-click-modal="false"
width="80%">
width="80%"
>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="dialogOperation('selectReport', null)">确定</el-button>
<el-button @click="dialogOperation('cancelSelectReport', null)">取消</el-button>
<el-button
class="greenButton"
@click="dialogOperation('selectReport', null)"
>确定</el-button
>
<el-button @click="dialogOperation('cancelSelectReport', null)"
>取消</el-button
>
</span>
</el-dialog>
<!-- 项目信息详情 -->
<ProjectDetail :row-data="rowData" :visible.sync="projectDetailVisible" />
</div>
</template>
<script>
import ProjectDetail from '@/views/projectInfoManage/ProjectDetail'
import {
queryProjectInfoManageTable,
getDianXingAnLiSelectData,
editDeleteProjectInfoManageTable,
querysystemInfoManageTable,
addProjectManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
addProjectManageTable,
getPrjInfoDetail,
} from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import $ from 'jquery'
import { getDictTypeOptions } from '@/utils'
export default {
name: 'projectInfoManage',
components: {
},
components: { ProjectDetail },
data() {
return {
add_dialog2: false,
......@@ -341,12 +709,8 @@ export default {
let5: null,
},
rules: {
let1: [
{ required: true, message: '请选择关联系统', trigger: 'blur' },
],
let2: [
{ required: true, message: '请输入项目名称', trigger: 'blur' },
],
let1: [{ required: true, message: '请选择关联系统', trigger: 'blur' }],
let2: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
let3: [
{ required: true, message: '请选择是否续建', trigger: 'change' },
],
......@@ -359,7 +723,7 @@ export default {
current: 1,
sizes: [10, 20, 50, 100, 200],
size: 10,
total: 20 //总条数
total: 20, //总条数
},
tableHeight: null,
searchParams: {
......@@ -387,7 +751,7 @@ export default {
current: 1,
sizes: [10, 20, 50, 100, 200],
size: 10,
total: 20 //总条数
total: 20, //总条数
},
selectRow: [],
selectRow3: [],
......@@ -397,173 +761,221 @@ export default {
current: 1,
sizes: [10, 20, 50, 100, 200],
size: 10,
total: 20 //总条数
total: 20, //总条数
},
selectRo3: [],
tableData4: [
{ id: 1, tableLet1: '技术规范书', fileList: [], fileArray: [] },
{ id: 2, tableLet1: '可行性研究报告', fileList: [], fileArray: [] },
{ id: 3, tableLet1: '需求规格说明书', fileList: [], fileArray: [] },
{ id: 4, tableLet1: '概要设计说明书', fileList: [], fileArray: [] },
{ id: 5, tableLet1: '安全防护方案', fileList: [], fileArray: [] },
{ id: 5, tableLet1: '其他', fileList: [], fileArray: [] },
// { id: 1, tableLet1: '技术规范书', fileList: [], fileArray: [] },
// { id: 2, tableLet1: '可行性研究报告', fileList: [], fileArray: [] },
// { id: 3, tableLet1: '需求规格说明书', fileList: [], fileArray: [] },
// { id: 4, tableLet1: '概要设计说明书', fileList: [], fileArray: [] },
// { id: 5, tableLet1: '安全防护方案', fileList: [], fileArray: [] },
// { id: 5, tableLet1: '其他', fileList: [], fileArray: [] },
],
prjId: null,
};
rowData: {},
projectDetailVisible: false,
sysOrgOptions: [],
sysDeptOptions: [],
}
},
mounted(){
mounted() {
window.addEventListener('resize', () => {
this.set_table_height();
this.set_table_height()
})
this.set_table_height();
this.get_table();
this.getJianSheLeiXingSelect().then(res => {
this.jianSheLeiXingSelect = res;
this.set_table_height()
this.get_table()
this.getJianSheLeiXingSelect().then((res) => {
this.jianSheLeiXingSelect = res
})
this.getDicts()
},
methods: {
formatterDept(row, column, cellValue, index, options) {
const obj = this[options]?.find((v) => v.value == cellValue) || {}
return obj.label
},
getDicts() {
getDictTypeOptions('prj_data').then((res) => {
this.tableData4 = res.map((v) => {
return {
label: v.label,
value: v.value,
fileList: [],
fileArray: [],
}
})
})
getDictTypeOptions('sys_org').then((res) => {
this.sysOrgOptions = res
})
getDictTypeOptions('sys_dept').then((res) => {
this.sysDeptOptions = res
})
},
openDetail(row) {
this.rowData = row
this.projectDetailVisible = true
},
// 文件上传逻辑
handleRemove(file, fileList, row) {//文件移出
row.fileArray = [];
handleRemove(file, fileList, row) {
//文件移出
row.fileArray = []
},
handleFileUploadSuccess(res, file, fileList, row) {//文件上传
row.fileArray = [{
handleFileUploadSuccess(res, file, fileList, row) {
//文件上传
row.fileArray = [
{
fileName: file.name,
fileId: file.response.data.fileId,
fileUrl: file.response.data.viewUrl
}];
fileUrl: file.response.data.viewUrl,
},
]
console.log(this.tableData4)
},
operation(type, data) {
switch(type){
switch (type) {
case 'add':
this.addItem();
break;
this.addItem()
break
case 'open_add_dialog2':
this.open_add_dialog2();
break;
this.open_add_dialog2()
break
case 'open_add_dialog3':
this.open_add_dialog3();
break;
this.open_add_dialog3()
break
case 'edit':
this.editItem(data);
break;
this.editItem(data)
break
case 'delete':
this.deleteItem(data);
break;
this.deleteItem(data)
break
}
},
dialogOperation(type, data) {
switch(type){
switch (type) {
case 'save':
this.save_dialog();
break;
this.save_dialog()
break
case 'selectSystem':
this.confirmSelectSystem();
break;
this.confirmSelectSystem()
break
case 'cancelSelectSystem':
this.selectRow = [];
this.add_dialog2 = false;
break;
this.selectRow = []
this.add_dialog2 = false
break
case 'selectProject':
this.confirmSelectProject();
break;
this.confirmSelectProject()
break
case 'cancelSelectProject':
this.selectRow3 = [];
this.add_dialog3 = false;
break;
this.selectRow3 = []
this.add_dialog3 = false
break
}
},
confirmSelectSystem() {
if(this.selectRow.length == 0) {
if (this.selectRow.length == 0) {
Message({
type: 'error',
message: '请选择至少一条数据'
});
return;
message: '请选择至少一条数据',
})
return
}
if(this.selectRow.length > 1) {
if (this.selectRow.length > 1) {
Message({
type: 'error',
message: '只能选择一条数据'
});
return;
message: '只能选择一条数据',
})
return
}
this.ruleForm.let1 = this.selectRow[0].appName;
this.add_dialog2 = false;
this.ruleForm.let1 = this.selectRow[0].appName
this.add_dialog2 = false
},
confirmSelectProject() {
if(this.selectRow3.length == 0) {
if (this.selectRow3.length == 0) {
Message({
type: 'error',
message: '请选择至少一条数据'
});
return;
message: '请选择至少一条数据',
})
return
}
if(this.selectRow3.length > 1) {
if (this.selectRow3.length > 1) {
Message({
type: 'error',
message: '只能选择一条数据'
});
return;
message: '只能选择一条数据',
})
return
}
this.ruleForm.let4 = this.selectRow3[0].prjName;
this.add_dialog3 = false;
this.ruleForm.let4 = this.selectRow3[0].prjName
this.add_dialog3 = false
},
deleteItem(row) {//删除
deleteItem(row) {
//删除
MessageBox.confirm('确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
customClass: 'messageClass',
confirmButtonClass: 'confirmClass',
type: 'warning'
}).then(() => {
type: 'warning',
})
.then(() => {
const params = {
prjId: row.prjId,
delFlag: 1
delFlag: 1,
}
editDeleteProjectInfoManageTable(params).then(res => {
if(res.code == 200) {
this.get_table();
editDeleteProjectInfoManageTable(params).then((res) => {
if (res.code == 200) {
this.get_table()
Message({
type: 'success',
message: '删除成功!'
});
}else{
message: '删除成功!',
})
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
});
}).catch(() => {
})
})
.catch(() => {
Message({
type: 'info',
message: '已取消'
});
});
message: '已取消',
})
})
},
addItem() {//新建项目
this.add_dialog = true;
this.is_add_edit = 'add';
addItem() {
//新建项目
this.add_dialog = true
this.is_add_edit = 'add'
this.$nextTick(() => {
this.$refs.form.resetFields();
this.ruleForm.let1 = null;
this.ruleForm.let2 = null;
this.ruleForm.let3 = null;
this.ruleForm.let4 = null;
this.selectRow = [];
this.selectRow3 = [];
this.tableData4.forEach(item => {
item.fileList = [];
item.fileArray = [];
});
});
this.$refs.form.resetFields()
this.ruleForm.let1 = null
this.ruleForm.let2 = null
this.ruleForm.let3 = null
this.ruleForm.let4 = null
this.selectRow = []
this.selectRow3 = []
this.tableData4.forEach((item) => {
item.fileList = []
item.fileArray = []
})
})
},
editItem(row) {//编辑
this.add_dialog = true;
this.is_add_edit = 'edit';
this.ruleForm.let1 = row.appName;
this.selectRow = [{
async editItem(row) {
//编辑
this.add_dialog = true
this.is_add_edit = 'edit'
this.ruleForm.let1 = row.appName
const detail = await getPrjInfoDetail(row)
console.log(detail)
let filesValue = []
if (detail.code === 200) {
filesValue = detail.data.filesValue
}
this.selectRow = [
{
appCode: row.appCode,
appId: row.appId,
appName: row.appName,
......@@ -571,220 +983,284 @@ export default {
buildType: row.buildType,
manageDeptId: row.manageDeptId,
manageOrgId: row.manageOrgId,
}];
this.ruleForm.let2 = row.prjName;
this.ruleForm.let3 = row.prjPlanClass;
if(row.prjPlanClass == 2) {
this.selectRow3 = [{
},
]
this.ruleForm.let2 = row.prjName
this.ruleForm.let3 = row.prjPlanClass
if (row.prjPlanClass == 2) {
this.selectRow3 = [
{
agoPrjCode: row.agoPrjCode,
agoPrjId: row.agoPrjId,
agoPrjName: row.agoPrjName,
}]
this.ruleForm.let4 = row.prjName;
},
]
this.ruleForm.let4 = row.prjName
}
if(row.filesValue) {
let filesValue = JSON.parse(row.filesValue);
if (filesValue.length) {
// let filesValue = JSON.parse(row.filesValue)
// if (filesValue.length > 0) {
this.tableData4.forEach((item, index) => {
item.fileList = Object.keys(filesValue[index]).length > 0 ? [
filesValue.forEach((v) => {
if (item.value == v.busiFileType) {
item.fileList = [
{
name: filesValue[index].fileName,
url: filesValue[index].fileUrl,
fileId: filesValue[index].fileId,
fileName: filesValue[index].fileName,
fileUrl: filesValue[index].fileUrl,
}
] : [];
item.fileArray = Object.keys(filesValue[index]).length > 0 ? [
name: v.busiFileName,
url: v.fileUrl,
fileId: v.fileId,
fileName: v.fileName,
fileUrl: v.fileUrl,
},
]
item.fileArray = [
{
name: filesValue[index].fileName,
url: filesValue[index].fileUrl,
fileId: filesValue[index].fileId,
fileName: filesValue[index].fileName,
fileUrl: filesValue[index].fileUrl,
name: v.busiFileName,
url: v.fileUrl,
fileId: v.fileId,
fileName: v.fileName,
fileUrl: v.fileUrl,
},
]
}
] : [];
});
// console.log(this.tableData4)
})
// item.fileList = filesValue[index]
// ? [
// {
// name: filesValue[index].fileName,
// url: filesValue[index].fileUrl,
// fileId: filesValue[index].fileId,
// fileName: filesValue[index].fileName,
// fileUrl: filesValue[index].fileUrl,
// },
// ]
// : []
// item.fileArray = filesValue[index]
// ? [
// {
// name: filesValue[index].fileName,
// url: filesValue[index].fileUrl,
// fileId: filesValue[index].fileId,
// fileName: filesValue[index].fileName,
// fileUrl: filesValue[index].fileUrl,
// },
// ]
// : []
})
// }
console.log(this.tableData4)
}
this.prjId = row.prjId;
this.prjId = row.prjId
},
open_add_dialog2() {//打开选择系统窗口
this.add_dialog2 = true;
this.get_system_table();
open_add_dialog2() {
//打开选择系统窗口
this.add_dialog2 = true
this.get_system_table()
},
open_add_dialog3() {//打开选择项目窗口
this.add_dialog3 = true;
this.get_table2();
open_add_dialog3() {
//打开选择项目窗口
this.add_dialog3 = true
this.get_table2()
},
search_table3() {//搜索
this.pager3.current = 1;
this.get_table2();
search_table3() {
//搜索
this.pager3.current = 1
this.get_table2()
},
get_table2() {//查询表格数据
this.loading3 = true;
get_table2() {
//查询表格数据
this.loading3 = true
const params = {
"appId": this.selectRow.length > 0 ? this.selectRow[0].appId : null,
"manageOrgId": this.searchParams3.let1,
"manageDeptId": this.searchParams3.let2,
"appName": this.searchParams3.let3,
"buildType": this.searchParams3.let4,
"current": this.pager3.current,
"pageSize": this.pager3.size,
};
queryProjectInfoManageTable(params).then(res => {
if(res.code == 200) {
this.loading3 = false;
this.tableData3 = res.data.records;
this.pager3.current = res.data.current;
this.pager3.total = res.data.total;
this.pager3.size = res.data.size;
appId: this.selectRow.length > 0 ? this.selectRow[0].appId : null,
manageOrgId: this.searchParams3.let1,
manageDeptId: this.searchParams3.let2,
appName: this.searchParams3.let3,
buildType: this.searchParams3.let4,
current: this.pager3.current,
pageSize: this.pager3.size,
}
queryProjectInfoManageTable(params).then((res) => {
if (res.code == 200) {
this.loading3 = false
this.tableData3 = res.data.records
this.pager3.current = res.data.current
this.pager3.total = res.data.total
this.pager3.size = res.data.size
}
});
})
},
reset3() {//重置
this.searchParams3.let1 = null;
this.searchParams3.let2 = null;
this.searchParams3.let3 = null;
this.searchParams3.let4 = null;
reset3() {
//重置
this.searchParams3.let1 = null
this.searchParams3.let2 = null
this.searchParams3.let3 = null
this.searchParams3.let4 = null
},
// 每页条数改变
handleSizeChange3(val) {
this.pager3.current = 1;
this.pager3.size = val;
this.get_table2();
this.pager3.current = 1
this.pager3.size = val
this.get_table2()
},
//当前页码改变
handleCurrentChange3(val) {
this.pager3.current = val;
this.get_table2();
this.pager3.current = val
this.get_table2()
},
select_table_row3(data){//表格的勾选
this.selectRow3 = data;
select_table_row3(data) {
//表格的勾选
this.selectRow3 = data
},
save_dialog() {//保存系统
this.$refs.form.validate(valid => {
if(valid) {
let agoPrjCode, agoPrjId, agoPrjName, appCode, appId, appName, buildOrg, buildType, manageDeptId, manageOrgId;
if(this.ruleForm.let3 == 2) {
if(this.selectRow3.length == 0) {
save_dialog() {
//保存系统
this.$refs.form.validate((valid) => {
if (valid) {
let agoPrjCode,
agoPrjId,
agoPrjName,
appCode,
appId,
appName,
buildOrg,
buildType,
manageDeptId,
manageOrgId
if (this.ruleForm.let3 == 2) {
if (this.selectRow3.length == 0) {
Message({
type: 'error',
message: '请选择前期项目!'
});
return;
message: '请选择前期项目!',
})
return
}
}
if(this.selectRow3.length > 0) {
agoPrjCode = this.selectRow3[0].agoPrjCode;
agoPrjId = this.selectRow3[0].agoPrjId;
agoPrjName = this.selectRow3[0].agoPrjName;
if (this.selectRow3.length > 0) {
agoPrjCode = this.selectRow3[0].agoPrjCode
agoPrjId = this.selectRow3[0].agoPrjId
agoPrjName = this.selectRow3[0].agoPrjName
}
appCode = this.selectRow[0].appCode;
appId = this.selectRow[0].appId;
appName = this.selectRow[0].appName;
buildOrg = this.selectRow[0].buildOrg;
buildType = this.selectRow[0].buildType;
manageDeptId = this.selectRow[0].manageDeptId;
manageOrgId = this.selectRow[0].manageOrgId;
let filesValue = [];
this.tableData4.forEach(item => {
filesValue.push(
item.fileArray.length > 0 ? {
busiFileName: item.tableLet1,
appCode = this.selectRow[0].appCode
appId = this.selectRow[0].appId
appName = this.selectRow[0].appName
buildOrg = this.selectRow[0].buildOrg
buildType = this.selectRow[0].buildType
manageDeptId = this.selectRow[0].manageDeptId
manageOrgId = this.selectRow[0].manageOrgId
let filesValue = []
console.log(this.tableData4)
this.tableData4.forEach((item) => {
if (item.fileArray.length > 0) {
filesValue.push({
busiFileName: item.label,
busiFileType: item.value,
fileId: item.fileArray[0].fileId,
fileName: item.fileArray[0].fileName,
fileUrl: item.fileArray[0].fileUrl,
} : {}
);
});
console.log(filesValue)
})
}
})
const params = {
agoPrjCode, agoPrjId, agoPrjName, appCode, appId, appName, buildOrg, buildType, manageDeptId, manageOrgId,
agoPrjCode,
agoPrjId,
agoPrjName,
appCode,
appId,
appName,
buildOrg,
buildType,
manageDeptId,
manageOrgId,
prjName: this.ruleForm.let2,
prjPlanClass: this.ruleForm.let3,
filesValue
filesValue,
}
const requestParams = this.is_add_edit == 'add' ? params : { ...params, prjId: this.prjId };
if(this.is_add_edit == 'add') {
addProjectManageTable(requestParams).then(res => {
if(res.code == 200) {
this.get_table();
this.add_dialog = false;
const requestParams =
this.is_add_edit == 'add'
? params
: { ...params, prjId: this.prjId }
if (this.is_add_edit == 'add') {
addProjectManageTable(requestParams).then((res) => {
if (res.code == 200) {
this.get_table()
this.add_dialog = false
Message({
type: 'success',
message: '保存成功!'
});
}else {
message: '保存成功!',
})
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
});
}else {
editDeleteProjectInfoManageTable(requestParams).then(res => {
if(res.code == 200) {
this.get_table();
this.add_dialog = false;
})
} else {
editDeleteProjectInfoManageTable(requestParams).then((res) => {
if (res.code == 200) {
this.get_table()
this.add_dialog = false
Message({
type: 'success',
message: '保存成功!'
});
}else {
message: '保存成功!',
})
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
});
})
}
}else {
return false;
} else {
return false
}
});
})
},
search_table2() {//搜索
this.pager2.current = 1;
this.get_system_table();
search_table2() {
//搜索
this.pager2.current = 1
this.get_system_table()
},
reset2() {//重置
this.searchParams2.let1 = null;
this.searchParams2.let2 = null;
this.searchParams2.let3 = null;
this.searchParams2.let4 = null;
reset2() {
//重置
this.searchParams2.let1 = null
this.searchParams2.let2 = null
this.searchParams2.let3 = null
this.searchParams2.let4 = null
},
// 每页条数改变
handleSizeChange2(val) {
this.pager2.current = 1;
this.pager2.size = val;
this.get_system_table();
this.pager2.current = 1
this.pager2.size = val
this.get_system_table()
},
//当前页码改变
handleCurrentChange2(val) {
this.pager2.current = val;
this.get_system_table();
this.pager2.current = val
this.get_system_table()
},
select_table_rows(data){//表格的勾选
this.selectRow = data;
select_table_rows(data) {
//表格的勾选
this.selectRow = data
},
get_system_table() {//查询表格数据
this.loading2 = true;
get_system_table() {
//查询表格数据
this.loading2 = true
const params = {
"manageOrgId": this.searchParams2.let1,
"manageDeptId": this.searchParams2.let2,
"appName": this.searchParams2.let3,
"buildType": this.searchParams2.let4,
"current": this.pager.current,
"pageSize": this.pager.size,
};
querysystemInfoManageTable(params).then(res => {
if(res.code == 200) {
this.loading2 = false;
this.tableData2 = res.data.records;
this.pager2.current = res.data.current;
this.pager2.total = res.data.total;
this.pager2.size = res.data.size;
manageOrgId: this.searchParams2.let1,
manageDeptId: this.searchParams2.let2,
appName: this.searchParams2.let3,
buildType: this.searchParams2.let4,
current: this.pager.current,
pageSize: this.pager.size,
}
querysystemInfoManageTable(params).then((res) => {
if (res.code == 200) {
this.loading2 = false
this.tableData2 = res.data.records
this.pager2.current = res.data.current
this.pager2.total = res.data.total
this.pager2.size = res.data.size
}
// res.records.map(item => {
// const startTime_year = String(new Date(item.startTime).getFullYear());
......@@ -805,64 +1281,74 @@ export default {
// this.pager.current = res.current;
// this.pager.total = res.total;
// this.pager.size = res.size;
});
})
},
getJianSheLeiXingSelect() {//建设类型下拉
getJianSheLeiXingSelect() {
//建设类型下拉
const params = {
key: "build_type"
key: 'build_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)
}
})
})
},
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'
},
search_table() {//搜索
this.pager.current = 1;
this.get_table();
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;
reset() {
//重置
this.searchParams.let1 = null
this.searchParams.let2 = null
this.searchParams.let3 = null
this.searchParams.let4 = null
},
// 每页条数改变
handleSizeChange(val) {
this.pager.current = 1;
this.pager.size = val;
this.get_table();
this.pager.current = 1
this.pager.size = val
this.get_table()
},
//当前页码改变
handleCurrentChange(val) {
this.pager.current = val;
this.get_table();
this.pager.current = val
this.get_table()
},
get_table() {//查询表格数据
this.loading = true;
get_table() {
//查询表格数据
this.loading = true
const params = {
"manageOrgId": this.searchParams.let1,
"manageDeptId": this.searchParams.let2,
"prjName": this.searchParams.let3,
"buildType": this.searchParams.let4,
"current": this.pager.current,
"pageSize": this.pager.size,
};
queryProjectInfoManageTable(params).then(res => {
if(res.code == 200) {
this.loading = false;
this.tableData = res.data.records;
this.pager.current = res.data.current;
this.pager.total = res.data.total;
this.pager.size = res.data.size;
manageOrgId: this.searchParams.let1,
manageDeptId: this.searchParams.let2,
prjName: this.searchParams.let3,
buildType: this.searchParams.let4,
current: this.pager.current,
pageSize: this.pager.size,
}
queryProjectInfoManageTable(params).then((res) => {
if (res.code == 200) {
this.loading = false
this.tableData = res.data.records
this.pager.current = res.data.current
this.pager.total = res.data.total
this.pager.size = res.data.size
}
// res.records.map(item => {
// const startTime_year = String(new Date(item.startTime).getFullYear());
......@@ -884,169 +1370,170 @@ export default {
// 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{
.confirmClass {
background-color: #0d867f !important;
}
.el-message-box__content {
padding: 60px 15px 60px 15px;
}
}
</style>
<style scoped>
.version_btn{
<style scoped lang="scss">
@import '@/styles/elementui.scss';
.prjName {
color: $color-primary;
cursor: pointer;
}
.version_btn {
display: flex;
align-items: center;
justify-content: center;
width: 84px;
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; */
font-size: 14px;
color: #0D867F;
color: #0d867f;
cursor: pointer;
margin-left: 15px;
}
.cancel_version_btn{
}
.cancel_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; */
font-size: 14px;
color: #0D867F;
color: #0d867f;
cursor: pointer;
margin-left: 15px;
}
.projectInfoManage{
}
.projectInfoManage {
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;
}
.el-button--primary {
background: rgba(13, 134, 127, 0.1);
color: #0d867f;
border: 0;
}
/deep/ .el-input-group__append{
background-color: #0D867F;
}
/deep/ .el-input-group__append {
background-color: #0d867f;
color: #fff;
cursor: pointer;
}
.search_btn{
}
.search_btn {
width: 100%;
display: flex;
margin-top: 50px;
margin-bottom: 20px;
}
.search_menu{
}
.search_menu {
display: flex;
justify-content: space-between;
margin-bottom: 50px;
}
.search_menu_item_container{
}
.search_menu_item_container {
display: flex;
align-items: center;
}
.shanChu_btn{
color: #DD6A15;
background-color: #F8EBE2;
}
.search_menu_btn_container{
}
.shanChu_btn {
color: #dd6a15;
background-color: #f8ebe2;
}
.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%;
}
.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;
}
/deep/ .el-dialog__header{
background-color: #0D867F;
}
/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{
}
/deep/ .el-dialog__title {
color: #fff;
}
/deep/ .el-dialog__close {
}
/deep/ .el-dialog__close {
color: #fff;
}
.greenButton{
background-color: #0D867F;
}
.greenButton {
background-color: #0d867f;
color: #fff;
}
.el-form-item{
}
.el-form-item {
display: flex;
align-items: center;
width: 50%;
}
}
</style>
......@@ -105,7 +105,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.103:7005/downloadFile/289',
url: 'http://192.168.0.103:7005/downloadFile/302',
},
documentType: 'word',
height: '100%',
......@@ -119,13 +119,14 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.103:7005/callback?fileId=289',
callbackUrl: 'http://192.168.0.103:7005/callback?fileId=302',
},
},
}
......
......@@ -19,6 +19,7 @@
border-top: none;
min-height: 0;
overflow-y: auto;
background-color: #fff;
}
.select-title {
position: absolute;
......@@ -50,3 +51,30 @@
}
}
}
.fullScreen_left {
// width: 100% !important;
height: 100% !important;
position: fixed !important;
left: 0;
top: 0;
z-index: 999;
}
.fullScreen_right {
height: 100% !important;
position: fixed !important;
right: 0;
top: 0;
z-index: 999;
}
.left_container,
.right_container {
.el-icon-circle-close,
.el-icon-full-screen {
font-size: 18px;
margin-right: 16px;
font-weight: bold;
cursor: pointer;
}
}
......@@ -33,7 +33,8 @@ import TableConfig from '@/components/TableConfig.vue'
// import { getDianXingAnLiSelectData } from '@/api/index.js'
import { queryAppArchiControlRequirements } from '@/api/interface'
import { prjPlanClass, buildType } from '@/utils/dictionary'
import { prjPlanClass } from '@/utils/dictionary'
import { getDictTypeOptions } from '@/utils'
export default {
name: 'batchPlanManagement',
components: {
......@@ -50,6 +51,10 @@ export default {
method: 'post',
queryParam: {},
},
buildTypeOptions: [],
sysOrgOptions: [],
sysDeptOptions: [],
sysBuildOrgOptions: [],
}
},
computed: {
......@@ -58,29 +63,27 @@ export default {
{
label: '单位', // label文字
prop: 'manageOrgId', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
dictType: 'sys_org',
},
{
label: '部门', // label文字
prop: 'manageDeptId', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
dictType: 'sys_dept',
},
{
label: '系统名称', // label文字
prop: 'appName', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请输入内容', // elementui组件属性
},
{
label: '建设类型', // label文字
prop: 'buildType', // 字段名
element: 'el-select', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
dictType: 'build_type',
},
......@@ -90,14 +93,26 @@ export default {
return [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageOrgId' },
{ label: '部门', prop: 'manageDeptId' },
{
label: '单位',
prop: 'manageOrgId',
options: this.sysOrgOptions,
collectionType: true,
width: '120px',
},
{
label: '部门',
prop: 'manageDeptId',
options: this.sysDeptOptions,
collectionType: true,
width: '120px',
},
{ label: '系统名称', width: '280px', prop: 'appName' },
{
label: '建设类型',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
options: this.buildTypeOptions,
collectionType: 'build_type',
},
{ label: '项目名称', width: '295px', prop: 'prjName' },
{
......@@ -106,7 +121,13 @@ export default {
options: prjPlanClass,
collectionType: 'prjPlanClass',
},
{ label: '承建单位', prop: 'buildOrg' },
{
label: '承建单位',
prop: 'buildOrg',
options: this.sysBuildOrgOptions,
collectionType: true,
width: '120px',
},
{
label: '运安符合性审查',
prop: 'version3',
......@@ -164,8 +185,24 @@ export default {
]
},
},
created() {},
created() {
this.getDicts()
},
methods: {
getDicts() {
getDictTypeOptions('build_type').then((res) => {
this.buildTypeOptions = res
})
getDictTypeOptions('sys_org').then((res) => {
this.sysOrgOptions = res
})
getDictTypeOptions('sys_dept').then((res) => {
this.sysDeptOptions = res
})
getDictTypeOptions('sys_build_org').then((res) => {
this.sysBuildOrgOptions = res
})
},
// 表格勾选的数据
selectionChange(data) {
this.selectRows = data
......
......@@ -11,7 +11,7 @@
<vab-only-office
id="office-preview-tab1-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -22,9 +22,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
......@@ -72,7 +72,10 @@ import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
queryPrjNeedFile,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab1',
components: { vabOnlyOffice },
......@@ -91,14 +94,14 @@ export default {
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -107,7 +110,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -121,21 +124,52 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const { prjId } = this.$route.query
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW',
......
......@@ -11,7 +11,7 @@
<vab-only-office
id="office-preview-tab2-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -22,9 +22,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
......@@ -73,6 +73,8 @@ import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab2',
components: { vabOnlyOffice },
......@@ -91,14 +93,14 @@ export default {
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -107,7 +109,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/293`,
},
documentType: 'word',
height: '100%',
......@@ -124,18 +126,47 @@ export default {
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=293`,
},
},
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'FUNCTIONAL_SATISFACTION_REVIEW',
......
......@@ -11,7 +11,7 @@
<vab-only-office
id="office-preview-tab3-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -22,9 +22,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
......@@ -64,6 +64,8 @@ import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab3',
components: { vabOnlyOffice },
......@@ -82,14 +84,14 @@ export default {
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -98,7 +100,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -112,21 +114,51 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'OPERATIONAL_RELIABILITY_REVIEW',
......
......@@ -11,7 +11,7 @@
<vab-only-office
id="office-preview-tab4-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -22,9 +22,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
......@@ -64,6 +64,8 @@ import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab4',
components: { vabOnlyOffice },
......@@ -82,14 +84,14 @@ export default {
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -98,7 +100,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -112,21 +114,51 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'SYSTEM_PRACTICALITY_REVIEW',
......
......@@ -11,7 +11,7 @@
<vab-only-office
id="office-preview-tab5-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -22,9 +22,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
......@@ -64,6 +64,8 @@ import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab5',
components: { vabOnlyOffice },
......@@ -82,14 +84,14 @@ export default {
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -98,7 +100,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/293`,
},
documentType: 'word',
height: '100%',
......@@ -115,18 +117,47 @@ export default {
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=293`,
},
},
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'SYSTEM_SECURITY_REVIEW',
......
......@@ -11,7 +11,7 @@
<vab-only-office
id="office-preview-tab6-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -22,9 +22,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content flex-1">
<div class="office w-100 h-100">
......@@ -73,6 +73,8 @@ import {
saveReviewArchiFollowCheckRightSuggestion,
queryReviewArchiFollowCheckRightSuggestionDetails,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab6',
components: { vabOnlyOffice },
......@@ -91,14 +93,14 @@ export default {
},
],
select: '1',
documentServerUrl: 'http://192.168.0.120:18050/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -107,7 +109,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://192.168.0.120:7005/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -121,21 +123,51 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://192.168.0.120:7005/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['概要设计说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
const selectData = res.data
if (selectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${selectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${selectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'RESOURCE_REUSABILITY_REVIEW',
......
......@@ -36,7 +36,8 @@ import SearchForm from '@/components/SearchForm.vue'
import TableConfig from '@/components/TableConfig.vue'
import { queryPrelDesInspecte } from '@/api/interface'
import { buildType, prjPlanClass, completionStatus } from '@/utils/dictionary'
import { prjPlanClass, completionStatus } from '@/utils/dictionary'
import { getDictTypeOptions } from '@/utils'
export default {
name: 'reviewSituation',
data() {
......@@ -47,6 +48,10 @@ export default {
queryParam: {},
},
selectRows: [],
buildTypeOptions: [],
sysOrgOptions: [],
sysDeptOptions: [],
sysBuildOrgOptions: [],
}
},
components: {
......@@ -60,14 +65,16 @@ export default {
{
label: '单位', // label文字
prop: 'manageOrgId', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
dictType: 'sys_org',
},
{
label: '部门', // label文字
prop: 'manageDeptId', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
dictType: 'sys_dept',
},
{
label: '系统名称', // label文字
......@@ -90,8 +97,20 @@ export default {
let arr = [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '单位', prop: 'manageOrgId' },
{ label: '部门', prop: 'manageDeptId', width: '200px' },
{
label: '单位',
prop: 'manageOrgId',
options: this.sysOrgOptions,
collectionType: true,
width: '120px',
},
{
label: '部门',
prop: 'manageDeptId',
options: this.sysDeptOptions,
collectionType: true,
width: '120px',
},
{
label: '系统名称',
prop: 'appName',
......@@ -101,8 +120,8 @@ export default {
label: '建设类型',
width: '100px',
prop: 'buildType',
options: buildType,
collectionType: 'buildType',
options: this.buildTypeOptions,
collectionType: 'build_type',
},
{
label: '项目名称',
......@@ -118,8 +137,10 @@ export default {
},
{
label: '承建单位',
width: '200px',
prop: 'buildOrg',
options: this.sysBuildOrgOptions,
collectionType: true,
width: '120px',
},
{
label: '项目经理',
......@@ -164,8 +185,24 @@ export default {
return arr
},
},
mounted() {},
created() {
this.getDicts()
},
methods: {
getDicts() {
getDictTypeOptions('build_type').then((res) => {
this.buildTypeOptions = res
})
getDictTypeOptions('sys_org').then((res) => {
this.sysOrgOptions = res
})
getDictTypeOptions('sys_dept').then((res) => {
this.sysDeptOptions = res
})
getDictTypeOptions('sys_build_org').then((res) => {
this.sysBuildOrgOptions = res
})
},
toDetails() {
if (this.selectRows.length == 0) {
return this.$message.warning('请选择一条数据!')
......
......@@ -3,14 +3,24 @@
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<div class="flex">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<!-- <el-select class="select-title" v-model="leftSelect">
<el-option
v-for="(item, idx) in leftSelectData"
:label="item.fileName"
:value="item.fileId"
:key="idx"
></el-option>
</el-select> -->
</div>
<div class="left_container_content w-100 h-100 flex-1">
<vab-only-office
id="office-preview"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -20,9 +30,9 @@
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<el-select class="select-title" v-model="select">
<!-- <el-select class="select-title" v-model="select">
<el-option label="概要设计说明书.doc" value="1"></el-option>
</el-select>
</el-select> -->
</div>
<div class="right_container_content w-100 h-100 flex-1">
<vab-only-office
......@@ -68,7 +78,13 @@
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import { savePrelDesInspecte, detailPrelDesInspecte } from '@/api/index.js'
import {
savePrelDesInspecte,
detailPrelDesInspecte,
queryPrjNeedFile,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab1',
components: { vabOnlyOffice },
......@@ -88,14 +104,14 @@ export default {
],
select: '1',
row: {},
documentServerUrl: 'http://43.143.211.42:19231/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -104,7 +120,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -118,22 +134,53 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
leftSelectData: [],
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['可行性研究报告', '需求规格说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
this.leftSelectData = res.data
if (this.leftSelectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${this.leftSelectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${this.leftSelectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'CONFORMANCE_REVIEW',
......
......@@ -10,7 +10,7 @@
<vab-only-office
id="office-preview-tab4-1"
:documentServerUrl="documentServerUrl"
:config="config"
:config="readonlyConfig"
/>
</div>
</div>
......@@ -58,7 +58,13 @@
<script>
import vabOnlyOffice from '@/components/onlyOffice/index.vue'
import { savePrelDesInspecte, detailPrelDesInspecte } from '@/api/index.js'
import {
savePrelDesInspecte,
detailPrelDesInspecte,
queryPrjNeedFile,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab4',
components: { vabOnlyOffice },
......@@ -68,14 +74,14 @@ export default {
isMeet: null,
select: '1',
row: {},
documentServerUrl: 'http://43.143.211.42:19231/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -84,7 +90,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -98,22 +104,53 @@ export default {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
leftSelectData: [],
}
},
computed: {
readonlyConfig() {
return {
...this.config,
editorConfig: {
...this.config.editorConfig,
mode: 'view',
},
}
},
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['可行性研究报告', '需求规格说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
this.leftSelectData = res.data
if (this.leftSelectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${this.leftSelectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${this.leftSelectData[0].fileId}`
}
}
})
},
getDetail() {
const params = {
reviewEnum: 'FUNCTIONAL_DEPTH_REVIEW',
......
......@@ -58,7 +58,10 @@ import {
savePrelDesInspecte,
detailPrelDesInspecte,
qViewPrelDesInspecte,
queryPrjNeedFile,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
export default {
name: 'tab5',
components: { vabOnlyOffice },
......@@ -68,14 +71,14 @@ export default {
isMeet: null,
select: '1',
row: {},
documentServerUrl: 'http://43.143.211.42:19231/',
documentServerUrl: documentServerUrl2,
config: {
document: {
fileType: 'docx',
// 给服务端用的唯一id,同一个id就会获取服务器缓存里的文件(有这个key,就会先根据它去缓存里找),这项如果最开始只是先试用,可以先给个空字符串
key: '71df19fbd1',
key: '',
// 文件名
title: '65f90a662c18a9e9f1878156.docx',
title: '概要设计说明书.docx',
//相关权限
// permissions: {
// copy: true, //定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
......@@ -84,7 +87,7 @@ export default {
// print: true, //定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
// },
// 所要渲染的文件的绝对路径,这个参数很重要,它传的不是文件的本地地址,而是需要把文件传到项目所依赖的服务器,然后拿到文件在服务器的url地址(这个一般情况需要后端支持)才可以用,这个参数决定了能不能实例化出来onlyoffice对象
url: 'http://43.143.211.42:7006/downloadFile/29',
url: `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/302`,
},
documentType: 'word',
height: '100%',
......@@ -93,32 +96,52 @@ export default {
//语言:zh-CN简体中文/en英文
lang: 'zh-CN',
//阅读状态 view/edit
mode: 'edit',
mode: 'view',
customization: {
//是否显示插件
plugins: false,
forcesave: true,
autosave: false,
},
user: {
// 当前正在view/edit此文档的用户信息
name: '',
name: '管理员',
},
// 指定文档存储服务器的绝对路径
callbackUrl: 'http://43.143.211.42:7006/callback?fileId=29',
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
rightImgs: [],
leftSelectData: [],
}
},
created() {
this.row = JSON.parse(this.$route.query.row)
this.getDetail()
this.getRightQview()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
fnQueryPrjNeedFile() {
const params = {
busiFileNameList: ['可行性研究报告', '需求规格说明书'],
busiId: this.row.prjId,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
this.leftSelectData = res.data
if (this.leftSelectData.length) {
this.config.document.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/downloadFile/${this.leftSelectData[0].fileId}`
this.config.editorConfig.url = `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=${this.leftSelectData[0].fileId}`
}
}
})
},
getRightQview() {
const params = {
archiBelongId: 1,
archiBelongId: 3,
archiStage: 3,
reviewEnum: 'DATA_DEPTH_REVIEW',
prjId: this.row.prjId,
......
<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="/api/file/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 { materialTypeList, superStateCode } from '@/utils/architectureInspectionDis'
import { editNeedInfo, queryPrjNeedFile } from '@/api'
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 materialTypeArr = this.rowData.materialType.split(',')
// materialTypeList
let busiFileNameList = []
materialTypeArr.forEach(item => {
let obj = materialTypeList.find(type => type.value == item )
console.log(obj);
busiFileNameList.push(obj.label)
})
// let busiFileNameList = this.rowData.fileList?.split(',')
const params = {
busiFileNameList,
busiId: this.rowData.id,
// busiFileNameList: ['技术规范书'],
// busiId: 25,
busiIdType: 1,
}
queryPrjNeedFile(params).then((res) => {
if (res.code === 200) {
this.tableData = res.data.map((v) => {
return {
...v,
name: v.fileName,
url: v.fileUrl,
}
})
console.log(this.tableData);
}
})
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
<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>
<UploadDialog
: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 '@/views/collectDataConfiguration/TableConfig.vue'
import { supervisionData } from '@/api/architectureInspection'
import { materialTypeList, superStateCode } from '@/utils/architectureInspectionDis'
import UploadDialog from './UploadDialog'
export default {
name: 'supervisionDataCollection',
components: { ListPage, SearchForm, TableConfig, UploadDialog },
computed: {
formOptions() {
return [
{
label: '项目名称', // label文字
prop: 'prjName', // 字段名
element: 'el-input', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
},
]
},
columns() {
return [
{ type: 'selection', width: '55px' },
{ label: '序号', type: 'index', width: '80px' },
{ label: '项目名称', prop: 'prjName', },
{ label: '承建单位', prop: 'buildOrg', width: '120px' },
{ label: '督查方案', prop: 'supervName', width: '120px' },
{ label: '材料类型', prop: 'materialType',
collectionType: 'materialTypeList',
options: materialTypeList
},
{ label: '上传时间', prop: 'uploadedTime', width: '120px' },
{ label: '版本', prop: 'version', width: '120px' },
// {
// label: '状态',
// prop: 'state',
// width: '120px',
// collectionType: 'superStateCode',
// options: superStateCode,
// },
{ label: '备注', prop: 'notes', width: '100px' },
{
label: '操作',
type: 'operation',
width: '360px',
actionButtons: [
{
title: '上传',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
disabledCallback: (row, title) => {
return row.file == '1' ? true : false
},
},
{
title: '归档',
type: 'warning',
size: 'mini',
plain: true,
icon: 'el-icon-circle-check',
disabledCallback: (row, title) => {
return row.file == '1' ? true : false
},
},
{
title: '提醒',
size: 'mini',
icon: 'el-icon-circle-check',
type: 'warning',
plain: true,
disabledCallback: (row, title) => {
if (row.file == '1' || row.remind == '1') {
return true
} else {
return false
}
},
},
],
callback: (row, title) => {
this.fnOperation(row, title)
},
},
]
},
},
data(){
return {
query: {
url: supervisionData,
method: 'post',
queryParam: {
prjName: ''
},
},
rowData: {},
demandSubVisible: false,
}
},
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.fnFile(row)
break
case '提醒':
this.fnRemind(row)
default:
break
}
},
fnRemind(row) {
this.$confirm('是否确认提醒?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
this.$postRequest('/Collect/tx', {id: row.id}).then(res => {
if (res.code === 200) {
this.$message.success('提醒成功')
this.$refs.searchTable.queryData()
} else {
this.$message.error(res.msg)
}
})
})
.catch(() => {})
},
fnFile(row) {
this.$confirm('是否确认归档?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
this.$postRequest('/Collect/gd', {...row}).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.demandSubVisible = true
// this.visible = true
},
}
}
</script>
<style>
</style>
\ No newline at end of file
......@@ -57,6 +57,7 @@ export default {
element: 'el-input', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
span: 12,
readonly: true,
// rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
{
......@@ -65,6 +66,7 @@ export default {
element: 'el-select', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
span: 12,
disabled: true,
},
{
label: '通报时间', // label文字
......@@ -74,6 +76,7 @@ export default {
element: 'el-date-picker', // 指定elementui组件
placeholder: '请选择', // elementui组件属性
span: 12,
readonly: true,
},
{
label: '项目评分', // label文字
......@@ -82,6 +85,7 @@ export default {
span: 12,
colors: ['#99A9BF', '#F7BA2A', '#FF9900'],
allowHalf: true,
disabled: true,
},
{
label: '通报内容', // label文字
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-26 10:53:48
* @LastEditors: pan
* @LastEditTime: 2024-03-26 16:56:57
* @LastEditTime: 2024-03-28 15:21:56
-->
<template>
<div class="searchTable">
......@@ -49,6 +49,7 @@ import Edit from './Edit.vue'
import { updReportManage, delReportManage } from '@/api/index.js'
import { querySupervisionNotifyManagement } from '@/api/interface'
import { approvalStatusOptions } from '@/utils/dictionary'
import { stateCode } from '@/utils/architectureInspectionDis'
export default {
name: 'supervisionNotifyManagement',
components: {
......@@ -92,7 +93,13 @@ export default {
width: '160px',
prop: 'reportTime',
},
{ label: '版本号', width: '100px', prop: 'version' },
{
label: '状态',
width: '100px',
prop: 'state',
collectionType: true,
options: stateCode,
},
{ label: '修改意见', prop: 'opinion', width: '220px' },
{
label: '操作',
......@@ -173,13 +180,13 @@ export default {
// this.fnEdit(row)
break
case '提交':
this.fnSubmit(row, '提交')
this.fnSubmit(row, '提交', 1)
break
case '审批':
// this.fnApproval(row)
this.fnSubmit(row, '审批', 2)
break
case '发布':
this.fnSubmit(row, '发布')
this.fnSubmit(row, '发布', 3)
break
case '删除':
this.fnDel(row)
......@@ -193,7 +200,7 @@ export default {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row, text) {
fnSubmit(row, text, state) {
this.$confirm(`是否确认${text}?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
......@@ -202,7 +209,7 @@ export default {
.then(() => {
const params = {
...row,
state: text === '提交' ? 1 : 3,
state,
}
updReportManage(params).then((res) => {
if (res.code === 200) {
......
<template>
<el-dialog
title="关闭问题"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="400px"
@close="handleClose()"
>
<div>
<Form
ref="closeProblemForm"
:form-options="formOptions"
label-width="140px"
></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 { updRectifyReform } from '@/api'
import { whether } from '@/utils/dictionary'
export default {
props: {
visible: {
type: Boolean,
default: false,
},
id: {
type: Number,
},
},
data() {
return {}
},
components: {
Form,
},
computed: {
formOptions() {
return [
{
label: '是否为典型问题:', // label文字
prop: 'typical', // 字段名
element: 'el-radio', // 指定elementui组件
placeholder: '请输入内容', // elementui组件属性
options: whether,
initValue: 0,
span: 24,
rules: [{ required: true, trigger: 'blur', message: '不能为空' }],
},
]
},
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
},
methods: {
handleSubmit() {
this.$refs['closeProblemForm'].onValidate(() => {
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
const formInfo = this.$refs['closeProblemForm'].getData()
const params = {
...formInfo,
state: 3,
id: this.id,
}
updRectifyReform(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[0].initValue = 0
this.$refs['closeProblemForm'].addInitValue()
this.$refs['closeProblemForm'].onReset()
},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
</style>
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-26 10:53:48
* @LastEditors: pan
* @LastEditTime: 2024-03-26 17:27:33
* @LastEditTime: 2024-03-28 15:26:49
-->
<template>
<div class="searchTable">
......@@ -25,20 +25,11 @@
</table-config>
</template>
</list-page>
<!-- 新增弹窗 -->
<!-- <Edit
<CloseProblem
:id="rowId"
@querySearch="querySearch"
:visible.sync="visible"
:row-data="rowData"
:title="dialogTitle"
></Edit> -->
<!-- <ApprovalDialog
:row-data="rowData"
@querySearch="querySearch"
title="审批"
:visible.sync="approvalVisible"
/> -->
/>
</div>
</template>
......@@ -46,17 +37,18 @@
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 CloseProblem from './CloseProblem.vue'
import { updRectifyReform } from '@/api/index.js'
import { querySupervisionProblem } from '@/api/interface'
import { approvalStatusOptions } from '@/utils/dictionary'
import { whether, rectificationState } from '@/utils/dictionary'
export default {
name: 'supervisionProblemEdit',
components: {
ListPage,
SearchForm,
TableConfig,
// Edit,
CloseProblem,
},
data() {
return {
......@@ -67,9 +59,7 @@ export default {
queryParam: {},
},
visible: false,
rowData: {},
dialogTitle: '',
approvalVisible: false,
rowId: null,
}
},
computed: {
......@@ -100,41 +90,51 @@ export default {
{ label: '指标评价', prop: 'indexOpinion' },
{ label: '指标评分', prop: 'score' },
{ label: '整改日期', prop: 'createTime', width: '120px' },
{ label: '整改情况', prop: 'state' },
{ label: '是否典型问题', prop: 'typical' },
{
label: '整改情况',
prop: 'state',
options: rectificationState,
collectionType: true,
},
{
label: '是否典型问题',
prop: 'typical',
options: whether,
collectionType: true,
},
{ label: '问题等级', prop: 'level' },
{
label: '操作',
type: 'operation',
width: '380px',
width: '420px',
actionButtons: [
{
title: '编辑',
title: '查看',
type: 'primary',
size: 'mini',
plain: true,
icon: 'el-icon-edit',
icon: 'el-icon-view',
},
{
title: '查看',
type: 'primary',
title: '提交',
size: 'mini',
icon: 'el-icon-edit',
type: 'primary',
plain: true,
icon: 'el-icon-view',
},
{
title: '发布',
title: '整改未通过',
size: 'mini',
icon: 'el-icon-s-check',
type: 'primary',
plain: true,
type: 'primary',
icon: 'el-icon-edit',
},
{
title: '删除',
type: 'danger',
title: '关闭问题',
size: 'mini',
plain: true,
icon: 'el-icon-delete',
type: 'primary',
icon: 'el-icon-edit',
},
],
callback: (row, title) => {
......@@ -157,11 +157,6 @@ export default {
}
this.$refs.searchTable.queryData()
},
fnAdd() {
this.rowData = {}
this.dialogTitle = '新增批次计划'
this.visible = true
},
/**
* @description: 操作按钮
* @param {Object} row 当前操作行数据
......@@ -170,34 +165,23 @@ export default {
*/
fnOperation(row, title) {
switch (title) {
case '编辑':
this.fnEdit(row)
break
case '查看':
// this.fnEdit(row)
break
case '提交':
this.fnSubmit(row, '提交')
break
case '审批':
// this.fnApproval(row)
this.fnSubmit(row, '提交', 1)
break
case '发布':
this.fnSubmit(row, '发布')
case '整改未通过':
this.fnSubmit(row, '整改未通过', 2)
break
case '删除':
this.fnDel(row)
case '关闭问题':
this.fnCloseProblem(row)
break
default:
break
}
},
fnApproval(row) {
this.rowData = row
this.approvalVisible = true
},
fnSubmit(row, text) {
fnSubmit(row, text, state) {
this.$confirm(`是否确认${text}?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
......@@ -206,9 +190,9 @@ export default {
.then(() => {
const params = {
...row,
state: text === '提交' ? 1 : 3,
state,
}
updReportManage(params).then((res) => {
updRectifyReform(params).then((res) => {
if (res.code === 200) {
this.$message.success(`${text}成功`)
this.$refs.searchTable.queryData()
......@@ -219,31 +203,9 @@ export default {
})
.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
fnCloseProblem(row) {
this.visible = true
this.rowId = row.id
},
},
}
......
<!--
* @Description: 系统信息详情
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-29 11:44:57
* @LastEditors: pan
* @LastEditTime: 2024-03-29 16:28:15
-->
<template>
<div>
<el-dialog
:title="getTitle"
:visible.sync="showDialog"
:close-on-click-modal="false"
width="90%"
@close="handleClose()"
@open="handleOpen()"
>
<div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="基本信息" name="1">
<div class="base-info-item m-t-20">
<div class="base-info-item-title">系统基本信息</div>
<div class="base-info-item-content">
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">单位</div>
<div class="value">{{ systemInfoDetail.manageOrgId }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">部门</div>
<div class="value">{{ systemInfoDetail.manageDeptId }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">系统名称</div>
<div class="value">
{{ systemInfoDetail.appName }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">建设类型</div>
<div class="value">{{ systemInfoDetail.buildType }}</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">承建单位</div>
<div class="value">{{ systemInfoDetail.buildOrg }}</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">项目经理</div>
<div class="value">
{{ systemInfoDetail.projectManager }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">创建人</div>
<div class="value">
{{ systemInfoDetail.createMan }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">创建时间</div>
<div class="value">{{ systemInfoDetail.createTime }}</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">修改人</div>
<div class="value">
{{ systemInfoDetail.lastUpdateMan }}
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">修改时间</div>
<div class="value">
{{ systemInfoDetail.lastUpdateTime }}
</div>
</el-col>
</el-row>
</div>
</div>
<div class="base-info-item m-t-20">
<div class="base-info-item-title">系统关联信息</div>
<div class="base-info-item-content">
<el-row class="m-t-20">
<el-col :span="8" class="flex">
<div class="label">关联项目1</div>
<div class="value">2023第一批次概设评审</div>
</el-col>
<el-col :span="8" class="flex">
<div class="label">是否续建</div>
<div class="value"></div>
</el-col>
<el-col :span="8" class="flex">
<div class="label">关联时间</div>
<div class="value">2023-12-12</div>
</el-col>
</el-row>
</div>
</div>
</el-tab-pane>
<!-- <el-tab-pane label="架构资产" name="2">架构资产</el-tab-pane>
<el-tab-pane label="架构视图" name="3">架构视图</el-tab-pane> -->
</el-tabs>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()" size="mini">关 闭</el-button>
</span></el-dialog
>
</div>
</template>
<script>
import { getSystemInfoDetail } from '@/api'
export default {
props: {
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
activeName: '1',
tableData: [],
systemInfoDetail: {},
}
},
components: {},
computed: {
showDialog: {
get() {
return this.visible
},
set(value) {
this.$emit('update:visible', value)
},
},
getTitle() {
return `系统名称:${this.rowData.appName}`
},
},
mounted() {},
methods: {
handleClose() {
this.showDialog = false
},
handleOpen() {
getSystemInfoDetail(this.rowData).then((res) => {
if (res.code === 200) {
this.systemInfoDetail = res.data
}
})
},
handleClick() {},
},
}
</script>
<style scoped lang="scss">
@import '@/styles/elementui.scss';
@import '@/styles/common.scss';
.base-info-item {
&-title {
font-size: 16px;
color: #1ec695;
position: relative;
text-align: left;
padding-left: 20px;
&::before {
content: '';
position: absolute;
left: 0;
top: 2px;
width: 6px;
border-radius: 4px;
height: 20px;
background-color: #1ec695;
}
}
&-content {
// padding: 0 50px;
.label {
font-weight: bold;
margin-right: 30px;
width: 120px;
text-align: right;
}
.value {
flex: 1;
text-align: left;
}
}
}
</style>
......@@ -5,59 +5,206 @@
<div class="search_menu_item_container">
<div class="search_menu_item">
<span class="search_title">单位</span>
<el-input v-no-backslash v-model="searchParams.let1" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<!-- <el-input
v-no-backslash
v-model="searchParams.let1"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input> -->
<el-select
v-model="searchParams.let1"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in sysOrgOptions"
: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-input v-no-backslash v-model="searchParams.let2" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<!-- <el-input
v-no-backslash
v-model="searchParams.let2"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input> -->
<el-select
v-model="searchParams.let2"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in sysDeptOptions"
: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-input v-no-backslash v-model="searchParams.let3" maxlength="100" placeholder="请输入内容" class="search_item"></el-input>
<el-input
v-no-backslash
v-model="searchParams.let3"
maxlength="100"
placeholder="请输入内容"
class="search_item"
></el-input>
</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 jianSheLeiXingSelect" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select
v-model="searchParams.let4"
placeholder="请选择"
class="search_item"
>
<el-option
v-for="item in jianSheLeiXingSelect"
: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="operation('add', null)">新建系统</el-button>
<el-button
type="primary"
size="medium"
icon="el-icon-document-add"
@click="operation('add', null)"
>新建系统</el-button
>
<!-- <el-button type="primary" size="medium" icon="el-icon-document-add" @click="operation('add', 2)">新建自建系统</el-button> -->
<!-- <el-button type="primary" size="medium" icon="el-icon-delete">删除</el-button> -->
</div>
<el-table :height="tableHeight" v-loading="loading" :data="tableData" stripe border>
<el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
<el-table-column prop="manageOrgId" label="单位" align="center"></el-table-column>
<el-table-column prop="manageDeptId" label="部门" align="center"></el-table-column>
<el-table-column prop="appName" label="系统名称" align="center" width="200" :show-overflow-tooltip="true"></el-table-column>
<el-table
:height="tableHeight"
v-loading="loading"
:data="tableData"
stripe
border
>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="manageOrgId"
label="单位"
align="center"
:formatter="
(row, column, cellValue, index) =>
formatterDept(row, column, cellValue, index, 'sysOrgOptions')
"
>
</el-table-column>
<el-table-column
prop="manageDeptId"
label="部门"
align="center"
:formatter="
(row, column, cellValue, index) =>
formatterDept(row, column, cellValue, index, 'sysDeptOptions')
"
>
</el-table-column>
<el-table-column
prop="appName"
label="系统名称"
align="center"
width="200"
:show-overflow-tooltip="true"
>
<template slot-scope="{ row }">
<span class="appName" @click="openDetail(row)">{{
row.appName
}}</span>
</template>
</el-table-column>
<el-table-column label="建设类型" align="center">
<template slot-scope="scope">
<span v-if="scope.row.buildType == 1">统推</span>
<span v-else-if="scope.row.buildType == 2">自建</span>
</template>
</el-table-column>
<el-table-column prop="buildOrg" label="承建单位" align="center"></el-table-column>
<el-table-column prop="projectManager" label="项目经理" align="center"></el-table-column>
<el-table-column prop="createMan" label="创建人" align="center"></el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column>
<el-table-column
prop="buildOrg"
label="承建单位"
align="center"
:formatter="
(row, column, cellValue, index) =>
formatterDept(row, column, cellValue, index, 'sysBuildOrgOptions')
"
>
</el-table-column>
<el-table-column
prop="projectManager"
label="项目经理"
align="center"
></el-table-column>
<el-table-column
prop="createMan"
label="创建人"
align="center"
></el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
align="center"
></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="operation('edit', scope.row)" :disabled="scope.row.state == 1">编辑</el-button>
<el-button class="shanChu_btn" icon="el-icon-delete" size="mini" @click="operation('delete', scope.row)" :disabled="scope.row.state == 1">删除</el-button>
<div
style="
display: flex;
align-items: center;
justify-content: center;
"
>
<el-button
icon="el-icon-edit"
type="primary"
size="mini"
@click="operation('edit', scope.row)"
:disabled="scope.row.state == 1"
>编辑</el-button
>
<el-button
class="shanChu_btn"
icon="el-icon-delete"
size="mini"
@click="operation('delete', scope.row)"
:disabled="scope.row.state == 1"
>删除</el-button
>
</div>
</template>
</el-table-column>
......@@ -75,7 +222,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>
<el-dialog
......@@ -83,16 +231,50 @@
: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;">
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-input
v-no-backslash
v-model="ruleForm.let1"
maxlength="100"
></el-input> -->
<el-select v-model="ruleForm.let1" placeholder="请选择">
<el-option
v-for="item in sysOrgOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="部门:" prop="let2">
<el-input v-no-backslash v-model="ruleForm.let2" maxlength="100"></el-input>
<!-- <el-input
v-no-backslash
v-model="ruleForm.let2"
maxlength="100"
></el-input> -->
<el-select v-model="ruleForm.let2" placeholder="请选择">
<el-option
v-for="item in sysDeptOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="系统名称:" prop="let3">
<el-input v-no-backslash v-model="ruleForm.let3" maxlength="100"></el-input>
<el-input
v-no-backslash
v-model="ruleForm.let3"
maxlength="100"
></el-input>
</el-form-item>
<el-form-item label="系统类型:" prop="let4">
<el-select clearable v-model="ruleForm.let4">
......@@ -101,35 +283,56 @@
</el-select>
</el-form-item>
<el-form-item label="承建单位:" prop="let5">
<el-input v-no-backslash v-model="ruleForm.let5" maxlength="100"></el-input>
<!-- <el-input
v-no-backslash
v-model="ruleForm.let5"
maxlength="100"
></el-input> -->
<el-select v-model="ruleForm.let5" placeholder="请选择">
<el-option
v-for="item in sysBuildOrgOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目经理:" prop="let6">
<el-input v-no-backslash v-model="ruleForm.let6" maxlength="100"></el-input>
<el-input
v-no-backslash
v-model="ruleForm.let6"
maxlength="100"
></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button class="greenButton" @click="dialogOperation('save', null)">保存</el-button>
<el-button class="greenButton" @click="dialogOperation('save', null)"
>保存</el-button
>
<el-button @click="add_dialog = false">取消</el-button>
</span>
</el-dialog>
<!-- 系统信息详情 -->
<SystemInfoDetail :row-data="rowData" :visible.sync="appDetailVisible" />
</div>
</template>
<script>
import SystemInfoDetail from './SystemInfoDetail'
import {
querysystemInfoManageTable,
getDianXingAnLiSelectData,
addasystemInfoManageTable,
editDeleteSystemInfoManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import $ from 'jquery';
editDeleteSystemInfoManageTable,
} from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
import { getDictTypeOptions } from '@/utils'
import $ from 'jquery'
export default {
name: 'systemInfoManage',
components: {
},
components: { SystemInfoDetail },
data() {
return {
ruleForm: {
......@@ -141,15 +344,9 @@ export default {
let6: null,
},
rules: {
let1: [
{ required: true, message: '请选择单位', trigger: 'change' },
],
let2: [
{ required: true, message: '请选择部门', trigger: 'change' },
],
let3: [
{ required: true, message: '请输入系统名称', trigger: 'blur' },
],
let1: [{ required: true, message: '请选择单位', trigger: 'change' }],
let2: [{ required: true, message: '请选择部门', trigger: 'change' }],
let3: [{ required: true, message: '请输入系统名称', trigger: 'blur' }],
let4: [
{ required: true, message: '请选择系统类型', trigger: 'change' },
],
......@@ -163,7 +360,7 @@ export default {
current: 1,
sizes: [10, 20, 50, 100, 200],
size: 10,
total: 20 //总条数
total: 20, //总条数
},
tableHeight: null,
searchParams: {
......@@ -174,120 +371,146 @@ export default {
},
jianSheLeiXingSelect: [],
appId: null,
};
sysOrgOptions: [],
sysDeptOptions: [],
sysBuildOrgOptions: [],
appDetailVisible: false,
rowData: {},
}
},
mounted(){
mounted() {
window.addEventListener('resize', () => {
this.set_table_height();
this.set_table_height()
})
this.set_table_height();
this.get_table();
this.getJianSheLeiXingSelect().then(res => {
this.jianSheLeiXingSelect = res;
this.set_table_height()
this.get_table()
this.getJianSheLeiXingSelect().then((res) => {
this.jianSheLeiXingSelect = res
})
this.getDicts()
},
methods: {
openDetail(row) {
this.rowData = row
this.appDetailVisible = true
},
formatterDept(row, column, cellValue, index, options) {
const obj = this[options]?.find((v) => v.value == cellValue) || {}
return obj.label
},
getDicts() {
getDictTypeOptions('sys_org').then((res) => {
this.sysOrgOptions = res
})
getDictTypeOptions('sys_dept').then((res) => {
this.sysDeptOptions = res
})
getDictTypeOptions('sys_build_org').then((res) => {
this.sysBuildOrgOptions = res
})
// console.log(getDictTypeOptions('sys_build_org'))
},
operation(type, data) {
switch(type){
switch (type) {
case 'add':
this.openAddDialog();
this.dialogTitle = '新建系统';
break;
this.openAddDialog()
this.dialogTitle = '新建系统'
break
case 'edit':
this.editItem(data);
break;
this.editItem(data)
break
case 'delete':
this.deleteItem(data);
break;
this.deleteItem(data)
break
case 7680:
break;
break
case 11200:
break;
break
}
},
editItem(row) {//编辑
this.add_dialog = true;
this.dialogTitle = '编辑系统';
this.ruleForm.let1 = row.manageOrgId;
this.ruleForm.let2 = row.manageDeptId;
this.ruleForm.let3 = row.appName;
this.ruleForm.let4 = row.buildType;
this.ruleForm.let5 = row.buildOrg;
this.ruleForm.let6 = row.projectManager;
this.appId = row.appId;
editItem(row) {
//编辑
this.add_dialog = true
this.dialogTitle = '编辑系统'
this.ruleForm.let1 = row.manageOrgId
this.ruleForm.let2 = row.manageDeptId
this.ruleForm.let3 = row.appName
this.ruleForm.let4 = row.buildType
this.ruleForm.let5 = row.buildOrg
this.ruleForm.let6 = row.projectManager
this.appId = row.appId
this.$nextTick(() => {
this.$refs.form.clearValidate();
});
this.$refs.form.clearValidate()
})
},
deleteItem(row) {//删除
deleteItem(row) {
//删除
MessageBox.confirm('确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
customClass: 'messageClass',
confirmButtonClass: 'confirmClass',
type: 'warning'
}).then(() => {
type: 'warning',
})
.then(() => {
const params = {
appId: row.appId,
delFlag: 1
delFlag: 1,
}
editDeleteSystemInfoManageTable(params).then(res => {
if(res.code == 200) {
this.get_table();
editDeleteSystemInfoManageTable(params).then((res) => {
if (res.code == 200) {
this.get_table()
Message({
type: 'success',
message: '删除成功!'
});
}else{
message: '删除成功!',
})
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
});
}).catch(() => {
})
})
.catch(() => {
Message({
type: 'info',
message: '已取消'
});
});
message: '已取消',
})
})
},
openAddDialog() {//打开新建系统窗口
this.add_dialog = true;
openAddDialog() {
//打开新建系统窗口
this.add_dialog = true
this.$nextTick(() => {
this.$refs.form.resetFields();
this.ruleForm.let1 = null;
this.ruleForm.let2 = null;
this.ruleForm.let3 = null;
this.ruleForm.let4 = null;
this.ruleForm.let5 = null;
this.ruleForm.let6 = null;
});
this.$refs.form.resetFields()
this.ruleForm.let1 = null
this.ruleForm.let2 = null
this.ruleForm.let3 = null
this.ruleForm.let4 = null
this.ruleForm.let5 = null
this.ruleForm.let6 = null
})
},
dialogOperation(type, data) {
switch(type){
switch (type) {
case 'save':
this.save_dialog();
break;
this.save_dialog()
break
case 3200:
break;
break
case 3840:
break;
break
case 7680:
break;
break
case 11200:
break;
break
}
},
save_dialog() {//保存
this.$refs.form.validate(valid => {
if(valid) {
save_dialog() {
//保存
this.$refs.form.validate((valid) => {
if (valid) {
const params = {
manageOrgId: this.ruleForm.let1,
manageDeptId: this.ruleForm.let2,
......@@ -295,102 +518,115 @@ export default {
buildType: this.ruleForm.let4,
buildOrg: this.ruleForm.let5,
projectManager: this.ruleForm.let6,
};
const requestParams = this.dialogTitle == '新建系统' ? params : { ...params, appId: this.appId };
if(this.dialogTitle == '新建系统') {
addasystemInfoManageTable(requestParams).then(res => {
if(res.code == 200) {
this.get_table();
this.add_dialog = false;
}
const requestParams =
this.dialogTitle == '新建系统'
? params
: { ...params, appId: this.appId }
if (this.dialogTitle == '新建系统') {
addasystemInfoManageTable(requestParams).then((res) => {
if (res.code == 200) {
this.get_table()
this.add_dialog = false
Message({
type: 'success',
message: '保存成功!'
});
}else {
message: '保存成功!',
})
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
});
}else {
editDeleteSystemInfoManageTable(requestParams).then(res => {
if(res.code == 200) {
this.get_table();
this.add_dialog = false;
})
} else {
editDeleteSystemInfoManageTable(requestParams).then((res) => {
if (res.code == 200) {
this.get_table()
this.add_dialog = false
Message({
type: 'success',
message: '保存成功!'
});
}else {
message: '保存成功!',
})
} else {
Message({
type: 'error',
message: res.msg
});
message: res.msg,
})
}
});
})
}
}else {
return false;
} else {
return false
}
});
})
},
getJianSheLeiXingSelect() {//建设类型下拉
getJianSheLeiXingSelect() {
//建设类型下拉
const params = {
key: "build_type"
key: 'build_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)
}
})
})
},
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'
},
search_table() {//搜索
this.pager.current = 1;
this.get_table();
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;
reset() {
//重置
this.searchParams.let1 = null
this.searchParams.let2 = null
this.searchParams.let3 = null
this.searchParams.let4 = null
},
// 每页条数改变
handleSizeChange(val) {
this.pager.current = 1;
this.pager.size = val;
this.get_table();
this.pager.current = 1
this.pager.size = val
this.get_table()
},
//当前页码改变
handleCurrentChange(val) {
this.pager.current = val;
this.get_table();
this.pager.current = val
this.get_table()
},
get_table() {//查询表格数据
this.loading = true;
get_table() {
//查询表格数据
this.loading = true
const params = {
"manageOrgId": this.searchParams.let1,
"manageDeptId": this.searchParams.let2,
"appName": this.searchParams.let3,
"buildType": this.searchParams.let4,
"current": this.pager.current,
"pageSize": this.pager.size,
};
querysystemInfoManageTable(params).then(res => {
if(res.code == 200) {
this.loading = false;
this.tableData = res.data.records;
this.pager.current = res.data.current;
this.pager.total = res.data.total;
this.pager.size = res.data.size;
manageOrgId: this.searchParams.let1,
manageDeptId: this.searchParams.let2,
appName: this.searchParams.let3,
buildType: this.searchParams.let4,
current: this.pager.current,
pageSize: this.pager.size,
}
querysystemInfoManageTable(params).then((res) => {
if (res.code == 200) {
this.loading = false
this.tableData = res.data.records
this.pager.current = res.data.current
this.pager.total = res.data.total
this.pager.size = res.data.size
}
// res.records.map(item => {
// const startTime_year = String(new Date(item.startTime).getFullYear());
......@@ -411,165 +647,168 @@ export default {
// this.pager.current = res.current;
// this.pager.total = res.total;
// this.pager.size = res.size;
});
})
},
},
}
}
</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>
/deep/ .el-form-item__label{
<style scoped lang="scss">
@import '@/styles/elementui.scss';
.appName {
color: $color-primary;
cursor: pointer;
}
/deep/ .el-form-item__label {
width: 100px;
}
.version_btn{
}
.version_btn {
display: flex;
align-items: center;
justify-content: center;
width: 84px;
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; */
font-size: 14px;
color: #0D867F;
color: #0d867f;
cursor: pointer;
margin-left: 15px;
}
.cancel_version_btn{
}
.cancel_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; */
font-size: 14px;
color: #0D867F;
color: #0d867f;
cursor: pointer;
margin-left: 15px;
}
.systemInfoManage{
}
.systemInfoManage {
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;
}
.el-button--primary {
background: rgba(13, 134, 127, 0.1);
color: #0d867f;
border: 0;
}
/deep/ .el-input-group__append{
background-color: #0D867F;
}
/deep/ .el-input-group__append {
background-color: #0d867f;
color: #fff;
cursor: pointer;
}
.search_btn{
}
.search_btn {
width: 100%;
display: flex;
margin-top: 50px;
margin-bottom: 20px;
}
.search_menu{
}
.search_menu {
display: flex;
justify-content: space-between;
margin-bottom: 50px;
}
.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%;
}
.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;
}
.shanChu_btn{
color: #DD6A15;
background-color: #F8EBE2;
}
.reset_btn{
}
.shanChu_btn {
color: #dd6a15;
background-color: #f8ebe2;
}
.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;
}
/deep/ .el-dialog__header{
background-color: #0D867F;
}
/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{
}
/deep/ .el-dialog__title {
color: #fff;
}
/deep/ .el-dialog__close {
}
/deep/ .el-dialog__close {
color: #fff;
}
.greenButton{
background-color: #0D867F;
}
.greenButton {
background-color: #0d867f;
color: #fff;
}
.el-form-item{
}
.el-form-item {
display: flex;
align-items: center;
width: 33%;
}
}
</style>
......@@ -458,7 +458,7 @@ export default {
})
.then(() => {
let params = {
ids: [item.ktcId],
ids: [item.caseId],
}
getTypicalExampleDel(params).then((res) => {
if (res.code == 200) {
......@@ -479,7 +479,7 @@ export default {
ids: [],
}
this.selectList.map((item) => {
params.ids.push(item.ktcId)
params.ids.push(item.caseId)
})
this.$confirm('确认批量删除吗', '提示', {
......@@ -628,7 +628,7 @@ export default {
padding: 60px 15px 60px 15px;
}
</style>
<style scoped>
<style scoped lang="scss">
.form_item_container {
display: flex;
flex-wrap: wrap;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!