Commit 87c2c2ff by 史敦盼

Merge branch 'sdp-v1'

2 parents ac386d7f 9498082b
......@@ -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
......
export default function initDirective(vue) {
/** 节流 */
vue.directive('throttle', {
inserted: function (el, binding) {
let stop = false;
el.addEventListener(binding.arg, (e) => {
if (stop) return;
binding.value(e)
stop = true;
setTimeout(() => {
stop = false
}, 500)
})
}
})
/** 防抖 */
vue.directive('debounce', {
inserted: function (el, binding) {
let stopTime;
el.addEventListener(binding.arg, (e) => {
clearTimeout(stopTime);
stopTime = setTimeout(binding.value, 1000, e)
})
}
})
/** 节流 */
vue.directive('throttle', {
inserted: function (el, binding) {
let stop = false
el.addEventListener(binding.arg, (e) => {
if (stop) return
binding.value(e)
stop = true
setTimeout(() => {
stop = false
}, 500)
})
},
})
/** 防抖 */
vue.directive('debounce', {
inserted: function (el, binding) {
let stopTime
el.addEventListener(binding.arg, (e) => {
clearTimeout(stopTime)
stopTime = setTimeout(binding.value, 1000, e)
})
},
})
vue.directive('no-backslash', {
// bind 钩子函数会在指令绑定到元素时调用
bind(el, binding, vnode) {
// 绑定 @input 监听方法
el.addEventListener('input', function (event) {
// 获取输入的值
const value = event.target.value;
vue.directive('no-backslash', {
// bind 钩子函数会在指令绑定到元素时调用
bind(el, binding, vnode) {
// 绑定 @input 监听方法
el.addEventListener('input', function (event) {
// 获取输入的值
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;
// 如果输入值包含特殊字符,则替换为空格
if (regex.test(value)) {
// 使用 replace 方法替换特殊字为空格
const newValue = value.replace(regex, ' ');
// 将新值设置回输入框
event.target.value = newValue;
// 触发 @input 事件,使其更新组件中的数据
vnode.componentInstance.$emit('input', newValue);
}
});
},
});
}
// 使用正则表达式检测特殊字(根据需要匹配相应限制字符)
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
// 如果输入值包含特殊字符,则替换为空格
if (regex.test(value)) {
// 使用 replace 方法替换特殊字为空格
const newValue = value.replace(regex, ' ')
// 将新值设置回输入框
event.target.value = newValue
// 触发 @input 事件,使其更新组件中的数据
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)
}
})
},
})
}
......@@ -7,7 +7,7 @@
* @Autor: pan
* @Date: 2024-03-21 20:58:31
* @LastEditors: pan
* @LastEditTime: 2024-03-27 19:49:01
* @LastEditTime: 2024-03-28 17:36:40
-->
<template>
<div class="flex-column m-10 w-100 conceptualExamine">
......@@ -254,7 +254,7 @@ export default {
this.leftContentType === 'onlyoffice' ||
this.rightContentType === 'onlyoffice'
) {
// this.fnQueryPrjNeedFile()
this.fnQueryPrjNeedFile()
}
},
computed: {
......
<!--
* @Description: 项目信息详情
* @Version: 2.0
* @Autor: pan
* @Date: 2024-03-28 16:08:56
* @LastEditors: pan
* @LastEditTime: 2024-03-28 17:31:20
-->
<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">总部</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">部门</div>
<div class="value">发展策划部</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">关联系统名称</div>
<div class="value">
电力营销-2023年网上国网(网上国网V1.0)
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">建设类型</div>
<div class="value">统建</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">项目名称</div>
<div class="value">Sora大模型系统</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">是否续建</div>
<div class="value"></div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">前期项目</div>
<div class="value">
电力营销-2023年网上国网(网上国网V1.0)
</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">承建单位</div>
<div class="value">国网数字科技有限公司</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="6" class="flex">
<div class="label">项目经理</div>
<div class="value">李雷</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">创建人</div>
<div class="value">李雷</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">创建时间</div>
<div class="value">2024-03-28</div>
</el-col>
<el-col :span="6" class="flex">
<div class="label">修改人</div>
<div class="value">李雷</div>
</el-col>
</el-row>
<el-row class="m-t-20">
<el-col :span="24" class="flex">
<div class="label">修改时间</div>
<div class="value">2024-03-28</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 height="300" :data="tableData" stripe border>
<el-table-column
type="index"
label="序号"
width="80"
align="center"
></el-table-column>
<el-table-column
prop="name"
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>
export default {
props: {
visible: {
type: Boolean,
default: false,
},
rowData: {
type: Object,
default: () => {},
},
},
data() {
return {
activeName: '1',
tableData: [],
}
},
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() {},
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;
}
}
}
</style>
......@@ -137,6 +137,7 @@ export default {
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
......
......@@ -136,6 +136,7 @@ export default {
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
......
......@@ -128,6 +128,7 @@ export default {
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
......
......@@ -128,6 +128,7 @@ export default {
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
......
......@@ -127,6 +127,7 @@ export default {
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
......
......@@ -137,6 +137,7 @@ export default {
},
created() {
this.getDetail()
this.fnQueryPrjNeedFile()
},
methods: {
// 获取下拉文档内容
......
......@@ -3,8 +3,18 @@
<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 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
......@@ -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,11 @@
<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 {
......@@ -130,13 +144,32 @@ export default {
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
leftSelectData: [],
}
},
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',
......
......@@ -58,7 +58,11 @@
<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 {
......@@ -110,13 +114,32 @@ export default {
callbackUrl: `${documentServerUrl}${EADC_SHARED_ABILITY}/callback?fileId=302`,
},
},
leftSelectData: [],
}
},
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,6 +58,7 @@ import {
savePrelDesInspecte,
detailPrelDesInspecte,
qViewPrelDesInspecte,
queryPrjNeedFile,
} from '@/api/index.js'
import { documentServerUrl, documentServerUrl2 } from '@/config'
import { EADC_SHARED_ABILITY } from '@/config/micromodule'
......@@ -111,17 +112,36 @@ export default {
},
},
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,
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!