@@ -1,6 +1,20 @@ | |||||
<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() | |||||
// }) | |||||
// }) | |||||
</script> | </script> | ||||
<template> | <template> | ||||
@@ -43,3 +43,4 @@ instance | |||||
} | } | ||||
}) | }) | ||||
.mount('#app') | .mount('#app') | ||||
@@ -5,6 +5,7 @@ import store from '@/store' | |||||
import { useRouter, useRoute } from 'vue-router' | import { useRouter, useRoute } from 'vue-router' | ||||
import { submitResult } from '@/http/apis/declareMange/purchaseResults' | import { submitResult } from '@/http/apis/declareMange/purchaseResults' | ||||
import { dictionary } from '@/http/apis/projectCollection/projectCollectionEnter' | import { dictionary } from '@/http/apis/projectCollection/projectCollectionEnter' | ||||
import { getProjectDetail } from '@/http/apis/declareMange' | |||||
const uploadUrl = store.dictStore.uploadUrl, | const uploadUrl = store.dictStore.uploadUrl, | ||||
{ proxy } = getCurrentInstance(), | { proxy } = getCurrentInstance(), | ||||
@@ -46,7 +47,7 @@ const formRef = ref(), | |||||
bidDoc: [], | bidDoc: [], | ||||
acceptanceLetter: [] | acceptanceLetter: [] | ||||
}], | }], | ||||
devChangeCode: '' | |||||
developCode: '' | |||||
}), | }), | ||||
submitLoading = ref(false), | submitLoading = ref(false), | ||||
submit = async (formEl) => { | submit = async (formEl) => { | ||||
@@ -66,7 +67,7 @@ const formRef = ref(), | |||||
acceptanceLetter: i.acceptanceLetter && JSON.stringify(changFilesParam(i.acceptanceLetter)) | acceptanceLetter: i.acceptanceLetter && JSON.stringify(changFilesParam(i.acceptanceLetter)) | ||||
} | } | ||||
}), | }), | ||||
devChangeCode: formData.value.devChangeCode | |||||
developCode: formData.value.developCode | |||||
} | } | ||||
try { | try { | ||||
await submitResult(postData) | await submitResult(postData) | ||||
@@ -98,7 +99,10 @@ const formRef = ref(), | |||||
dictionaryList = ref([]) | dictionaryList = ref([]) | ||||
onMounted(async () => { | onMounted(async () => { | ||||
dictionaryList.value = (await dictionary()).data | dictionaryList.value = (await dictionary()).data | ||||
const data = await getProjectDetail({ id: route.query.id }) | |||||
formData.value.developCode = data.data.developCode | |||||
}) | }) | ||||
</script> | </script> | ||||
<template> | <template> | ||||
<div class="fillPurchasingResult footerPage"> | <div class="fillPurchasingResult footerPage"> | ||||
@@ -111,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="devChangeCode"> | |||||
<el-input v-model="formData.devChangeCode" 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"> | ||||
@@ -122,7 +122,10 @@ watch( | |||||
async val => { | async val => { | ||||
if (!val) { | if (!val) { | ||||
formRef.value.resetFields() | formRef.value.resetFields() | ||||
form.value = {} | |||||
form.value = { | |||||
attachments: [], | |||||
opinions: [] | |||||
} | |||||
} | } | ||||
} | } | ||||
) | ) | ||||
@@ -231,30 +234,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 | ||||
@@ -391,6 +391,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" | |||||
plain | plain | ||||
type="danger" | type="danger" | ||||
@click="rejectYear" | @click="rejectYear" | ||||
@@ -0,0 +1,62 @@ | |||||
export default class Updater { | |||||
constructor (options) { | |||||
this.oldScript = [] // 存储初始的 script 哈希信息 | |||||
this.newScript = [] // 存储新的 script 哈希信息 | |||||
this.dispatch = {} // 一个小型的发布/订阅系统,用于通知用户更新 | |||||
this.interval = null | |||||
this.init() // 初始化 | |||||
this.timing(options?.timer) // 轮询 | |||||
} | |||||
async init () { | |||||
const html = await this.getHtml() | |||||
this.oldScript = this.parserScript(html) | |||||
} | |||||
async getHtml () { | |||||
const html = await fetch('/').then(res => res.text()) // 获取 index.html | |||||
return html | |||||
} | |||||
parserScript (html) { | |||||
const reg = new RegExp(/<script(?:\s+[^>]*)?>(.*?)<\/script\s*>/ig) // 匹配 script 标签的正则表达式 | |||||
return html.match(reg) // 匹配 script 标签 | |||||
} | |||||
// 发布/订阅通知 | |||||
on (key, fn) { | |||||
(this.dispatch[key] || (this.dispatch[key] = [])).push(fn) | |||||
return this | |||||
} | |||||
compare (oldArr, newArr) { | |||||
const base = oldArr.length | |||||
const arr = Array.from(new Set(oldArr.concat(newArr))) | |||||
// 如果新旧数组长度相同,则表示没有更新 | |||||
if (arr.length === base) { | |||||
this.dispatch['no-update'].forEach(fn => { | |||||
fn() | |||||
}) | |||||
} else { | |||||
// 否则通知有更新 | |||||
this.dispatch['update'].forEach(fn => { | |||||
fn() | |||||
}) | |||||
} | |||||
} | |||||
timing (time = 10000) { | |||||
// 轮询 | |||||
this.interval = setInterval(async () => { | |||||
const newHtml = await this.getHtml() | |||||
this.newScript = this.parserScript(newHtml) | |||||
this.compare(this.oldScript, this.newScript) | |||||
}, time) | |||||
} | |||||
start () { | |||||
} | |||||
stop () { | |||||
clearInterval(this.interval) | |||||
} | |||||
} |