Commit 4fc8e264 by bingobo

辽宁一版发版

1 parent 7ba7408a
The file could not be displayed because it is too large.
...@@ -7,6 +7,6 @@ const SystemConfig = { ...@@ -7,6 +7,6 @@ const SystemConfig = {
//TODO VUE_APP_BASE_URL: "http://25.66.210.41/tools", //TODO VUE_APP_BASE_URL: "http://25.66.210.41/tools",
VUE_APP_BASE_URL: "http://192.168.0.113:18088/tools", VUE_APP_BASE_URL: "http://192.168.0.113:18088/tools",
//TODO VUE_APP_ZJ_IFRAME: "http://25.66.210.41/arch" //TODO VUE_APP_ZJ_IFRAME: "http://25.66.210.41/arch"
// VUE_APP_ZJ_IFRAME: "http://192.168.0.113:18088/arch" // VUE_APP_ZJ_IFRAME: "http://192.168.0.113/arch"
VUE_APP_ZJ_IFRAME: "http://localhost:30478/arch" VUE_APP_ZJ_IFRAME: "http://localhost:30478/arch"
}; };
...@@ -10,6 +10,36 @@ import { get, post, download } from '@/utils/http' ...@@ -10,6 +10,36 @@ import { get, post, download } from '@/utils/http'
export function evalBatchInfo(params) { export function evalBatchInfo(params) {
return post(`${ARCH_EVALUATION}/postEvalBatchInfoZc/`, params) return post(`${ARCH_EVALUATION}/postEvalBatchInfoZc/`, params)
} }
// 获取里程碑数据列表
export function milestonesGetList(params) {
// milestones/getList
return get(`${ARCH_EVALUATION}/milestones/getList`, params)
}
// 获取流程列表
export function getMessageListApi(params) {
// messageReminder/getIPageList
return post(`${ARCH_EVALUATION}/messageReminder/getIPageList`, params)
}
// 一键已读 已读单条msg
export function updateMessageApi(params) {
// messageReminder/batchUpdate
return post(`${ARCH_EVALUATION}/messageReminder/batchUpdate`, params)
}
// 一键已读 已读所有msg
export function readWholwMsg() {
return get(`${ARCH_EVALUATION}/messageReminder/batchRead`)
}
// 获取流程列表
// export function evalBatchInfo(params) {
// return post(`${ARCH_EVALUATION}/postEvalBatchInfoZc/`, params)
// }
//专家库 //专家库
export function expertInfo(params) { export function expertInfo(params) {
return post(`${ARCH_EVALUATION}/expertInfo/`, params) return post(`${ARCH_EVALUATION}/expertInfo/`, params)
......
...@@ -1105,8 +1105,7 @@ export default { ...@@ -1105,8 +1105,7 @@ export default {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}) }).then(async () => {
.then(async () => {
let res = await delEvalBatchInfo(this.checkedList[0]) let res = await delEvalBatchInfo(this.checkedList[0])
if (res.code == 200) { if (res.code == 200) {
this.$message({ this.$message({
...@@ -1121,8 +1120,7 @@ export default { ...@@ -1121,8 +1120,7 @@ export default {
}) })
this.resetForm() this.resetForm()
} }
}) }).catch(() => {
.catch(() => {
this.$message({ this.$message({
type: 'info', type: 'info',
message: '已取消删除', message: '已取消删除',
......
...@@ -10,7 +10,13 @@ ...@@ -10,7 +10,13 @@
<div class="top" :class="dialogFullScreen ? 'noShow' : ''"> <div class="top" :class="dialogFullScreen ? 'noShow' : ''">
<el-button <el-button
type="primary" type="primary"
class="working" style="position: absolute; left: -170px"
@click="showMilestoneDialog"
>里程碑</el-button
>
<el-button
type="primary"
style="position: absolute; left: -80px"
@click="working('work')" @click="working('work')"
>智能分析</el-button> >智能分析</el-button>
<el-steps :active="active" align-center finish-status="success"> <el-steps :active="active" align-center finish-status="success">
...@@ -231,12 +237,193 @@ ...@@ -231,12 +237,193 @@
> >
<div v-html="wtmx" class="dialogscroll"></div> <div v-html="wtmx" class="dialogscroll"></div>
</el-dialog> </el-dialog>
<el-dialog
:visible.sync="showMilestone"
title="项目里程碑"
width="90%"
:modal-append-to-body="false"
:append-to-body="false"
>
<div style="height: 65vh; display: flex; flex-direction: row; gap: 10px">
<div style="flex: 1">
<el-card style="height: 100%">
<div
style="background-color: #0d867f; color: #fff; font-size: 18px"
>
项目计划里程碑
</div>
<div class="time_line_wrap">
<div
v-for="(item, index) in timeLineDataList1"
:key="index"
style="display: flex; flex-direction: row; width: 100%"
>
<div class="time_item_left">
<div>{{ item.milestoneName }}</div>
</div>
<div class="time_item_center">
<!-- status: 1 完成 ,2 异常 , 3 未到达 -->
<div
v-if="compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="!compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #8a8a8a',
background: '#8a8a8a',
}"
></div>
<div
v-if="item.milestoneTime == null"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<!-- <div
v-if="item.status == 1"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="item.status == 2"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<div
v-if="item.status == 3"
class="time_item_dot"
:style="{ border: '2px solid #8a8a8a' }"
></div> -->
<!-- 线条颜色逻辑: 判断当前节点的下一个节点的状态,如果status === 3,未到达,则当前节点的线条为#8a8a8a,否则当前节点线条为#54aeed -->
<div
v-if="index < timeLineDataList1.length - 1"
class="time_item_line"
:style="{
borderLeftColor: !compareTime(
timeLineDataList1[index + 1].milestoneTime
)
? '#8a8a8a'
: '#54aeed',
}"
></div>
</div>
<div class="time_item_right">
<div>{{ item.milestoneTime }}</div>
</div>
</div>
</div>
</el-card>
</div>
<div style="flex: 1">
<el-card style="height: 100%">
<div
style="background-color: #0d867f; color: #fff; font-size: 18px"
>
项目实际里程碑
</div>
<div class="time_line_wrap">
<div
v-for="(item, index) in timeLineDataList2"
:key="index"
style="display: flex; flex-direction: row; width: 100%"
>
<div class="time_item_left">
<div>{{ item.milestoneName }}</div>
</div>
<div class="time_item_center">
<!-- status: 1 完成 ,2 异常 , 3 未到达 -->
<div
v-if="compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="!compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #8a8a8a',
background: '#8a8a8a',
}"
></div>
<div
v-if="item.milestoneTime == null"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<!-- <div
v-if="item.status == 1"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="item.status == 2"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<div
v-if="item.status == 3"
class="time_item_dot"
:style="{ border: '2px solid #8a8a8a' }"
></div> -->
<!-- 线条颜色逻辑: 判断当前节点的下一个节点的状态,如果status === 3,未到达,则当前节点的线条为#8a8a8a,否则当前节点线条为#54aeed -->
<div
v-if="index < timeLineDataList2.length - 1"
class="time_item_line"
:style="{
borderLeftColor: !compareTime(
timeLineDataList2[index + 1].milestoneTime
)
? '#8a8a8a'
: '#54aeed',
}"
></div>
</div>
<div class="time_item_right">
<div>{{ item.milestoneTime }}</div>
</div>
</div>
</div>
</el-card>
</div>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
// import{kkk}from "@/static/web/viewer.mjs" // import{kkk}from "@/static/web/viewer.mjs"
import { import {
milestonesGetList,
} from "@/api/indexzc";
import {
selWtqdFZ, selWtqdFZ,
selFile, selFile,
downloadObject, downloadObject,
...@@ -252,6 +439,36 @@ import { Loading } from 'element-ui'; ...@@ -252,6 +439,36 @@ import { Loading } from 'element-ui';
export default { export default {
data() { data() {
return { return {
timeLineDataList1: [
// {
// milestoneTime: "2021-10",
// milestoneName: "中标日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "合同生效日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "启动计划开始日期",
// status: 2,
// },
],
timeLineDataList2: [
// {
// milestoneTime: "2021-10",
// milestoneName: "启动实际结束日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "系统开发实际结束日期",
// status: 1,
// },
],
showMilestone: false,
resimg: '', resimg: '',
dialogFullScreen: false, dialogFullScreen: false,
valuesel: '', valuesel: '',
...@@ -311,11 +528,113 @@ export default { ...@@ -311,11 +528,113 @@ export default {
} }
}, },
mounted() { mounted() {
this.getMilestonesList();
this.clqparams = JSON.parse(this.$route.query.clqparams) this.clqparams = JSON.parse(this.$route.query.clqparams)
this.projectName = this.$route.query.projectName this.projectName = this.$route.query.projectName
this.init(this.clqparams) this.init(this.clqparams)
}, },
methods: { methods: {
compareTime(time) {
const date = new Date(time).setHours(0, 0, 0, 0);
const today = new Date().setHours(0, 0, 0, 0);
return date <= today; // 头一天或者当天
},
async getMilestonesList() {
const { projectId, contractNumber } = JSON.parse(
this.$route.query.clqparams
);
const params = {
projectCode: projectId,
contractNumber: contractNumber
// projectCode: "7322XT23005C", // projectId
// contractNumber: "SGLNXT00DKXX2310552", // contractNumber
};
const res = await milestonesGetList(params);
if (res.data.code === 200) {
// const mockdata = {
// code: 200,
// msg: "操作成功!",
// data: {
// dataList2: [
// {
// milestoneName: "启动实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "成果评审实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "试运行验收实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "结算实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "决算实际结束日期",
// milestoneTime: "2025-12-31",
// },
// {
// milestoneName: "转资实际结束日期",
// milestoneTime: "2025-12-31",
// },
// ],
// dataList1: [
// {
// milestoneName: "中标日期",
// milestoneTime: "2023-11-10",
// },
// {
// milestoneName: "合同生效日期",
// milestoneTime: "2023-12-06",
// },
// {
// milestoneName: "启动计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "成果评审计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "竣工验收计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "结算计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "决算计划开始日期",
// milestoneTime: "2025-12-31",
// },
// {
// milestoneName: "转资计划开始日期",
// milestoneTime: "2025-12-31",
// },
// ],
// },
// failed: false,
// };
const { dataList1, dataList2 } = res.data.data;
dataList1.forEach((item, index) => {
item["key"] = index + 1;
});
dataList2.forEach((item, index) => {
item["key"] = index + 1;
});
console.log(66666, dataList1, dataList2);
this.timeLineDataList1 = dataList1;
this.timeLineDataList2 = dataList2;
} else {
this.$message.error(res.data.msg)
}
},
showMilestoneDialog() {
this.showMilestone = true;
},
zhanshi() { zhanshi() {
this.dialogzhanshi = true this.dialogzhanshi = true
}, },
...@@ -832,6 +1151,49 @@ export default { ...@@ -832,6 +1151,49 @@ export default {
} }
</script> </script>
<style lang="scss">
.time_line_wrap {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
padding: 20px 10px;
}
.time_item_left {
margin-bottom: 24px;
margin-top: 1px;
flex: 60;
text-align: end;
}
.time_item_center {
display: flex;
flex-direction: column;
align-items: center;
padding: 0 12px;
}
.time_item_right {
margin-bottom: 24px;
margin-top: 2px;
flex: 40;
text-align: left;
}
.time_item_line {
position: relative;
height: calc(100% - 18px);
min-height: 20px;
border-left-width: 2px;
// border-left-color: #f2f2f3;
border-left-style: solid;
}
.time_item_dot {
// border: 2px solid #babbc0;
border-radius: 50%;
width: 18px;
height: 18px;
flex-shrink: 0;
}
</style>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
font-size: 14px; font-size: 14px;
......
...@@ -10,9 +10,16 @@ ...@@ -10,9 +10,16 @@
<div class="top" :class="dialogFullScreen ? 'noShow' : ''"> <div class="top" :class="dialogFullScreen ? 'noShow' : ''">
<el-button <el-button
type="primary" type="primary"
class="working" style="position: absolute; left: -170px"
@click="showMilestoneDialog"
>里程碑</el-button
>
<el-button
type="primary"
style="position: absolute; left: -80px"
@click="working('work')" @click="working('work')"
>智能分析</el-button> >智能分析</el-button
>
<el-steps :active="active" align-center finish-status="success"> <el-steps :active="active" align-center finish-status="success">
<el-step <el-step
v-for="item in tabList" v-for="item in tabList"
...@@ -25,8 +32,7 @@ ...@@ -25,8 +32,7 @@
<div class="content"> <div class="content">
<div class="left flex-column"> <div class="left flex-column">
<p class="tableTitle"> <p class="tableTitle">
检查内容 检查内容<i class="el-icon-full-screen" @click="zoomViewDialog"></i>
</p> </p>
<el-tabs v-model="activeName" @tab-click="handleClick"> <el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane <el-tab-pane
...@@ -52,38 +58,86 @@ ...@@ -52,38 +58,86 @@
</el-select> </el-select>
</div> </div>
<!-- <div class="pdf-container" v-if="blobType === 'pdf' || (blobType === 'doc' && options.length > 0)">
<div class="pdf-controls">
<el-button type="primary" @click="downloadPdf">下载 PDF</el-button>
<el-button type="warning" @click="zoomIn">放大</el-button>
</div>
<iframe
ref="pdfIframe"
:key="iframeUrl"
:src="iframeUrl"
frameborder="0"
:class="dialogFullScreen ? 'iframeDivBig' : 'iframeDiv'"
></iframe>
</div> -->
<iframe <iframe
v-if="blobType == 'pdf' || (blobType == 'doc' && options.length > 0)" v-if="
blobType == 'pdf' || (blobType == 'doc' && options.length > 0)
"
:key="iframeUrl" :key="iframeUrl"
:src="iframeUrl" :src="iframeUrl"
frameborder="0" frameborder="0"
:class="dialogFullScreen ? 'iframeDivBig' : 'iframeDiv'" :class="dialogFullScreen ? 'iframeDivBig' : 'iframeDiv'"
></iframe> ></iframe>
<div v-else-if="blobType == 'png' || blobType == 'jpg'" class="blobImg"> <div
v-else-if="blobType == 'png' || blobType == 'jpg'"
class="blobImg"
>
<img :src="iframeUrl" alt="" /> <img :src="iframeUrl" alt="" />
</div> </div>
<div class="docDiv" v-else-if="blobType == 'docx' && options.length > 0"> <div
class="docDiv"
v-else-if="blobType == 'docx' && options.length > 0"
>
<div :ref="`word`" :id="`word${item.typeCode}`"></div> <div :ref="`word`" :id="`word${item.typeCode}`"></div>
</div> </div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<div class="right flex-column"> <div class="right flex-column">
<p class="tableTitle">检查项 <i class="el-icon-full-screen" @click="dialogFullScreen = !dialogFullScreen"></i></p> <p class="tableTitle">
检查项
<i
class="el-icon-full-screen"
@click="dialogFullScreen = !dialogFullScreen"
></i>
</p>
<div :class="dialogFullScreen ? 'rightscollBig' : 'rightscoll'"> <div :class="dialogFullScreen ? 'rightscollBig' : 'rightscoll'">
<div class="rightContent" v-for="item in questionList" :key="item.questionId"> <div
<h3>{{ item.questionId }}.{{ item.quesCheckItem }} <el-tooltip class="item" effect="dark" :content="item.checkDesc" placement="right-end"> class="rightContent"
<i class="el-icon-info"></i></el-tooltip> </h3> v-for="item in questionList"
:key="item.questionId"
>
<h3>
{{ item.questionId }}.{{ item.quesCheckItem }}
<el-tooltip
v-if="item.checkDesc !== ''"
class="item"
effect="dark"
:content="item.checkDesc"
placement="right-end"
>
<i class="el-icon-info"></i
></el-tooltip>
</h3>
<p class="msg"> <p class="msg">
<!-- {{ item.checkDesc }} --> <!-- {{ item.checkDesc }} -->
<el-button <el-button
type="primary" type="primary"
v-if="item.checkDesc == '可研中的需求内容应与业务需求报告中的需求匹配' && wtmx" v-if="
@click="zhanshi()" item.checkDesc ==
'可研中的需求内容应与业务需求报告中的需求匹配' && wtmx
"
@click="zanShi()"
>匹配展示</el-button >匹配展示</el-button
> >
</p> </p>
<div class="quesznfx" v-if="item.znfxList && item.znfxList.length > 0"> <div
class="quesznfx"
v-if="item.znfxList && item.znfxList.length > 0"
>
<p class="tips">智能分析:</p> <p class="tips">智能分析:</p>
<!-- <p>{{ item.znfxList[0].projectStage }}</p> --> <!-- <p>{{ item.znfxList[0].projectStage }}</p> -->
...@@ -115,9 +169,16 @@ ...@@ -115,9 +169,16 @@
</span> </span>
</span> </span>
</div> </div>
<div class="quesznfx" v-if="item.fzfxList && item.fzfxList.length > 0"> <div
class="quesznfx"
v-if="item.fzfxList && item.fzfxList.length > 0"
>
<p class="tips">辅助分析:</p> <p class="tips">辅助分析:</p>
<div v-for="(itemfz, index) in item.fzfxList" :key="index" class="inputDiv"> <div
v-for="(itemfz, index) in item.fzfxList"
:key="index"
class="inputDiv"
>
<el-input <el-input
type="textarea" type="textarea"
:autosize="{ minRows: 1, maxRows: 4 }" :autosize="{ minRows: 1, maxRows: 4 }"
...@@ -135,7 +196,11 @@ ...@@ -135,7 +196,11 @@
</div> </div>
<div class="question"> <div class="question">
<p class="tips">问题描述:</p> <p class="tips">问题描述:</p>
<div v-for="(items, index) in item.evalList" :key="index" class="inputDiv"> <div
v-for="(items, index) in item.evalList"
:key="index"
class="inputDiv"
>
<el-input <el-input
type="textarea" type="textarea"
:autosize="{ minRows: 1, maxRows: 4 }" :autosize="{ minRows: 1, maxRows: 4 }"
...@@ -144,7 +209,9 @@ ...@@ -144,7 +209,9 @@
:disabled="items.disabled" :disabled="items.disabled"
> >
</el-input </el-input
><el-button @click="delInput(item, index)" type="primary">删除</el-button> ><el-button @click="delInput(item, index)" type="primary"
>删除</el-button
>
<el-upload <el-upload
class="upload_box" class="upload_box"
...@@ -154,7 +221,7 @@ ...@@ -154,7 +221,7 @@
:on-change="handleEditChange" :on-change="handleEditChange"
:http-request=" :http-request="
(res) => { (res) => {
return fileupdate(res, items) return fileupdate(res, items);
} }
" "
:before-upload="beforeAvatarUpload" :before-upload="beforeAvatarUpload"
...@@ -166,12 +233,21 @@ ...@@ -166,12 +233,21 @@
action="" action=""
> >
<!-- 加号标识 --> <!-- 加号标识 -->
<el-button class="upload_btn" slot="trigger" size="small" type="primary"> <el-button
class="upload_btn"
slot="trigger"
size="small"
type="primary"
>
上传截图 上传截图
</el-button> </el-button>
<!-- 上传后显示 --> <!-- 上传后显示 -->
<div slot="file" slot-scope="{ file }"> <div slot="file" slot-scope="{ file }">
<img class="el-upload-list__item-thumbnail" :src="file.url" alt="" /> <img
class="el-upload-list__item-thumbnail"
:src="file.url"
alt=""
/>
<span class="el-upload-list__item-actions"> <span class="el-upload-list__item-actions">
<!-- 图片放大 --> <!-- 图片放大 -->
<span <span
...@@ -217,12 +293,12 @@ ...@@ -217,12 +293,12 @@
</div> </div>
</div> </div>
<p class="Btn"> <p class="Btn">
<span @click="cancel()">取消</span><span @click="save('3', active)">保存</span> <span @click="cancel()">取消</span
><span @click="save('3', active)">保存</span>
<span @click="submitNexts()">提交</span> <span @click="submitNexts()">提交</span>
</p> </p>
</div> </div>
</div> </div>
<el-dialog <el-dialog
:visible.sync="dialogzhanshi" :visible.sync="dialogzhanshi"
title="匹配展示" title="匹配展示"
...@@ -232,13 +308,250 @@ ...@@ -232,13 +308,250 @@
> >
<div v-html="wtmx" class="dialogscroll"></div> <div v-html="wtmx" class="dialogscroll"></div>
</el-dialog> </el-dialog>
<el-dialog
:visible.sync="showZoomViewDialog"
title="检查内容"
width="90%"
:modal-append-to-body="true"
:append-to-body="true"
:fullscreen="true"
>
<!-- TODO -->
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
v-for="item in tabListKY"
:key="item.typeText"
:label="item.typeText"
:name="item.typeCode"
>
<div class="opt" v-show="options.length > 0">
<el-select
v-model="valuesel"
clearable
placeholder="请选择"
@change="(val) => changexm(val, item.typeCode)"
>
<el-option
v-for="(item, index) in options"
:key="item.name"
:label="item.name"
:value="index"
>
</el-option>
</el-select>
</div>
<iframe
v-if="
blobType == 'pdf' || (blobType == 'doc' && options.length > 0)
"
:key="iframeUrl"
:src="iframeUrl"
frameborder="0"
:class="dialogFullScreen ? 'iframeDivBig' : 'iframeDiv'"
></iframe>
<div
v-else-if="blobType == 'png' || blobType == 'jpg'"
class="blobImg"
>
<img :src="iframeUrl" alt="" />
</div>
<div
class="docDiv"
v-else-if="blobType == 'docx' && options.length > 0"
>
<div :ref="`word`" :id="`word${item.typeCode}`"></div>
</div>
</el-tab-pane>
</el-tabs>
<!-- TODO -->
</el-dialog>
<el-dialog
:visible.sync="showMilestone"
title="项目里程碑"
width="90%"
:modal-append-to-body="false"
:append-to-body="false"
>
<div style="height: 65vh; display: flex; flex-direction: row; gap: 10px">
<div style="flex: 1">
<el-card style="height: 100%">
<div
style="background-color: #0d867f; color: #fff; font-size: 18px"
>
项目计划里程碑
</div>
<div class="time_line_wrap">
<div
v-for="(item, index) in timeLineDataList1"
:key="index"
style="display: flex; flex-direction: row; width: 100%"
>
<div class="time_item_left">
<div>{{ item.milestoneName }}</div>
</div>
<div class="time_item_center">
<!-- status: 1 完成 ,2 异常 , 3 未到达 -->
<div
v-if="compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="!compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #8a8a8a',
background: '#8a8a8a',
}"
></div>
<div
v-if="item.milestoneTime == null"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<!-- <div
v-if="item.status == 1"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="item.status == 2"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<div
v-if="item.status == 3"
class="time_item_dot"
:style="{ border: '2px solid #8a8a8a' }"
></div> -->
<!-- 线条颜色逻辑: 判断当前节点的下一个节点的状态,如果status === 3,未到达,则当前节点的线条为#8a8a8a,否则当前节点线条为#54aeed -->
<div
v-if="index < timeLineDataList1.length - 1"
class="time_item_line"
:style="{
borderLeftColor: !compareTime(
timeLineDataList1[index + 1].milestoneTime
)
? '#8a8a8a'
: '#54aeed',
}"
></div>
</div>
<div class="time_item_right">
<div>{{ item.milestoneTime }}</div>
</div>
</div>
</div>
</el-card>
</div>
<div style="flex: 1">
<el-card style="height: 100%">
<div
style="background-color: #0d867f; color: #fff; font-size: 18px"
>
项目实际里程碑
</div>
<div class="time_line_wrap">
<div
v-for="(item, index) in timeLineDataList2"
:key="index"
style="display: flex; flex-direction: row; width: 100%"
>
<div class="time_item_left">
<div>{{ item.milestoneName }}</div>
</div>
<div class="time_item_center">
<!-- status: 1 完成 ,2 异常 , 3 未到达 -->
<div
v-if="compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="!compareTime(item.milestoneTime)"
class="time_item_dot"
:style="{
border: '2px solid #8a8a8a',
background: '#8a8a8a',
}"
></div>
<div
v-if="item.milestoneTime == null"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<!-- <div
v-if="item.status == 1"
class="time_item_dot"
:style="{
border: '2px solid #54aeed',
background: '#54aeed',
}"
></div>
<div
v-if="item.status == 2"
class="time_item_dot"
:style="{
border: '2px solid #eba84b',
background: '#eba84b',
}"
></div>
<div
v-if="item.status == 3"
class="time_item_dot"
:style="{ border: '2px solid #8a8a8a' }"
></div> -->
<!-- 线条颜色逻辑: 判断当前节点的下一个节点的状态,如果status === 3,未到达,则当前节点的线条为#8a8a8a,否则当前节点线条为#54aeed -->
<div
v-if="index < timeLineDataList2.length - 1"
class="time_item_line"
:style="{
borderLeftColor: !compareTime(
timeLineDataList2[index + 1].milestoneTime
)
? '#8a8a8a'
: '#54aeed',
}"
></div>
</div>
<div class="time_item_right">
<div>{{ item.milestoneTime }}</div>
</div>
</div>
</div>
</el-card>
</div>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { Loading } from 'element-ui'; import { Loading } from "element-ui";
// import{kkk}from "@/static/web/viewer.mjs" // import{kkk}from "@/static/web/viewer.mjs"
import { import {
milestonesGetList,
selWtqdFZ, selWtqdFZ,
selFile, selFile,
downloadObject, downloadObject,
...@@ -248,54 +561,189 @@ import { ...@@ -248,54 +561,189 @@ import {
ossupload, ossupload,
presignedUrl, presignedUrl,
selFileList, selFileList,
} from '@/api/indexzc' } from "@/api/indexzc";
import { MaterialsListKY } from '@/utils/cache' import { MaterialsListKY } from "@/utils/cache";
export default { export default {
data() { data() {
return { return {
resimg: '', timeLineDataList1: [
// {
// milestoneTime: "2021-10",
// milestoneName: "中标日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "合同生效日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "启动计划开始日期",
// status: 2,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "系统开发计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "资源申请计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "第三方测试计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "架构审查计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "漏洞扫描计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "上线试运行计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "试运行验收计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "竣工验收计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "结算计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "决算计划开始日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "转资计划开始日期",
// status: 3,
// },
],
timeLineDataList2: [
// {
// milestoneTime: "2021-10",
// milestoneName: "启动实际结束日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "系统开发实际结束日期",
// status: 1,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "资源申请实际结束日期",
// status: 2,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "第三方测试实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "架构审查实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "漏洞扫描实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "上线试运行实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "试运行验收实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "竣工验收实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "结算实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "决算实际结束日期",
// status: 3,
// },
// {
// milestoneTime: "2021-10",
// milestoneName: "转资实际结束日期",
// status: 3,
// },
],
showMilestone: false,
resimg: "",
dialogFullScreen: false, dialogFullScreen: false,
valuesel: '', valuesel: "",
options: [], options: [],
dialogImageUrl: '', dialogImageUrl: "",
fileList: [], fileList: [],
evalList: [ evalList: [
{ {
evalQues: '', evalQues: "",
hideUploadEdit: false, hideUploadEdit: false,
}, },
], ],
tabList: [ tabList: [
{ label: '可研', id: 0 }, { label: "可研", id: 0 },
// { label: "计划", id: 1 }, // { label: "计划", id: 1 },
{ label: '采购', id: 2 }, { label: "采购", id: 2 },
{ label: '合同', id: 3 }, { label: "合同", id: 3 },
{ label: '执行', id: 4 }, { label: "执行", id: 4 },
{ label: '结决算及转资', id: 5 }, { label: "结决算及转资", id: 5 },
], ],
tabListKY: [], tabListKY: [],
active: 0, active: 0,
activeName: '0', activeName: "0",
clqparams: {}, clqparams: {},
iframeUrl: '', iframeUrl: "",
urlList: [], urlList: [],
questionList: [], questionList: [],
file: '', file: "",
dialogVisible: false, dialogVisible: false,
fullURL: '', fullURL: "",
hideUploadEdit: false, hideUploadEdit: false,
limitNum: 1, limitNum: 1,
disabled: false, disabled: false,
oldQuestionList: [], //对比列表 oldQuestionList: [], //对比列表
blobType: 'pdf', //bolb类型 blobType: "pdf", //bolb类型
projectName: '', projectName: "",
valuesel: '', valuesel: "",
dialogzhanshi: false, dialogzhanshi: false,
wtmx: '', wtmx: "",
hgx:"", hgx: "",
showZoomViewDialog: false,
docxOptions: { docxOptions: {
className: 'kaimo-docx-666', // string:默认和文档样式类的类名/前缀 className: "kaimo-docx-666", // string:默认和文档样式类的类名/前缀
inWrapper: false, // boolean:启用围绕文档内容的包装器渲染 inWrapper: false, // boolean:启用围绕文档内容的包装器渲染
ignoreWidth: false, // boolean:禁用页面的渲染宽度 ignoreWidth: false, // boolean:禁用页面的渲染宽度
ignoreHeight: false, // boolean:禁止渲染页面高度 ignoreHeight: false, // boolean:禁止渲染页面高度
...@@ -309,523 +757,727 @@ export default { ...@@ -309,523 +757,727 @@ export default {
showChanges: false, // boolean:启用文档更改的实验性渲染(插入/删除) showChanges: false, // boolean:启用文档更改的实验性渲染(插入/删除)
debug: false, // boolean:启用额外的日志记录 debug: false, // boolean:启用额外的日志记录
}, },
} };
}, },
mounted() { mounted() {
this.clqparams = JSON.parse(this.$route.query.clqparams) this.getMilestonesList();
this.projectName = this.$route.query.projectName this.clqparams = JSON.parse(this.$route.query.clqparams);
this.init(this.clqparams) this.projectName = this.$route.query.projectName;
this.init(this.clqparams);
}, },
methods: { methods: {
zhanshi() { compareTime(time) {
this.dialogzhanshi = true const date = new Date(time).setHours(0, 0, 0, 0);
const today = new Date().setHours(0, 0, 0, 0);
return date <= today; // 头一天或者当天
},
async getMilestonesList() {
const { projectId, contractNumber } = JSON.parse(
this.$route.query.clqparams
);
const params = {
projectCode: projectId,
contractNumber: contractNumber
// projectCode: "7322XT23005C", // projectId
// contractNumber: "SGLNXT00DKXX2310552", // contractNumber
};
const res = await milestonesGetList(params);
if (res.data.code === 200) {
// const mockdata = {
// code: 200,
// msg: "操作成功!",
// data: {
// dataList2: [
// {
// milestoneName: "启动实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "成果评审实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "试运行验收实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "结算实际结束日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "决算实际结束日期",
// milestoneTime: "2025-12-31",
// },
// {
// milestoneName: "转资实际结束日期",
// milestoneTime: "2025-12-31",
// },
// ],
// dataList1: [
// {
// milestoneName: "中标日期",
// milestoneTime: "2023-11-10",
// },
// {
// milestoneName: "合同生效日期",
// milestoneTime: "2023-12-06",
// },
// {
// milestoneName: "启动计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "成果评审计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "竣工验收计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "结算计划开始日期",
// milestoneTime: "2024-12-31",
// },
// {
// milestoneName: "决算计划开始日期",
// milestoneTime: "2025-12-31",
// },
// {
// milestoneName: "转资计划开始日期",
// milestoneTime: "2025-12-31",
// },
// ],
// },
// failed: false,
// };
const { dataList1, dataList2 } = res.data.data;
dataList1.forEach((item, index) => {
item["key"] = index + 1;
});
dataList2.forEach((item, index) => {
item["key"] = index + 1;
});
console.log(66666, dataList1, dataList2);
this.timeLineDataList1 = dataList1;
this.timeLineDataList2 = dataList2;
} else {
this.$message.error(res.data.msg)
}
},
showMilestoneDialog() {
this.showMilestone = true;
},
zoomViewDialog() {
this.showZoomViewDialog = true;
},
downloadPdf() {
const link = document.createElement("a");
link.href = this.iframeUrl;
link.download = "document.pdf";
link.click();
},
zoomIn() {
const iframe = this.$refs.pdfIframe[0];
const pdfWindow = iframe.contentWindow;
console.log("pdfWindow", iframe, pdfWindow);
// 假设 PDF.js 已经加载并且可以访问
if (pdfWindow.PDFViewerApplication) {
pdfWindow.PDFViewerApplication.zoomIn(); // 调用 PDF.js 的放大方法
} else {
console.error("PDF.js is not loaded.");
window.open(this.iframeUrl);
}
},
zanShi() {
this.dialogzhanshi = true;
}, },
//提交问题清单 //提交问题清单
async submitNexts() { async submitNexts() {
this.$confirm('您确定检查完所有流程并去提交?', '提示', { this.$confirm("您确定检查完所有流程并去提交?", "提示", {
confirmButtonText: '是', confirmButtonText: "是",
cancelButtonText: '继续检查', cancelButtonText: "继续检查",
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
type: 'warning', type: "warning",
}) })
.then(() => { .then(() => {
this.save(2) this.save(2);
}) })
.catch((action) => {}) .catch((action) => {});
}, },
// 放大图片 // 放大图片
handlePictureCardPreview(file) { handlePictureCardPreview(file) {
console.log('点击放大') console.log("点击放大");
this.dialogImageUrl = file this.dialogImageUrl = file;
this.dialogVisible = true this.dialogVisible = true;
}, },
// 删除图片 // 删除图片
handleRemove(file, fileList) { handleRemove(file, fileList) {
console.log(fileList, 'this.fileList') console.log(fileList, "this.fileList");
if (this.fileList.length == 0) { if (this.fileList.length == 0) {
this.fileList = [] this.fileList = [];
} else { } else {
let dl = this.fileList.indexOf(file) let dl = this.fileList.indexOf(file);
this.fileList.splice(dl, 1) this.fileList.splice(dl, 1);
} }
this.hideUploadEdit = this.fileList.length >= this.limitNum this.hideUploadEdit = this.fileList.length >= this.limitNum;
}, },
// on-change添加文件,上传成功和上传失败时都会被调用 // on-change添加文件,上传成功和上传失败时都会被调用
handleEditChange(file, fileList) { handleEditChange(file, fileList) {
this.hideUploadEdit = fileList.length >= this.limitNum this.hideUploadEdit = fileList.length >= this.limitNum;
}, },
// http-request自定义上传 // http-request自定义上传
ImgUploadSectionFile(param) { ImgUploadSectionFile(param) {
this.param = param this.param = param;
}, },
// before-upload上传文件之前的钩子,参数为上传的文件 // before-upload上传文件之前的钩子,参数为上传的文件
// 若返回 false 或者返回 Promise 且被 reject,则停止上传 // 若返回 false 或者返回 Promise 且被 reject,则停止上传
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
this.file = file this.file = file;
const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' const isJPG = file.type === "image/jpeg" || file.type === "image/png";
const isLt2M = this.file.size / 1024 < 1000 const isLt2M = this.file.size / 1024 < 1000;
console.log(this.file.size / 1024, 'this.file.size this.file.size ') console.log(this.file.size / 1024, "this.file.size this.file.size ");
if (!isJPG) { if (!isJPG) {
this.$message.error('上传图片只能是 JPG 或 PNG 格式!') this.$message.error("上传图片只能是 JPG 或 PNG 格式!");
this.hideUploadEdit = false this.hideUploadEdit = false;
} }
if (!isLt2M) { if (!isLt2M) {
this.hideUploadEdit = false this.hideUploadEdit = false;
this.$message.error('上传图片大小不能超过 1000k!') this.$message.error("上传图片大小不能超过 1000k!");
} }
return isJPG && isLt2M return isJPG && isLt2M;
}, },
// 文件上传成功时的钩子 // 文件上传成功时的钩子
handleSuccess(file) { handleSuccess(file) {
// console.log(file); // console.log(file);
const data = file.data const data = file.data;
//然后数据、逻辑处理 //然后数据、逻辑处理
}, },
showFullScreen() { showFullScreen() {
console.log(this.fileList, '4444') console.log(this.fileList, "4444");
this.fullURL = this.fileList[0].url this.fullURL = this.fileList[0].url;
this.dialogVisible = true this.dialogVisible = true;
}, },
handleExceed() { handleExceed() {
this.$message.warning(`只能选择一张图片`) this.$message.warning(`只能选择一张图片`);
}, },
changexm(row, typeCode) { changexm(row, typeCode) {
this.downloadObject(this.options[row], typeCode) this.downloadObject(this.options[row], typeCode);
console.log(row, '换文件') console.log(row, "换文件");
}, },
async init(type) { async init(type) {
let params = { let params = {
projectStage: this.active * 1 + 1, projectStage: this.active * 1 + 1,
...type, ...type,
} };
Promise.all([selFile(params), selWtqdFZ(params)]).then(async (res) => { Promise.all([selFile(params), selWtqdFZ(params)]).then(async (res) => {
this.tabListKY = [] this.tabListKY = [];
this.urlList = res[0].data this.urlList = res[0].data;
if (this.urlList.length > 0) { if (this.urlList.length > 0) {
this.urlList.forEach((item) => { this.urlList.forEach((item) => {
this.tabListKY.push({ this.tabListKY.push({
typeText: item.materialName, typeText: item.materialName,
typeCode: item.mid, typeCode: item.mid,
}) });
}) });
this.activeName = this.tabListKY[0].typeCode this.activeName = this.tabListKY[0].typeCode;
let resList = await selFileList({ let resList = await selFileList({
...params, ...params,
typeCode: this.tabListKY[0].typeCode, typeCode: this.tabListKY[0].typeCode,
}) });
this.options = resList.data || [] this.options = resList.data || [];
if (this.options.length > 0) { if (this.options.length > 0) {
this.valuesel = this.options[0].name this.valuesel = this.options[0].name;
this.downloadObject(this.options[0], this.tabListKY[0].typeCode) this.downloadObject(this.options[0], this.tabListKY[0].typeCode);
} else { } else {
this.blobType = 'png' this.blobType = "png";
this.iframeUrl = '/nopdf.png' this.iframeUrl = "/nopdf.png";
} }
} }
if (res[1].data) { if (res[1].data) {
this.questionList = res[1].data.records this.questionList = res[1].data.records;
this.wtmx = res[1].data.MapkyXqfx this.wtmx = res[1].data.MapkyXqfx;
let counterNum = 0 let counterNum = 0;
this.questionList.forEach(async (item) => { this.questionList.forEach(async (item) => {
if (item.isProblem == 0) { if (item.isProblem == 0) {
this.$set(item, 'checked', true) this.$set(item, "checked", true);
this.changeChecked(item) this.changeChecked(item);
} }
let respon = await selWtmx({ qid: item.qid }) let respon = await selWtmx({ qid: item.qid });
counterNum++ counterNum++;
if (respon.data.records && respon.data.records.length > 0) { if (respon.data.records && respon.data.records.length > 0) {
respon.data.records.forEach(async (itemImg) => { respon.data.records.forEach(async (itemImg) => {
if (itemImg.url) { if (itemImg.url) {
let paramsImg = { let paramsImg = {
fileId: itemImg.id, fileId: itemImg.id,
url: itemImg.url, url: itemImg.url,
} };
let resUrl = await presignedUrl(paramsImg) let resUrl = await presignedUrl(paramsImg);
this.$set(itemImg, 'fileList', [ this.$set(itemImg, "fileList", [
{ {
url: resUrl.msg, url: resUrl.msg,
}, },
]) ]);
itemImg.hideUploadEdit = true itemImg.hideUploadEdit = true;
} else { } else {
itemImg.hideUploadEdit = false itemImg.hideUploadEdit = false;
} }
}) });
this.$set(item, 'evalList', [...respon.data.records]) this.$set(item, "evalList", [...respon.data.records]);
} else { } else {
this.$set(item, 'evalList', [ this.$set(item, "evalList", [
{ {
evalQues: '', evalQues: "",
hideUploadEdit: false, hideUploadEdit: false,
}, },
]) ]);
} }
if (counterNum == this.questionList.length) { if (counterNum == this.questionList.length) {
setTimeout(() => { setTimeout(() => {
this.oldQuestionList = JSON.parse(JSON.stringify(this.questionList)) this.oldQuestionList = JSON.parse(
}, 300) JSON.stringify(this.questionList)
);
}, 300);
} }
}) });
} }
}) });
}, },
working(type){ working(type) {
let options={ let options = {
fullscreen: true, fullscreen: true,
spinner: 'el-icon-loading', spinner: "el-icon-loading",
customClass: 'iam-loading', customClass: "iam-loading",
text:"智能分析中,请耐心等候...", //显示在加载图标下方的加载文案 text: "智能分析中,请耐心等候...", //显示在加载图标下方的加载文案
background:'rgba(0,0,0,.7)', //遮罩背景色 background: "rgba(0,0,0,.7)", //遮罩背景色
};
} console.log(2222, this.clqparams);
let params = { let params = {
projectStage: this.active * 1 + 1, projectStage: this.active * 1 + 1,
// hgx: 'hgx', // hgx: 'hgx',
...this.clqparams, ...this.clqparams,
} };
let loadingInstance =''; let loadingInstance = "";
if(type=='work'){ if (type == "work") {
this.hgx='hgx' this.hgx = "hgx";
loadingInstance = Loading.service(options); loadingInstance = Loading.service(options);
} }
if( this.hgx='hgx'){ if ((this.hgx = "hgx")) {
params.hgx='hgx' params.hgx = "hgx";
} }
console.log(111111, params);
Promise.all([selFile(params), selWtqdFZ(params)]).then(async (res) => { Promise.all([selFile(params), selWtqdFZ(params)]).then(async (res) => {
this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭 this.$nextTick(() => {
if(type=='work'){ // 以服务的方式调用的 Loading 需要异步关闭
console.log('走了关闭') if (type == "work") {
console.log("走了关闭");
loadingInstance.close(); loadingInstance.close();
} }
}); });
this.tabListKY = [] this.tabListKY = [];
this.urlList = res[0].data this.urlList = res[0].data;
if (this.urlList.length > 0) { if (this.urlList.length > 0) {
this.urlList.forEach((item) => { this.urlList.forEach((item) => {
this.tabListKY.push({ this.tabListKY.push({
typeText: item.materialName, typeText: item.materialName,
typeCode: item.mid, typeCode: item.mid,
}) });
}) });
this.activeName = this.tabListKY[0].typeCode this.activeName = this.tabListKY[0].typeCode;
let resList = await selFileList({ let resList = await selFileList({
...params, ...params,
typeCode: this.tabListKY[0].typeCode, typeCode: this.tabListKY[0].typeCode,
}) });
this.options = resList.data || [] this.options = resList.data || [];
if (this.options.length > 0) { if (this.options.length > 0) {
this.valuesel = this.options[0].name this.valuesel = this.options[0].name;
this.downloadObject(this.options[0], this.tabListKY[0].typeCode) this.downloadObject(this.options[0], this.tabListKY[0].typeCode);
} else { } else {
this.blobType = 'png' this.blobType = "png";
this.iframeUrl = '/nopdf.png' this.iframeUrl = "/nopdf.png";
} }
} else { } else {
// this.iframeUrl = "/nopdf.png"; // this.iframeUrl = "/nopdf.png";
} }
if (res[1].data) { if (res[1].data) {
this.questionList = res[1].data.records this.questionList = res[1].data.records;
this.wtmx = res[1].data.MapkyXqfx this.wtmx = res[1].data.MapkyXqfx;
let counterNum = 0 let counterNum = 0;
this.questionList.forEach(async (item) => { this.questionList.forEach(async (item) => {
if (item.isProblem == 0) { if (item.isProblem == 0) {
this.$set(item, 'checked', true) this.$set(item, "checked", true);
this.changeChecked(item) this.changeChecked(item);
} }
let respon = await selWtmx({ qid: item.qid }) let respon = await selWtmx({ qid: item.qid });
let paramsFX = { let paramsFX = {
batchId: this.clqparams.batchId, batchId: this.clqparams.batchId,
projectId: this.clqparams.projectId, projectId: this.clqparams.projectId,
projectStage: item.questionId, projectStage: item.questionId,
} };
let responfx = await selZnfx(paramsFX) let responfx = await selZnfx(paramsFX);
counterNum++ counterNum++;
if (respon.data.records && respon.data.records.length > 0) { if (respon.data.records && respon.data.records.length > 0) {
respon.data.records.forEach(async (itemImg) => { respon.data.records.forEach(async (itemImg) => {
if (itemImg.url) { if (itemImg.url) {
let paramsImg = { let paramsImg = {
fileId: itemImg.id, fileId: itemImg.id,
url: itemImg.url, url: itemImg.url,
} };
let resUrl = await presignedUrl(paramsImg) let resUrl = await presignedUrl(paramsImg);
this.$set(itemImg, 'fileList', [ this.$set(itemImg, "fileList", [
{ {
url: resUrl.msg, url: resUrl.msg,
}, },
]) ]);
itemImg.hideUploadEdit = true itemImg.hideUploadEdit = true;
} else { } else {
itemImg.hideUploadEdit = false itemImg.hideUploadEdit = false;
} }
}) });
this.$set(item, 'evalList', [...respon.data.records]) this.$set(item, "evalList", [...respon.data.records]);
} else { } else {
this.$set(item, 'evalList', [ this.$set(item, "evalList", [
{ {
evalQues: '', evalQues: "",
hideUploadEdit: false, hideUploadEdit: false,
}, },
]) ]);
} }
if (responfx.data.records && responfx.data.records.length > 0) { if (responfx.data.records && responfx.data.records.length > 0) {
let znfxList = responfx.data.records.filter(async (item) => { let znfxList = responfx.data.records.filter(async (item) => {
if (item.projectStage == '14') { if (item.projectStage == "14") {
let paramsImg = { let paramsImg = {
url: item.checkDesc, url: item.checkDesc,
} };
let resUrl = await presignedUrl(paramsImg) let resUrl = await presignedUrl(paramsImg);
this.resimg = resUrl.msg this.resimg = resUrl.msg;
} }
if (item.checkDesc && item.type == 0) { if (item.checkDesc && item.type == 0) {
item.checkDesc = item.checkDesc.replace(/\n/g, '<br>') item.checkDesc = item.checkDesc.replace(/\n/g, "<br>");
} }
return item.checkDesc && item.type == 0 return item.checkDesc && item.type == 0;
}) });
this.$set(item, 'znfxList', [...znfxList]) this.$set(item, "znfxList", [...znfxList]);
let resfxList = responfx.data.records.filter((item) => { let resfxList = responfx.data.records.filter((item) => {
return item.type == 1 || item.type == 2 return item.type == 1 || item.type == 2;
}) });
if (resfxList && resfxList.length > 0) { if (resfxList && resfxList.length > 0) {
let fzfxList = resfxList[0].checkDesc.split('\n') let fzfxList = resfxList[0].checkDesc.split("\n");
this.$set(item, 'fzfxList', [...fzfxList]) this.$set(item, "fzfxList", [...fzfxList]);
} }
} else { } else {
this.$set(item, 'znfxList', []) this.$set(item, "znfxList", []);
this.$set(item, 'fzfxList', []) this.$set(item, "fzfxList", []);
} }
if (counterNum == this.questionList.length) { if (counterNum == this.questionList.length) {
setTimeout(() => { setTimeout(() => {
this.oldQuestionList = JSON.parse(JSON.stringify(this.questionList)) this.oldQuestionList = JSON.parse(
}, 300) JSON.stringify(this.questionList)
);
}, 300);
} }
}) });
} }
}) });
}, },
async downloadObject(row, code) { async downloadObject(row, code) {
this.iframeUrl = '' this.iframeUrl = "";
this.blobType = '' this.blobType = "";
let resUrl = await downloadObject({ fileId: row.id }) let resUrl = await downloadObject({ fileId: row.id });
if (this.blobType == '') { if (this.blobType == "") {
this.blobType = row.suffix this.blobType = row.suffix;
} }
const binaryData = [] const binaryData = [];
binaryData.push(resUrl) binaryData.push(resUrl);
let URL = window.URL.createObjectURL(new Blob(binaryData, { type: 'application/pdf' })) let URL = window.URL.createObjectURL(
if (this.iframeUrl == '') { new Blob(binaryData, { type: "application/pdf" })
this.iframeUrl = URL + '#view=FitH,top' );
} if (this.iframeUrl == "") {
if (this.blobType == 'docx') { this.iframeUrl = URL + "#view=Fit,top";
let docx = require('docx-preview') // this.iframeUrl = URL + "#view=FitH,top&toolbar=0";
// setTimeout(() => {
// console.log('全屏预览');
// // const binaryData = [];
// // binaryData.push(res);
// // this.pdfUrl = window.URL.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
// window.open(this.iframeUrl);
// }, 2000)
}
if (this.blobType == "docx") {
let docx = require("docx-preview");
this.$nextTick(() => { this.$nextTick(() => {
docx.renderAsync(resUrl, document.getElementById(`word${code}`), null, this.docxOptions) // 渲染到页面预览 docx.renderAsync(
}) resUrl,
document.getElementById(`word${code}`),
null,
this.docxOptions
); // 渲染到页面预览
});
} }
}, },
async handleClick(tab) { async handleClick(tab) {
let params = { let params = {
projectStage: this.active * 1 + 1, projectStage: this.active * 1 + 1,
hgx: 'hgx', hgx: "hgx",
...this.clqparams, ...this.clqparams,
} };
this.options = [] this.options = [];
this.valuesel = '' this.valuesel = "";
this.iframeUrl = '' this.iframeUrl = "";
console.log('切换', tab.index) console.log("切换", tab.index);
let resList = await selFileList({ let resList = await selFileList({
...params, ...params,
typeCode: this.tabListKY[tab.index].typeCode, typeCode: this.tabListKY[tab.index].typeCode,
}) });
this.options = resList.data || [] this.options = resList.data || [];
if (this.options.length > 0) { if (this.options.length > 0) {
this.valuesel = this.options[0].name this.valuesel = this.options[0].name;
this.downloadObject(this.options[0], this.tabListKY[tab.index].typeCode) this.downloadObject(
this.options[0],
this.tabListKY[tab.index].typeCode
);
} else { } else {
this.blobType = 'png' this.blobType = "png";
this.iframeUrl = '/nopdf.png' this.iframeUrl = "/nopdf.png";
} }
}, },
change(id) { change(id) {
console.log(this.hgx,'3') console.log(this.hgx, "3");
if (JSON.stringify(this.questionList) == JSON.stringify(this.oldQuestionList)) { if (
this.active = id * 1 JSON.stringify(this.questionList) ==
JSON.stringify(this.oldQuestionList)
) {
this.active = id * 1;
// this.tabListKY = MaterialsListKY(id * 1 + 1); // this.tabListKY = MaterialsListKY(id * 1 + 1);
// if(this.hgx=='hgx'){ // if(this.hgx=='hgx'){
// this.working(this.clqparams) // this.working(this.clqparams)
// }else{ // }else{
// this.init(this.clqparams) // this.init(this.clqparams)
// } // }
this.init(this.clqparams) this.init(this.clqparams);
return return;
} }
this.$confirm('是否保存?', '提示', { this.$confirm("是否保存?", "提示", {
confirmButtonText: '是', confirmButtonText: "是",
cancelButtonText: '否', cancelButtonText: "否",
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
type: 'warning', type: "warning",
}) })
.then(() => { .then(() => {
this.save('3', id) this.save("3", id);
}) })
.catch((action) => { .catch((action) => {
console.log(action, 'actionaction') console.log(action, "actionaction");
if (action === 'cancel') { if (action === "cancel") {
this.active = id * 1 this.active = id * 1;
// this.tabListKY = MaterialsListKY(id * 1 + 1); // this.tabListKY = MaterialsListKY(id * 1 + 1);
if(this.hgx=='hgx'){ if (this.hgx == "hgx") {
this.working(this.clqparams) this.working(this.clqparams);
}else{ } else {
this.init(this.clqparams) this.init(this.clqparams);
} }
} else { } else {
} }
}) });
}, },
delInput(item, index) { delInput(item, index) {
if (item.evalList.length <= 1) { if (item.evalList.length <= 1) {
item.checked = true item.checked = true;
this.$set(item, 'checked', true) this.$set(item, "checked", true);
this.changeChecked(item) this.changeChecked(item);
return false return false;
} }
item.evalList.splice(index, 1) item.evalList.splice(index, 1);
}, },
adopt(item, index, items) { adopt(item, index, items) {
console.log(item,'采纳') console.log(item, "采纳");
if (item.evalList.length == 1 && !item.evalList[0].evalQues) { if (item.evalList.length == 1 && !item.evalList[0].evalQues) {
item.evalList[0].evalQues = items item.evalList[0].evalQues = items;
} else { } else {
item.evalList.push({ item.evalList.push({
evalQues: items, evalQues: items,
hideUploadEdit: false, hideUploadEdit: false,
}) });
} }
}, },
addInput(item) { addInput(item) {
if (item.evalList[0].disabled == true) { if (item.evalList[0].disabled == true) {
console.log('选择了未发现问题') console.log("选择了未发现问题");
return return;
} }
item.evalList.push({ item.evalList.push({
data: '', data: "",
evalQues: '', evalQues: "",
}) });
}, },
changeChecked(item) { changeChecked(item) {
if (item.checked) { if (item.checked) {
this.$set(item, 'evalList', [ this.$set(item, "evalList", [
{ {
ideval: '', ideval: "",
evalQues: '', evalQues: "",
hideUploadEdit: false, hideUploadEdit: false,
disabled: true, disabled: true,
}, },
]) ]);
this.$set(item, 'isProblem', 0) this.$set(item, "isProblem", 0);
// this.$set(item, "Id", 0); // this.$set(item, "Id", 0);
} else { } else {
item.evalList[0].disabled = false item.evalList[0].disabled = false;
this.$set(item, 'isProblem', 1) this.$set(item, "isProblem", 1);
} }
}, },
cancel() { cancel() {
this.$router.push({ this.$router.push({
path: '/assesszc/auxiliaryInspection', path: "/assesszc/auxiliaryInspection",
}) });
}, },
async save(type, id) { async save(type, id) {
this.questionList.forEach((item) => { this.questionList.forEach((item) => {
let evals = '' let evals = "";
item.evalList.forEach((childItem) => { item.evalList.forEach((childItem) => {
evals = evals.concat(childItem.evalQues + ',') evals = evals.concat(childItem.evalQues + ",");
}) });
evals = evals.slice(0, -1) evals = evals.slice(0, -1);
item.evalQues = evals item.evalQues = evals;
// if (item.evalList.length >= 1 && item.evalList[0].evalQues) { // if (item.evalList.length >= 1 && item.evalList[0].evalQues) {
// item.isProblem = 1; // item.isProblem = 1;
// } // }
const isProblem = item.evalList.filter((v) => v.evalQues).length const isProblem = item.evalList.filter((v) => v.evalQues).length;
item.isProblem = isProblem > 0 ? 1 : 0 item.isProblem = isProblem > 0 ? 1 : 0;
}) });
console.log(this.questionList, 'questionList') console.log(this.questionList, "questionList");
let params = { let params = {
list: this.questionList, list: this.questionList,
...this.clqparams, ...this.clqparams,
} };
console.log(params, '保存') console.log(params, "保存");
// return // return
let res = await bcevalQuesInfo(params) let res = await bcevalQuesInfo(params);
if (res.code == '200') { if (res.code == "200") {
this.$message('保存成功') this.$message("保存成功");
if (type && type == 2) { if (type && type == 2) {
this.$router.push({ this.$router.push({
path: '/assesszc/Compliancefz', path: "/assesszc/Compliancefz",
query: { query: {
clqparams: JSON.stringify(this.clqparams), clqparams: JSON.stringify(this.clqparams),
projectName: this.projectName, projectName: this.projectName,
}, },
}) });
} else {
this.active = id * 1;
if (this.hgx == "hgx") {
this.working(this.clqparams);
} else { } else {
this.active = id * 1 this.init(this.clqparams);
if(this.hgx=='hgx'){
this.working(this.clqparams)
}else{
this.init(this.clqparams)
} }
} }
} else { } else {
this.$message('保存失败') this.$message("保存失败");
} }
}, },
fileupdate(res, items) { fileupdate(res, items) {
this.file = res.file this.file = res.file;
this.submitFile(res, items) this.submitFile(res, items);
}, },
submitFile(item, list) { submitFile(item, list) {
console.log(list, 'list') console.log(list, "list");
console.log(this.file, '多少k') console.log(this.file, "多少k");
if (this.file) { if (this.file) {
const formData = new FormData() const formData = new FormData();
formData.append('file', this.file) formData.append("file", this.file);
ossupload(formData) ossupload(formData)
.then((response) => { .then((response) => {
console.log(response, '上传图片') console.log(response, "上传图片");
if (response.code == '200') { if (response.code == "200") {
// list.url = response.data.downLoadUrl; // list.url = response.data.downLoadUrl;
// list.fileId= response.data.fileId // list.fileId= response.data.fileId
this.$set(list, 'url', response.data.downLoadUrl) this.$set(list, "url", response.data.downLoadUrl);
this.$set(list, 'fileId', response.data.fileId) this.$set(list, "fileId", response.data.fileId);
this.$message('上传成功') this.$message("上传成功");
} else { } else {
this.$message('上传失败') this.$message("上传失败");
} }
}) })
.catch((error) => { .catch((error) => {
console.error(error) console.error(error);
this.$message('上传失败') this.$message("上传失败");
}) });
} }
}, },
}, },
} };
</script> </script>
<style lang="scss">
.time_line_wrap {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
padding: 20px 10px;
}
.time_item_left {
margin-bottom: 24px;
margin-top: 1px;
flex: 60;
text-align: end;
}
.time_item_center {
display: flex;
flex-direction: column;
align-items: center;
padding: 0 12px;
}
.time_item_right {
margin-bottom: 24px;
margin-top: 2px;
flex: 40;
text-align: left;
}
.time_item_line {
position: relative;
height: calc(100% - 18px);
min-height: 20px;
border-left-width: 2px;
// border-left-color: #f2f2f3;
border-left-style: solid;
}
.time_item_dot {
// border: 2px solid #babbc0;
border-radius: 50%;
width: 18px;
height: 18px;
flex-shrink: 0;
}
</style>
<style lang="scss" scoped> <style lang="scss" scoped>
.pdf-container {
position: relative;
}
.pdf-controls {
position: absolute;
top: 10px;
right: 10px;
z-index: 10;
}
.main { .main {
font-size: 14px; font-size: 14px;
position: relative; position: relative;
...@@ -836,6 +1488,7 @@ export default { ...@@ -836,6 +1488,7 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.close { .close {
position: absolute; position: absolute;
right: 20px; right: 20px;
...@@ -847,6 +1500,7 @@ export default { ...@@ -847,6 +1500,7 @@ export default {
// color: #fff; // color: #fff;
} }
} }
.title { .title {
text-align: left; text-align: left;
background-color: #fff; background-color: #fff;
...@@ -855,6 +1509,7 @@ export default { ...@@ -855,6 +1509,7 @@ export default {
color: grey; color: grey;
font-size: 15px; font-size: 15px;
} }
.continer { .continer {
width: 100%; width: 100%;
background-color: #f5f5f6; background-color: #f5f5f6;
...@@ -865,12 +1520,14 @@ export default { ...@@ -865,12 +1520,14 @@ export default {
padding-bottom: 0; padding-bottom: 0;
min-height: 0; min-height: 0;
height: 100%; height: 100%;
.top { .top {
width: 70%; width: 70%;
margin: 0 auto; margin: 0 auto;
position: relative; position: relative;
padding-top: 15px; padding-top: 15px;
} }
.content { .content {
width: 100%; width: 100%;
margin-top: 10px; margin-top: 10px;
...@@ -880,6 +1537,7 @@ export default { ...@@ -880,6 +1537,7 @@ export default {
min-height: 0; min-height: 0;
padding-bottom: 50px; padding-bottom: 50px;
} }
.left { .left {
width: 49%; width: 49%;
min-height: 100px; min-height: 100px;
...@@ -892,12 +1550,15 @@ export default { ...@@ -892,12 +1550,15 @@ export default {
min-height: 0; min-height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.el-tabs__content { .el-tabs__content {
flex: 1; flex: 1;
.el-tab-pane { .el-tab-pane {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
.iframeDiv { .iframeDiv {
flex: 1; flex: 1;
} }
...@@ -905,22 +1566,26 @@ export default { ...@@ -905,22 +1566,26 @@ export default {
} }
} }
} }
.right { .right {
width: 50%; width: 50%;
margin-left: 10px; margin-left: 10px;
background: #fff; background: #fff;
} }
.rightscoll { .rightscoll {
// height: 610px; // height: 610px;
overflow-y: auto; overflow-y: auto;
padding: 10px; padding: 10px;
} }
.rightscollBig { .rightscollBig {
// height: 680px; // height: 680px;
overflow-y: auto; overflow-y: auto;
padding: 10px; padding: 10px;
} }
} }
::v-deep.el-step__icon { ::v-deep.el-step__icon {
color: #0d867f; color: #0d867f;
border-color: #0d867f; border-color: #0d867f;
...@@ -928,6 +1593,7 @@ export default { ...@@ -928,6 +1593,7 @@ export default {
height: 20px; height: 20px;
// border:3px solid #0d867f; // border:3px solid #0d867f;
} }
::v-deep.el-icon-caret-right { ::v-deep.el-icon-caret-right {
font-size: 30px; font-size: 30px;
line-height: 23px; line-height: 23px;
...@@ -935,21 +1601,26 @@ export default { ...@@ -935,21 +1601,26 @@ export default {
color: #0d867f; color: #0d867f;
z-index: 4; z-index: 4;
} }
::v-deep.el-step.is-horizontal .el-step__line { ::v-deep.el-step.is-horizontal .el-step__line {
height: 1px; height: 1px;
// margin-right: -20px !important; // margin-right: -20px !important;
z-index: 1; z-index: 1;
} }
::v-deep.el-step__line { ::v-deep.el-step__line {
color: gainsboro; color: gainsboro;
} }
.el-step__head.is-wait { .el-step__head.is-wait {
color: #0d867f; color: #0d867f;
border-color: #0d867f; border-color: #0d867f;
} }
::v-deep.el-step__title { ::v-deep.el-step__title {
color: #000; color: #000;
} }
::v-deep.el-step__title.is-process { ::v-deep.el-step__title.is-process {
color: #0d867f; color: #0d867f;
} }
...@@ -957,9 +1628,11 @@ export default { ...@@ -957,9 +1628,11 @@ export default {
::v-deep .is-wait .el-step__icon-inner { ::v-deep .is-wait .el-step__icon-inner {
display: none; display: none;
} }
::v-deep.upload-demo { ::v-deep.upload-demo {
display: inline-block; display: inline-block;
} }
.tableTitle { .tableTitle {
background: #0d867f; background: #0d867f;
color: #f5f5f6; color: #f5f5f6;
...@@ -974,7 +1647,6 @@ export default { ...@@ -974,7 +1647,6 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding-right: 20px; padding-right: 20px;
} }
.rightContent { .rightContent {
...@@ -982,12 +1654,15 @@ export default { ...@@ -982,12 +1654,15 @@ export default {
overflow-y: auto; overflow-y: auto;
text-align: left; text-align: left;
h3 { h3 {
margin: 0; margin: 0;
} }
p { p {
margin: 5px 0; margin: 5px 0;
} }
.question { .question {
border: 1px solid gainsboro; border: 1px solid gainsboro;
padding: 5px; padding: 5px;
...@@ -996,12 +1671,14 @@ export default { ...@@ -996,12 +1671,14 @@ export default {
color: gray; color: gray;
font-size: 12px; font-size: 12px;
} }
.el-textarea { .el-textarea {
width: 65%; width: 65%;
vertical-align: top; vertical-align: top;
} }
} }
} }
.el-button--primary { .el-button--primary {
color: #ffffff; color: #ffffff;
background-color: #0d867f; background-color: #0d867f;
...@@ -1011,6 +1688,7 @@ export default { ...@@ -1011,6 +1688,7 @@ export default {
margin-left: 10px; margin-left: 10px;
vertical-align: top; vertical-align: top;
} }
.el-button--info { .el-button--info {
color: #ffffff; color: #ffffff;
// background-color: #0d867f; // background-color: #0d867f;
...@@ -1020,19 +1698,23 @@ export default { ...@@ -1020,19 +1698,23 @@ export default {
margin-left: 10px; margin-left: 10px;
vertical-align: top; vertical-align: top;
} }
.el-icon-circle-plus { .el-icon-circle-plus {
font-size: 45px; font-size: 45px;
vertical-align: middle; vertical-align: middle;
color: #0d867f; color: #0d867f;
} }
.inputDiv { .inputDiv {
margin-top: 5px; margin-top: 5px;
} }
.addBtn { .addBtn {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
// justify-content: space-between; // justify-content: space-between;
} }
.Btn { .Btn {
// width: calc(100% - 276px) !important; // width: calc(100% - 276px) !important;
width: 100%; width: 100%;
...@@ -1045,6 +1727,7 @@ export default { ...@@ -1045,6 +1727,7 @@ export default {
line-height: 50px; line-height: 50px;
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
span { span {
display: inline-block; display: inline-block;
width: 89px; width: 89px;
...@@ -1057,18 +1740,21 @@ export default { ...@@ -1057,18 +1740,21 @@ export default {
border: 1px solid #0d867f; border: 1px solid #0d867f;
color: #fff; color: #fff;
} }
span:first-of-type { span:first-of-type {
border: 1px solid grey; border: 1px solid grey;
color: #000; color: #000;
background-color: #fff; background-color: #fff;
} }
} }
.quesznfx { .quesznfx {
background-color: rgba(255, 248, 226, 1); background-color: rgba(255, 248, 226, 1);
color: #ff5a2e; color: #ff5a2e;
font-size: 12px; font-size: 12px;
padding: 5px; padding: 5px;
margin-bottom: 10px; margin-bottom: 10px;
.el-textarea { .el-textarea {
width: 65%; width: 65%;
vertical-align: top; vertical-align: top;
...@@ -1078,9 +1764,11 @@ export default { ...@@ -1078,9 +1764,11 @@ export default {
::v-deep.uploadBox_hide .el-upload--picture-card { ::v-deep.uploadBox_hide .el-upload--picture-card {
display: none; display: none;
} }
::v-deep.upload_box { ::v-deep.upload_box {
display: inline-block; display: inline-block;
} }
::v-deep.el-upload--picture-card { ::v-deep.el-upload--picture-card {
width: 80px; width: 80px;
height: 40px; height: 40px;
...@@ -1088,83 +1776,96 @@ export default { ...@@ -1088,83 +1776,96 @@ export default {
margin-left: 10px; margin-left: 10px;
border: none; border: none;
} }
.blobImg { .blobImg {
width: 100%; width: 100%;
img { img {
text-align: center; text-align: center;
width: 80%; width: 80%;
} }
} }
.docDiv { .docDiv {
width: 100%; width: 100%;
height: 600px; height: 600px;
overflow: auto; overflow: auto;
} }
.iframeDiv { .iframeDiv {
width: 80%; width: 80%;
height: 50vh; height: 50vh;
margin: auto; margin: auto;
display: block; display: block;
} }
.iframeDivBig { .iframeDivBig {
width: 80%; width: 80%;
height: 66vh; height: 66vh;
margin: auto; margin: auto;
display: block; display: block;
} }
.opt { .opt {
height: 40px; height: 40px;
width: 100%; width: 100%;
text-align: left; text-align: left;
padding-left: 10px; padding-left: 10px;
::v-deep .el-input__inner { ::v-deep .el-input__inner {
width: 600px; width: 600px;
} }
} }
::v-deep .docx-wrapper { ::v-deep .docx-wrapper {
padding: 0 !important; padding: 0 !important;
} }
::v-deep .docx { ::v-deep .docx {
// width: 100% !important; // width: 100% !important;
display: table !important; display: table !important;
padding: 2em 1em 0 !important; padding: 2em 1em 0 !important;
margin: 0 auto !important; margin: 0 auto !important;
} }
::v-deep.kaimo-docx-666 { ::v-deep.kaimo-docx-666 {
margin: 0 auto !important; margin: 0 auto !important;
text-align: center; text-align: center;
} }
.dialogscroll { .dialogscroll {
height: 65vh; height: 65vh;
overflow-y: auto; overflow-y: auto;
} }
.msg { .msg {
vertical-align: middle; vertical-align: middle;
line-height: 33px; line-height: 33px;
} }
::v-deep .el-dialog__header { ::v-deep .el-dialog__header {
background-color: #0d867f; background-color: #0d867f;
padding-bottom: 20px; padding-bottom: 20px;
text-align: left; text-align: left;
border-radius: 10px 10px 0 0; border-radius: 10px 10px 0 0;
.el-dialog__title { .el-dialog__title {
color: #fff; color: #fff;
} }
} }
::v-deep .el-dialog { ::v-deep .el-dialog {
border-radius: 10px; border-radius: 10px;
// margin-top: 3vh !important; // margin-top: 3vh !important;
// margin-left: 3vw !important; // margin-left: 3vw !important;
} }
.noShow { .noShow {
display: none; display: none;
} }
.resimg { .resimg {
display: inline-block; display: inline-block;
width: 100px; width: 100px;
} }
.working{
position: absolute;
left: -100px;
}
</style> </style>
...@@ -865,7 +865,7 @@ export default { ...@@ -865,7 +865,7 @@ export default {
this.$refs["multipleTableZJ"].toggleRowSelection(row); this.$refs["multipleTableZJ"].toggleRowSelection(row);
this.addZJList = this.$refs.multipleTableZJ.selection; this.addZJList = this.$refs.multipleTableZJ.selection;
} else { } else {
this.$message.warning("项目编码或合同编码为空"); this.$message.warning("项目编码或合同编码为空2");
} }
}, },
timeChange(time) { timeChange(time) {
......
...@@ -455,7 +455,7 @@ export default { ...@@ -455,7 +455,7 @@ export default {
checkedList: [], checkedList: [],
yearsList: generateYearOptions(), yearsList: generateYearOptions(),
ruleForm: { ruleForm: {
projectCode: "7322XT23005C", projectCode: "",
projectName: "", projectName: "",
issueYear: "", issueYear: "",
constructionForm: "", constructionForm: "",
......
...@@ -9,6 +9,34 @@ ...@@ -9,6 +9,34 @@
</div> </div>
<div class="right"> <div class="right">
<div class="head"> <div class="head">
<div
style="margin-right: 20px; cursor: pointer"
@click="showMessageDialog"
>
<el-badge :value="messageNum" :max="99" class="item">
<svg
t="1739518743824"
class="icon"
:fill="messageNum > 0 ? 'red' : 'gray'"
style="width: 20px; height: 20px"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1670"
>
<path
d="M951.925029 807.043657l-80.310858-111.850057V457.201371c0-183.281371-146.285714-336.7936-336.457142-350.632228V76.1856a29.257143 29.257143 0 0 0-58.514286 0v30.529829c-175.542857 14.730971-321.828571 167.818971-321.828572 350.485942v237.9776l-81.173942 113.2544c-12.741486 17.832229-14.584686 33.923657-4.549486 53.408915s29.988571 24.385829 51.902171 24.385828h782.7456c21.9136 0 40.594286-4.900571 50.629486-24.385828s10.298514-36.9664-2.442971-54.798629zM120.992914 827.728457l92.335543-113.795657v-256.731429c0-160.168229 133.032229-302.3872 297.764572-302.3872h2.545371c164.746971 0 299.446857 142.218971 299.446857 302.3872v256.7168l90.638629 113.795658H120.992914z"
fill=""
p-id="1671"
></path>
<path
d="M689.239771 291.693714c-6.407314-4.959086-14.189714-3.774171-19.1488 2.589257-4.959086 6.392686-5.880686 15.5648 0.482743 20.523886 35.605943 27.604114 54.740114 70.5536 54.740115 114.907429v143.842743a14.628571 14.628571 0 1 0 29.257142 0v-143.842743c0.014629-53.321143-22.674286-104.916114-65.3312-138.020572zM627.317029 255.063771c-17.642057-5.178514-36.9664-12.478171-55.881143-12.478171h-1.4336c-8.0896 0-13.9264 11.117714-13.9264 19.207314s7.255771 16.910629 15.345371 16.910629c16.164571 0 32.650971 3.4816 47.659886 7.8848 1.375086 0.394971 2.750171 1.155657 4.110628 1.155657 6.334171 0 12.170971-6.129371 14.043429-12.507429 2.282057-7.767771-2.165029-17.905371-9.918171-20.1728zM599.259429 915.499886h-175.542858a29.257143 29.257143 0 0 0 0 58.514285h175.542858a29.257143 29.257143 0 0 0 0-58.514285z"
fill=""
p-id="1672"
></path>
</svg>
</el-badge>
</div>
<!-- <el-select v-model="userMock" placeholder="请选择" @change="changeUser" > <!-- <el-select v-model="userMock" placeholder="请选择" @change="changeUser" >
<el-option <el-option
v-for="(item, index) in userMockList" v-for="(item, index) in userMockList"
...@@ -20,7 +48,7 @@ ...@@ -20,7 +48,7 @@
<div style="margin-right: 5px"> <div style="margin-right: 5px">
<img src="../../assets/user.png" alt="user" /> <img src="../../assets/user.png" alt="user" />
</div> </div>
<div style="margin-right: 35px" >您好,管理员</div> <div style="margin-right: 35px">您好,管理员</div>
<div style="margin-right: 5px"> <div style="margin-right: 5px">
<img src="../../assets/exit.png" alt="exit" /> <img src="../../assets/exit.png" alt="exit" />
...@@ -29,26 +57,38 @@ ...@@ -29,26 +57,38 @@
</div> </div>
<div class="menu no-select"> <div class="menu no-select">
<div class="right-angle-triangle"></div> <div class="right-angle-triangle"></div>
<div v-if="!false" class="just"> <div v-if="false" class="just">
<div id="home" @click="navigateToChild('1','/home')" :class="active=='1'?'active':''"> <div
id="home"
@click="navigateToChild('1', '/home')"
:class="active == '1' ? 'active' : ''"
>
<span class="iconfont">&#xe608;</span>&nbsp;主页 <span class="iconfont">&#xe608;</span>&nbsp;主页
</div> </div>
<div id="lxtc" :class="active=='2'?'active':''"> <div id="lxtc" :class="active == '2' ? 'active' : ''">
<span class="between iconfont">&#xe615;</span>&nbsp;立项统筹中心 <span class="between iconfont">&#xe615;</span>&nbsp;立项统筹中心
</div> </div>
<div id="xmjg" :class="active=='3'?'active':''"> <div id="xmjg" :class="active == '3' ? 'active' : ''">
<span class="between iconfont">&#xe60b;</span>&nbsp;项目建管中心 <span class="between iconfont">&#xe60b;</span>&nbsp;项目建管中心
</div> </div>
<div id="jggk" :class="active=='4'?'active':''"> <div id="jggk" :class="active == '4' ? 'active' : ''">
<span class="between iconfont">&#xe60c;</span>&nbsp;架构管控中心 <span class="between iconfont">&#xe60c;</span>&nbsp;架构管控中心
</div> </div>
<div id="hpg" @click="navigateToChild('5','/mainLayout')" :class="active=='5'?'active':''"> <div
<span class="between iconfont" >&#xe612;</span>&nbsp;后评估管控中心 id="hpg"
@click="navigateToChild('5', '/mainLayout')"
:class="active == '5' ? 'active' : ''"
>
<span class="between iconfont">&#xe612;</span>&nbsp;后评估管控中心
</div> </div>
<div id="zhfx" :class="active=='6'?'active':''" @click="navigateToChild('6','/analysisCore')"> <div
id="zhfx"
:class="active == '6' ? 'active' : ''"
@click="navigateToChild('6', '/analysisCore')"
>
<span class="between iconfont">&#xe603;</span>&nbsp;综合分析中心 <span class="between iconfont">&#xe603;</span>&nbsp;综合分析中心
</div> </div>
<div id="xtgl" :class="active=='7'?'active':''"> <div id="xtgl" :class="active == '7' ? 'active' : ''">
<span class="between iconfont">&#xe60f;</span>&nbsp;系统管理 <span class="between iconfont">&#xe60f;</span>&nbsp;系统管理
</div> </div>
</div> </div>
...@@ -59,37 +99,199 @@ ...@@ -59,37 +99,199 @@
<!-- <MainLayout class="continer"> <!-- <MainLayout class="continer">
<router-view></router-view> <router-view></router-view>
</MainLayout> --> </MainLayout> -->
<el-dialog
:visible.sync="showMessage"
title="消息列表"
width="90%"
:modal-append-to-body="true"
:append-to-body="true"
:fullscreen="false"
@close="closeMessage"
>
<div style="display: flex; flex-direction: column; gap: 10px;">
<div
style="
display: flex;
flex-direction: row;
align-items: center;
gap: 10px;
"
>
<!-- <div>消息提醒 {{ messageNum }}</div> -->
<div><el-button type="primary" @click="readWhole" size="small">一键已读</el-button></div>
</div>
<div>
<el-table
@selection-change="handleSelectionChange"
@row-click="
(row, column, event) =>
handleRowClick(row, column, event, 'multipleTable')
"
ref="multipleTable"
:header-cell-style="{ background: '#f5f5f5' }"
header-cell-class-name="custom-th-background"
:data="tableData"
style="width: 100%; box-sizing: border-box"
border
stripe
>
<el-table-column fixed label="序号" width="55" type="index" align="center"/>
<!-- <el-table-column fixed type="selection" /> -->
<el-table-column prop="projectCode" label="项目编码" width="150" align="center"/>
<el-table-column
prop="projectName"
label="项目名称"
width="120"
show-overflow-tooltip
align="center"
/>
<el-table-column align="center" prop="issueYear" label="项目年度" width="100" />
<el-table-column align="center" prop="projectType" label="项目类型" width="100">
<template slot-scope="scope">
<div v-if="scope.row.projectType == 1">咨询设计类</div>
<div v-if="scope.row.projectType == 2">开发实施类</div>
<div v-if="scope.row.projectType == 3">业务运营类</div>
<div v-if="scope.row.projectType == 4">数据工程类</div>
<div v-if="scope.row.projectType == 5">产品购置类</div>
</template>
</el-table-column>
<el-table-column
prop="constructionForm"
label="建设形式"
width="90"
align="center"
>
<template slot-scope="scope">
<div v-if="scope.row.constructionForm == 1">独立建设</div>
<div v-if="scope.row.constructionForm == 2">统推</div>
<div
v-if="
scope.row.constructionForm == 3 ||
scope.row.constructionForm == 4
"
>
自建
</div>
</template>
</el-table-column>
<el-table-column
prop="currentProgress"
label="当前进度"
width="90"
align="center"
/>
<el-table-column
prop="contractNumber"
label="合同编码"
width="90"
align="center"
show-overflow-tooltip
/>
<el-table-column
prop="contractName"
label="合同名称"
width="90"
align="center"
show-overflow-tooltip
/>
<el-table-column prop="createTime" align="center" label="提醒时间" width="110" />
<el-table-column prop="status" align="center" label="状态" width="100">
<template slot-scope="scope">
{{ scope.row.status === 1 ? "未读" : "已读" }}
</template>
</el-table-column>
<el-table-column
prop="materialName"
label="未上传材料"
width="100"
align="center"
show-overflow-tooltip
/>
<el-table-column fixed="right" label="操作" align="center" min-width="120">
<template slot-scope="scope">
<el-button link type="primary" @click="bingoOprate(scope.row)" size="small"
>操作</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 15, 20, 50, 100]"
:page-size="1000"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
style="text-align: center; margin-right: 100px"
>
</el-pagination>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import MainLayout from "./mainLayout"; import MainLayout from "./mainLayout";
import { getMessageListApi, updateMessageApi, readWholwMsg } from "@/api/indexzc";
// import tableMixin from '@/mixins/table.mixin.js'
export default { export default {
// mixins: [tableMixin],
components: { components: {
MainLayout, MainLayout,
}, },
data() { data() {
return { return {
currentPage: 1,
pageSize: 10,
currentPagetjcl: 1,
pageSizetjcl: 10,
total: 0,
tableData: [
{
date: "2016-05-01",
status: 1,
name: "Tom",
state: "California",
city: "Los Angeles",
address: "No. 189, Grove St, Los Angeles",
zip: "CA 90036",
tag: "Office",
},
{
date: "2016-05-01",
status: 1,
name: "Tom",
state: "California",
city: "Los Angeles",
address: "No. 189, Grove St, Los Angeles",
zip: "CA 90036",
tag: "Office",
},
],
showMessage: false,
messageNum: 0,
userMock: 1, // 角色 userMock: 1, // 角色
userMockList: [ userMockList: [
{ {
label: '超管', label: "超管",
id: 1 id: 1,
}, },
{ {
label: '发起人', label: "发起人",
id: 2 id: 2,
}, },
{ {
label: '专家', label: "专家",
id: 3 id: 3,
}, },
{ {
label: '项目负责人', label: "项目负责人",
id: 4 id: 4,
}, },
], ],
active:'5', active: "5",
headerList: [ headerList: [
{ {
name: "主页", name: "主页",
...@@ -129,30 +331,129 @@ export default { ...@@ -129,30 +331,129 @@ export default {
], ],
}; };
}, },
mounted(){ created () {
if(this.$route.path=='/analysisCore'){ this.getMessageList();
this.active=6 },
mounted() {
if (this.$route.path == "/analysisCore") {
this.active = 6;
} }
// this.$router.push({ path:" /mainLayout" }); // this.$router.push({ path:" /mainLayout" });
}, },
methods:{ methods: {
changeUser(val){ async readWhole() {
const { label } = this.userMockList.find(item => item.id === val) // 一键已读
console.log('changeUser', val, label); this.$confirm('确认已读所有消息, 是否继续?', '提示', {
}, confirmButtonText: '确定',
navigateToChild(num,pushUrl){ cancelButtonText: '取消',
this.active=num type: 'warning',
this.$router.push({ path: pushUrl }); }).then(async () => {
let res = await readWholwMsg()
// console.log('res', res);
if (res.data.code == 0) {
this.$message({
type: 'success',
message: '已读所有消息成功!',
})
} else {
this.$message({
type: 'info',
message: '已读失败!',
})
}
}).catch(() => {
this.$message({
type: 'info',
message: '已取消已读所有',
})
})
}, },
changeSelect(){ async bingoOprate(row) {
const a = await updateMessageApi([row.id])
this.showMessage = false;
this.$router.push({
path: "/assesszc/projectView",
query: {
projectId: row.projectCode,
// projectId: '7422XT230022',
}, },
});
},
handleRowClick(row, column, event, ref) {
console.log("column", column);
if (column.label == "操作") {
return;
// this.showMessage = false
// this.$router.push({path: '/assesszc/projectView', query: {
// projectId: row.projectCode,
// // projectId: '7422XT230022',
// }})
} else {
this.$refs[ref].toggleRowSelection(row);
}
},
async getMessageList() {
let params = {
current: this.currentPage,
pageSize: this.pageSize,
};
console.log(params);
let res = await getMessageListApi(params);
if (res.code == "200") {
this.tableData = res.data.records;
this.messageNum = res.data.count * 1
this.total = res.data.count * 1;
} }
},
handleSizeChange(val) {
this.pageSize = val;
this.getMessageList();
},
handleCurrentChange(val) {
this.currentPage = val;
this.getMessageList();
},
handleSelectionChange(selection) {
console.log("hand", selection);
},
async showMessageDialog() {
this.currentPage = 1;
await this.getMessageList();
this.showMessage = true;
},
closeMessage() {
this.currentPage = 1;
},
changeUser(val) {
const { label } = this.userMockList.find((item) => item.id === val);
console.log("changeUser", val, label);
},
navigateToChild(num, pushUrl) {
this.active = num;
this.$router.push({ path: pushUrl });
},
changeSelect() {},
},
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-dialog__header {
background-color: #0d867f;
padding-bottom: 20px;
text-align: left;
border-radius: 10px 10px 0 0;
.el-dialog__title {
color: #fff;
}
}
::v-deep .el-dialog {
border-radius: 10px;
// margin-top: 3vh !important;
// margin-left: 3vw !important;
}
.iconfont { .iconfont {
font-family: "iconfont" !important; font-family: "iconfont" !important;
font-size: 16px; font-size: 16px;
...@@ -217,8 +518,6 @@ export default { ...@@ -217,8 +518,6 @@ export default {
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.head-container { .head-container {
display: flex; display: flex;
width: 100%; width: 100%;
...@@ -367,13 +666,10 @@ export default { ...@@ -367,13 +666,10 @@ export default {
::-webkit-scrollbar-track-piece { ::-webkit-scrollbar-track-piece {
background-color: #f5f5f5; background-color: #f5f5f5;
} }
.mian{ .mian {
// width: 100%; // width: 100%;
// height: 100vh; // height: 100vh;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
} }
</style> </style>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<ContinerView class="continer" id="myElement"> <ContinerView class="continer" id="myElement">
<router-view></router-view> <router-view></router-view>
</ContinerView> </ContinerView>
<div class="changeqx"> <div v-if="false" class="changeqx">
<el-menu <el-menu
router router
class="el-menu-vertical-demo" class="el-menu-vertical-demo"
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!