Commit f02083fd by 史敦盼

概设材料审查,及系列封装修改

1 parent c536cd5a
// 接口url
// 批量计划管理分页查询
export const batchPlanManagement = '/network/bat-plan-info/'
// 概设材料审查 - 技术路线分页查询
export const queryConceptualReview = '/network/prel-des-rvw/' ///network/prel-des-rvw/
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-14 10:33:49
* @LastEditTime: 2024-03-15 09:43:02
-->
<!-- /**
* 搜索栏公共组件
......@@ -17,15 +17,15 @@
:label-width="labelWidth"
:label-position="labelPosition"
>
<el-form-item
<el-col
:span="item.span || 12"
v-for="(item, index) in formOptions"
:key="newKeys[index]"
:prop="item.prop"
:label="item.label"
:rules="item.rules"
>
<el-form-item :prop="item.prop" :label="item.label" :rules="item.rules">
<SearchFormItem v-model="formData[item.prop]" :itemOptions="item" />
</el-form-item>
</el-col>
<!-- 自定义插槽,可用于特殊表单块 -->
<slot></slot>
</el-form>
......
......@@ -4,10 +4,18 @@
* @Autor: pan
* @Date: 2024-03-12 14:01:57
* @LastEditors: pan
* @LastEditTime: 2024-03-12 16:02:21
* @LastEditTime: 2024-03-15 14:24:23
-->
<template>
<div class="list-page">
<!-- 一级tab切换栏 -->
<div class="tabWrap">
<slot name="tabWrap" />
</div>
<!-- 二级tab切换栏 -->
<div class="subTabWrap">
<slot name="subTabWrap" />
</div>
<!-- 头部搜索区域 -->
<div class="formWrap">
<slot name="formWrap" />
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 14:55:59
* @LastEditors: pan
* @LastEditTime: 2024-03-14 08:59:05
* @LastEditTime: 2024-03-18 09:56:15
-->
<!-- /**
* 搜索栏公共组件
......@@ -37,8 +37,7 @@
<!-- 自定义插槽,可用于特殊表单块 -->
<slot></slot>
</el-form>
<el-form-item>
<!-- 提交按钮 -->
<div class="btn-box">
<el-button
......@@ -50,16 +49,6 @@
@click="onSearch"
>查询</el-button
>
<!-- <el-button
v-if="btnItems.includes('export')"
size="mini"
type="primary"
class="btn-export"
@click="onExport"
>导出</el-button
> -->
<el-button
size="medium"
type="default"
......@@ -69,6 +58,8 @@
>重置</el-button
>
</div>
</el-form-item>
</el-form>
</div>
</template>
......@@ -87,6 +78,7 @@ export default {
* initValue: '阿黄', // 字段初始值
* placeholder: '请输入用户名', // elementui组件属性
* rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
* dictType: 'build_type', // 如果是字典下拉框,传这个字段,值是对应的字典
* events: { // elementui组件方法
* input (val) {
* console.log(val)
......@@ -191,6 +183,7 @@ export default {
}
.el-form {
display: flex;
flex-wrap: wrap;
/deep/ .el-form-item__label {
// padding-right: 0;
margin-bottom: 10px;
......
......@@ -4,7 +4,7 @@
* @Autor: pan
* @Date: 2024-03-12 15:11:47
* @LastEditors: pan
* @LastEditTime: 2024-03-13 16:54:21
* @LastEditTime: 2024-03-18 09:58:11
-->
<template>
<div class="form-item">
......@@ -79,7 +79,6 @@
:type="itemOptions.type"
clearable
placeholder="请选择日期"
style="width: 300px"
></el-date-picker>
<el-cascader
v-if="isCascader"
......@@ -185,9 +184,19 @@ export default {
},
},
created() {},
created() {
// 字典下拉框处理
if (this.isSelect && this.itemOptions.dictType) {
this.getDictTypeOptions(this.itemOptions.dictType)
}
},
methods: {
/**
* @description: 获取下拉框字典,并缓存
* @param {String} key 对应字典接口的参数值
* @author: pan
*/
async getDictTypeOptions(key) {
var dictTypeOptions = []
var storedDic = localStorage.getItem('dic_' + key)
......@@ -196,20 +205,13 @@ export default {
} else {
const params = { key }
const res = await getDianXingAnLiSelectData(params)
console.log(typeof res)
dictTypeOptions = res.data
const jsonStr = JSON.stringify(res.data)
localStorage.setItem('dic_' + key, jsonStr)
// await getDianXingAnLiSelectData(params).then((res) => {
// if (res.code === 200) {
// var options = res.data
// var jsonStr = JSON.stringify(options)
// localStorage.setItem('dic_' + key, jsonStr)
// dictTypeOptions = res.data
// console.log(dictTypeOptions)
// }
// })
}
return dictTypeOptions
this.itemOptions.options = dictTypeOptions
this.$forceUpdate()
},
},
......
......@@ -244,6 +244,16 @@ const routes = [
name: 'batchPlanManagement',
component: () => import('@/views/batchPlanManagement/index.vue'),
},
{
path: '/main/conceptualReview', // 概设材料审查列表
name: 'conceptualReview',
component: () => import('@/views/conceptualReview/index.vue'),
},
{
path: '/main/conceptualExamine', // 概设材料审查页面
name: 'conceptualExamine',
component: () => import('@/views/conceptualReview/Examine.vue'),
},
],
},
]
......
......@@ -5,3 +5,32 @@ export const approvalStatusOptions = [
{ label: '审批通过', value: 3 },
{ label: '驳回', value: 4 },
]
// 评审材料名称枚举
export const archiPrjReviewEnum = [
{ label: '一致性评审', value: 'CONFORMANCE_REVIEW' },
{ label: '架构遵从', value: 'ARCHITECTURE_CONFORMANCE' },
{ label: '关键技术深度评审', value: 'KEY_TECHNOLOGY_REVIEW' },
{ label: '功能深度评审', value: 'FUNCTIONAL_DEPTH_REVIEW' },
{ label: '数据深度评审', value: 'DATA_DEPTH_REVIEW' },
{ label: '安全架构遵从', value: 'SECURITY_ARCHITECTURE_CONFORMANCE' },
{ label: '部署架构审查', value: 'DEPLOYMENT_ARCHITECTURE_REVIEW' },
{ label: '技术架构遵从', value: 'TECHNICAL_ARCHITECTURE_CONFORMANCE' },
{ label: '应用架构遵从', value: 'APPLICATION_ARCHITECTURE_CONFORMANCE' },
{
label: '物理数据架构遵从',
value: 'PHYSICAL_DATA_ARCHITECTURE_CONFORMANCE',
},
{ label: '运安符合性审查', value: 'OPERATIONAL_SAFETY_COMPLIANCE_REVIEW' },
{ label: '功能满足审查', value: 'FUNCTIONAL_SATISFACTION_REVIEW' },
{ label: '运行可靠性审查', value: 'OPERATIONAL_RELIABILITY_REVIEW' },
{ label: '系统实用性审查', value: 'SYSTEM_PRACTICALITY_REVIEW' },
{ label: '系统安全性审查', value: 'SYSTEM_SECURITY_REVIEW' },
{ label: '资源复用性审查', value: 'RESOURCE_REUSABILITY_REVIEW' },
{ label: '技术路线', value: 'TECH_ROUTE' },
{ label: '功能偏差', value: 'FUNCTION_UNLIKE' },
{ label: '系统部署', value: 'APP_DEP' },
{ label: '系统集成', value: 'APP_INT' },
{ label: '系统安全', value: 'APP_SAFE' },
{ label: '功能重复风险', value: 'FUNCTION_S_RISK' },
{ label: '数据重复录入风险', value: 'DATA_S_INSERT_RISK' },
]
......@@ -460,7 +460,12 @@
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">需求管理</span>
</div>
<div class="menu_1_item_subtitle">
<div
class="menu_1_item_subtitle"
@click="
jumpPage('系统架构设计与管控', '概要设计评审', '概设材料审查')
"
>
<img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设材料审查</span>
</div>
......@@ -985,6 +990,14 @@ export default {
)
this.visible5 = false
break
case '概设材料审查':
this.$router.push(
'/main/conceptualReview',
() => {},
() => {},
)
this.visible5 = false
break
}
},
},
......
<template>
<div class="flex-column m-10 w-100 conceptualExamine">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审标准</span>
</div>
<div
class="left_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<!-- <img :src="leftSrc" alt="" /> -->
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
<div class="right_container flex-column">
<div class="right_container_title">
<i class="el-icon-caret-right icon"></i>
<span>评审内容</span>
</div>
<div
class="right_container_content flex-1"
v-loading="leftLoading"
element-loading-text="加载中"
>
<img
v-for="(item, idx) in leftBaseOptions"
:key="idx"
:src="item"
alt=""
/>
</div>
</div>
</div>
<div class="bottom_container">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="p-l-20 bottom_container_title">{{ examinName }}</span>
</div>
<el-button type="primary" size="medium" @click="fnSave()"
>保存结果</el-button
>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent"
v-no-backslash
class="w-100"
placeholder="输入审查结果"
></el-input>
<template v-if="tab === '1'">
<div class="flex-b-c p-r-20 m-tb-15">
<div class="flex-c">
<span class="p-l-20 bottom_container_title">报告规范性</span>
</div>
</div>
<el-input
type="textarea"
:rows="4"
v-model="resultContent2"
v-no-backslash
class="w-100"
placeholder="输入审查结果"
></el-input>
</template>
</div>
</div>
</template>
<script>
import { getReviewNorm, saveExamine } from '@/api'
export default {
name: 'conceptualExamine',
components: {},
data() {
return {
resultContent: '',
resultContent2: '',
tab: '',
examinName: '',
row: {},
leftSrc: '',
leftLoading: true,
leftBaseOptions: [],
rightBaseOptions: [],
}
},
created() {
this.tab = this.$route.query.tab
this.examinName = this.$route.query.examinName
this.row = JSON.parse(this.$route.query.row)
this.resultContent = this.row.reviewSuggestion
this.getReviewNorm()
},
methods: {
getReviewNorm() {
const { needId } = this.row
const params = {
needId,
}
getReviewNorm(params).then((res) => {
if (res.code === 200) {
this.leftLoading = false
this.leftBaseOptions = res.data.docParserList.map(
(v) => `data:image/png;base64,${v.docContent}`,
)
// this.leftSrc = `data:image/png;base64,${res.data.docParserList[0].docContent}`
}
})
},
fnSave() {
const params = {
...this.row,
reviewSuggestion: this.resultContent,
}
const loading = this.$loading({
lock: true,
text: '保存中',
spinner: 'el-icon-loading',
})
saveExamine(params).then((res) => {
if (res.code === 200) {
loading.close()
this.$message.success('保存成功')
}
})
},
},
}
</script>
<style lang="scss" scoped>
@import '@/styles/common.scss';
@import '@/views/reviewArchiPoliticeCheck/index.scss';
.conceptualExamine {
height: calc(100% - 20px);
overflow-y: auto;
}
</style>
......@@ -2,6 +2,7 @@
// 详情部分样式
.content {
flex: 1;
min-height: 400px;
.left_container,
.right_container {
width: 50%;
......@@ -15,6 +16,8 @@
&_content {
border: 1px solid #ccc;
border-top: none;
min-height: 0;
overflow-y: auto;
}
}
.icon {
......@@ -22,6 +25,9 @@
font-size: 18px;
}
}
.tab-component {
overflow-y: auto;
}
.bottom_container {
&_title {
position: relative;
......
......@@ -80,7 +80,6 @@ export default {
element: 'el-select', // 指定elementui组件
initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性
options: this.constructionTypeOptions,
dictType: 'build_type',
},
]
......@@ -153,16 +152,7 @@ export default {
]
},
},
created() {
const params = {
key: 'build_type',
}
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
this.constructionTypeOptions = res.data
}
})
},
created() {},
methods: {
// 表格勾选的数据
selectionChange(data) {
......
<template>
<div class="tab1 flex-column h-100">
<div class="tab-component flex-column h-100">
<div class="content flex">
<div class="left_container m-r-10 flex-column">
<div class="left_container_title">
......
<template>
<div class="tab2">
</div>
<div class="tab-component"></div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import { getArchiViewManageTable } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab2',
components: {
},
components: {},
data() {
return {
};
return {}
},
mounted(){
},
methods: {
}
mounted() {},
methods: {},
}
</script>
<style scoped>
</style>
\ No newline at end of file
<style scoped></style>
<template>
<div class="tab3">
</div>
<div class="tab-component"></div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import { getArchiViewManageTable } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab3',
components: {
},
components: {},
data() {
return {
};
return {}
},
mounted(){
},
methods: {
}
mounted() {},
methods: {},
}
</script>
<style scoped>
</style>
\ No newline at end of file
<style scoped></style>
<template>
<div class="tab4">
</div>
<div class="tab-component"></div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import { getArchiViewManageTable } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab4',
components: {
},
components: {},
data() {
return {
};
return {}
},
mounted(){
},
methods: {
}
mounted() {},
methods: {},
}
</script>
<style scoped>
</style>
\ No newline at end of file
<style scoped></style>
<template>
<div class="tab5">
</div>
<div class="tab-component"></div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import { getArchiViewManageTable } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab5',
components: {
},
components: {},
data() {
return {
};
return {}
},
mounted(){
},
methods: {
}
mounted() {},
methods: {},
}
</script>
<style scoped>
</style>
\ No newline at end of file
<style scoped></style>
<template>
<div class="tab6">
</div>
<div class="tab-component"></div>
</template>
<script>
import {
getArchiViewManageTable
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
import { getArchiViewManageTable } from '@/api/index.js'
import { MessageBox, Message } from 'element-ui'
export default {
name: 'tab6',
components: {
},
components: {},
data() {
return {
};
return {}
},
mounted(){
},
methods: {
}
mounted() {},
methods: {},
}
</script>
<style scoped>
</style>
\ No newline at end of file
<style scoped></style>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!