Commit f02083fd by 史敦盼

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

1 parent c536cd5a
// 接口url // 接口url
// 批量计划管理分页查询 // 批量计划管理分页查询
export const batchPlanManagement = '/network/bat-plan-info/' export const batchPlanManagement = '/network/bat-plan-info/'
// 概设材料审查 - 技术路线分页查询
export const queryConceptualReview = '/network/prel-des-rvw/' ///network/prel-des-rvw/
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Autor: pan * @Autor: pan
* @Date: 2024-03-12 14:55:59 * @Date: 2024-03-12 14:55:59
* @LastEditors: pan * @LastEditors: pan
* @LastEditTime: 2024-03-14 10:33:49 * @LastEditTime: 2024-03-15 09:43:02
--> -->
<!-- /** <!-- /**
* 搜索栏公共组件 * 搜索栏公共组件
...@@ -17,15 +17,15 @@ ...@@ -17,15 +17,15 @@
:label-width="labelWidth" :label-width="labelWidth"
:label-position="labelPosition" :label-position="labelPosition"
> >
<el-form-item <el-col
:span="item.span || 12"
v-for="(item, index) in formOptions" v-for="(item, index) in formOptions"
:key="newKeys[index]" :key="newKeys[index]"
:prop="item.prop"
:label="item.label"
:rules="item.rules"
> >
<SearchFormItem v-model="formData[item.prop]" :itemOptions="item" /> <el-form-item :prop="item.prop" :label="item.label" :rules="item.rules">
</el-form-item> <SearchFormItem v-model="formData[item.prop]" :itemOptions="item" />
</el-form-item>
</el-col>
<!-- 自定义插槽,可用于特殊表单块 --> <!-- 自定义插槽,可用于特殊表单块 -->
<slot></slot> <slot></slot>
</el-form> </el-form>
......
...@@ -4,10 +4,18 @@ ...@@ -4,10 +4,18 @@
* @Autor: pan * @Autor: pan
* @Date: 2024-03-12 14:01:57 * @Date: 2024-03-12 14:01:57
* @LastEditors: pan * @LastEditors: pan
* @LastEditTime: 2024-03-12 16:02:21 * @LastEditTime: 2024-03-15 14:24:23
--> -->
<template> <template>
<div class="list-page"> <div class="list-page">
<!-- 一级tab切换栏 -->
<div class="tabWrap">
<slot name="tabWrap" />
</div>
<!-- 二级tab切换栏 -->
<div class="subTabWrap">
<slot name="subTabWrap" />
</div>
<!-- 头部搜索区域 --> <!-- 头部搜索区域 -->
<div class="formWrap"> <div class="formWrap">
<slot name="formWrap" /> <slot name="formWrap" />
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Autor: pan * @Autor: pan
* @Date: 2024-03-12 14:55:59 * @Date: 2024-03-12 14:55:59
* @LastEditors: pan * @LastEditors: pan
* @LastEditTime: 2024-03-14 08:59:05 * @LastEditTime: 2024-03-18 09:56:15
--> -->
<!-- /** <!-- /**
* 搜索栏公共组件 * 搜索栏公共组件
...@@ -37,38 +37,29 @@ ...@@ -37,38 +37,29 @@
<!-- 自定义插槽,可用于特殊表单块 --> <!-- 自定义插槽,可用于特殊表单块 -->
<slot></slot> <slot></slot>
<el-form-item>
<!-- 提交按钮 -->
<div class="btn-box">
<el-button
v-if="btnItems.includes('search')"
size="medium"
type="primary"
class="btn-search"
icon="el-icon-search"
@click="onSearch"
>查询</el-button
>
<el-button
size="medium"
type="default"
class="btn-reset"
icon="el-icon-refresh"
@click="onReset"
>重置</el-button
>
</div>
</el-form-item>
</el-form> </el-form>
<!-- 提交按钮 -->
<div class="btn-box">
<el-button
v-if="btnItems.includes('search')"
size="medium"
type="primary"
class="btn-search"
icon="el-icon-search"
@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"
class="btn-reset"
icon="el-icon-refresh"
@click="onReset"
>重置</el-button
>
</div>
</div> </div>
</template> </template>
...@@ -87,6 +78,7 @@ export default { ...@@ -87,6 +78,7 @@ export default {
* initValue: '阿黄', // 字段初始值 * initValue: '阿黄', // 字段初始值
* placeholder: '请输入用户名', // elementui组件属性 * placeholder: '请输入用户名', // elementui组件属性
* rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性 * rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
* dictType: 'build_type', // 如果是字典下拉框,传这个字段,值是对应的字典
* events: { // elementui组件方法 * events: { // elementui组件方法
* input (val) { * input (val) {
* console.log(val) * console.log(val)
...@@ -191,6 +183,7 @@ export default { ...@@ -191,6 +183,7 @@ export default {
} }
.el-form { .el-form {
display: flex; display: flex;
flex-wrap: wrap;
/deep/ .el-form-item__label { /deep/ .el-form-item__label {
// padding-right: 0; // padding-right: 0;
margin-bottom: 10px; margin-bottom: 10px;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Autor: pan * @Autor: pan
* @Date: 2024-03-12 15:11:47 * @Date: 2024-03-12 15:11:47
* @LastEditors: pan * @LastEditors: pan
* @LastEditTime: 2024-03-13 16:54:21 * @LastEditTime: 2024-03-18 09:58:11
--> -->
<template> <template>
<div class="form-item"> <div class="form-item">
...@@ -79,7 +79,6 @@ ...@@ -79,7 +79,6 @@
:type="itemOptions.type" :type="itemOptions.type"
clearable clearable
placeholder="请选择日期" placeholder="请选择日期"
style="width: 300px"
></el-date-picker> ></el-date-picker>
<el-cascader <el-cascader
v-if="isCascader" v-if="isCascader"
...@@ -185,9 +184,19 @@ export default { ...@@ -185,9 +184,19 @@ export default {
}, },
}, },
created() {}, created() {
// 字典下拉框处理
if (this.isSelect && this.itemOptions.dictType) {
this.getDictTypeOptions(this.itemOptions.dictType)
}
},
methods: { methods: {
/**
* @description: 获取下拉框字典,并缓存
* @param {String} key 对应字典接口的参数值
* @author: pan
*/
async getDictTypeOptions(key) { async getDictTypeOptions(key) {
var dictTypeOptions = [] var dictTypeOptions = []
var storedDic = localStorage.getItem('dic_' + key) var storedDic = localStorage.getItem('dic_' + key)
...@@ -196,20 +205,13 @@ export default { ...@@ -196,20 +205,13 @@ export default {
} else { } else {
const params = { key } const params = { key }
const res = await getDianXingAnLiSelectData(params) const res = await getDianXingAnLiSelectData(params)
console.log(typeof res)
dictTypeOptions = res.data dictTypeOptions = res.data
const jsonStr = JSON.stringify(res.data) const jsonStr = JSON.stringify(res.data)
localStorage.setItem('dic_' + key, jsonStr) 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 = [ ...@@ -244,6 +244,16 @@ const routes = [
name: 'batchPlanManagement', name: 'batchPlanManagement',
component: () => import('@/views/batchPlanManagement/index.vue'), 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 = [ ...@@ -5,3 +5,32 @@ export const approvalStatusOptions = [
{ label: '审批通过', value: 3 }, { label: '审批通过', value: 3 },
{ label: '驳回', value: 4 }, { 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 @@ ...@@ -460,7 +460,12 @@
<img src="@/assets/main/3img.png" alt="" /> <img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">需求管理</span> <span style="margin-left: 5px">需求管理</span>
</div> </div>
<div class="menu_1_item_subtitle"> <div
class="menu_1_item_subtitle"
@click="
jumpPage('系统架构设计与管控', '概要设计评审', '概设材料审查')
"
>
<img src="@/assets/main/3img.png" alt="" /> <img src="@/assets/main/3img.png" alt="" />
<span style="margin-left: 5px">概设材料审查</span> <span style="margin-left: 5px">概设材料审查</span>
</div> </div>
...@@ -985,6 +990,14 @@ export default { ...@@ -985,6 +990,14 @@ export default {
) )
this.visible5 = false this.visible5 = false
break 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 @@ ...@@ -2,6 +2,7 @@
// 详情部分样式 // 详情部分样式
.content { .content {
flex: 1; flex: 1;
min-height: 400px;
.left_container, .left_container,
.right_container { .right_container {
width: 50%; width: 50%;
...@@ -15,6 +16,8 @@ ...@@ -15,6 +16,8 @@
&_content { &_content {
border: 1px solid #ccc; border: 1px solid #ccc;
border-top: none; border-top: none;
min-height: 0;
overflow-y: auto;
} }
} }
.icon { .icon {
...@@ -22,6 +25,9 @@ ...@@ -22,6 +25,9 @@
font-size: 18px; font-size: 18px;
} }
} }
.tab-component {
overflow-y: auto;
}
.bottom_container { .bottom_container {
&_title { &_title {
position: relative; position: relative;
......
...@@ -80,7 +80,6 @@ export default { ...@@ -80,7 +80,6 @@ export default {
element: 'el-select', // 指定elementui组件 element: 'el-select', // 指定elementui组件
initValue: '', // 字段初始值 initValue: '', // 字段初始值
placeholder: '请选择', // elementui组件属性 placeholder: '请选择', // elementui组件属性
options: this.constructionTypeOptions,
dictType: 'build_type', dictType: 'build_type',
}, },
] ]
...@@ -153,16 +152,7 @@ export default { ...@@ -153,16 +152,7 @@ export default {
] ]
}, },
}, },
created() { created() {},
const params = {
key: 'build_type',
}
getDianXingAnLiSelectData(params).then((res) => {
if (res.code == 200) {
this.constructionTypeOptions = res.data
}
})
},
methods: { methods: {
// 表格勾选的数据 // 表格勾选的数据
selectionChange(data) { selectionChange(data) {
......
<template> <template>
<div class="tab1 flex-column h-100"> <div class="tab-component flex-column h-100">
<div class="content flex"> <div class="content flex">
<div class="left_container m-r-10 flex-column"> <div class="left_container m-r-10 flex-column">
<div class="left_container_title"> <div class="left_container_title">
......
<template> <template>
<div class="tab2"> <div class="tab-component"></div>
</div>
</template> </template>
<script> <script>
import { import { getArchiViewManageTable } from '@/api/index.js'
getArchiViewManageTable import { MessageBox, Message } from 'element-ui'
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default { export default {
name: 'tab2', name: 'tab2',
components: { components: {},
data() {
}, return {}
data() { },
return { mounted() {},
methods: {},
};
},
mounted(){
},
methods: {
}
} }
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
<template> <template>
<div class="tab3"> <div class="tab-component"></div>
</div>
</template> </template>
<script> <script>
import { import { getArchiViewManageTable } from '@/api/index.js'
getArchiViewManageTable import { MessageBox, Message } from 'element-ui'
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default { export default {
name: 'tab3', name: 'tab3',
components: { components: {},
data() {
}, return {}
data() { },
return { mounted() {},
methods: {},
};
},
mounted(){
},
methods: {
}
} }
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
<template> <template>
<div class="tab4"> <div class="tab-component"></div>
</div>
</template> </template>
<script> <script>
import { import { getArchiViewManageTable } from '@/api/index.js'
getArchiViewManageTable import { MessageBox, Message } from 'element-ui'
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default { export default {
name: 'tab4', name: 'tab4',
components: { components: {},
data() {
}, return {}
data() { },
return { mounted() {},
methods: {},
};
},
mounted(){
},
methods: {
}
} }
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
<template> <template>
<div class="tab5"> <div class="tab-component"></div>
</div>
</template> </template>
<script> <script>
import { import { getArchiViewManageTable } from '@/api/index.js'
getArchiViewManageTable import { MessageBox, Message } from 'element-ui'
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default { export default {
name: 'tab5', name: 'tab5',
components: { components: {},
data() {
}, return {}
data() { },
return { mounted() {},
methods: {},
};
},
mounted(){
},
methods: {
}
} }
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
<template> <template>
<div class="tab6"> <div class="tab-component"></div>
</div>
</template> </template>
<script> <script>
import { import { getArchiViewManageTable } from '@/api/index.js'
getArchiViewManageTable import { MessageBox, Message } from 'element-ui'
} from '@/api/index.js';
import { MessageBox, Message } from 'element-ui';
export default { export default {
name: 'tab6', name: 'tab6',
components: { components: {},
data() {
}, return {}
data() { },
return { mounted() {},
methods: {},
};
},
mounted(){
},
methods: {
}
} }
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!