@@ -1,19 +1,19 @@ | |||||
<script setup name="App"> | <script setup name="App"> | ||||
// import store from '@/store' | // import store from '@/store' | ||||
// console.log(store.menuStore.menuArr) | // console.log(store.menuStore.menuArr) | ||||
// import Updater from '@/utils/updater' | |||||
// import { ElMessageBox } from 'element-plus' | |||||
// | |||||
// const up = new Updater({ | |||||
// timer: 20000 | |||||
// }) | |||||
// // 更新通知 | |||||
// up.on('update', () => { | |||||
// up.stop() | |||||
// ElMessageBox.confirm('检测到有新版本,是否更新?更新会重新加载页面,如果您有未提交的表单数据,请先保存!', '提示', {}).then(() => { | |||||
// location.reload() | |||||
// }) | |||||
// }) | |||||
import Updater from '@/utils/updater' | |||||
import { ElMessageBox } from 'element-plus' | |||||
const up = new Updater({ | |||||
timer: 20000 | |||||
}) | |||||
// 更新通知 | |||||
up.on('update', () => { | |||||
up.stop() | |||||
ElMessageBox.confirm('检测到有新版本,是否更新?更新会重新加载页面,如果您有未提交的表单数据,请先保存!', '提示', {}).then(() => { | |||||
location.reload() | |||||
}) | |||||
}) | |||||
</script> | </script> | ||||
@@ -11,6 +11,11 @@ export const exportExc = (state, data) => http.post(centerList[state] + '/export | |||||
export const progressDetail = params => http.get(`/api/v1/todo-center/progress/detail`, { params }) // 流程审核详情 | export const progressDetail = params => http.get(`/api/v1/todo-center/progress/detail`, { params }) // 流程审核详情 | ||||
export const projectDetail = id => http.get(`/api/v1/project/lib/${id}`) // 项目详情 | export const projectDetail = id => http.get(`/api/v1/project/lib/${id}`) // 项目详情 | ||||
export const handler = data => http.post('/api/v1/todo-center/handler', data) // 处理 | export const handler = data => http.post('/api/v1/todo-center/handler', data) // 处理 | ||||
export const toInTheAnnualPlan = data => http.post('/api/v1/todo-center/toInTheAnnualPlan', data) // 驳回至年度计划 | |||||
export const saveOpinions = data => http.post('/api/v1/todo-center/saveOpinions', data) // 添加总验意见 | |||||
export const adjustAndHandle = data => http.post('/api/v1/todo-center/adjustAndHandle', data) // 被退回项目内容调整并通过 | export const adjustAndHandle = data => http.post('/api/v1/todo-center/adjustAndHandle', data) // 被退回项目内容调整并通过 | ||||
export const notSealedPdf = data => http.post(`/api/v1/todo-center/getNotSealedPdf`, data) // 获取未盖章pdf | export const notSealedPdf = data => http.post(`/api/v1/todo-center/getNotSealedPdf`, data) // 获取未盖章pdf | ||||
export const signSeal = data => http.post('/api/v1/todo-center/getSealedPdf', data) // 盖章 | export const signSeal = data => http.post('/api/v1/todo-center/getSealedPdf', data) // 盖章 | ||||
@@ -115,11 +115,11 @@ onMounted(async () => { | |||||
label-suffix=":" | label-suffix=":" | ||||
scroll-to-error | scroll-to-error | ||||
> | > | ||||
<!-- <el-card class="w-full mb-16">--> | |||||
<!-- <el-form-item label="发改编码" :rules="[{ required: true, message: '请输入' }]" prop="developCode">--> | |||||
<!-- <el-input v-model="formData.developCode" placeholder="请输入" />--> | |||||
<!-- </el-form-item>--> | |||||
<!-- </el-card>--> | |||||
<el-card class="w-full mb-16"> | |||||
<el-form-item label="发改编码" :rules="[{ required: true, message: '请输入' }]" prop="developCode"> | |||||
<el-input v-model="formData.developCode" placeholder="请输入" /> | |||||
</el-form-item> | |||||
</el-card> | |||||
<el-card v-for="(item,index) in formData.sections" :key="index" class="w-full mb-16"> | <el-card v-for="(item,index) in formData.sections" :key="index" class="w-full mb-16"> | ||||
<template #header> | <template #header> | ||||
<div class="flex justify-between"> | <div class="flex justify-between"> | ||||
@@ -9,9 +9,10 @@ import { | |||||
changFilesParam, | changFilesParam, | ||||
handleFilePreview | handleFilePreview | ||||
} from '@/utils/uploadAction.js' | } from '@/utils/uploadAction.js' | ||||
import { getConstructionSuggestions, handler } from '@/http/apis/toDoCenter/todoList' | |||||
import { getConstructionSuggestions, handler, saveOpinions } from '@/http/apis/toDoCenter/todoList' | |||||
import store from '@/store' | import store from '@/store' | ||||
import { useRoute, useRouter } from 'vue-router' | import { useRoute, useRouter } from 'vue-router' | ||||
const route = useRoute(), | const route = useRoute(), | ||||
router = useRouter(), | router = useRouter(), | ||||
{ proxy } = getCurrentInstance(), | { proxy } = getCurrentInstance(), | ||||
@@ -80,10 +81,6 @@ const route = useRoute(), | |||||
attachments: form.value.attachments.map((i) => ({ | attachments: form.value.attachments.map((i) => ({ | ||||
fileId: i.response.data.id, | fileId: i.response.data.id, | ||||
fileName: i.response.data.originalFileName | fileName: i.response.data.originalFileName | ||||
})), | |||||
opinions: form.value.opinions.map((i) => ({ | |||||
fileId: i.response.data.id, | |||||
fileName: i.response.data.originalFileName | |||||
})) | })) | ||||
} | } | ||||
} | } | ||||
@@ -96,6 +93,20 @@ const route = useRoute(), | |||||
proposeAttachFiles: form.value.proposeAttachFiles && JSON.stringify(changFilesParam(form.value.proposeAttachFiles)) | proposeAttachFiles: form.value.proposeAttachFiles && JSON.stringify(changFilesParam(form.value.proposeAttachFiles)) | ||||
}) | }) | ||||
} | } | ||||
if (form.value.opinions && form.value.opinions.length > 0) { | |||||
try { | |||||
await saveOpinions({ | |||||
projectId: route.query.projectId, | |||||
opinions: form.value.opinions.map((i) => ({ | |||||
fileId: i.response.data.id, | |||||
fileName: i.response.data.originalFileName | |||||
})) | |||||
}) | |||||
} catch (e) { | |||||
console.log(e) | |||||
} | |||||
} | |||||
const res = await handler(postData) | const res = await handler(postData) | ||||
if (res.data === 'TASKID_ERROR') { | if (res.data === 'TASKID_ERROR') { | ||||
proxy.$message.warning('当前审批任务有变动,请返回待我处理列表!') | proxy.$message.warning('当前审批任务有变动,请返回待我处理列表!') | ||||
@@ -234,30 +245,30 @@ watch( | |||||
</el-col> | </el-col> | ||||
</template> | </template> | ||||
<!-- <el-col v-if="projectDetail&&projectDetail.status===20004" :span="24">--> | |||||
<!-- <el-form-item--> | |||||
<!-- :label="`终验意见`"--> | |||||
<!-- prop="opinions"--> | |||||
<!-- >--> | |||||
<!-- <el-upload--> | |||||
<!-- v-model:file-list="form.opinions"--> | |||||
<!-- class="w-full"--> | |||||
<!-- :action="uploadUrl"--> | |||||
<!-- :on-success="res => handleFileSuccess(res, form.opinions)"--> | |||||
<!-- :on-error="handleFileError"--> | |||||
<!-- :before-upload="file=>fileFormatVerification(file, {types: fileTypes})"--> | |||||
<!-- :accept="fileTypes.map(i=>`.${i}`).join(',')"--> | |||||
<!-- multiple--> | |||||
<!-- :limit="10"--> | |||||
<!-- :on-preview="handleFilePreview"--> | |||||
<!-- >--> | |||||
<!-- <el-button type="primary" class="mr-4">上传附件</el-button>--> | |||||
<!-- <template #tip>--> | |||||
<!-- <div class="el-upload__tip">支持{{ fileDesc }}文件</div>--> | |||||
<!-- </template>--> | |||||
<!-- </el-upload>--> | |||||
<!-- </el-form-item>--> | |||||
<!-- </el-col>--> | |||||
<el-col v-if="projectDetail&&projectDetail.status===20004" :span="24"> | |||||
<el-form-item | |||||
:label="`终验意见`" | |||||
prop="opinions" | |||||
> | |||||
<el-upload | |||||
v-model:file-list="form.opinions" | |||||
class="w-full" | |||||
:action="uploadUrl" | |||||
:on-success="res => handleFileSuccess(res, form.opinions)" | |||||
:on-error="handleFileError" | |||||
:before-upload="file=>fileFormatVerification(file, {types: fileTypes})" | |||||
:accept="fileTypes.map(i=>`.${i}`).join(',')" | |||||
multiple | |||||
:limit="10" | |||||
:on-preview="handleFilePreview" | |||||
> | |||||
<el-button type="primary" class="mr-4">上传附件</el-button> | |||||
<template #tip> | |||||
<div class="el-upload__tip">支持{{ fileDesc }}文件</div> | |||||
</template> | |||||
</el-upload> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="24"> | <el-col :span="24"> | ||||
<el-form-item | <el-form-item | ||||
@@ -6,7 +6,8 @@ defineProps({ | |||||
isShowSline: { | isShowSline: { | ||||
type: Boolean, | type: Boolean, | ||||
default: false | default: false | ||||
} | |||||
}, | |||||
detail: {} | |||||
}) | }) | ||||
const | const | ||||
getResultIcon = (item) => { | getResultIcon = (item) => { | ||||
@@ -103,7 +104,7 @@ const | |||||
<p>{{ list.finishTime }}</p> | <p>{{ list.finishTime }}</p> | ||||
</div> | </div> | ||||
<p v-if="list.auditInfo" class="text-info" style="word-break: break-all;">意见:<span>{{ list.auditInfo.text }}</span></p> | <p v-if="list.auditInfo" class="text-info" style="word-break: break-all;">意见:<span>{{ list.auditInfo.text }}</span></p> | ||||
<div v-if="list.auditInfo&&list.auditInfo.attachments?.length" class="flex text-info"> | |||||
<div v-if="list.auditInfo&&list.auditInfo.attachments?.length" class="flex text-info mt-5"> | |||||
<span>附件:</span> | <span>附件:</span> | ||||
<div> | <div> | ||||
<p v-for="(file,fileIndex) in list.auditInfo.attachments" :key="fileIndex" class="mb-4"> | <p v-for="(file,fileIndex) in list.auditInfo.attachments" :key="fileIndex" class="mb-4"> | ||||
@@ -111,6 +112,16 @@ const | |||||
</p> | </p> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div v-if="detail.opinions&&detail.opinions?.length" class="flex text-info mt-5"> | |||||
<span>终验意见:</span> | |||||
<div> | |||||
<p v-for="(file,fileIndex) in detail.opinions" :key="fileIndex" class="mb-4"> | |||||
<accessory :file-name="file.fileName" :file-id="file.fileId" /> | |||||
</p> | |||||
</div> | |||||
</div> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -4,7 +4,7 @@ import { useRoute, useRouter } from 'vue-router' | |||||
import FlowRecord from '../components/flowRecord.vue' | import FlowRecord from '../components/flowRecord.vue' | ||||
import AuditDialog from '../components/auditDialog.vue' | import AuditDialog from '../components/auditDialog.vue' | ||||
import ProjectInfo from '@/pages/projectStoreManage/projectStore/projectDetail/components/projectInfo.vue' | import ProjectInfo from '@/pages/projectStoreManage/projectStore/projectDetail/components/projectInfo.vue' | ||||
import { handler, progressDetail, projectDetail } from '@/http/apis/toDoCenter/todoList' | |||||
import { handler, progressDetail, projectDetail, toInTheAnnualPlan } from '@/http/apis/toDoCenter/todoList' | |||||
import { storeToRefs } from 'pinia' | import { storeToRefs } from 'pinia' | ||||
import store from '@/store' | import store from '@/store' | ||||
import FinalInfo from '@/pages/projectStoreManage/projectStore/projectDetail/components/finalInfo.vue' | import FinalInfo from '@/pages/projectStoreManage/projectStore/projectDetail/components/finalInfo.vue' | ||||
@@ -13,7 +13,7 @@ import WantReadInfo from '@/pages/projectStoreManage/projectStore/projectDetail/ | |||||
import SjFlowRecord from '@/pages/projectStoreManage/projectStore/projectDetail/components/sjFlowRecord.vue' | import SjFlowRecord from '@/pages/projectStoreManage/projectStore/projectDetail/components/sjFlowRecord.vue' | ||||
import ChangeInfoDialog from '@/pages/toDoCenter/handleDuringExamine/components/changeInfoDialog.vue' | import ChangeInfoDialog from '@/pages/toDoCenter/handleDuringExamine/components/changeInfoDialog.vue' | ||||
import { dictionary } from '@/http/apis/projectCollection/projectCollectionEnter' | import { dictionary } from '@/http/apis/projectCollection/projectCollectionEnter' | ||||
import { ElMessageBox } from 'element-plus' | |||||
import { ElMessage, ElMessageBox } from 'element-plus' | |||||
const | const | ||||
userInfo = storeToRefs(store.userStore).userInfo || {}, | userInfo = storeToRefs(store.userStore).userInfo || {}, | ||||
{ proxy } = getCurrentInstance(), | { proxy } = getCurrentInstance(), | ||||
@@ -262,17 +262,44 @@ onMounted(async () => { | |||||
}) | }) | ||||
function rejectYear () { | function rejectYear () { | ||||
// ElMessageBox.confirm('确认驳回至年度计划吗?') | |||||
// .then(() => { | |||||
// }) | |||||
// .catch(() => { | |||||
// }) | |||||
ElMessageBox({ | |||||
title: '温馨提示', | |||||
message: '确认驳回至年度计划吗?', | |||||
showCancelButton: true, | |||||
confirmButtonText: '确认', | |||||
cancelButtonText: '取消', | |||||
beforeClose: async (action, instance, done) => { | |||||
if (action === 'confirm') { | |||||
instance.confirmButtonLoading = true | |||||
instance.confirmButtonText = '正在处理...' | |||||
try { | |||||
await bohui() | |||||
} catch (e) { | |||||
instance.confirmButtonLoading = false | |||||
} | |||||
instance.confirmButtonLoading = false | |||||
done() | |||||
} else { | |||||
done() | |||||
} | |||||
} | |||||
}).then((action) => { | |||||
if (action === 'confirm') { | |||||
ElMessage.success('驳回成功!') | |||||
reload() | |||||
} | |||||
}) | |||||
} | |||||
ElMessageBox.confirm('正在开发中......') | |||||
.then(() => { | |||||
}) | |||||
.catch(() => { | |||||
}) | |||||
async function bohui () { | |||||
const postData = { | |||||
instanceId: route.query.instanceId, | |||||
projectId: route.query.projectId, | |||||
projectCode: detailData.value.projectCode, | |||||
taskId: route.query.taskId, | |||||
action: 'REJECT' | |||||
} | |||||
await toInTheAnnualPlan(postData) | |||||
} | } | ||||
</script> | </script> | ||||
@@ -351,7 +378,7 @@ function rejectYear () { | |||||
</el-tabs> | </el-tabs> | ||||
<span v-else>流程记录</span> | <span v-else>流程记录</span> | ||||
</template> | </template> | ||||
<flow-record v-if="flowTabActiveName==='1'" :flow-data="flowData.processProgressVo.progressInfo" /> | |||||
<flow-record v-if="flowTabActiveName==='1'" :flow-data="flowData.processProgressVo.progressInfo" :detail="detailData" /> | |||||
<el-form v-else-if="flowTabActiveName==='2'" label-suffix=":"> | <el-form v-else-if="flowTabActiveName==='2'" label-suffix=":"> | ||||
<sj-flow-record :flow-data="detailData.sjlsResult?JSON.parse(detailData.sjlsResult):[]" /> | <sj-flow-record :flow-data="detailData.sjlsResult?JSON.parse(detailData.sjlsResult):[]" /> | ||||
</el-form> | </el-form> | ||||
@@ -391,7 +418,7 @@ function rejectYear () { | |||||
</el-button> | </el-button> | ||||
<el-button @click="router.go(-1)">返回</el-button> | <el-button @click="router.go(-1)">返回</el-button> | ||||
<el-button | <el-button | ||||
v-if="false" | |||||
v-if="detailData.status>=10012" | |||||
plain | plain | ||||
type="danger" | type="danger" | ||||
@click="rejectYear" | @click="rejectYear" | ||||