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