From f18ff6df94830a0147f372f031fa94ab5402ead8 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 18 三月 2024 15:57:29 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/assets/images/screen/pageBg1.jpg | 0 src/permission.js | 2 src/views/screen/components/screen-examine/components/examine-chart.vue | 61 +++ src/assets/images/screen/icon/icon2.png | 0 src/views/screen/components/wrapper-title/index.vue | 40 ++ src/views/screen/components/screen-wrapper/index.vue | 68 ++++ src/views/screen/index.vue | 38 ++ src/views/screen/components/select-item/index.vue | 15 src/router/index.js | 8 src/views/screen/components/screen-car/index.vue | 19 + src/views/screen/components/screen-examine/index.vue | 57 +++ src/views/screen/components/screen-face/index.vue | 186 ++++++++++ src/assets/images/screen/icon/icon1.png | 0 src/views/system/work-order/distribute/index.vue | 216 ++++++++++++ src/assets/images/screen/title_bg.png | 0 src/main.js | 10 package.json | 2 src/views/screen/components/screen-title/index.vue | 41 ++ src/views/screen/components/screen-examine/components/examine-table.vue | 109 ++++++ src/assets/images/screen/header_bg.png | 0 src/views/screen/components/screen-detection/index.vue | 91 +++++ 21 files changed, 961 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6064f00..a1a5874 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "url": "https://gitee.com/y_project/RuoYi-Vue.git" }, "dependencies": { + "@jiaminghi/data-view": "^2.10.0", "@riophae/vue-treeselect": "0.4.0", "axios": "0.24.0", "clipboard": "2.0.8", @@ -54,6 +55,7 @@ "quill": "1.3.7", "screenfull": "5.0.2", "sortablejs": "1.10.2", + "v-scale-screen": "1.0.0", "vue": "2.6.12", "vue-count-to": "1.0.13", "vue-cropper": "0.5.5", diff --git a/src/assets/images/screen/header_bg.png b/src/assets/images/screen/header_bg.png new file mode 100644 index 0000000..a3a906a --- /dev/null +++ b/src/assets/images/screen/header_bg.png Binary files differ diff --git a/src/assets/images/screen/icon/icon1.png b/src/assets/images/screen/icon/icon1.png new file mode 100644 index 0000000..0663b6d --- /dev/null +++ b/src/assets/images/screen/icon/icon1.png Binary files differ diff --git a/src/assets/images/screen/icon/icon2.png b/src/assets/images/screen/icon/icon2.png new file mode 100644 index 0000000..f0146c6 --- /dev/null +++ b/src/assets/images/screen/icon/icon2.png Binary files differ diff --git a/src/assets/images/screen/pageBg1.jpg b/src/assets/images/screen/pageBg1.jpg new file mode 100644 index 0000000..fa8b0e0 --- /dev/null +++ b/src/assets/images/screen/pageBg1.jpg Binary files differ diff --git a/src/assets/images/screen/title_bg.png b/src/assets/images/screen/title_bg.png new file mode 100644 index 0000000..76ae280 --- /dev/null +++ b/src/assets/images/screen/title_bg.png Binary files differ diff --git a/src/main.js b/src/main.js index a8d407c..9ede569 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 { getToken } from "@/utils/auth"; import Element from 'element-ui' import './assets/styles/element-variables.scss' @@ -38,6 +38,12 @@ // 瀛楀吀鏁版嵁缁勪欢 import DictData from '@/components/DictData' +// 澶у睆 +import VScaleScreen from 'v-scale-screen' +import dataV from '@jiaminghi/data-view' + + + // 鍏ㄥ眬鏂规硶鎸傝浇 Vue.prototype.getDicts = getDicts Vue.prototype.getConfigKey = getConfigKey @@ -62,6 +68,8 @@ Vue.use(directive) Vue.use(plugins) Vue.use(VueMeta) +Vue.use(VScaleScreen) +Vue.use(dataV) DictData.install() /** diff --git a/src/permission.js b/src/permission.js index 45c6285..462668d 100644 --- a/src/permission.js +++ b/src/permission.js @@ -8,7 +8,7 @@ NProgress.configure({ showSpinner: false }) -const whiteList = ['/login', '/register'] +const whiteList = ['/login', '/register', '/screen'] router.beforeEach((to, from, next) => { NProgress.start() diff --git a/src/router/index.js b/src/router/index.js index 71907b6..f244038 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -75,6 +75,14 @@ ] }, { + path: '/screen', + component: Layout, + hidden: true, + component: () => import('@/views/screen/index'), + name: 'Profile', + meta: { title: '澶у睆淇℃伅', icon: 'user' } + }, + { path: '/user', component: Layout, hidden: true, diff --git a/src/views/screen/components/screen-car/index.vue b/src/views/screen/components/screen-car/index.vue new file mode 100644 index 0000000..76da509 --- /dev/null +++ b/src/views/screen/components/screen-car/index.vue @@ -0,0 +1,19 @@ +<template> + <div class="car-container"> + <wrapper-title :title="'浜鸿劯鏁版嵁瓒嬪娍'"></wrapper-title> + + </div> +</template> + +<script> +import WrapperTitle from '../wrapper-title/index'; + +export default { + name: 'ScreenCar', + components: { + WrapperTitle + }, +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/src/views/screen/components/screen-detection/index.vue b/src/views/screen/components/screen-detection/index.vue new file mode 100644 index 0000000..714f076 --- /dev/null +++ b/src/views/screen/components/screen-detection/index.vue @@ -0,0 +1,91 @@ +<template> + <div class="detection-container"> + <wrapper-title :title="'杩愯鐩戞帶鏁版嵁'"></wrapper-title> + + <div class="detection-content"> + <div class="water-item"> + <dv-water-level-pond :config="config1" style="width:100px;height:100px" /> + <div class="water-num water-text">6250/0</div> + <div class="water-label water-text">鎺ュ叆鐜�</div> + </div> + <div class="water-item"> + <dv-water-level-pond :config="config2" style="width:100px;height:100px" /> + <div class="water-num water-text">6236/6250</div> + <div class="water-label water-text">GIS鐜�</div> + </div> + <div class="water-item"> + <dv-water-level-pond :config="config3" style="width:100px;height:100px" /> + <div class="water-num water-text">5962/6250</div> + <div class="water-label water-text">鍦ㄧ嚎鐜�</div> + </div> + <div class="water-item"> + <dv-water-level-pond :config="config4" style="width:100px;height:100px" /> + <div class="water-num water-text">5255/5962</div> + <div class="water-label water-text">瀹屽ソ鐜�</div> + </div> + </div> + </div> +</template> + +<script> +import WrapperTitle from '../wrapper-title/index'; +export default { + components: { + WrapperTitle + }, + data() { + return { + config1: { + data: [0], + shape: 'round', + waveHeight: 5 + }, + config2: { + data: [99.77], + shape: 'round', + waveHeight: 5 + }, + config3: { + data: [95.39], + shape: 'round', + waveHeight: 5 + }, + config4: { + data: [88.14], + shape: 'round', + waveHeight: 5 + }, + } + } +} +</script> + +<style lang="scss" scoped> + +.detection-content { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + background: rgba(67, 102, 155, 0.3); + border: 1px solid rgba(47, 91, 157, 0.8); + padding: 20px 20px; +} + +.water-item { + font-size: 16px; + color: #fff; + + .water-text { + text-align: center; + } + + .water-num { + margin-top: 20px; + } + + .water-label { + font-size: 20px; + } +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-examine/components/examine-chart.vue b/src/views/screen/components/screen-examine/components/examine-chart.vue new file mode 100644 index 0000000..0a6b467 --- /dev/null +++ b/src/views/screen/components/screen-examine/components/examine-chart.vue @@ -0,0 +1,61 @@ +<template> + <div class="chart-container"> + <div class="rank-chart" ref="rankChart"></div> + </div> +</template> + +<script> +import * as echarts from 'echarts'; +let barChart = null; +export default { + name: 'ExamineChart', + data() { + return { + + } + }, + + methods: { + initChart() { + const options = { + xAxis: { + type: 'category', + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: [120, 200, 150, 80, 70, 110, 130], + type: 'bar' + } + ] + } + barChart.setOption(options,true); + } + }, + mounted() { + barChart = echarts.init(this.$refs.rankChart); + + this.initChart(); + }, + beforeDestroy() { + if (lineChart) { + barChart.dispose(); + } + }, + +} +</script> + +<style lang="scss" scoped> +.chart-container { + width: 100%; + height: 400px; + .rank-chart { + width: 100%; + height: 100%; + } +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-examine/components/examine-table.vue b/src/views/screen/components/screen-examine/components/examine-table.vue new file mode 100644 index 0000000..b66611f --- /dev/null +++ b/src/views/screen/components/screen-examine/components/examine-table.vue @@ -0,0 +1,109 @@ +<template> + <div class="table-container"> + <div class="table-content"> + <el-table :data="tableData" border :height="tableHeight" :max-height="tableHeight"> + <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="address" label="鎴愮哗" align="center"> + </el-table-column> + </el-table> + </div> + + </div> +</template> + +<script> +export default { + data() { + return { + tableHeight: 40, + tableData: [{ + date: '2016-05-02', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�' + }, { + date: '2016-05-04', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1517 寮�' + }, { + date: '2016-05-01', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + { + date: '2016-05-03', + name: '鐜嬪皬铏�', + address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�' + }, + ] + } + }, + methods: { + computedHeight() { + this.$nextTick(() => { + + }) + const content = this.$refs.tabContent; + console.log(content); + // this.tableHeight = content.clientHeight; + } + }, + mounted() { + this.$nextTick(() => { + setTimeout(() => { + this.computedHeight(); + + },1000) + + }) + } +} +</script> + +<style lang="scss" scoped> +.table-container { + width: 100%; + flex: 1; + border: 1px solid red; + position: relative; + + .table-content { + position: absolute; + width: 100%; + top: 0; + bottom: 0; + } +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-examine/index.vue b/src/views/screen/components/screen-examine/index.vue new file mode 100644 index 0000000..3e7ef83 --- /dev/null +++ b/src/views/screen/components/screen-examine/index.vue @@ -0,0 +1,57 @@ +<template> + <div class="examine-container"> + <wrapper-title :title="'鑰冩牳鎴愮哗鏁版嵁'"></wrapper-title> + <div class="examine-content"> + <div class="examine-wrapper"> + <examine-chart class="wrapper-item"></examine-chart> + <examine-table class="wrapper-item"></examine-table> + </div> + </div> + </div> +</template> + +<script> +import WrapperTitle from '../wrapper-title/index'; +import ExamineChart from './components/examine-chart'; +import ExamineTable from './components/examine-table'; +export default { + name: 'ScreenExamine', + components: { + WrapperTitle, + ExamineChart, + ExamineTable + } +} + +</script> + +<style lang="scss" scoped> +.examine-container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +.examine-content { + width: 100%; + flex: 1; + position: relative; + + .examine-wrapper { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + } +} + +.wrapper-item { + background: rgba(67, 102, 155, 0.3); + border: 1px solid rgba(47, 91, 157, 0.8); + margin-bottom: 20px; + &:last-of-type { + margin-bottom: 0; + } +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-face/index.vue b/src/views/screen/components/screen-face/index.vue new file mode 100644 index 0000000..978f2a5 --- /dev/null +++ b/src/views/screen/components/screen-face/index.vue @@ -0,0 +1,186 @@ +<template> + <div class="face-container"> + <wrapper-title :title="'浜鸿劯鏁版嵁瓒嬪娍'"></wrapper-title> + + <div class="face-content"> + <div class="data-plane"> + <dv-border-box-13 class="plane"> + <div class="data-item"> + <div class="data-icon"> + <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img"> + </div> + <div class="data-info"> + <div class="data-lable">鏄ㄦ棩浜鸿劯閲囬泦璁惧鎬绘暟</div> + <div class="data-num">{{formatNumber(1123)}}</div> + </div> + </div> + </dv-border-box-13> + + <dv-border-box-13 class="plane"> + <div class="data-item"> + <div class="data-icon"> + <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> + </div> + <div class="data-info"> + <div class="data-lable">鏄ㄦ棩鎶撴媿鏁版嵁閲�</div> + <div class="data-num">{{ formatNumber(200000) }}</div> + </div> + </div> + </dv-border-box-13> + + <dv-border-box-13 class="plane"> + <div class="data-item"> + <div class="data-icon"> + <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> + </div> + <div class="data-info"> + <div class="data-lable">鍘嗗彶鎶撴媿鏁版嵁閲�</div> + <div class="data-num">{{ formatNumber(112313141111) }}</div> + </div> + </div> + </dv-border-box-13> + </div> + <div id="faceChart" ref="faceChart"></div> + </div> + </div> + +</template> + +<script> +import WrapperTitle from '../wrapper-title/index'; +import * as echarts from 'echarts'; +let lineChart = null; +export default { + name: 'ScreenFace', + components: { + WrapperTitle + }, + data() { + return { + dataList: { + state: { '01:00': 1000, '02:00': 2131, '03:00': 1233, '04:00': 2132, '05:00': 3211, '06:00': 213, '07:00': 123, '08:00': 566 }, + state2: { '01:00': 900, '02:00': 1131, '03:00': 1533, '04:00': 2132, '05:00': 3011, '06:00': 13, '07:00': 113, '08:00': 566 }, + }, + } + }, + + methods: { + initChart() { + const option = { + legend: { + right: 'right', + top: 'top', + orient: "vertical", + icon: 'rect', + data: [ + { + name: '姝e父鏁�', + itemStyle: { + color: 'rgba(62, 144, 247, 1)' + } + }, + { + name: '寮傚父鏁�', + itemStyle: { + color: 'rgba(85, 192, 191, 1)' + } + }, + ], + }, + grid: { + left: '2%', + right: '5%', + bottom: '5%', + top: '8%', + containLabel: true + }, + tooltip: {}, + xAxis: { + type: 'category', + data: Object.keys(this.dataList.state), + }, + yAxis: {}, + series: [ + { + name: '浠婃棩', + data: Object.entries(this.dataList.state).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(62, 144, 247, 1)' + } + }, + { + name: '鏄ㄦ棩', + data: Object.entries(this.dataList.state2).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(85, 192, 191, 1)' + } + } + ] + }; + lineChart.setOption(option, true); + }, + + formatNumber(value) { + return new Intl.NumberFormat('en-US').format(value); + } + }, + + mounted() { + lineChart = echarts.init(this.$refs.faceChart); + this.initChart(); + }, + beforeDestroy() { + if (lineChart) { + lineChart.dispose(); + } + }, +} +</script> + +<style lang="scss" scoped> +.face-content { + background: rgba(67, 102, 155, 0.3); + border: 1px solid rgba(47, 91, 157, 0.8); + + .plane { + margin-bottom: 10px; + } + + .data-plane { + .data-item { + width: 100%; + padding: 20px 20px; + display: flex; + align-items: center; + + .data-icon { + width: 40px; + margin: 0 20px; + } + + .data-info { + flex: 1; + color: #5b83bd; + font-size: 16px; + + .data-num { + margin-top: 5px; + font-size: 24px; + color: #fff; + } + } + } + } + + #faceChart { + width: 100%; + height: 300px; + } +} + +.width-img { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-title/index.vue b/src/views/screen/components/screen-title/index.vue new file mode 100644 index 0000000..1cf07c4 --- /dev/null +++ b/src/views/screen/components/screen-title/index.vue @@ -0,0 +1,41 @@ +<template> + <div class="header-container"> + <div class="header-content"> + <div class="header-bg"> + <img src="@/assets/images/screen/header_bg.png" class="width-img" alt=""> + </div> + <div class="header-text"> + 鑷础杩愮淮鑰冩牳鍙鍖栧ぇ灞� + </div> + </div> + </div> +</template> + +<script> +export default { + name: 'ScreenTitle' +} +</script> + +<style lang="scss" scoped> +.header-container { + width: 1000px; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); +} + +.width-img { + width: 100%; + display: block; +} +.header-text { + position: absolute; + left: 49%; + top: 15px; + transform: translateX(-50%); + color: #fff; + font-size: 30px; +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-wrapper/index.vue b/src/views/screen/components/screen-wrapper/index.vue new file mode 100644 index 0000000..0dbff49 --- /dev/null +++ b/src/views/screen/components/screen-wrapper/index.vue @@ -0,0 +1,68 @@ +<template> + <div class="wrapper-container"> + <div class="wrapper-content"> + <div class="left-container wrapper"> + <screen-face></screen-face> + </div> + <div class="center-container wrapper"> + <screen-detection></screen-detection> + </div> + <div class="right-container wrapper"> + <screen-examine></screen-examine> + </div> + </div> + </div> +</template> + +<script> +import ScreenFace from '../screen-face/index'; +import ScreenDetection from '../screen-detection/index'; +import ScreenExamine from '../screen-examine/index'; +export default { + name: 'ScreenWrapper', + components: { + ScreenFace, + ScreenDetection, + ScreenExamine, + }, +} +</script> + +<style lang="scss" scoped> +.wrapper-container { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1; + .wrapper-content { + width: 100%; + height: calc(100% - 100px); + margin-top: 100px; + border: 1px solid red; + position: relative; + box-sizing: border-box; + padding: 20px; + display: flex; + align-items: center; + } +} + +.wrapper { + width: 33.3%; + height: 100%; + box-sizing: border-box; + padding: 0 10px; + border: 1px solid red; + display: flex; + flex-direction: column; + justify-content: space-between; + &:first-of-type { + padding-left: 0; + } + &:last-of-type { + padding-right: 0; + } +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/select-item/index.vue b/src/views/screen/components/select-item/index.vue new file mode 100644 index 0000000..f458ad6 --- /dev/null +++ b/src/views/screen/components/select-item/index.vue @@ -0,0 +1,15 @@ +<template> + <div class="select-container"> + + </div> +</template> + +<script> + export default { + + } +</script> + +<style lang="scss" scoped> + +</style> \ No newline at end of file diff --git a/src/views/screen/components/wrapper-title/index.vue b/src/views/screen/components/wrapper-title/index.vue new file mode 100644 index 0000000..9e7593f --- /dev/null +++ b/src/views/screen/components/wrapper-title/index.vue @@ -0,0 +1,40 @@ +<template> + <div class="title-container"> + <span class="title">{{ title }}</span> + </div> +</template> + +<script> +export default { + name: 'WrapperTitle', + props: { + title: { + type: String, + required: true + } + } +} +</script> + +<style lang="scss" scoped> +.title-container { + background-image: url("../../../../assets/images/screen/title_bg.png"); + background-size: 231px 100%; + background-repeat: no-repeat; + height: 38px; + width: 100%; + position: relative; + display: flex; + align-items: center; + margin-bottom: 10px; + + .title { + margin-left: 20px; + margin-top: -2px; + color: #fff; + letter-spacing: 2px; + font-size: 20px; + font-style: italic; + } +} +</style> \ No newline at end of file diff --git a/src/views/screen/index.vue b/src/views/screen/index.vue new file mode 100644 index 0000000..7f4fb93 --- /dev/null +++ b/src/views/screen/index.vue @@ -0,0 +1,38 @@ +<template> + <div class="screen-container"> + <screen-title></screen-title> + <v-scale-screen width="1920" height="1080" :autoScale="true" :delay="0" class="screen"> + <screen-wrapper></screen-wrapper> + </v-scale-screen> + </div> + +</template> + +<script> +import ScreenTitle from './components/screen-title/index.vue'; +import ScreenWrapper from './components/screen-wrapper/index.vue'; + +export default { + name: 'App', + components: { + ScreenTitle, + ScreenWrapper, + }, + data() { + return { + } + }, + mounted() { + + } +} +</script> + +<style lang="scss" scoped> +.screen { + background: url('../../assets/images/screen/pageBg1.jpg') !important; + background-size: cover !important; + background-repeat: no-repeat !important; + background-position: center center !important; +} +</style> \ No newline at end of file diff --git a/src/views/system/work-order/distribute/index.vue b/src/views/system/work-order/distribute/index.vue new file mode 100644 index 0000000..0a0f18c --- /dev/null +++ b/src/views/system/work-order/distribute/index.vue @@ -0,0 +1,216 @@ +<template> + <div class="row"> + <el-row type="flex" justify="left"> + <el-col :span="24" style="position: relative"> + <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect"> + <el-menu-item index="0" @click="changeUnit(null, '鍏ㄩ儴')"> + 鍏ㄩ儴鍗曚綅 + </el-menu-item> + <el-menu-item index="1"> + 鑷祦浜曡繍缁村崟浣�(70/70) + </el-menu-item> + <el-menu-item index="2"> + 澶у畨杩愮淮(50/50) + </el-menu-item> + <el-menu-item index="3">瀵岄『杩愮淮鍗曚綅(20/70)</el-menu-item> + <el-menu-item index="4">楂樻柊杩愮淮鍗曚綅(15/40)</el-menu-item> + <el-menu-item index="5">鑽e幙杩愮淮鍗曚綅(90/90)</el-menu-item> + <el-menu-item index="6">璐′簳杩愮淮鍗曚綅(45/45)</el-menu-item> + <el-menu-item index="7">娌挎哗杩愮淮鍗曚綅(70/70)</el-menu-item> + </el-menu> + <el-tooltip class="item" effect="dark" content="鑷姩涓嬪彂璁剧疆" placement="left"> + <el-button class="setting" style="" type="success" icon="el-icon-s-tools" circle></el-button> + </el-tooltip> + </el-col> + </el-row> + + <el-row class="op-warp" type="flex" justify="left" > + <el-col :span="24"> + <el-button size="small" type="info" @click="selectedDistribute" class="op">涓嬪彂閫変腑宸ュ崟</el-button> + <el-button size="small" type="danger" @click="allDistribute" class="op">鍏ㄩ儴涓嬪彂</el-button> + <el-popover + class="op" + placement="right" + width="300px" + trigger="click"> + <span style="font-weight: bold;font-size: 16px">蹇�熶笅鍙�</span> + <el-form ref="fastDistributeForm" :model="fastDistributeForm" :rules="fastDistributeRules" label-width="80px"> + <el-form-item label="蹇嵎鏂瑰紡" prop="fastWay"> + <el-radio v-model="fastDistributeForm.fastWay" label="0">鏈�杩�30鍒嗛挓</el-radio> + <el-radio v-model="fastDistributeForm.fastWay" label="01">鏈�杩�1灏忔椂</el-radio> + <el-radio v-model="fastDistributeForm.fastWay" label="10">鏈�杩�2灏忔椂</el-radio> + <el-radio v-model="fastDistributeForm.fastWay" label="11">鏈�杩�1澶�</el-radio> + <el-radio v-model="fastDistributeForm.fastWay" label="101">鑷畾涔�</el-radio> + </el-form-item> + <el-form-item v-if="fastDistributeForm.fastWay === '101'" label="鏃堕棿鑼冨洿"> + <el-date-picker + style="width: 100%" + v-model="fastTimeRange" + type="datetimerange" + range-separator="鑷�" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡"> + </el-date-picker> + </el-form-item> + <el-form-item label="鏁伴噺闄愬埗" prop="fastNumLimit"> + <el-input v-model="fastDistributeForm.fastNumLimit" size="small" type="number" placeholder="姝ゆ宸ュ崟涓嬪彂鏈�澶ф暟閲�"></el-input> + </el-form-item> + <el-form-item> + <el-button type="primary" size="small" @click="fastDistribute">绔嬪嵆涓嬪彂</el-button> + </el-form-item> + </el-form> + <el-button slot="reference" type="primary" size="small">蹇嵎涓嬪彂</el-button> + </el-popover> + </el-col> + </el-row> + + <el-row class="content-warp" type="flex" justify="left"> + <el-col :span="24"> + <el-table v-loading="loading" :data="workOrderList" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> + <el-table-column label="宸ュ崟鍙�" align="center" prop="workOrderNo"/> + <el-table-column label="杩愮淮鍗曚綅" align="center" prop="unitName"/> + <el-table-column label="宸ュ崟鏉ユ簮" align="center" prop="source"/> + <el-table-column label="鏁呴殰绫诲瀷" align="center" prop="errorType"/> + <el-table-column label="浜х敓鏃堕棿" align="center" prop="createTime"/> + </el-table> + + <pagination + v-show="total>0" + :total="total" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + </el-col> + + </el-row> + </div> +</template> + +<script> +export default { + name: 'index', + data() { + return { + // 褰撳墠杩愮淮鍗曚綅 + unitId: null, + unitName: "", + // 澶氶�� + multipleSelection: [], + // 涓嬪彂鏃堕棿鑼冨洿 + fastTimeRange: [], + // 涓嬪彂 + fastDistributeForm: { + fastWay: '', + fastNumLimit: null, + start: null, + end: null, + unitId: null + }, + // 涓嬪彂琛ㄥ崟楠岃瘉 + fastDistributeRules: { + fastWay: [ + { required: true, message: "璇烽�夋嫨蹇�熷垎鍙戞柟寮�", trigger: "change" } + ], + fastNumLimit: [ + { required: true, message: "璇疯緭鍏ュ揩閫熷垎鍙戞暟閲忛檺鍒�", trigger: "change" } + ], + }, + queryParams: { + pageNum: 1, + pageSize: 10, + }, + // 鎬绘潯鏁� + total: 0, + // 闈炲涓鐢� + multiple: true, + activeIndex: '0', + loading: false, + workOrderList: [], + } + }, + methods: { + changeUnit(unitId, unitName) { + this.unitId = unitId; + this.unitName = unitName; + // todo 瑙﹀彂鏁版嵁鏌ヨ + }, + clearFastDistributeForm() { + this.fastDistributeForm.fastWay = '' + this.fastDistributeForm.start = null + this.fastDistributeForm.end = null + this.fastDistributeForm.fastNumLimit = null + this.fastTimeRange = [] + }, + allDis() {}, + // 鍏ㄩ儴涓嬪彂 + allDistribute() { + this.$modal.confirm("纭畾瑕佷笅鍙�" + (this.unitId ? this.unitName + "涓嬬殑" : "鎵�鏈夊伐鍗�") + "鍚楋紵").then(function() { + return this.allDis(); + }).then(() => { + // this.getList(); + // this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }).catch(() => {}); + }, + // 蹇�熶笅鍙� + fastDistribute() { + this.$refs['fastDistributeForm'].validate((valid) => { + if (valid) { + // 濡傛灉鏄嚜瀹氫箟鏂瑰紡锛岄偅涔堟椂闂存蹇呭~ + if (this.fastDistributeForm.fastWay === '101' && !this.fastTimeRange.length > 0) { + this.$message.warning("璇烽�夋嫨鏃堕棿鑼冨洿") + return false + } + if (this.fastTimeRange.length > 0) { + this.fastDistributeForm.start = this.fastTimeRange[0] + this.fastDistributeForm.end = this.fastTimeRange[1] + } + this.fastDistributeForm.unitId = this.unitId + // todo 鎻愪氦蹇�熷彂甯冭姹� + } else { + return false + } + }) + }, + // 閫変腑宸ュ崟涓嬪彂 + selectedDistribute() { + if (this.multipleSelection.length < 1) { + this.$message.warning("璇峰厛閫夋嫨瑕佷笅鍙戠殑宸ュ崟") + return + } + // todo 涓嬪彂宸ュ崟 + }, + handleSelect(key, keyPath) { + console.log(key, keyPath); + }, + getList() { + + }, + // 澶氶�夋閫変腑鏁版嵁 + handleSelectionChange(selection) { + this.multipleSelection = selection.map(item => item.id) + }, + } +} +</script> + +<style scoped> +.row { + padding: 0 20px; +} +.op-warp { + margin-top: 10px; +} +.content-warp { + margin-top: 10px; +} +.op { + margin-right: 5px; +} +.setting { + position: absolute; + top: 10px; + right:5px +} +</style> -- Gitblit v1.8.0