From da51e7d5bbf5ff1610209510571e94d0523b515c Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期三, 24 四月 2024 17:40:37 +0800 Subject: [PATCH] 完善自动评估模块,规范性分析报告的后台任务和结果下载逻辑 --- src/components/head/FYPageHeader.vue | 25 ++++ src/components.d.ts | 2 src/views/fytz/user/components/CompUserInfo.vue | 2 src/views/fytz/user/UserInfo.vue | 2 src/router/index.js | 6 + src/views/fysp/scene/CompSceneBaseInfo.vue | 88 +++++++------- src/api/fysp/evaluateApi.js | 12 + src/views/fysp/scene/SceneInfo.vue | 14 + src/components/bg-task/FYBgTaskCard.vue | 6 + src/api/index.js | 6 src/views/fysp/evaluation/EvalutationEdit.vue | 13 ++ src/views/fysp/scene/SceneEdit.vue | 5 src/views/fysp/evaluation/components/CompReport.vue | 102 +++++++++++++++++ src/views/fysp/evaluation/components/CompQuickSet.vue | 8 - src/views/fytz/user/components/CompUserInfoAddDrawer.vue | 2 src/views/fysp/evaluation/EvalutationRecord.vue | 29 +++- 16 files changed, 250 insertions(+), 72 deletions(-) diff --git a/src/api/fysp/evaluateApi.js b/src/api/fysp/evaluateApi.js index aef8028..26414ca 100644 --- a/src/api/fysp/evaluateApi.js +++ b/src/api/fysp/evaluateApi.js @@ -10,6 +10,11 @@ }, /** + * 鏍规嵁宸℃煡浠诲姟鑾峰彇璇勫垎缁嗗垯 + */ + + + /** * 鏌ヨ璇勪及鎬昏鍒� * @param {Object} param * @returns @@ -22,9 +27,12 @@ return $fysp.post(`evaluation/auto`, param).then((res) => res.data); }, - downloadAutoEvaluation(param) { + /** + * 涓嬭浇瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽鎶ュ憡 + */ + downloadAutoEvaluation(param, forceUpdate) { return $fysp - .post(`evaluation/auto/record/download`, param, { responseType: 'blob' }) + .post(`evaluation/auto/record/download?forceUpdate=${forceUpdate}`, param, { responseType: 'blob' }) .then((res) => { // 鏂囨。鏈敓鎴愶紝宸插惎鍔ㄦ枃妗g敓鎴愬悗鍙颁换鍔� if (res.data.type == 'application/json') { diff --git a/src/api/index.js b/src/api/index.js index 538a451..92c580a 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -3,8 +3,10 @@ const debug = true; -let ip1 = 'http://47.100.191.150:9005/'; -let ip1_file = 'http://47.100.191.150:9005/'; +// let ip1 = 'http://47.100.191.150:9005/'; +// let ip1_file = 'http://47.100.191.150:9005/'; +let ip1 = 'https://fyami.com.cn:447/'; +let ip1_file = 'https://fyami.com.cn:447/'; let ip2 = 'https://fyami.com.cn/'; let ip2_file = 'https://fyami.com.cn/'; diff --git a/src/components.d.ts b/src/components.d.ts index 520db48..8ac9bbb 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -20,6 +20,7 @@ ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] ElCard: typeof import('element-plus/es')['ElCard'] ElCascader: typeof import('element-plus/es')['ElCascader'] + ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCol: typeof import('element-plus/es')['ElCol'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElContainer: typeof import('element-plus/es')['ElContainer'] @@ -80,6 +81,7 @@ FYOptionText: typeof import('./components/search-option/base/FYOptionText.vue')['default'] FYOptionTime: typeof import('./components/search-option/FYOptionTime.vue')['default'] FYOptionUserType: typeof import('./components/search-option/FYOptionUserType.vue')['default'] + FYPageHeader: typeof import('./components/head/FYPageHeader.vue')['default'] FYReconfrimButton: typeof import('./components/button/FYReconfrimButton.vue')['default'] FYSearchBar: typeof import('./components/search-option/FYSearchBar.vue')['default'] FYTable: typeof import('./components/table/FYTable.vue')['default'] diff --git a/src/components/bg-task/FYBgTaskCard.vue b/src/components/bg-task/FYBgTaskCard.vue index d39bffe..5853db3 100644 --- a/src/components/bg-task/FYBgTaskCard.vue +++ b/src/components/bg-task/FYBgTaskCard.vue @@ -150,6 +150,12 @@ }); }, gotoResult(index) {} + }, + mounted() { + this.fetchTask(); + // setInterval(() => { + // this.fetchTask(); + // }, 10000); } }; </script> diff --git a/src/components/head/FYPageHeader.vue b/src/components/head/FYPageHeader.vue new file mode 100644 index 0000000..f474776 --- /dev/null +++ b/src/components/head/FYPageHeader.vue @@ -0,0 +1,25 @@ +<template> + <el-page-header @back="onBack" class="page-header"> + <template #content> + <span> {{ title }} </span> + </template> + </el-page-header> + <el-divider /> +</template> + +<script> +export default { + props: { + title: { + type: String, + default: '褰撳墠涓洪粯璁ら〉闈㈡爣棰橈紝璇蜂紶鍏ユ爣棰樺悕瀛�' + } + }, + methods: { + // 鍥為��椤甸潰 + onBack() { + this.$router.back(); + } + } +}; +</script> diff --git a/src/router/index.js b/src/router/index.js index 2b985fe..7c646ef 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -92,6 +92,12 @@ meta: { keepAlive: true } }, { + //璇勪及缁撴灉璇︽儏 + name: 'fyspEvalutationEdit', + path: '/fysp/evaluation/evalutationEdit/:subTaskId', + component: () => import('@/views/fysp/evaluation/EvalutationEdit.vue'), + }, + { //鍦烘櫙淇℃伅 name: 'fyspSceneInfo', path: '/fysp/sceneInfo', diff --git a/src/views/fysp/evaluation/EvalutationEdit.vue b/src/views/fysp/evaluation/EvalutationEdit.vue new file mode 100644 index 0000000..f5c04f7 --- /dev/null +++ b/src/views/fysp/evaluation/EvalutationEdit.vue @@ -0,0 +1,13 @@ +<template> + <FYPageHeader title="璇勪及缁撴灉璇︽儏"></FYPageHeader> +</template> + +<script> +export default { + data() { + return {}; + }, + methods: {} +}; +</script> +<style scoped></style> diff --git a/src/views/fysp/evaluation/EvalutationRecord.vue b/src/views/fysp/evaluation/EvalutationRecord.vue index b3dc2c3..9281591 100644 --- a/src/views/fysp/evaluation/EvalutationRecord.vue +++ b/src/views/fysp/evaluation/EvalutationRecord.vue @@ -1,6 +1,4 @@ <template> - <!-- <CompPreCheck @pre-check="autoEvaluate"></CompPreCheck> --> - <FYTable @search="onSearch" :pagination="false" ref="tableRef"> <template #options> <!-- 鍖哄幙 --> @@ -18,6 +16,16 @@ ></FYOptionScene> <!-- 鏃堕棿 --> <FYOptionTime :initValue="false" type="month" v-model:value="formSearch.time"></FYOptionTime> + </template> + <template #buttons> + <!-- <el-button icon="Download" size="default" type="success" @click="download" + >瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽鎶ュ憡</el-button + > --> + <CompReport + :locations="formSearch.locations" + :scenetype="formSearch.scenetype" + :time="formSearch.time" + ></CompReport> </template> <template #options-expand> @@ -71,11 +79,11 @@ <!-- <el-table-column prop="biArea" label="闆嗕腑鍖�" width="110" /> <el-table-column prop="biManagementCompany" label="鐗╀笟" min-width="110"/> --> <el-table-column fixed="right" align="right" label="鎿嶄綔" width="160"> - <template #header> - <el-button icon="Download" size="default" type="success" @click="download" - >涓嬭浇缁撴灉</el-button + <!-- <template #header> + <el-button icon="Download" size="default" type="success" @click="exportExcel" + >瀵煎嚭缁撴灉</el-button > - </template> + </template> --> <template #default="{ row }"> <el-button type="primary" size="small" @click="editRow(row)">鏌ョ湅</el-button> </template> @@ -89,10 +97,11 @@ import evaluateApi from '@/api/fysp/evaluateApi'; import { envCreditCode } from '@/constants/index'; import CompQuickSet from './components/CompQuickSet.vue'; +import CompReport from './components/CompReport.vue'; export default { name: 'ResultManage', - components: { CompQuickSet }, + components: { CompQuickSet, CompReport }, data() { return { formSearch: { @@ -117,6 +126,9 @@ scensetypeid: scenetype.value }; }, + editRow(row) { + this.$router.push(`evalutationEdit/${row.subTaskId}`); + }, setOptions(param) { this.formSearch.locations = param.locations; this.formSearch.scenetype = param.scenetype; @@ -134,6 +146,7 @@ } }); }, + // 瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽鎶ュ憡鍚庡彴鐢熸垚浠诲姟 download() { const area = this._getParam(); evaluateApi.downloadAutoEvaluation(area).then((res) => { @@ -143,6 +156,8 @@ } }); }, + // 瀵煎嚭琛ㄦ牸涓篹xcel鏍煎紡 + exportExcel() {}, getFilters(data) { const townList = []; data.forEach((e) => { diff --git a/src/views/fysp/evaluation/components/CompQuickSet.vue b/src/views/fysp/evaluation/components/CompQuickSet.vue index e37fda3..b7b614b 100644 --- a/src/views/fysp/evaluation/components/CompQuickSet.vue +++ b/src/views/fysp/evaluation/components/CompQuickSet.vue @@ -6,14 +6,6 @@ }}</el-button> </el-space> </el-form-item> - <!-- <el-row class="row"> - <el-space> - <el-text>蹇嵎閫夋嫨</el-text> - <el-button v-for="(v, i) in quickSetting" :key="i" type="primary" size="small" @click="quickSet(v)">{{ - v.name - }}</el-button> - </el-space> - </el-row> --> </template> <script> export default { diff --git a/src/views/fysp/evaluation/components/CompReport.vue b/src/views/fysp/evaluation/components/CompReport.vue new file mode 100644 index 0000000..7ef12fd --- /dev/null +++ b/src/views/fysp/evaluation/components/CompReport.vue @@ -0,0 +1,102 @@ +<template> + <el-button icon="Download" type="success" @click="dialogVisible = true" + >瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽鎶ュ憡</el-button + > + <el-dialog + v-model="dialogVisible" + title="瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽鎶ュ憡鐢熸垚" + width="500" + :before-close="handleClose" + > + <el-text tag="b" size="large">鏁版嵁鑼冨洿纭</el-text> + <el-text tag="div">鍖哄煙锛歿{ locationText }}</el-text> + <el-text tag="div">绫诲瀷锛歿{ scenetype.label }}</el-text> + <el-text tag="div">鏃堕棿锛歿{ timeText }}</el-text> + <template #footer> + <div class="dialog-footer"> + <el-row align="middle"> + <el-checkbox v-model="forceUpdate" label="寮哄埗鐢熸垚鏂版姤鍛�" /> + <el-tooltip placement="bottom-start" effect="light"> + <template #content> + <el-text tag="b" size="small">涓嶅嬀閫夛細</el-text><br /> + <el-text size="small" + >涓嶅嬀閫夋椂锛屽鏋滃凡鐢熸垚杩囩浉鍚屽尯鍩熺殑鎶ュ憡锛屽垯鐩存帴鑾峰彇璇ヤ唤鎶ュ憡璁板綍</el-text + ><br /> + <el-text tag="b" size="small">鍕鹃�夛細</el-text><br /> + <el-text size="small" + >鍕鹃�夋椂锛屾棤璁烘槸鍚︽湁鍘嗗彶璁板綍锛岄兘浼氬惎鍔ㄦ姤鍛婄敓鎴愪换鍔¤鐩栨棫璁板綍锛屽彲鍦ㄥ悗鍙颁换鍔$晫闈㈡煡鐪嬩换鍔¤繘搴�</el-text + ><br /> + </template> + <el-icon class="m-l-8 cursor-p" :size="16" color="var(--el-color-warning)" + ><QuestionFilled + /></el-icon> + </el-tooltip> + </el-row> + <div> + <el-button @click="dialogVisible = false">鍙栨秷</el-button> + <el-button type="primary" @click="download">纭畾</el-button> + </div> + </div> + </template> + </el-dialog> +</template> + +<script> +import dayjs from 'dayjs'; +import evaluateApi from '@/api/fysp/evaluateApi'; + +export default { + props: ['locations', 'time', 'scenetype'], + data() { + return { + dialogVisible: false, + forceUpdate: false + }; + }, + computed: { + locationText() { + const loc = this.locations; + let text = ''; + text = loc.pName == loc.cName ? loc.pName : loc.pName + loc.cName; + text += loc.dName; + return text; + }, + timeText() { + return dayjs(this.time).format('YYYY骞碝M鏈�'); + } + }, + methods: { + // 瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽鎶ュ憡鍚庡彴鐢熸垚浠诲姟 + download() { + const locations = this.locations; + const time = this.time; + const scenetype = this.scenetype; + const area = { + provincecode: locations.pCode, + provincename: locations.pName, + citycode: locations.cCode, + cityname: locations.cName, + districtcode: locations.dCode, + districtname: locations.dName, + starttime: dayjs(this.time).format('YYYY-MM-DD HH:mm:ss'), + scensetypeid: scenetype.value + }; + evaluateApi.downloadAutoEvaluation(area, this.forceUpdate).then((res) => { + if (res == false) { + // 鏈笅杞芥枃妗o紝鑰屾槸寮�鍚簡鏂囨。鐢熸垚鍚庡彴浠诲姟 + this.$parent; + } + this.dialogVisible = false; + }); + } + } +}; +</script> +<style scoped> +.dialog-footer { + display: flex; + justify-content: space-between; + align-items: center; + gap: 2px; +} +</style> diff --git a/src/views/fysp/scene/CompSceneBaseInfo.vue b/src/views/fysp/scene/CompSceneBaseInfo.vue index 602aaf9..8f8b68d 100644 --- a/src/views/fysp/scene/CompSceneBaseInfo.vue +++ b/src/views/fysp/scene/CompSceneBaseInfo.vue @@ -5,20 +5,25 @@ <el-form-item label="鍦烘櫙鍚嶇О" prop="name"> <el-input clearable show-word-limit v-model="formObj.name" placeholder="鍦烘櫙鍚嶇О" /> </el-form-item> - <el-form-item label="鍦烘櫙绫诲瀷" prop="_typeObj"> - <el-select v-model="formObj._typeObj" placeholder="鍦烘櫙绫诲瀷"> + <!-- <el-form-item label="鍦烘櫙绫诲瀷" prop="_scenetype"> + <el-select v-model="formObj._scenetype" placeholder="鍦烘櫙绫诲瀷"> <el-option v-for="s in sceneTypes" :key="s.value" :label="s.label" :value="s" /> </el-select> - </el-form-item> - <el-form-item label="鐪�/甯�/鍖�/闀�" prop="_locations"> - <el-cascader - v-model="formObj._locations" - :options="locations" - placeholder="鐪�/甯�/鍖�/闀�" - style="width: 300px" - :props="cascaderProps" - /> - </el-form-item> + </el-form-item> --> + <!-- 鍦烘櫙绫诲瀷 --> + <FYOptionScene + :allOption="false" + :type="2" + v-model:value="formObj._scenetype" + ></FYOptionScene> + <!-- 鍖哄幙 --> + <FYOptionLocation + :allOption="false" + :level="4" + :initValue="false" + :checkStrictly="true" + v-model:value="formObj._locations" + ></FYOptionLocation> <el-form-item label="鍦板潃" prop="location"> <el-input show-word-limit clearable v-model="formObj.location" placeholder="鍦板潃" /> </el-form-item> @@ -64,9 +69,8 @@ </template> <script setup> -import { defineProps, defineEmits, reactive, ref, watch, computed } from 'vue'; +import { defineProps, defineEmits, reactive, ref, unref, watch, computed } from 'vue'; import { enumScene } from '@/enum/scene'; -import { enumLocation } from '@/enum/location'; import sceneApi from '@/api/fysp/sceneApi'; const props = defineProps({ @@ -88,11 +92,7 @@ const emit = defineEmits(['onSubmit', 'onCancel']); -const sceneTypes = reactive(enumScene(2, false)); -const locations = reactive(enumLocation(false)); -const cascaderProps = reactive({ - checkStrictly: true -}); +const sceneTypes = ref(enumScene(2, false)); const rules = reactive({ name: [ { @@ -101,7 +101,7 @@ trigger: 'blur' } ], - _typeObj: [ + _scenetype: [ { required: true, message: '鍦烘櫙绫诲瀷涓嶈兘涓虹┖', @@ -136,19 +136,23 @@ * 瀵瑰満鏅被鍨嬨�佸満鏅鏀垮尯鍒掑拰鍦烘櫙鍙敤鐘舵�佽繘琛屾牸寮忓寲 * @param {*} s 鍦烘櫙淇℃伅 */ -function parseSceneBaseInfo(s) { - s._typeObj = { +function parseSceneBaseInfo(param) { + const s = unref(param); + s._scenetype = { label: s.type, value: s.typeid + '' }; - s._locations = []; - if (s.provincecode && s.provincecode.length > 0) - s._locations.push([s.provincecode, s.provincename]); - if (s.citycode && s.citycode.length > 0) s._locations.push([s.citycode, s.cityname]); - if (s.districtcode && s.districtcode.length > 0) - s._locations.push([s.districtcode, s.districtname]); - if (s.towncode && s.towncode.length > 0) s._locations.push([s.towncode, s.townname]); + s._locations = { + pCode: s.provincecode, + pName: s.provincename, + cCode: s.citycode, + cName: s.cityname, + dCode: s.districtcode, + dName: s.districtname, + tCode: s.towncode, + tName: s.townname + }; s.online = s.extension1 != '0'; @@ -181,25 +185,17 @@ function submit(v, success, fail) { // 琛屾斂鍖哄垝淇℃伅濉厖 const a = v.value._locations; - if (a[0]) { - v.value.provincecode = a[0][0]; - v.value.provincename = a[0][1]; - } - if (a[1]) { - v.value.citycode = a[1][0]; - v.value.cityname = a[1][1]; - } - if (a[2]) { - v.value.districtcode = a[2][0]; - v.value.districtname = a[2][1]; - } - if (a[3]) { - v.value.towncode = a[3][0]; - v.value.townname = a[3][1]; - } + v.value.provincecode = a.pCode; + v.value.provincename = a.pName; + v.value.citycode = a.cCode; + v.value.cityname = a.cName; + v.value.districtcode = a.dCode; + v.value.districtname = a.dName; + v.value.towncode = a.tCode; + v.value.townname = a.tName; // 鍦烘櫙绫诲瀷淇℃伅濉厖 - const b = v.value._typeObj; + const b = v.value._scenetype; v.value.typeid = b.value; v.value.type = b.label; diff --git a/src/views/fysp/scene/SceneEdit.vue b/src/views/fysp/scene/SceneEdit.vue index d8bab15..69c0bdf 100644 --- a/src/views/fysp/scene/SceneEdit.vue +++ b/src/views/fysp/scene/SceneEdit.vue @@ -1,5 +1,5 @@ <template> - <el-page-header @back="onBack"> + <el-page-header @back="onBack" class="page-header"> <template #content> <span> 鍦烘櫙淇℃伅缂栬緫 </span> </template> @@ -110,4 +110,7 @@ margin-bottom: 30px; margin-left: 20px; } +.page-header { + /* position: absolute; */ +} </style> diff --git a/src/views/fysp/scene/SceneInfo.vue b/src/views/fysp/scene/SceneInfo.vue index a207662..f0723bc 100644 --- a/src/views/fysp/scene/SceneInfo.vue +++ b/src/views/fysp/scene/SceneInfo.vue @@ -6,10 +6,15 @@ :level="4" v-model:value="formSearch._locations" ></FYOptionLocation> + <FYOptionText + label="鍦烘櫙鍚嶇О" + placeholder="杈撳叆鍚嶇О鍏抽敭瀛�" + v-model:value="formSearch.searchText" + ></FYOptionText> <FYOptionScene :allOption="true" :type="2" - v-model:value="formSearch.scensetype" + v-model:value="formSearch._scenetype" ></FYOptionScene> <FYOptionOnlineStatus :allOption="true" @@ -79,7 +84,8 @@ return { formSearch: { _locations: {}, - scensetype: {}, + searchText: '', + _scenetype: {}, online: {} } }; @@ -97,10 +103,12 @@ area.districtcode = f._locations.dCode; area.towncode = f._locations.tCode; // 鍦烘櫙绫诲瀷 - area.scensetypeid = f.scensetype.value; + area.scensetypeid = f._scenetype.value; if (area.scensetypeid == '0') area.scensetypeid = null; // 涓婁笅绾跨姸鎬� area.online = f.online.value; + // 鏌ヨ鍏抽敭瀛�(鍦烘櫙鍚嶇О) + area.sceneName = f.searchText return sceneApi.searchScene(area, page.currentPage, page.pageSize).then((res) => { if (res.success) { diff --git a/src/views/fytz/user/UserInfo.vue b/src/views/fytz/user/UserInfo.vue index 759ad03..7957a89 100644 --- a/src/views/fytz/user/UserInfo.vue +++ b/src/views/fytz/user/UserInfo.vue @@ -7,7 +7,7 @@ v-model:value="formSearch._locations" ></FYOptionLocation> <FYOptionText - label="鍏抽敭瀛�" + label="鍦烘櫙鍚嶇О" placeholder="杈撳叆鍚嶇О鍏抽敭瀛�" v-model:value="formSearch.searchText" ></FYOptionText> diff --git a/src/views/fytz/user/components/CompUserInfo.vue b/src/views/fytz/user/components/CompUserInfo.vue index 423d624..aece522 100644 --- a/src/views/fytz/user/components/CompUserInfo.vue +++ b/src/views/fytz/user/components/CompUserInfo.vue @@ -5,7 +5,7 @@ :doClear="active" :useCancel="create" :useReset="!create" - @updateEdit="(v) => $emit('updateEdit', v)" + @update:isEdit="(v) => $emit('updateEdit', v)" @submit="submit" @cancel="$emit('onCancel')" > diff --git a/src/views/fytz/user/components/CompUserInfoAddDrawer.vue b/src/views/fytz/user/components/CompUserInfoAddDrawer.vue index ef4039c..720a1a5 100644 --- a/src/views/fytz/user/components/CompUserInfoAddDrawer.vue +++ b/src/views/fytz/user/components/CompUserInfoAddDrawer.vue @@ -39,7 +39,7 @@ // 寮瑰嚭纭妗� useMessageBox({ confirmMsg: '鏄惁鏀惧純宸茬紪杈戠殑鍐呭锛�', - confirmTitle: '鍙栨秷', + confirmTitle: '鍏抽棴寮瑰嚭妗�', onConfirm: () => { done(); } -- Gitblit v1.9.3