|
|
<script setup> |
|
|
import feedback from "@/utils/feedback"; |
|
|
import {getToken} from "@/utils/token"; |
|
|
import {BASE_PATH} from "@/api/request"; |
|
|
import useUserStore from "@/stores/modules/user"; |
|
|
import {timeFormat} from "@/utils/util"; |
|
|
import reportFile from '@/components/reportFile/index.vue'; |
|
|
import useCatchStore from '@/stores/modules/catch' |
|
|
import reportAudit from '@/components/reportAudit/start.vue'; |
|
|
import reportAuditFinish from '@/components/reportAudit/finish.vue'; |
|
|
import reportAuditReject from '@/components/reportAudit/reject.vue'; |
|
|
import { |
|
|
getDetail, |
|
|
saveReportProject, |
|
|
getExcelContrilPrice, |
|
|
upFinalizationPathFun, |
|
|
deleteReportProject |
|
|
} from "@/api/report/index"; |
|
|
import {useRoute, useRouter} from "vue-router"; |
|
|
import {getReportFlow} from "@/api/report/flow"; |
|
|
import useTabsStore from "@/stores/modules/multipleTabs"; |
|
|
import {listPolice} from "@/api/system/police"; |
|
|
import {fileDict,fileEndDict} from "@/enums/fileTableDictEnum"; |
|
|
import {recessedData} from "@/api/entryWindow/index"; |
|
|
|
|
|
import { getDictValue,getDepartContent } from "@/utils/util"; |
|
|
import {ElLoading} from "element-plus"; |
|
|
const {addTab, removeTab, tabList} = |
|
|
useTabsStore(); |
|
|
|
|
|
const filesData = ref([]) |
|
|
const router = useRouter(); |
|
|
const preview = ref(false); |
|
|
const dialog = ref(false) |
|
|
const actionRow = ref({}) |
|
|
const userStore = useUserStore(); |
|
|
const catchStore = useCatchStore(); |
|
|
const dict = catchStore.getDicts(["procurementMethod","AuditUnitPresetting","ReviewePresetSetting"]); |
|
|
let formDataRef = ref() |
|
|
let formReviewRef = ref() |
|
|
const loading = ref(false) |
|
|
const route = useRoute(); |
|
|
const finishDialog = ref(false) |
|
|
const rejectDialog = ref(false) |
|
|
const endDialog =ref(false) |
|
|
const isAudit = ref(false) |
|
|
const isEndData = ref(false) |
|
|
let activeName = ref("initial") |
|
|
const addFileDialog = ref(false) |
|
|
|
|
|
let formData = ref({ |
|
|
project: { |
|
|
projectType: null, |
|
|
node: 'initial' |
|
|
}, |
|
|
files: { |
|
|
initial: [], |
|
|
exploration: [], |
|
|
cross: [] |
|
|
}, |
|
|
review: { |
|
|
isExploration:'2', |
|
|
isCross:'1' |
|
|
} |
|
|
}) |
|
|
const fileTable = ref({ |
|
|
request: false, |
|
|
type: "普通附件", |
|
|
fileName: null, |
|
|
fileNode: null |
|
|
}) |
|
|
const addFileTableLoading = ref(false) |
|
|
|
|
|
const catchSotre = useCatchStore(); |
|
|
const departs = catchStore.getDepartsAll(); |
|
|
|
|
|
const isDisabled = ref(false) |
|
|
const isAuditButton = ref(false) |
|
|
const datePicker = ref() |
|
|
const serviceTime = ref([]) |
|
|
const editAll = ref(false) |
|
|
|
|
|
// åˆ é™¤ |
|
|
const delDialog = ref(false); |
|
|
const delFormData = ref({}); |
|
|
const deleteFlag = ref(false) |
|
|
|
|
|
// 审å‡<EFBFBD>金é¢<EFBFBD>规范 |
|
|
const fixPrecision = (num, precision = 2) => { |
|
|
if (num === null || num === undefined || num === '') return 0 |
|
|
return parseFloat(Number(num).toFixed(precision)) |
|
|
} |
|
|
|
|
|
const handleDel= async ()=> { |
|
|
const body ={ |
|
|
id: route.query.id, |
|
|
deleteReason: delFormData.value.deleteReason |
|
|
} |
|
|
await deleteReportProject(body); |
|
|
closeFun(); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const auditEdit = () => { |
|
|
// 进入“全部å<EFBFBD>¯ç¼–辑模å¼<EFBFBD>â€<EFBFBD> |
|
|
editAll.value = !editAll.value |
|
|
// 报审信æ<EFBFBD>¯é‚£å<EFBFBD>—也解é”<EFBFBD> |
|
|
isDisabled.value = !isDisabled.value |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const shouldDisable = (val) => { |
|
|
// 全局编辑模å¼<EFBFBD> & 进窗æ<EFBFBD>¢å¤<EFBFBD>:都应å…<EFBFBD>许编辑(除了 'audit' 控制区ä¸<EFBFBD>è¦<EFBFBD>放开) |
|
|
if (val !== 'audit') { |
|
|
if (editAll.value) return false; |
|
|
if (formData.value.project.isRecessed == 1) return false; |
|
|
} |
|
|
// å<EFBFBD>¦åˆ™æŒ‰åŽŸå…ˆèŠ‚ç‚¹è§„åˆ™ç¦<EFBFBD>用 |
|
|
return isAuditEdit(val); |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获å<EFBFBD>–详情 |
|
|
const getDetailFun = async (val) => { |
|
|
|
|
|
loading.value = true; |
|
|
|
|
|
formData.value = await getDetail({"id": val}); |
|
|
|
|
|
if (route.query.disabledVal) { |
|
|
isDisabled.value = true |
|
|
} |
|
|
debugger |
|
|
//报审 |
|
|
if ((!['initial'].includes(formData.value.project.node))) { |
|
|
isDisabled.value = true; |
|
|
} |
|
|
|
|
|
if (route.query.node && !['initial'].includes(route.query.node)) { |
|
|
isDisabled.value = true; |
|
|
} |
|
|
if (route.query.isAudit) { |
|
|
isAuditButton.value = true |
|
|
} |
|
|
if(formData.value.project.isRecessed == 1){ |
|
|
isDisabled.value = false; |
|
|
} |
|
|
//编辑 |
|
|
if (route.query.isAudit && userStore.user) { |
|
|
//一审审计员 |
|
|
if (formData.value.project.node === 'first') { |
|
|
formData.value.review.firstAuditor = userStore.user.nickName; |
|
|
rulesDataTwo.value.firstMoney = [ |
|
|
{required: true, message: '请选择一审金é¢<EFBFBD>', trigger: 'blur'}, |
|
|
|
|
|
]; |
|
|
rulesDataTwo.value.firstReduceMoney = [ |
|
|
{required: true, message: '请选择一审审å‡<EFBFBD>金é¢<EFBFBD>', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.firstTime = [ |
|
|
{required: true, message: '请选择一审日期', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.firstAuditor = [ |
|
|
{required: true, message: '请输入一审审计人', trigger: 'blur'} |
|
|
]; |
|
|
|
|
|
} |
|
|
//二审审计员 |
|
|
if (formData.value.project.node === 'second') { |
|
|
formData.value.review.secondAuditor = userStore.user.nickName; |
|
|
rulesDataTwo.value.secondMoney = [ |
|
|
{required: true, message: '请选择二审金é¢<EFBFBD>', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.secondReduceMoney = [ |
|
|
{required: true, message: '请选择二审审å‡<EFBFBD>金é¢<EFBFBD>', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.secondTime = [ |
|
|
{required: true, message: '请选择二审日期', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.secondAuditor = [ |
|
|
{required: true, message: '请输入二审审计人', trigger: 'blur'} |
|
|
]; |
|
|
if(!formData.value.review.secondMoney){ |
|
|
formData.value.review.secondMoney = formData.value.review.firstMoney || 0; |
|
|
formData.value.review.secondReduceMoney = formData.value.review.firstReduceMoney || 0; |
|
|
} |
|
|
} |
|
|
// 三审审计员 |
|
|
if (formData.value.project.node === 'third') { |
|
|
formData.value.review.thirdlyAuditor = userStore.user.nickName; |
|
|
rulesDataTwo.value.thirdlyMoney = [ |
|
|
{required: true, message: '请选择三审金é¢<EFBFBD>', trigger: 'blur'}, |
|
|
|
|
|
]; |
|
|
rulesDataTwo.value.thirdlyReduceMoney = [ |
|
|
{required: true, message: '请选择三审审å‡<EFBFBD>金é¢<EFBFBD>', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.thirdlyTime = [ |
|
|
{required: true, message: '请选择三审日期', trigger: 'blur'}, |
|
|
]; |
|
|
rulesDataTwo.value.thirdlyAuditor = [ |
|
|
{required: true, message: '请输入三审审计人', trigger: 'blur'} |
|
|
]; |
|
|
if(!formData.value.review.thirdlyMoney){ |
|
|
formData.value.review.thirdlyMoney = formData.value.review.secondMoney || 0; |
|
|
formData.value.review.thirdlyReduceMoney = formData.value.review.secondReduceMoney || 0 |
|
|
} |
|
|
} |
|
|
// å®šæ¡ˆè¡¨å®¡æ ¸ |
|
|
if (formData.value.project.node === 'original' || formData.value.project.node === 'audit') { |
|
|
rulesData.value.referenceNumber = [ |
|
|
{required: true, message: '请输入文å<EFBFBD>·', trigger: 'blur'} |
|
|
]; |
|
|
rulesData.value.publicationDate = [ |
|
|
{required: true, message: '请选择å<EFBFBD>‘文日期', trigger: 'blur'} |
|
|
]; |
|
|
} |
|
|
} |
|
|
deleteFlag.value= formData.value.project.deleteFlag |
|
|
query.value.applicantId =formData.value.project?.applicantId; |
|
|
// query.value.departId = formData.value.project?.auditUnitId |
|
|
getPoliceList(); |
|
|
await nextTick(() => { |
|
|
if (datePicker.value) { |
|
|
datePicker.value.handleClose() |
|
|
} |
|
|
}) |
|
|
loading.value = false; |
|
|
|
|
|
} |
|
|
|
|
|
//审查内容是å<EFBFBD>¦å…<EFBFBD>许编辑 |
|
|
const isAuditEdit = (val,label=null) => { |
|
|
if(formData.value.project.isRecessed == 1 && label === null){ |
|
|
return false; |
|
|
} |
|
|
if (route.query.node) { |
|
|
return true; |
|
|
} else { |
|
|
if (val instanceof Array) { |
|
|
return !val.includes(formData.value.project.node) |
|
|
} |
|
|
return (formData.value.project.node !== val) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const isAuditShow = (val,label=null) => { |
|
|
if(formData.value.project.isRecessed == 1 && label === null){ |
|
|
return false; |
|
|
} |
|
|
if (route.query.node) { |
|
|
return true; |
|
|
} else { |
|
|
if (val instanceof Array) { |
|
|
return val.includes(formData.value.project.node) |
|
|
} |
|
|
return (formData.value.project.node == val) |
|
|
} |
|
|
} |
|
|
//åˆ é™¤é™„ä»¶ |
|
|
const delFileData = async (row,index) => { |
|
|
await feedback.confirm(`ç¡®è®¤åˆ é™¤é™„ä»¶ ?`) |
|
|
if(row.request){ |
|
|
row.fileData =[] |
|
|
}else{ |
|
|
formData.value.files[activeName.value].splice(index,1) |
|
|
} |
|
|
row.fileData=[] |
|
|
} |
|
|
const rulesData = ref({ |
|
|
reportType: [{required: true, message: '请选择报审类型', trigger: 'blur'}], |
|
|
reportName: [{required: true, message: '请输入项目å<EFBFBD><EFBFBD>ç§°', trigger: 'blur'}], |
|
|
projectType: [{required: true, message: '请选择项目类别', trigger: 'blur'}], |
|
|
auditUnitId: [{required: true, message: '请选择审计å<EFBFBD>•ä½<EFBFBD>', trigger: 'blur'}], |
|
|
projectUnitId: [{required: true, message: '请选择项目å<EFBFBD>•ä½<EFBFBD>', trigger: 'blur'}], |
|
|
projectPrincipal: [{required: true, message: '请选择报审类型', trigger: 'blur'}], |
|
|
projectPhone: [{required: true, message: '请选择负责人è<EFBFBD>”系方å¼<EFBFBD>', trigger: 'blur'}], |
|
|
purchaseMethod: [{required: true, message: 'è¯·é€‰æ‹©é‡‡è´æ–¹å¼<EFBFBD>', trigger: 'blur'}], |
|
|
reportMoney: [{required: true, message: '请选择报审金é¢<EFBFBD>', trigger: 'blur'}], |
|
|
projectApprovalMoney: [{required: true, message: '请选择立项金é¢<EFBFBD>', trigger: 'blur'}], |
|
|
projectApprovalLead: [{required: true, message: '请选择报审领导', trigger: 'blur'}], |
|
|
applicant: [{required: true, message: '请输入报审人', trigger: 'blur'}], |
|
|
applicantTime: [{required: true, message: '请输入报审日期', trigger: 'blur'}], |
|
|
contractTime: [{required: true, message: '请输入å<EFBFBD>ˆå<EFBFBD>Œç¾è®¢æ—¥æœŸ', trigger: 'blur'}], |
|
|
contractMount: [{required: true, message: '请输入å<EFBFBD>ˆå<EFBFBD>Œé‡‘é¢<EFBFBD>', trigger: 'blur'}], |
|
|
serviceUnit: [{required: true, message: '请输入æœ<EFBFBD>务å<EFBFBD>•ä½<EFBFBD>', trigger: 'blur'}], |
|
|
serviceUnitManager: [{required: true, message: '请输入æœ<EFBFBD>务å<EFBFBD>•ä½<EFBFBD>负责人', trigger: 'blur'}], |
|
|
serviceTime: [{required: true, message: '请输入报审日期', trigger: 'blur'}], |
|
|
serviceUnitPhone: [{required: true, message: '请输入æœ<EFBFBD>务å<EFBFBD>•ä½<EFBFBD>è<EFBFBD>”系电è¯<EFBFBD>', trigger: 'blur'}], |
|
|
projectApprovalTime: [{required: true, message: '请输入立项日期', trigger: 'blur'}], |
|
|
applyGovernmentTime: [{required: true, message: 'è¯·é€‰æ‹©ç”³æŠ¥æ”¿åºœé‡‡è´æ—¥æœŸ', trigger: 'blur'}], |
|
|
purchaseTime: [{required: true, message: 'è¯·é€‰æ‹©é‡‡è´æ—¥æœŸ', trigger: 'blur'}], |
|
|
}) |
|
|
const rulesDataTwo = ref({ |
|
|
reviewStatus: [ |
|
|
{required: true, message: '请输入审计情况', trigger: 'blur'} |
|
|
], |
|
|
reviewGist: [ |
|
|
{required: true, message: '请输入审计ä¾<EFBFBD>æ<EFBFBD>®', trigger: 'blur'} |
|
|
], |
|
|
reviewContent: [ |
|
|
{required: true, message: '请输入主è¦<EFBFBD>内容', trigger: 'blur'} |
|
|
], |
|
|
isExploration: [ |
|
|
{required: true, message: '请选择是å<EFBFBD>¦å‹˜å¯Ÿ', trigger: 'blur'} |
|
|
], |
|
|
isCross: [ |
|
|
{required: true, message: '请选择是å<EFBFBD>¦å¯¹å®¡', trigger: 'blur'} |
|
|
] |
|
|
}) |
|
|
const files = ref([]) |
|
|
//å…³é—弹窗 |
|
|
const closeFile = () => { |
|
|
preview.value = false; |
|
|
} |
|
|
|
|
|
//获å<EFBFBD>–æµ<EFBFBD>程 |
|
|
const reportFlowDialog = ref(false) |
|
|
const reportFlowTable = ref([]) |
|
|
const reportFlowLoading = ref(false) |
|
|
const getReportFlowFun = async () => { |
|
|
reportFlowDialog.value = true |
|
|
reportFlowLoading.value=true |
|
|
const res = await getReportFlow({id:formData.value.project.id,code:'report'}); |
|
|
reportFlowLoading.value=false |
|
|
reportFlowTable.value = res; |
|
|
} |
|
|
|
|
|
//ä¿<EFBFBD>å˜æ•°æ<EFBFBD>® |
|
|
const saveFun = async () => { |
|
|
|
|
|
if (['initial', 'review'].includes(formData.value.project.node)) { |
|
|
await formDataRef.value.validate(); |
|
|
} else if (["first", "second", "third"].includes(formData.value.project.node)) { |
|
|
await formReviewRef.value.validate(); |
|
|
} else if (["original"].includes(formData.value.project.node)) { |
|
|
await formDataRef.value.validate(); // å¢žåŠ è¿™éƒ¨åˆ†æ ¡éªŒ |
|
|
} |
|
|
loading.value = true; |
|
|
|
|
|
const res = await saveReportProject(formData.value); |
|
|
feedback.msgSuccess("ä¿<EFBFBD>å˜æˆ<EFBFBD>功"); |
|
|
formData.value = res; |
|
|
await nextTick(() => { |
|
|
if (datePicker.value) { |
|
|
datePicker.value.handleClose() |
|
|
} |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
loading.value = false; |
|
|
return true; |
|
|
} |
|
|
|
|
|
const formatDateOnly = (value) => { |
|
|
if (!value) return ''; |
|
|
if (value instanceof Date) { |
|
|
return timeFormat(value, 'yyyy-mm-dd'); |
|
|
} |
|
|
return String(value).slice(0, 10); |
|
|
} |
|
|
|
|
|
const isInitialSubmitApplicantTimeValid = () => { |
|
|
if (formData.value.project.node !== 'initial') { |
|
|
return true; |
|
|
} |
|
|
const applicantDate = formatDateOnly(formData.value.project.applicantTime); |
|
|
const today = formatDateOnly(new Date()); |
|
|
return applicantDate === today; |
|
|
} |
|
|
//ä¿<EFBFBD>å˜å¹¶ä¸”æ<EFBFBD>¢å¤<EFBFBD> |
|
|
const saveUpRecessed =async ()=>{ |
|
|
loading.value = true; |
|
|
|
|
|
const res = await saveReportProject(formData.value); |
|
|
formData.value = res; |
|
|
await nextTick(() => { |
|
|
if (datePicker.value) { |
|
|
datePicker.value.handleClose() |
|
|
} |
|
|
}) |
|
|
//todoæ<EFBFBD>¢å¤<EFBFBD>入窗 |
|
|
await feedback.confirm("确定è¦<EFBFBD>进窗å<EFBFBD>—?"); |
|
|
const data = await recessedData({id:formData.value.project.id}); |
|
|
feedback.msgSuccess("å·²é‡<EFBFBD>新进窗") |
|
|
getDetailFun(formData.value.project.id) |
|
|
loading.value = false; |
|
|
return true; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//æ<EFBFBD><EFBFBD>交数æ<EFBFBD>® |
|
|
const submitFun = async () => { |
|
|
if (!isInitialSubmitApplicantTimeValid()) { |
|
|
feedback.msgError('请检查报审日期是å<EFBFBD>¦ä¸ºä»Šå¤©ï¼<EFBFBD>'); |
|
|
return; |
|
|
} |
|
|
await saveFun() |
|
|
dialog.value = true |
|
|
} |
|
|
//å®¡æ ¸é€šè¿‡ä»¥å<EFBFBD>Žï¼Œå±•示详情 |
|
|
const submitFeedback = () => { |
|
|
dialog.value = false |
|
|
getDetailFun(formData.value.project.id) |
|
|
closeFun(); |
|
|
} |
|
|
|
|
|
//获å<EFBFBD>–å<EFBFBD>•ä½<EFBFBD>为简称 |
|
|
// 获å<EFBFBD>–å<EFBFBD>•ä½<EFBFBD>为简称 - 性能优化:使用Mapç¼“å˜æŸ¥æ‰¾ç»“æžœ |
|
|
const departNameCache = new Map(); |
|
|
function getDepartShortName(departData, id, rowName) { |
|
|
// 优先从缓å˜èŽ·å<EFBFBD>– |
|
|
const cacheKey = `${id}_${rowName}`; |
|
|
if (departNameCache.has(cacheKey)) { |
|
|
formData.value.project[rowName] = departNameCache.get(cacheKey); |
|
|
return; |
|
|
} |
|
|
if (departData) { |
|
|
for (let i = 0; i < departData.length; i++) { |
|
|
let s = departData[i]; |
|
|
if (s.id === id) { |
|
|
formData.value.project[rowName] = s.shortName; |
|
|
departNameCache.set(cacheKey, s.shortName); |
|
|
break; |
|
|
} |
|
|
if (s.children) { |
|
|
const childResult = findDepartInChildren(s.children, id); |
|
|
if (childResult) { |
|
|
formData.value.project[rowName] = childResult; |
|
|
departNameCache.set(cacheKey, childResult); |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
// 辅助函数:递归查找å<EFBFBD>部门 |
|
|
function findDepartInChildren(children, id) { |
|
|
for (let i = 0; i < children.length; i++) { |
|
|
let s = children[i]; |
|
|
if (s.id === id) { |
|
|
return s.shortName; |
|
|
} |
|
|
if (s.children) { |
|
|
const result = findDepartInChildren(s.children, id); |
|
|
if (result) return result; |
|
|
} |
|
|
} |
|
|
return null; |
|
|
} |
|
|
|
|
|
//获å<EFBFBD>–tabå<EFBFBD><EFBFBD> |
|
|
const handleClick = (tab, event) => { |
|
|
activeName.value = tab.props.name |
|
|
filesData.value = [] |
|
|
} |
|
|
|
|
|
|
|
|
//å…³é— |
|
|
const closeFun = () => { |
|
|
if(route.query.disabledVal){ |
|
|
useTabsStore().removeTab('/entryWindow', router); |
|
|
router.push({path:route.query.backPath}) |
|
|
} |
|
|
if (route.query.node) { |
|
|
useTabsStore().removeTab('/report/edit/controlPrice', router); |
|
|
router.push({path:route.query.backPath}) |
|
|
} else { |
|
|
useTabsStore().removeTab('/report/edit/controlPrice', router); |
|
|
router.push({path:"/work", query:{"load": true}}) |
|
|
} |
|
|
} |
|
|
|
|
|
//入窗审批界é<EFBFBD>¢å…³é— |
|
|
const closeAudit = () => { |
|
|
dialog.value = false |
|
|
finishDialog.value = false; |
|
|
rejectDialog.value = false |
|
|
} |
|
|
//æ ¹æ<EFBFBD>®è¾“入值获å<EFBFBD>–ä¿¡æ<EFBFBD>¯ |
|
|
const inputGetList = (val) => { |
|
|
query.value.name = val; |
|
|
getPoliceList() |
|
|
} |
|
|
//å®¡æ ¸äºº |
|
|
const query = ref({ |
|
|
current: 1, |
|
|
size:100, |
|
|
departBranch: true |
|
|
}); |
|
|
let polices = ref([]) |
|
|
|
|
|
function getPoliceList() { |
|
|
// query.value.departId = formData.value.project.auditUnitId; |
|
|
listPolice(query.value).then((data) => { |
|
|
polices.value = data.records; |
|
|
}); |
|
|
} |
|
|
|
|
|
let date = ref() |
|
|
|
|
|
|
|
|
//åˆ é™¤æ•°æ<EFBFBD>® |
|
|
const removeFun = async () => { |
|
|
debugger |
|
|
delDialog.value = true; |
|
|
|
|
|
// await feedback.confirm("是å<EFBFBD>¦ç¡®è®¤åˆ 除数æ<EFBFBD>®ï¼Ÿ"); |
|
|
// const res = await removeReportProject(route.query.id); |
|
|
// closeFun(); |
|
|
|
|
|
} |
|
|
//æ<EFBFBD><EFBFBD>交审批 |
|
|
const approveFun = async () => { |
|
|
debugger |
|
|
if (['audit'].includes(formData.value.project.node)){ |
|
|
if (!hasAuditAttachment()) { |
|
|
feedback.msgWarning("è¯·ä¸Šä¼ ã€<EFBFBD>审计附件】"); |
|
|
activeName.value = "audit"; |
|
|
return; |
|
|
} |
|
|
} |
|
|
if (!['initial'].includes(formData.value.project.node)) { |
|
|
const promise = await saveFun(); |
|
|
if (promise) { |
|
|
finishDialog.value = true |
|
|
isAudit.value = true |
|
|
} |
|
|
} |
|
|
finishDialog.value = true |
|
|
isAudit.value = true |
|
|
} |
|
|
//结æ<EFBFBD>Ÿ |
|
|
const endFun =async ()=>{ |
|
|
debugger |
|
|
if (!hasAuditAttachment()) { |
|
|
feedback.msgWarning("è¯·å›žé€€å¹¶ä¸Šä¼ ã€<EFBFBD>审计附件】"); |
|
|
activeName.value = "audit"; |
|
|
return; |
|
|
} |
|
|
try { |
|
|
await formDataRef.value.validate() |
|
|
} catch (error) { |
|
|
feedback.msgWarning("请输入必填项"); |
|
|
return |
|
|
} |
|
|
endDialog.value = true |
|
|
isAudit.value = true |
|
|
} |
|
|
|
|
|
//驳回 |
|
|
const rejectFun = () => { |
|
|
isAudit.value = false |
|
|
rejectDialog.value = true; |
|
|
} |
|
|
//一审ã€<EFBFBD>二审ã€<EFBFBD>三审是å<EFBFBD>¦æ˜¾ç¤º |
|
|
const isShowFun = (list = []) => { |
|
|
if (route.query.node) { |
|
|
if (['Lead', 'original', 'audit','end'].includes(route.query.node)) { |
|
|
return true |
|
|
} else { |
|
|
return list.includes(route.query.node) |
|
|
} |
|
|
} else { |
|
|
if (['Lead', 'original', 'audit','end'].includes(formData.value.project.node)) { |
|
|
return true |
|
|
} else { |
|
|
return list.includes(formData.value.project.node) |
|
|
} |
|
|
} |
|
|
} |
|
|
//tab是å<EFBFBD>¦æ˜¾ç¤º |
|
|
function FileTabShowFun (){ |
|
|
let show = true; |
|
|
if(!formData.value.project.node){ |
|
|
return false; |
|
|
} |
|
|
let data = formData.value.project.node; |
|
|
switch (data){ |
|
|
case "initial": |
|
|
case "review": |
|
|
show=false; |
|
|
break |
|
|
default: |
|
|
show=true; |
|
|
break |
|
|
} |
|
|
|
|
|
return show; |
|
|
} |
|
|
|
|
|
function showSjbg() { |
|
|
if(!formData.value.project.node){ |
|
|
return false; |
|
|
} |
|
|
const node = formData.value.project.node; |
|
|
const nodes = ['original', 'audit', 'end']; |
|
|
return nodes.indexOf(node) > -1 |
|
|
} |
|
|
|
|
|
//æ‰“å¼€æ–‡ä»¶ä¸Šä¼ ç•Œé<EFBFBD>¢ï¼Œè®°å½•æ–‡ä»¶ä¸Šä¼ è¡Œindex |
|
|
const upFileDialog =ref(false) |
|
|
let fileIndex = ref(0); |
|
|
// ä¸Šä¼ ç•Œé<EFBFBD>¢çš„æ‰“å¼€ |
|
|
const showUpFileDialog = (index)=>{ |
|
|
upFileDialog.value=true; |
|
|
fileIndex.value=index; |
|
|
const key = activeName.value; |
|
|
const list = formData.value.files[key] || (formData.value.files[key] = []); |
|
|
const row = list[index]; |
|
|
if (row && !Array.isArray(row.fileData)) row.fileData = []; |
|
|
} |
|
|
let importLoading; |
|
|
function beforeUpload() { |
|
|
importLoading = ElLoading.service({ |
|
|
lock: true, |
|
|
text: "æ•°æ<EFBFBD>®å¯¼å…¥ä¸", |
|
|
background: "rgba(0, 0, 0, 0.7)", |
|
|
}); |
|
|
} |
|
|
|
|
|
//æ·»åŠ é™„ä»¶ |
|
|
const addFileTable =()=>{ |
|
|
fileTable.value.fileNode =activeName.value |
|
|
addFileDialog.value=true; |
|
|
} |
|
|
|
|
|
const addFileSubmit = ()=>{ |
|
|
addFileTableLoading.value=true; |
|
|
if(!formData.value.files[activeName.value]){ |
|
|
formData.value.files[activeName.value] = [] |
|
|
} |
|
|
formData.value.files[activeName.value].push({ fileData: [], ...fileTable.value }); |
|
|
addFileDialog.value=false; |
|
|
addFileTableLoading.value=false; |
|
|
} |
|
|
const fileDialogClose = ()=>{ |
|
|
fileTable.value={ |
|
|
request: false, |
|
|
type: "普通附件", |
|
|
fileName: null, |
|
|
fileNode: null, |
|
|
fileData:[] |
|
|
} |
|
|
addFileDialog.value=false; |
|
|
} |
|
|
|
|
|
//æ·»åŠ é™„ä»¶æŒ‰é’®æ˜¯å<EFBFBD>¦æ˜¾ç¤º |
|
|
function addFileFun(val) { |
|
|
debugger |
|
|
let show = true; |
|
|
console.log("adaddFileFunVal== " + val) |
|
|
console.log("formData.value.project.node==" + formData.value.project.node) |
|
|
switch (val) { |
|
|
case "initial": |
|
|
if (route.query.node) { |
|
|
show = route.query.node === 'initial'; |
|
|
} else { |
|
|
show = formData.value.project.node === "initial" |
|
|
} |
|
|
break |
|
|
case "exploration": |
|
|
case "cross": |
|
|
case "audit": |
|
|
show = !(['first','second','third','Lead', 'original','audit'].indexOf(formData.value.project.node) < 0); |
|
|
break; |
|
|
} |
|
|
console.log("show" + show) |
|
|
if(formData.value.project.isRecessed == 1){ |
|
|
return true; |
|
|
} |
|
|
|
|
|
return show; |
|
|
} |
|
|
/** |
|
|
* é™„ä»¶ä¸Šä¼ æˆ–åˆ é™¤ |
|
|
* @param node 按钮所属tab |
|
|
* */ |
|
|
function disableFileBtn(node){ |
|
|
//报审附件 initial |
|
|
//å®¡æ ¸é™„ä»¶ audit |
|
|
//勘察附件 exploration |
|
|
//对审附件 cross |
|
|
console.log('activeName=='+ node) |
|
|
console.log('formData.value.project.node==' + formData.value.project.node) |
|
|
let disable; |
|
|
switch (node){ |
|
|
case "initial": |
|
|
//å<EFBFBD>ªåœ¨ç¼–辑环境å<EFBFBD>¯ä»¥ä½¿ç”¨ |
|
|
disable = isDisabled.value; |
|
|
break; |
|
|
case "audit": |
|
|
disable =(['first','second','third','Lead', 'original','audit'].indexOf(formData.value.project.node) < 0); |
|
|
break; |
|
|
case "exploration": |
|
|
disable =(['first','second','third','Lead'].indexOf(formData.value.project.node) < 0); |
|
|
break; |
|
|
case "cross": |
|
|
disable =(['first','second','third','Lead'].indexOf(formData.value.project.node) < 0); |
|
|
break; |
|
|
case "sjbg": |
|
|
disable =(['original','audit'].indexOf(formData.value.project.node) < 0); |
|
|
break; |
|
|
default: |
|
|
disable=true; |
|
|
break |
|
|
} |
|
|
//åˆ¤æ–æ•°æ<EFBFBD>®æƒ…况 |
|
|
if(formData.value.project.isRecessed == 1){ |
|
|
return false; |
|
|
} |
|
|
return disable; |
|
|
|
|
|
} |
|
|
|
|
|
//定案表导出 |
|
|
const getExcelContrilPriceFun = async ()=>{ |
|
|
if(formData.value.review.finalizationPath){ |
|
|
window.open(`${BASE_PATH}/file/stream/${formData.value.review.finalizationPath}`); |
|
|
}else{ |
|
|
let name =formData.value.project.reportName + formData.value.project.reportType+"定案表.xls" |
|
|
const res = await getExcelContrilPrice(formData.value.project.id, name); |
|
|
} |
|
|
} |
|
|
|
|
|
const isCityAudit = computed(()=>{ |
|
|
if( formData.value?.project?.projectApprovalMoney){ |
|
|
return formData.value?.project?.projectApprovalMoney >= 200000 |
|
|
}else{ |
|
|
return false; |
|
|
} |
|
|
}) |
|
|
|
|
|
async function handleSuccess(result, file){ |
|
|
importLoading.close(); |
|
|
if (result.code !== 200) { |
|
|
feedback.msgError("ä¸Šä¼ å¤±è´¥"); |
|
|
return; |
|
|
} |
|
|
|
|
|
formData.value.review.finalizationPath = result.data.filePath; |
|
|
const res = await upFinalizationPathFun(formData.value); |
|
|
feedback.msgSuccess("导入完æˆ<EFBFBD>") |
|
|
} |
|
|
|
|
|
|
|
|
// const DepartList = ref(null) |
|
|
//获å<EFBFBD>–上级å<EFBFBD>•ä½<EFBFBD>(判æ–超级管ç<EFBFBD>†å‘˜ã€<EFBFBD>是å<EFBFBD>¦äºŒçº§å<EFBFBD>•ä½<EFBFBD>) |
|
|
const getSuperiorUnitByUnitFun = ()=>{ |
|
|
let {project} = formData.value; |
|
|
let auditUnitId = getDictValue(dict.AuditUnitPresetting,"市局审计å<EFBFBD>•ä½<EFBFBD>"); |
|
|
let departId = userStore.user.departId; |
|
|
|
|
|
//获å<EFBFBD>– 二级å<EFBFBD>•ä½<EFBFBD>列表,判æ–当å‰<EFBFBD>登陆人是å<EFBFBD>¦ä¸ºäºŒçº§å<EFBFBD>•ä½<EFBFBD> |
|
|
let departList = catchSotre.getDepartsAll(); |
|
|
let departIds = departList.map(s=>s.id); |
|
|
if(departIds.indexOf(departId) >= 0){ |
|
|
project.auditUnitId=auditUnitId; |
|
|
} |
|
|
// else{ |
|
|
// //获å<EFBFBD>–它的上层å<EFBFBD>•ä½<EFBFBD> |
|
|
// const depart = getDepartContent(departs,departId); |
|
|
// if(depart){ |
|
|
// DepartList.value =getDepartContent(departs,depart.pid) |
|
|
// } |
|
|
// project.auditUnitId =( depart!= null?depart.pid:auditUnitId); |
|
|
// } |
|
|
// |
|
|
// //åˆ¤æ–æ˜¯å<EFBFBD>¦æ˜¯è¶…级管ç<EFBFBD>†å‘˜ |
|
|
// if(departId){ |
|
|
// if(auditUnitId === departId){ |
|
|
// DepartList.value=null; |
|
|
// project.auditUnitId=auditUnitId; |
|
|
// }else{ |
|
|
// |
|
|
// } |
|
|
// }else{ |
|
|
// project.auditUnitId=auditUnitId; |
|
|
// } |
|
|
getDepartShortName(departs,auditUnitId,'auditUnit'); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 监控是å<EFBFBD>¦ä¸ºåˆ›å»º |
|
|
watch(() => route.query.id, (val) => { |
|
|
if (val) { |
|
|
getDetailFun(val); |
|
|
} else { |
|
|
//åˆ<EFBFBD>始化数æ<EFBFBD>® |
|
|
if (userStore.user) { |
|
|
query.value.applicantId = userStore.user.userName; |
|
|
formData.value.project.projectUnitId = userStore.user?.departId; |
|
|
formData.value.project.applicantId = userStore.user.userName; |
|
|
formData.value.project.applicant = userStore.user.nickName; |
|
|
formData.value.project.applicantTime =timeFormat(new Date(),'yyyy-mm-dd hh:MM:ss'); |
|
|
getSuperiorUnitByUnitFun(); |
|
|
} |
|
|
} |
|
|
}, {deep: true, immediate: true}) |
|
|
//报审人姓å<EFBFBD><EFBFBD> |
|
|
watch(()=>formData.value.project.applicantId,(val)=>{ |
|
|
if(val && polices.value.length > 0 && polices.value.filter(s=>s.idCode === val) > 0){ |
|
|
formData.value.project.applicant =polices.value.filter(s=>s.idCode === val)[0].name; |
|
|
} |
|
|
},{deep:true,immediate:true}) |
|
|
|
|
|
|
|
|
|
|
|
//监测是å<EFBFBD>¦æ˜¯ç»“算项目报审 |
|
|
watch(() => route.query.isEnd, (val) => { |
|
|
if(val){ |
|
|
isEndData.value = val === 'true'; |
|
|
if (isEndData.value) { |
|
|
formData.value.project.reportType = '结算项目' |
|
|
} else { |
|
|
formData.value.project.reportType = '项目控制价' |
|
|
} |
|
|
}else{ |
|
|
//å…³é—窗å<EFBFBD>£ |
|
|
useTabsStore().removeTab('/report/edit/controlPrice', router); |
|
|
} |
|
|
|
|
|
}, {deep: true, immediate: true}) |
|
|
//附件列表 |
|
|
watch(() => formData.value.project.projectType, (val) => { |
|
|
// 有 id 的时候,说明是编辑/详情,ä¸<EFBFBD>è¦<EFBFBD>覆盖å<EFBFBD>Žç«¯é™„ä»¶ |
|
|
if (route.query.id) return; |
|
|
if (!(route.query.node || route.query.isAudit)) { |
|
|
let fileDataList = isEndData.value ? fileEndDict : fileDict; |
|
|
if (val) { |
|
|
let data = fileDataList.value.filter(s => s.type.includes(val)) |
|
|
formData.value.files.initial = data ? data[0].fileData : fileDataList.value[0].fileData |
|
|
} else { |
|
|
formData.value.files.initial = fileDataList.value[0].fileData |
|
|
} |
|
|
} |
|
|
}, {immediate: true, deep: true}) |
|
|
//监测å<EFBFBD>•ä½<EFBFBD>,获å<EFBFBD>–å<EFBFBD>•ä½<EFBFBD>简称 |
|
|
watch(() => formData.value.project.projectUnitId, (val) => { |
|
|
if (val) { |
|
|
getDepartShortName(departs, val, 'projectUnit') |
|
|
} |
|
|
}, {immediate: true, deep: true}) |
|
|
//监测审计å<EFBFBD>•ä½<EFBFBD>,获å<EFBFBD>–审计å<EFBFBD>•ä½<EFBFBD>简称 |
|
|
watch(() => formData.value.project.auditUnitId, (val) => { |
|
|
if (val) { |
|
|
getPoliceList(); |
|
|
getDepartShortName(departs, val, 'auditUnit') |
|
|
} |
|
|
}, {immediate: true, deep: true}) |
|
|
//一审审å‡<EFBFBD>金é¢<EFBFBD> |
|
|
watch(()=>formData.value.review.firstMoney,(val)=>{ |
|
|
if( val){ |
|
|
const reduceMoney = Number(formData.value.project.reportMoney) - Number(val) |
|
|
formData.value.review.firstReduceMoney = fixPrecision(reduceMoney) |
|
|
// formData.value.review.firstReduceMoney = formData.value.project.reportMoney - formData.value.review.firstMoney |
|
|
} |
|
|
|
|
|
},{deep:true}) |
|
|
|
|
|
//二审审å‡<EFBFBD>金é¢<EFBFBD> |
|
|
watch(()=>formData.value.review.secondMoney,(val)=>{ |
|
|
if(val){ |
|
|
const reduceMoney = Number(formData.value.project.reportMoney) - Number(val) |
|
|
formData.value.review.secondReduceMoney = fixPrecision(reduceMoney) |
|
|
// formData.value.review.secondReduceMoney = formData.value.project.reportMoney - formData.value.review.secondMoney |
|
|
} |
|
|
|
|
|
},{deep:true}) |
|
|
|
|
|
//三审审å‡<EFBFBD>金é¢<EFBFBD> |
|
|
watch(()=>formData.value.review.thirdlyMoney,(val)=>{ |
|
|
if(val){ |
|
|
const reduceMoney = Number(formData.value.project.reportMoney) - Number(val) |
|
|
formData.value.review.thirdlyReduceMoney = fixPrecision(reduceMoney) |
|
|
// formData.value.review.thirdlyReduceMoney = formData.value.project.reportMoney - formData.value.review.thirdlyMoney |
|
|
} |
|
|
|
|
|
},{deep:true}) |
|
|
|
|
|
function hasAuditAttachment() { |
|
|
const auditRows = formData.value?.files?.audit || []; |
|
|
// å<EFBFBD>ªè¦<EFBFBD>ä»»æ„<EFBFBD>一行 fileData 有文件,就算通过 |
|
|
return auditRows.some(row => Array.isArray(row.fileData) && row.fileData.length > 0); |
|
|
} |
|
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
<template> |
|
|
<div class="wrapper control-price-page" v-loading="loading"> |
|
|
<main> |
|
|
<el-header> |
|
|
<h2 style="text-align: center">{{ isEndData ? '结算项目报审' : '控制价项目报审' }}</h2> |
|
|
</el-header> |
|
|
<el-main> |
|
|
<div class="flex v-center" style="height:30px;margin-bottom: 10px"> |
|
|
<h5>报审信æ<EFBFBD>¯</h5> |
|
|
</div> |
|
|
<div> |
|
|
<el-form :loading="loading" :model="formData.project" ref="formDataRef" :rules="rulesData" label-width="140"> |
|
|
<el-row> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="报审类型" prop="reportType"> |
|
|
<el-select :disabled="true" v-model="formData.project.reportType"> |
|
|
<el-option value="项目控制价" label="项目控制价"></el-option> |
|
|
<el-option value="结算项目" label="结算项目"></el-option> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="项目å<EFBFBD><EFBFBD>ç§°" prop="reportName"> |
|
|
<el-tooltip |
|
|
effect="dark" |
|
|
:content="formData.project.reportName" |
|
|
placement="top" |
|
|
:disabled="!formData.project.reportName" |
|
|
> |
|
|
<el-input |
|
|
v-model="formData.project.reportName" |
|
|
:disabled="isDisabled" |
|
|
show-word-limit |
|
|
maxlength="200" |
|
|
/> |
|
|
</el-tooltip> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="项目类别"> |
|
|
<el-select :disabled="isDisabled" v-model="formData.project.projectType"> |
|
|
<el-option value="æœ<EFBFBD>务类" label="æœ<EFBFBD>务类"></el-option> |
|
|
<el-option value="工程类" label="工程类"></el-option> |
|
|
<el-option value="货物类" label="货物类"></el-option> |
|
|
<el-option value="ä¿¡æ<EFBFBD>¯åŒ–ç±»" label="ä¿¡æ<EFBFBD>¯åŒ–ç±»"></el-option> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="审计å<EFBFBD>•ä½<EFBFBD>" prop="auditUnitId"> |
|
|
<depart-tree-select :auth="false" :disabled="isDisabled" v-model="formData.project.auditUnitId" |
|
|
:size="'default'" placeholder="" clearable :disableRoot="true" |
|
|
:onlySecondLevel="true"/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="项目å<EFBFBD>•ä½<EFBFBD>" prop="projectUnitId"> |
|
|
<depart-tree-select :auth="false" :disabled="isDisabled" v-model="formData.project.projectUnitId" |
|
|
:size="'default'" placeholder="" clearable :disableRoot="true"/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="项目负责人" prop="projectPrincipal"> |
|
|
<el-input :disabled="isDisabled" v-model="formData.project.projectPrincipal"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="负责人è<EFBFBD>”系方å¼<EFBFBD>" prop="projectPhone"> |
|
|
<el-input :disabled="isDisabled" v-model="formData.project.projectPhone"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item v-if="isEndData" label="报审金é¢<EFBFBD>(元)" prop="reportMoney"> |
|
|
<el-input :disabled="isDisabled" type="number" v-model="formData.project.reportMoney"></el-input> |
|
|
</el-form-item> |
|
|
<el-form-item v-else label="é‡‡è´æ–¹å¼<EFBFBD>" prop="purchaseMethod"> |
|
|
<el-select :disabled="isDisabled" v-model="formData.project.purchaseMethod"> |
|
|
<el-option v-for="(item,index) in dict.procurementMethod" :key="index" |
|
|
:label="item.dictLabel" |
|
|
:value="item.dictValue" |
|
|
></el-option> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row> |
|
|
<el-col :span="6"> |
|
|
<el-form-item v-if="isEndData" label="立项日期" prop="projectApprovalTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="isDisabled" |
|
|
v-model="formData.project.projectApprovalTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择立项日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
<el-form-item v-else label="报审金é¢<EFBFBD>(元)" prop="reportMoney"> |
|
|
<el-input :disabled="isDisabled" type="number" v-model="formData.project.reportMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="立项金é¢<EFBFBD>(元)" prop="projectApprovalMoney"> |
|
|
<el-input :disabled="isDisabled" type="number" |
|
|
v-model="formData.project.projectApprovalMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="立项审批领导" prop="projectApprovalLead"> |
|
|
<el-input :disabled="isDisabled" v-model="formData.project.projectApprovalLead"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="报审人" prop="applicant"> |
|
|
<!-- <el-input :disabled="isDisabled" v-model="formData.project.applicant"></el-input>--> |
|
|
<el-select :disabled="isDisabled" remote v-model="formData.project.applicantId" :remote-method="inputGetList" |
|
|
filterable> |
|
|
<el-option v-for="(item,index) in polices" :key="index" :value="item.idCode" |
|
|
:label="item.name"></el-option> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row> |
|
|
<el-col :span="6" v-if="isEndData && formData.project.projectApprovalMoney >= 200000 "> |
|
|
<el-form-item label="ç”³æŠ¥æ”¿åºœé‡‡è´æ—¥æœŸ" prop="applyGovernmentTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="isDisabled" |
|
|
v-model="formData.project.applyGovernmentTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="é€‰æ‹©ç”³æŠ¥æ”¿åºœé‡‡è´æ—¥æœŸ" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6" v-if="isEndData"> |
|
|
<el-form-item label="é‡‡è´æ–¹å¼<EFBFBD>" prop="purchaseMethod"> |
|
|
<el-select :disabled="isDisabled" v-model="formData.project.purchaseMethod"> |
|
|
<el-option v-for="(item,index) in dict.procurementMethod" :key="index" |
|
|
:label="item.dictLabel" |
|
|
:value="item.dictValue" |
|
|
></el-option> |
|
|
</el-select> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6" v-if="isEndData"> |
|
|
<el-form-item label="é‡‡è´æ—¥æœŸ" prop="purchaseTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="isDisabled" |
|
|
v-model="formData.project.purchaseTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="é€‰æ‹©é‡‡è´æ—¥æœŸ" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="报审日期" prop="applicantTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="isDisabled" |
|
|
v-model="formData.project.applicantTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择报审日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col v-if="!isEndData && (!isAuditEdit(['original','audit'], 'æ–‡å<EFBFBD>·') || formData.project.node === 'end')" :span="6"> |
|
|
<el-form-item label="æ–‡å<EFBFBD>·" prop="referenceNumber"> |
|
|
<el-input :disabled="shouldDisable(['original','audit'])" v-model="formData.project.referenceNumber" /> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col v-if="!isEndData && (!isAuditEdit(['original','audit'],'å<EFBFBD>‘文日期')) || formData.project.node === 'end'" :span="6"> |
|
|
<el-form-item label="å<EFBFBD>‘文日期" prop="publicationDate"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="shouldDisable(['original','audit'])" |
|
|
v-model="formData.project.publicationDate" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择å<EFBFBD>‘文日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row v-if="isEndData"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="å<EFBFBD>ˆå<EFBFBD>Œç¾è®¢æ—¥æœŸ" prop="contractTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="isDisabled" |
|
|
v-model="formData.project.contractTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择报å<EFBFBD>ˆå<EFBFBD>Œç¾è®¢æ—¥æœŸ" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="å<EFBFBD>ˆå<EFBFBD>Œé‡‘é¢<EFBFBD>" prop="contractMount"> |
|
|
<el-input :disabled="isDisabled" type="number" v-model="formData.project.contractMount"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="æœ<EFBFBD>务å<EFBFBD>•ä½<EFBFBD>" prop="serviceUnit"> |
|
|
<el-input :disabled="isDisabled" v-model="formData.project.serviceUnit"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="æœ<EFBFBD>务å<EFBFBD>•ä½<EFBFBD>负责人" prop="serviceUnitManager"> |
|
|
<el-input :disabled="isDisabled" v-model="formData.project.serviceUnitManager"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row v-if="isEndData"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="æœ<EFBFBD>务日期" prop="serviceTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
ref="datePicker" |
|
|
:disabled="isDisabled" |
|
|
v-model="formData.project.serviceTime" |
|
|
type="daterange" |
|
|
range-separator="-" |
|
|
start-placeholder="开始æœ<EFBFBD>务日期" |
|
|
end-placeholder="结æ<EFBFBD>Ÿæœ<EFBFBD>务日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="æœ<EFBFBD>务å<EFBFBD>•ä½<EFBFBD>è<EFBFBD>”系电è¯<EFBFBD>" prop="serviceUnitPhone"> |
|
|
<el-input :disabled="isDisabled" v-model="formData.project.serviceUnitPhone"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6" v-if="!isAuditEdit(['original','audit']) || formData.project.node === 'end'"> |
|
|
<el-form-item label="æ–‡å<EFBFBD>·" prop="referenceNumber"> |
|
|
<el-input :disabled="isAuditEdit(['original','audit'])" v-model="formData.project.referenceNumber" /> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6" v-if="!isAuditEdit(['original','audit']) || formData.project.node === 'end'"> |
|
|
<el-form-item label="å<EFBFBD>‘文日期" prop="publicationDate"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="isAuditEdit(['original','audit'])" |
|
|
v-model="formData.project.publicationDate" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择å<EFBFBD>‘文日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row v-if="deleteFlag"> |
|
|
<el-col :span="15"> |
|
|
<el-form-item label="åˆ é™¤åŽŸå› " > |
|
|
<el-input type="textarea" :rows="5" :disabled="true" |
|
|
v-model="formData.project.deleteReason"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
</el-form> |
|
|
</div> |
|
|
<hr style="border-color: rgba(232,232,232,0.67);opacity: 0.2"> |
|
|
<div class="flex v-center" style="height:30px;margin-bottom: 10px"> |
|
|
<h5>审计信æ<EFBFBD>¯</h5> |
|
|
</div> |
|
|
<el-form |
|
|
v-if="!(['initial','review'].includes(formData.project.node) || ['initial','review'].includes(route.query.node))" |
|
|
:model="formData.review" ref="formReviewRef" :rules="rulesDataTwo" label-width="160"> |
|
|
<!-- 一审 --> |
|
|
<el-row :gutter="20" v-if="isShowFun(['first','second','third']) "> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="一审金é¢<EFBFBD>(å…ƒ)" prop="firstMoney"> |
|
|
<el-input :disabled="shouldDisable('first')" type="number" v-model="formData.review.firstMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="一审审å‡<EFBFBD>金é¢<EFBFBD>(å…ƒ)" prop="firstReduceMoney"> |
|
|
<el-input :disabled="shouldDisable('first')" type="number" |
|
|
v-model="formData.review.firstReduceMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="一审日期" prop="firstTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="shouldDisable('first')" |
|
|
v-model="formData.review.firstTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择一审日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="一审审计员" prop="firstAuditor"> |
|
|
<el-input :disabled="shouldDisable('first')" v-model="formData.review.firstAuditor"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<!-- 二审--> |
|
|
<el-row :gutter="20" v-if="isShowFun(['second','third'])"> |
|
|
<el-col :span="6 "> |
|
|
<el-form-item label="二审金é¢<EFBFBD>(å…ƒ)" prop="secondMoney"> |
|
|
<el-input :disabled="shouldDisable('second')" type="number" |
|
|
v-model="formData.review.secondMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="二审审å‡<EFBFBD>金é¢<EFBFBD>(å…ƒ)" prop="secondReduceMoney"> |
|
|
<el-input :disabled="shouldDisable('second')" type="number" |
|
|
v-model="formData.review.secondReduceMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="二审日期" prop="secondTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="shouldDisable('second')" |
|
|
v-model="formData.review.secondTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择二审日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="二审审计员" prop="secondAuditor"> |
|
|
<el-input :disabled="shouldDisable('second')" v-model="formData.review.secondAuditor"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<!-- 三审--> |
|
|
<el-row :gutter="20" v-if="isShowFun(['third'])"> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="三审金é¢<EFBFBD>(å…ƒ)" prop="thirdlyMoney"> |
|
|
<el-input :disabled="shouldDisable('third')" type="number" |
|
|
v-model="formData.review.thirdlyMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="三审审å‡<EFBFBD>金é¢<EFBFBD>(å…ƒ)" prop="thirdlyReduceMoney"> |
|
|
<el-input :disabled="shouldDisable('third')" type="number" |
|
|
v-model="formData.review.thirdlyReduceMoney"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="三审日期" prop="thirdlyTime"> |
|
|
<el-date-picker |
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
:disabled="shouldDisable('third')" |
|
|
v-model="formData.review.thirdlyTime" |
|
|
style="width: 100%" |
|
|
type="date" |
|
|
placeholder="选择三审日期" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="6"> |
|
|
<el-form-item label="三审审计员" prop="thirdlyAuditor"> |
|
|
<el-input :disabled="shouldDisable('third')" v-model="formData.review.thirdlyAuditor"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<!--审查ä¾<EFBFBD>æ<EFBFBD>®--> |
|
|
<el-row :gutter="20"> |
|
|
<el-col :span="12"> |
|
|
<el-form-item label="审计情况" prop="reviewStatus"> |
|
|
<el-input :disabled="shouldDisable(['first','third','second'])" type="textarea" :rows="5" |
|
|
v-model="formData.review.reviewStatus"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="12"> |
|
|
<el-form-item label="审计ä¾<EFBFBD>æ<EFBFBD>®" prop="reviewGist"> |
|
|
<el-input :disabled="shouldDisable(['first','third','second'])" type="textarea" :rows="5" |
|
|
v-model="formData.review.reviewGist"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<!--审查内容--> |
|
|
<el-row :gutter="20"> |
|
|
<el-col> |
|
|
<el-form-item label="主è¦<EFBFBD>内容" prop="reviewContent"> |
|
|
<el-input :disabled="shouldDisable(['first','third','second'])" type="textarea" :rows="5" |
|
|
v-model="formData.review.reviewContent"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row :gutter="20"> |
|
|
<el-col :span="12"> |
|
|
<el-form-item label="勘察情况" prop="isExploration"> |
|
|
<el-radio-group :disabled="shouldDisable(['first','third','second'])" |
|
|
v-model="formData.review.isExploration"> |
|
|
<el-radio value="1">已勘察</el-radio> |
|
|
<el-radio value="2">未勘察</el-radio> |
|
|
</el-radio-group> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
<el-col :span="12"> |
|
|
<el-form-item label="对审情况" prop="isCross"> |
|
|
<el-radio-group :disabled="shouldDisable(['first','third','second'])" v-model="formData.review.isCross"> |
|
|
<el-radio value="1">已对审</el-radio> |
|
|
<el-radio value="2">未对审</el-radio> |
|
|
</el-radio-group> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row :gutter="20"> |
|
|
<el-col :span="12"> |
|
|
|
|
|
<el-form-item label="定案表" v-if="isAuditShow(['original','audit','end']) "> |
|
|
<div class="flex between"> |
|
|
<div > |
|
|
<el-button type="primary" link @click="getExcelContrilPriceFun">导出定案表</el-button> |
|
|
</div> |
|
|
<div v-if="!isAuditEdit(['original']) "> |
|
|
<el-upload |
|
|
:multiple="false" |
|
|
:show-file-list="false" |
|
|
:action="`${BASE_PATH}/file/upload`" |
|
|
:headers="{ Authorization: getToken() }" |
|
|
:before-upload="beforeUpload" |
|
|
@success="handleSuccess" |
|
|
> |
|
|
<el-button type="primary" link> |
|
|
导入定案表 |
|
|
</el-button> |
|
|
</el-upload> |
|
|
</div> |
|
|
</div> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
</el-form> |
|
|
|
|
|
<div class="table-container"> |
|
|
<el-tabs v-model="activeName" @tab-click="handleClick"> |
|
|
<el-tab-pane label="报审附件" name="initial"></el-tab-pane> |
|
|
<el-tab-pane v-if="FileTabShowFun()" label="审计附件" name="audit"></el-tab-pane> |
|
|
<el-tab-pane v-if="formData.review?.isExploration === '1'" label="勘察附件" name="exploration"></el-tab-pane> |
|
|
<el-tab-pane v-if="formData.review?.isCross === '1'" label="对审附件" name="cross"></el-tab-pane> |
|
|
<el-tab-pane v-if="showSjbg()" label="审计报告" name="sjbg"></el-tab-pane> |
|
|
</el-tabs> |
|
|
<!-- 新增的æ<EFBFBD><EFBFBD>示信æ<EFBFBD>¯ --> |
|
|
<div class="table-tips" style="margin-bottom: 10px; "> |
|
|
<el-alert |
|
|
title='点击åº<EFBFBD>å<EFBFBD>·å·¦ä¾§"å°<EFBFBD>三角"å<EFBFBD>¯ä»¥å±•开查看附件详情' |
|
|
type="warning" |
|
|
:closable="false" |
|
|
show-icon |
|
|
style="padding: 8px 16px; " |
|
|
/> |
|
|
</div> |
|
|
<el-table :data="formData.files[activeName]" preserve-expanded-content style="z-index:9"> |
|
|
<el-table-column type="expand"> |
|
|
<template #default="props"> |
|
|
<div v-if="props.row?.fileData"> |
|
|
<file-list v-model:files="props.row.fileData" :removeEnable="false" ></file-list> |
|
|
</div> |
|
|
<div v-else> |
|
|
<p style="color: darkgray;text-align: center">æ— é™„ä»¶</p> |
|
|
</div> |
|
|
</template> |
|
|
</el-table-column> |
|
|
<el-table-column width="100" type="index" label="åº<EFBFBD>å<EFBFBD>·" :index="(index)=> index+1"></el-table-column> |
|
|
<el-table-column label="附件类型" prop="type" width="150"></el-table-column> |
|
|
<el-table-column label="ä¸Šä¼ " width="200"> |
|
|
<template #default="{$index,row}"> |
|
|
<el-button type="primary" :disabled="disableFileBtn(activeName)" @click="showUpFileDialog($index)" |
|
|
>ä¸Šä¼ |
|
|
<template #icon> |
|
|
<icon name="el-icon-upload-filled"/> |
|
|
</template> |
|
|
</el-button> |
|
|
</template> |
|
|
</el-table-column> |
|
|
<el-table-column label="åˆ é™¤" width="200"> |
|
|
<template #default="{row,$index}"> |
|
|
<el-button type="default" :disabled="disableFileBtn(activeName)" @click="delFileData(row,$index)">åˆ é™¤ |
|
|
</el-button> |
|
|
</template> |
|
|
</el-table-column> |
|
|
<el-table-column label="资料å<EFBFBD><EFBFBD>ç§°" prop="fileName" ></el-table-column> |
|
|
<el-table-column label="æ–‡ä»¶ä¸Šä¼ æƒ…å†µ" prop="name" show-overflow-tooltip> |
|
|
<template #default="{row}" > |
|
|
<el-tag v-if="row.fileData && row.fileData.length > 0" type="success">å·²ä¸Šä¼ </el-tag> |
|
|
<el-tag v-else>æœªä¸Šä¼ </el-tag> |
|
|
</template> |
|
|
</el-table-column> |
|
|
<el-table-column label="ä¸Šä¼ äºº" prop="crtUser"></el-table-column> |
|
|
<el-table-column label="ä¸Šä¼ æ—¶é—´" prop="crtTime"></el-table-column> |
|
|
|
|
|
</el-table> |
|
|
<div v-if="addFileFun(activeName)" |
|
|
class="mb-10" |
|
|
style="display: flex;justify-content: center;align-items: center;width: 100%"> |
|
|
<el-button type="primary" style="width: 80vw;height: 30px;margin-top: 20px" @click="addFileTable()">新增附件</el-button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="flex end mt-20" v-if="formData.project && formData.project.isRecessed == 1"> |
|
|
<el-button type="primary" :loading="loading" @click="saveFun">ä¿<EFBFBD>å˜</el-button> |
|
|
<el-button type="primary" :loading="loading" @click="saveUpRecessed">é‡<EFBFBD>新进窗</el-button> |
|
|
</div> |
|
|
<div v-else-if="isAuditButton" class="flex end mt-20"> |
|
|
<el-button @click="closeFun">å…³é—</el-button> |
|
|
<el-button type="primary" @click="getReportFlowFun">审批记录</el-button> |
|
|
<el-button type="primary" @click="auditEdit">编辑</el-button> |
|
|
<el-button type="danger" @click="removeFun">åˆ é™¤</el-button> |
|
|
<el-button v-if="!isAuditEdit('audit')" type="primary" @click="endFun" >结æ<EFBFBD>Ÿ</el-button> |
|
|
<el-button v-else type="primary" @click="approveFun">æ<EFBFBD><EFBFBD>交</el-button> |
|
|
<el-button type="danger" @click="rejectFun">驳回</el-button> |
|
|
</div> |
|
|
<div v-else-if="route.query.disabledVal" class="flex end mt-20"> |
|
|
<el-button type="primary" @click="getReportFlowFun">审批记录</el-button> |
|
|
<el-button type="danger" @click="removeFun">åˆ é™¤</el-button> |
|
|
<el-button @click="closeFun">å…³é—</el-button> |
|
|
</div> |
|
|
<div v-else-if="route.query.disabledVal && deleteFlag" class="flex end mt-20"> |
|
|
<el-button @click="closeFun">å…³é—</el-button> |
|
|
</div> |
|
|
<div class="flex end mt-20" v-else > |
|
|
<el-button v-if="!isDisabled && !editAll" type="primary" @click="submitFun">æ<EFBFBD><EFBFBD>交</el-button> |
|
|
<el-button v-if="!isDisabled && !editAll" type="primary" @click="saveFun">ä¿<EFBFBD>å˜</el-button> |
|
|
<el-button v-if="!isAuditButton && !isDisabled" @click="closeFun">å<EFBFBD>–消</el-button> |
|
|
<el-button type="danger" @click="removeFun">åˆ é™¤</el-button> |
|
|
<el-button v-if="!isAuditButton && !isDisabled" type="primary" @click="getReportFlowFun">审批记录</el-button> |
|
|
</div> |
|
|
|
|
|
</el-main> |
|
|
</main> |
|
|
</div> |
|
|
|
|
|
<el-dialog v-model="addFileDialog" title="ä¸Šä¼ é™„ä»¶" width="60vw" @close="fileDialogClose"> |
|
|
<el-form label-width="120"> |
|
|
<el-row> |
|
|
<el-col :span="24"> |
|
|
<el-form-item label="资料å<EFBFBD><EFBFBD>ç§°"> |
|
|
<el-input v-model="fileTable.fileName"></el-input> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<el-row> |
|
|
<el-col :span="24"> |
|
|
<file-upload v-model:files="fileTable.fileData" :uploadDrag="true" ></file-upload> |
|
|
</el-col> |
|
|
</el-row> |
|
|
<footer class="flex end"> |
|
|
<el-button size="default" :loading="addFileTableLoading" type="primary" @click="addFileSubmit">确认</el-button> |
|
|
<el-button @click="addFileDialog = false" >å…³é—</el-button> |
|
|
</footer> |
|
|
</el-form> |
|
|
</el-dialog> |
|
|
|
|
|
|
|
|
<el-dialog v-model="reportFlowDialog" title="审批记录" width="80vw"> |
|
|
<div class="table-container"> |
|
|
<el-table :data="reportFlowTable" v-loading="reportFlowLoading"> |
|
|
<el-table-column width="50" type="index" label="åº<EFBFBD>å<EFBFBD>·" :index="(index)=> index+1"></el-table-column> |
|
|
<el-table-column label="æ“<EFBFBD>作" prop="reportCode"></el-table-column> |
|
|
<el-table-column label="办ç<EFBFBD>†äºº" prop="approver"></el-table-column> |
|
|
<el-table-column label="æ“<EFBFBD>作时间" prop="approverTime"> |
|
|
<template #default="{row}"> |
|
|
{{ row.approverTime ? timeFormat(row.approverTime,'yyyy-mm-dd hh:MM:ss') : '/' }} |
|
|
</template> |
|
|
</el-table-column> |
|
|
<el-table-column label="办ç<EFBFBD>†ç»“æžœ" prop="approverState"> |
|
|
<template #default="{row}"> |
|
|
<el-tag type="primary" v-if="row.approverState === '开始'">开始</el-tag> |
|
|
<el-tag type="success" v-if="row.approverState === '结æ<EFBFBD>Ÿ'">完æˆ<EFBFBD></el-tag> |
|
|
<el-tag type="danger" v-if="row.approverState === '驳回'">驳回</el-tag> |
|
|
</template> |
|
|
</el-table-column> |
|
|
<el-table-column label="办ç<EFBFBD>†æ„<EFBFBD>è§<EFBFBD>" prop="approverMessage" show-overflow-tooltip></el-table-column> |
|
|
<el-table-column label="办ç<EFBFBD>†çжæ€<EFBFBD>" prop="approverState"></el-table-column> |
|
|
</el-table> |
|
|
</div> |
|
|
</el-dialog> |
|
|
|
|
|
<el-dialog v-model="upFileDialog" title="æ<EFBFBD><EFBFBD>æ–™ä¸Šä¼ " destroy-on-close> |
|
|
<file-upload v-model:files="formData.files[activeName][fileIndex].fileData" :uploadDrag="true" ></file-upload> |
|
|
<footer class="flex end"> |
|
|
<el-button type="primary" @click="upFileDialog = false" size="large">确认</el-button> |
|
|
<el-button @click="upFileDialog = false" size="large">å…³é—</el-button> |
|
|
</footer> |
|
|
</el-dialog> |
|
|
|
|
|
<report-file :preview="preview" :activeFile="actionRow" @closeFile="closeFile"/> |
|
|
<report-audit @submitFeedback="submitFeedback" @closeFun="closeAudit" :reportId="formData.project.id" :isCityAudit="isCityAudit" |
|
|
:dialog="dialog" :currentNode="formData.project.node" :auditUnitId="formData.project.auditUnitId"/> |
|
|
<report-audit-finish @submitFeedback="submitFeedback" @closeFun="closeAudit" :node="formData.project.node" |
|
|
:reportId="formData.project.id" :dialog="finishDialog" :isAudit="true"></report-audit-finish> |
|
|
<report-audit-reject @submitFeedback="submitFeedback" @closeFun="closeAudit" :node="formData.project.node" |
|
|
:reportId="formData.project.id" :dialog="rejectDialog" :isAudit="false"></report-audit-reject> |
|
|
<report-audit-end @submitFeedback="submitFeedback" @closeFun="closeAudit" :node="formData.project.node" |
|
|
:reportId="formData.project.id" v-model="endDialog" :isAudit="true" |
|
|
></report-audit-end> |
|
|
|
|
|
<el-dialog title="åˆ é™¤é¡¹ç›®" v-model="delDialog" width="700"> |
|
|
<el-form :label-width="120" :model="delFormData" ref="delFormRef"> |
|
|
<el-form-item |
|
|
label="åˆ é™¤åŽŸå› " |
|
|
prop="delReason" |
|
|
:rules="{ |
|
|
required: true, |
|
|
message: 'è¯·è¾“å…¥åˆ é™¤åŽŸå› ', |
|
|
}" |
|
|
> |
|
|
<el-input |
|
|
v-model="delFormData.deleteReason" |
|
|
type="textarea" |
|
|
placeholder="è¯·è¾“å…¥åˆ é™¤åŽŸå› " |
|
|
clearable |
|
|
:autosize="{ minRows: 3 }" |
|
|
/> |
|
|
</el-form-item> |
|
|
</el-form> |
|
|
<footer class="flex end"> |
|
|
<el-button @click="delDialog = false">å<EFBFBD>–消</el-button> |
|
|
<el-button type="primary" @click="handleDel">确定</el-button> |
|
|
</footer> |
|
|
</el-dialog> |
|
|
</template> |
|
|
|
|
|
<style lang="scss"> |
|
|
.el-table .el-table__cell{ |
|
|
position: initial !important; |
|
|
} |
|
|
|
|
|
/* å<EFBFBD>ªä½œç”¨äºŽæœ¬é¡µé<EFBFBD>¢ */ |
|
|
.control-price-page { |
|
|
/* 先全局把当å‰<EFBFBD>页é<EFBFBD>¢çš„ç¦<EFBFBD>ç”¨æ ·å¼<EFBFBD>å<EFBFBD>˜é‡<EFBFBD>改掉 */ |
|
|
--el-disabled-bg-color: #ffffff; |
|
|
--el-disabled-text-color: #000000; |
|
|
--el-border-color-disabled: #dcdfe6; |
|
|
/* 1) el-input ç¦<EFBFBD>ç”¨ï¼šç™½åº•é»‘å— */ |
|
|
.el-input.is-disabled .el-input__wrapper { |
|
|
background-color: #ffffff !important; |
|
|
box-shadow: 0 0 0 1px var(--el-border-color) inset; |
|
|
} |
|
|
|
|
|
.el-input.is-disabled .el-input__inner { |
|
|
color: #000000 !important; |
|
|
-webkit-text-fill-color: #000000 !important; |
|
|
} |
|
|
|
|
|
/* 2) el-select ç¦<EFBFBD>ç”¨ï¼šç™½åº•é»‘å— â€”â€” æ–°çš„æ£ç¡®å†™æ³•(替æ<EFBFBD>¢ä½ 旧的) */ |
|
|
.el-select.is-disabled .el-select__wrapper, |
|
|
.el-select .el-select__wrapper.is-disabled { |
|
|
background-color: #ffffff !important; |
|
|
border-color: #dcdfe6 !important; |
|
|
color: #000000 !important; |
|
|
cursor: default !important; |
|
|
} |
|
|
.el-select.is-disabled .el-select__selected-item, |
|
|
.el-select.is-disabled .el-input__inner { |
|
|
color: #000000 !important; |
|
|
-webkit-text-fill-color: #000000 !important; |
|
|
} |
|
|
|
|
|
/* 3) el-date-picker ç¦<EFBFBD>ç”¨ï¼šç™½åº•é»‘å— */ |
|
|
.el-date-editor.is-disabled .el-input__wrapper { |
|
|
background-color: #ffffff !important; |
|
|
} |
|
|
.el-date-editor.is-disabled .el-input__inner { |
|
|
color: #000000 !important; |
|
|
-webkit-text-fill-color: #000000 !important; |
|
|
} |
|
|
|
|
|
/* 4) el-textarea ç¦<EFBFBD>ç”¨ï¼šç™½åº•é»‘å— */ |
|
|
.el-textarea.is-disabled .el-textarea__inner { |
|
|
background-color: #ffffff !important; |
|
|
color: #000000 !important; |
|
|
} |
|
|
|
|
|
/* 5) el-radio ç¦<EFBFBD>用文å—:黑色 */ |
|
|
.el-radio.is-disabled .el-radio__label { |
|
|
color: #000000 !important; |
|
|
} |
|
|
|
|
|
/* 6) ç¦<EFBFBD>ç”¨é¼ æ ‡æ ·å¼<EFBFBD>ä¿®æ£ */ |
|
|
.el-select.is-disabled, |
|
|
.el-select.is-disabled * { |
|
|
cursor: default !important; |
|
|
} |
|
|
|
|
|
.el-input.is-disabled, |
|
|
.el-input.is-disabled * { |
|
|
cursor: default !important; |
|
|
} |
|
|
|
|
|
.el-textarea.is-disabled, |
|
|
.el-textarea.is-disabled * { |
|
|
cursor: default !important; |
|
|
} |
|
|
|
|
|
.el-date-editor.is-disabled, |
|
|
.el-date-editor.is-disabled * { |
|
|
cursor: default !important; |
|
|
} |
|
|
|
|
|
.el-radio.is-disabled, |
|
|
.el-radio.is-disabled * { |
|
|
cursor: default !important; |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
</style>
|
|
|
|