From f72f2916f7606a38232223a4092590034852fd2d Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期二, 12 三月 2024 10:40:07 +0800 Subject: [PATCH] 背景图 --- src/views/login.vue | 2 src/views/home/examine/index.vue | 143 +++++++++++++++ src/main.js | 3 src/views/home/data-chart/index.vue | 9 src/views/home/data-wrapper/index.vue | 14 + src/views/home/data-check/index.vue | 4 src/assets/images/login-background.jpg | 0 src/views/home/work-order/index.vue | 251 +++++++++++++++++++++++++++ src/views/system/publish/index.vue | 11 + src/views/system/work-order/index.vue | 71 +++++++ 10 files changed, 495 insertions(+), 13 deletions(-) diff --git a/src/assets/images/login-background.jpg b/src/assets/images/login-background.jpg index 7c2c5a3..1178ad2 100644 --- a/src/assets/images/login-background.jpg +++ b/src/assets/images/login-background.jpg Binary files differ diff --git a/src/main.js b/src/main.js index 402f115..a8d407c 100644 --- a/src/main.js +++ b/src/main.js @@ -1,7 +1,7 @@ import Vue from 'vue' import Cookies from 'js-cookie' - +import {getToken} from "@/utils/auth"; import Element from 'element-ui' import './assets/styles/element-variables.scss' @@ -48,6 +48,7 @@ Vue.prototype.selectDictLabels = selectDictLabels Vue.prototype.download = download Vue.prototype.handleTree = handleTree +Vue.prototype.getToken = getToken // 鍏ㄥ眬缁勪欢鎸傝浇 Vue.component('DictTag', DictTag) diff --git a/src/views/home/data-chart/index.vue b/src/views/home/data-chart/index.vue index 2421e0a..0f0d2b4 100644 --- a/src/views/home/data-chart/index.vue +++ b/src/views/home/data-chart/index.vue @@ -73,12 +73,12 @@ initChart() { const option = { legend: { - right: '2%', - top: '5%', + right: 'right', + top: 'top', + orient: "vertical", icon: 'rect', data: [ { - name: '姝e父鏁�', itemStyle: { color: 'rgba(62, 144, 247, 1)' @@ -193,7 +193,6 @@ align-items: center; z-index: 2; - .more-button { cursor: pointer; font-size: 16px; @@ -216,4 +215,4 @@ margin: 0 20px; width: 180px; } -</style> \ No newline at end of file +</style> diff --git a/src/views/home/data-check/index.vue b/src/views/home/data-check/index.vue index 47307b0..ffeb94b 100644 --- a/src/views/home/data-check/index.vue +++ b/src/views/home/data-check/index.vue @@ -109,7 +109,7 @@ <style lang="scss" scoped> .data-table-container { - height: 400px; + height: 445px; .data-card { height: 100%; @@ -186,4 +186,4 @@ ::v-deep .el-table::before { background-color: transparent; } -</style> \ No newline at end of file +</style> diff --git a/src/views/home/data-wrapper/index.vue b/src/views/home/data-wrapper/index.vue index 8e2e315..78ded01 100644 --- a/src/views/home/data-wrapper/index.vue +++ b/src/views/home/data-wrapper/index.vue @@ -3,11 +3,17 @@ <el-row :gutter="40"> <el-col :xs='24' :md="24" :sm="24" :lg="17" :xl="17"> <data-table></data-table> - <data-chart></data-chart> + <examine></examine> </el-col> <el-col :xs='24' :md="24" :sm="24" :lg="7" :xl="7"> <data-rank></data-rank> <data-check></data-check> + </el-col> + <el-col :xs='24' :md="24" :sm="24" :lg="17" :xl="12"> + <data-chart></data-chart> + </el-col> + <el-col :xs='24' :md="24" :sm="24" :lg="17" :xl="12"> + <work-order></work-order> </el-col> </el-row> </div> @@ -15,8 +21,10 @@ <script> import DataTable from '../data-table/index.vue'; +import Examine from '../examine/index.vue'; import DataRank from '../data-rank/index.vue'; import DataCheck from '../data-check/index.vue'; +import WorkOrder from '../work-order/index.vue'; import DataChart from '../data-chart/index.vue'; export default { name: 'DataWrapper', @@ -24,6 +32,8 @@ DataTable, DataRank, DataCheck, + WorkOrder, + Examine, DataChart } } @@ -31,4 +41,4 @@ <style lang="scss" scoped> -</style> \ No newline at end of file +</style> diff --git a/src/views/home/examine/index.vue b/src/views/home/examine/index.vue new file mode 100644 index 0000000..0532dbc --- /dev/null +++ b/src/views/home/examine/index.vue @@ -0,0 +1,143 @@ +<template> + <div class="data-table-container"> + + <el-card class="data-card" :body-style="{ height: '100%' }"> + <div class="card-content"> + <div class="title-container"> + <h1>鑰冩牳棰勮</h1> + <div class="more-button"> + <span>鏇村</span> + <i class="el-icon-arrow-right"></i> + </div> + </div> + + <el-table :data="tableData" height="400"> + <el-table-column prop="date" label="璀︽姤鏃堕棿" align="center"> + </el-table-column> + <el-table-column prop="name" label="鍏徃鍚嶇О" align="center"> + </el-table-column> + <el-table-column prop="rule" label="鑰冩牳瑙勫垯" align="center"> + </el-table-column> + <el-table-column label="鎿嶄綔" align="center"> + <template slot-scope="scope"> + <el-button size="mini">璇︽儏</el-button> + </template> + </el-table-column> + </el-table> + </div> + </el-card> + </div> +</template> + +<script> +export default { + name: 'DataTable', + data() { + return { + tableData: [ + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '杞﹁締鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '鐐逛綅鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '杞﹁締鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '鐐逛綅鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '杞﹁締鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '杞﹁締鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '鐐逛綅鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '鐐逛綅鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '杞﹁締鑰冩牳', + num: 111, + }, + { + date: '2024.02.28 15:14:01', + name: '杩愮淮鍏徃鍚嶇О1', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�', + rule: '鐐逛綅鑰冩牳', + num: 111, + }, + ] + } + } +} +</script> + +<style lang="scss" scoped> +.data-table-container { + height: 450px; + margin-bottom: 20px; + + .data-card { + height: 100%; + + .card-content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + } + } +} + +.title-container { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + + .more-button { + cursor: pointer; + font-size: 16px; + padding: 0 10px; + } +} +</style> diff --git a/src/views/home/work-order/index.vue b/src/views/home/work-order/index.vue new file mode 100644 index 0000000..62e8f07 --- /dev/null +++ b/src/views/home/work-order/index.vue @@ -0,0 +1,251 @@ +<template> + <div class="data-chart-container"> + <el-card class="data-card" :body-style="{ height: '100%' }"> + <div class="card-content"> + <div class="title-container"> + <h1>杩愮淮鐩戞帶鎶ヨ〃</h1> + <div class="select-container"> + <el-select v-model="company" placeholder="璇烽�夋嫨杩愮淮鍏徃" @change="companyChange"> + <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + <div class="date-container"> + <el-select v-model="dateRange" placeholder="璇烽�夋嫨鏃堕棿鑼冨洿"> + <el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + <div class="chart-container"> + <div id="chartContent" ref="chartContent"></div> + </div> + </div> + </el-card> + </div> +</template> + +<script> +import * as echarts from 'echarts'; +let lineChart = null; +let observer = null; +export default { + name: 'DataChart', + data() { + return { + dateRange: '', + company: '', + options: [ + { label: '鍏ㄩ儴', value: '鍏ㄩ儴' }, + { label: 'XX杩愮淮鍏徃1', value: 'XX杩愮淮鍏徃1' }, + { label: 'XX杩愮淮鍏徃2', value: 'XX杩愮淮鍏徃2' }, + { label: 'XX杩愮淮鍏徃3', value: 'XX杩愮淮鍏徃3' }, + { label: 'XX杩愮淮鍏徃4', value: 'XX杩愮淮鍏徃4' }, + ], + options2: [ + { label: '鏃ュ伐鍗曟暟', value: '鏃ュ伐鍗曟暟' }, + { label: '鍛ㄥ伐鍗曟暟', value: '鍛ㄥ伐鍗曟暟' }, + { label: '鏈堝伐鍗曟暟', value: '鏈堝伐鍗曟暟' }, + ], + dataList: [ + { + name: '鍏ㄩ儴', + complete: { '1鏈�': 10310, '2鏈�': 23200, '3鏈�': 16430, '4鏈�': 24000, '5鏈�': 31700 }, + waiting: { '1鏈�': 1500, '2鏈�': 2310, '3鏈�': 14530, '4鏈�': 231, '5鏈�': 1235 }, + pending: { '1鏈�': 2530, '2鏈�': 2450, '3鏈�': 4000, '4鏈�': 4300, '5鏈�': 3210 } + }, + { + name: 'XX杩愮淮鍏徃1', + complete: { '1鏈�': 1000, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + waiting: { '1鏈�': 123, '2鏈�': 213, '3鏈�': 1412, '4鏈�': 23, '5鏈�': 123 }, + pending: { '1鏈�': 200, '2鏈�': 235, '3鏈�': 300, '4鏈�': 400, '5鏈�': 500 } + }, + { + name: 'XX杩愮淮鍏徃2', + complete: { '1鏈�': 213, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + waiting: { '1鏈�': 123, '2鏈�': 123, '3鏈�': 1412, '4鏈�': 23, '5鏈�': 123 }, + pending: { '1鏈�': 135, '2鏈�': 422, '3鏈�': 425, '4鏈�': 323, '5鏈�': 400 } + }, + { + name: 'XX杩愮淮鍏徃3', + complete: { '1鏈�': 1000, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + waiting: { '1鏈�': 123, '2鏈�': 213, '3鏈�': 123, '4鏈�': 23, '5鏈�': 123 }, + pending: { '1鏈�': 534, '2鏈�': 435, '3鏈�': 422, '4鏈�': 121, '5鏈�': 313 } + }, + { + name: 'XX杩愮淮鍏徃4', + complete: { '1鏈�': 1000, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + waiting: { '1鏈�': 123, '2鏈�': 613, '3鏈�': 1412, '4鏈�': 2336, '5鏈�': 123 }, + pending: { '1鏈�': 123, '2鏈�': 321, '3鏈�': 131, '4鏈�': 321, '5鏈�': 421 } + }, + { + name: 'XX杩愮淮鍏徃5', + complete: { '1鏈�': 1000, '2鏈�': 433, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 8886 }, + waiting: { '1鏈�': 123, '2鏈�': 213, '3鏈�': 1412, '4鏈�': 23, '5鏈�': 123 }, + pending: { '1鏈�': 333, '2鏈�': 245, '3鏈�': 233, '4鏈�': 222, '5鏈�': 111 } + }, + ], + } + }, + methods: { + initChart() { + const option = { + legend: { + right: 'right', + top: 'top', + icon: 'rect', + orient: "vertical", + data: [ + { + name: '瀹屾垚宸ュ崟鏁�', + itemStyle: { + color: 'rgba(62, 144, 247, 1)' + } + }, + { + name: '寰呭畬鎴愬伐鍗曟暟', + itemStyle: { + color: 'rgba(85, 192, 191, 1)' + } + }, + { + name: '寰呭鎵瑰伐鍗曟暟', + itemStyle: { + color: 'rgba(255, 165, 0, 1)' + } + }, + ], + }, + grid: { + left: 0, + right: 0, + bottom: 0, + top: '20%', + containLabel: true + }, + tooltip: {}, + xAxis: { + type: 'category', + data: Object.keys(this.acitveData.complete), + }, + yAxis: {}, + series: [ + { + name: '瀹屾垚宸ュ崟鏁�', + data: Object.entries(this.acitveData.complete).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(62, 144, 247, 1)' + } + }, + { + name: '寰呭畬鎴愬伐鍗曟暟', + data: Object.entries(this.acitveData.waiting).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(85, 192, 191, 1)' + } + }, + { + name: '寰呭鎵瑰伐鍗曟暟', + data: Object.entries(this.acitveData.pending).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(255, 165, 0, 1)' + } + } + ] + }; + lineChart.setOption(option, true); + }, + + + companyChange() { + this.acitveData = this.dataList.find((item) => { + return item.name === this.company; + }); + if (this.acitveData) { + this.initChart(); + } + }, + + // 鐩戝惉鍙樺寲 + observe() { + if (!observer) { + observer = new ResizeObserver(entries => { + this.handleResize(); + }) + } + observer.observe(this.$refs.chartContent); + }, + // 绐楀彛鍙樻崲 + handleResize() { + if (lineChart) { + lineChart.resize(); + } + } + + }, + mounted() { + this.acitveData = this.dataList[0]; + this.company = this.acitveData.name; + lineChart = echarts.init(this.$refs.chartContent); + this.initChart(); + this.observe(); + }, + beforeDestroy() { + if (lineChart) { + lineChart.dispose(); + observer.unobserve(this.$refs.chartContent); + } + }, +} +</script> + +<style lang="scss" scoped> +.data-chart-container { + height: 400px; + margin-bottom: 20px; + + .data-card { + height: 100%; + + .card-content { + width: 100%; + height: 100%; + position: relative; + } + } +} + +.title-container { + position: absolute; + display: flex; + justify-content: space-between; + align-items: center; + z-index: 2; + + + .more-button { + cursor: pointer; + font-size: 16px; + padding: 0 10px; + } +} + +.chart-container { + + width: 100%; + height: 100%; + + #chartContent { + width: 100%; + height: 100%; + } +} + +.select-container { + margin: 0 20px; + width: 180px; +} +</style> diff --git a/src/views/login.vue b/src/views/login.vue index a63965f..0543d82 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -59,7 +59,7 @@ </el-form-item> </el-form> - <el-dialog title="涓轰簡鎮ㄧ殑璐﹀彿瀹夊叏,棣栨鐧婚檰璇蜂慨鏀瑰瘑鐮�" :visible.sync="loginInfo.firstLogin==0?true:false"> + <el-dialog title="涓轰簡鎮ㄧ殑璐﹀彿瀹夊叏,棣栨鐧婚檰璇蜂慨鏀瑰瘑鐮�" :visible.sync="loginInfo.firstLogin==0"> <el-form> <el-form-item label="鏂板瘑鐮�"> <el-input v-model="newPassword" autocomplete="off"></el-input> diff --git a/src/views/system/publish/index.vue b/src/views/system/publish/index.vue index 9f793e7..7c10d18 100644 --- a/src/views/system/publish/index.vue +++ b/src/views/system/publish/index.vue @@ -39,6 +39,7 @@ /> </el-select> </el-form-item> + <el-form-item label="鑰冩牳鐘舵��" prop="state"> <el-select v-model="queryParams.state" @@ -107,6 +108,10 @@ <dict-tag :options="dict.type.platform_examine_frequency" :value="scope.row.frequency"/> </template> </el-table-column> + <el-table-column label="鎶ヨ鍒嗘暟闃堝��" align="center" prop="alarmScore" /> + <el-form-item label="鎶ヨ鍒嗘暟闃堝��" prop="alarmScore"> + <el-input v-model="form.alarmScore" placeholder="璇疯緭鍏ュ垎鏁�" /> + </el-form-item> <el-table-column label="鑰冩牳鐘舵��" align="center" prop="state"> <template slot-scope="scope"> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.state"/> @@ -144,7 +149,7 @@ <!-- 娣诲姞鎴栦慨鏀硅�冩牳鍙戝竷瀵硅瘽妗� --> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + <el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form-item label="鑰冩牳鍚�" prop="examineName"> <el-input v-model="form.examineName" placeholder="璇疯緭鍏ヨ�冩牳鍚�" /> </el-form-item> @@ -159,7 +164,6 @@ </el-option> </el-select> </el-form-item> - <el-form-item label="鑰冩牳鑼冨洿" prop="examineRange"> <el-select v-model="form.examineRange" @@ -190,6 +194,9 @@ /> </el-select> </el-form-item> + <el-form-item label="鎶ヨ鍒嗘暟闃堝��" prop="alarmScore"> + <el-input v-model="form.alarmScore" placeholder="璇疯緭鍏ュ垎鏁�" style="width: 170px"/> + </el-form-item> <el-form-item label="鑰冩牳鐘舵��" prop="state"> <el-select v-model="form.state" diff --git a/src/views/system/work-order/index.vue b/src/views/system/work-order/index.vue index e36bb23..2ead84c 100644 --- a/src/views/system/work-order/index.vue +++ b/src/views/system/work-order/index.vue @@ -85,6 +85,7 @@ <el-table-column label="杩愮淮缁撴灉" align="center" prop="ywResult" /> <el-table-column label="杩愮淮鎯呭喌" align="center" prop="ywCondition" width="150"/> <el-table-column label="杩愮淮妫�娴嬬粨鏋�" align="center" prop="ywCheckResult" width="230"/> + <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180"/> <el-table-column label="鎿嶄綔" fixed="right" width="150" align="center" class-name="small-padding fixed-width"> @@ -163,6 +164,34 @@ </el-form-item> <el-form-item label="杩愮淮浜哄憳" prop="ywPeopleName"> <el-input v-model="ywConditionForm.ywPeopleName" disabled /> + </el-form-item> + <el-form-item label="鐜板満鍥剧墖" prop="picture"> + <el-upload + class="avatar-uploader" + action="/dev-api/common/upload" + name="file" + :headers="{'Authorization': 'Bearer ' + getToken()}" + :on-success="pictureUploadSuccess" + :on-remove="pictureRemove" + :file-list="pictureList" + list-type="picture"> + <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> + <div slot="tip" class="el-upload__tip">鍙兘涓婁紶jpg/png鏂囦欢锛屼笖涓嶈秴杩�500kb</div> + </el-upload> + </el-form-item> + <el-form-item label="浣愯瘉鏉愭枡" prop="certificates"> + <el-upload + class="avatar-uploader" + action="/dev-api/common/upload" + name="file" + :headers="{'Authorization': 'Bearer ' + getToken()}" + :on-success="certificateUploadSuccess" + :on-remove="certificateRemove" + :file-list="certificateList" + list-type="picture"> + <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> + <div slot="tip" class="el-upload__tip">鍙兘涓婁紶jpg/png鏂囦欢锛屼笖涓嶈秴杩�500kb</div> + </el-upload> </el-form-item> <el-form-item label="杩愮淮鎯呭喌" prop="ywCondition"> <el-input v-model="ywConditionForm.ywCondition" type="textarea" maxlength="150" show-word-limit/> @@ -253,6 +282,8 @@ name: "Work-order", data() { return { + certificateList:[], + pictureList: [], // 閬僵灞� loading: true, // 閫変腑鏁扮粍 @@ -368,6 +399,32 @@ this.auditingForm = {}; this.auditingOpen = false; }, + pictureRemove(file, fileList) { + this.form.picture = null, + + this.pictureList = this.pictureList.filter(item => item.name !== file.name) + }, + certificateRemove(file, fileList) { + this.form.certificate = null, + + this.certificateList = this.certificateList.filter(item => item.name !== file.name) + }, + pictureUploadSuccess(response, file, fileList) { + this.form.picture = response.fileName, + this.pictureList.push({ + name: response.originalFilename, + url: response.url, + fileName: response.fileName + }) + }, + certificateUploadSuccess(response, file, fileList) { + this.form.certificate = response.fileName, + this.certificateList.push({ + name: response.originalFilename, + url: response.url, + fileName: response.fileName + }) + }, // 鎻愪氦杩愮淮鎯呭喌 submitYwCondition() { this.$refs["ywConditionForm"].validate(valid => { @@ -466,6 +523,20 @@ this.form = response.data; this.open = true; this.title = "淇敼杩愮淮宸ュ崟"; + this.pictureList = JSON.parse(response.data.picture).map(item => { + return { + name: item, + url: process.env.VUE_APP_FILE_API + '/' + item, + fileName: item + } + }) + this.certificateList = JSON.parse(row.certificate).map(item => { + return { + name: item, + url: process.env.VUE_APP_FILE_API + '/' + item, + fileName: item + } + }) }); }, /** 鎻愪氦鎸夐挳 */ -- Gitblit v1.8.0