zhaomin лет назад: 3
Родитель
Сommit
728bfc815e
70 измененных файлов с 25593 добавлено и 0 удалено
  1. 36 0
      CallCenterWeb.UI/rmyyecharts/README.en.md
  2. 39 0
      CallCenterWeb.UI/rmyyecharts/README.md
  3. 5 0
      CallCenterWeb.UI/rmyyecharts/babel.config.js
  4. 12192 0
      CallCenterWeb.UI/rmyyecharts/package-lock.json
  5. 36 0
      CallCenterWeb.UI/rmyyecharts/package.json
  6. BIN
      CallCenterWeb.UI/rmyyecharts/public/bitbug_favicon.ico
  7. BIN
      CallCenterWeb.UI/rmyyecharts/public/bitbug_favicon1.ico
  8. BIN
      CallCenterWeb.UI/rmyyecharts/public/favicon.ico
  9. 43 0
      CallCenterWeb.UI/rmyyecharts/public/index.html
  10. 19 0
      CallCenterWeb.UI/rmyyecharts/public/playerjs/EasyWasmPlayer.js
  11. 7546 0
      CallCenterWeb.UI/rmyyecharts/public/playerjs/ZLMRTCClient.js
  12. 1 0
      CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/ff.js
  13. BIN
      CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/ff.wasm
  14. 1 0
      CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/ff.worker.js
  15. 8 0
      CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/index.js
  16. BIN
      CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/logo.png
  17. 1 0
      CallCenterWeb.UI/rmyyecharts/public/static/css/he-standard.css
  18. 1659 0
      CallCenterWeb.UI/rmyyecharts/public/static/css/iconfont.css
  19. BIN
      CallCenterWeb.UI/rmyyecharts/public/static/css/iconfont.woff2
  20. 103 0
      CallCenterWeb.UI/rmyyecharts/public/static/js/bg.js
  21. BIN
      CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGI.TTF
  22. BIN
      CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGIB.TTF
  23. BIN
      CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGII.TTF
  24. BIN
      CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGIT.TTF
  25. 26 0
      CallCenterWeb.UI/rmyyecharts/public/static/js/he-standard.js
  26. 25 0
      CallCenterWeb.UI/rmyyecharts/src/App.vue
  27. 82 0
      CallCenterWeb.UI/rmyyecharts/src/api/dataAnalysis/monitorData.js
  28. 31 0
      CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.css
  29. 1 0
      CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.js
  30. 37 0
      CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.json
  31. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.ttf
  32. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.woff
  33. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.woff2
  34. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/callTotal.png
  35. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/callin.png
  36. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/car.png
  37. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/dispatching.png
  38. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/frame.png
  39. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/frame2.png
  40. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/frame3.png
  41. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/home.png
  42. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/image/repair.png
  43. 1052 0
      CallCenterWeb.UI/rmyyecharts/src/assets/js/h5splayer.js
  44. 54 0
      CallCenterWeb.UI/rmyyecharts/src/assets/js/h5splayerhelper.js
  45. 246 0
      CallCenterWeb.UI/rmyyecharts/src/assets/js/mRtcSdk.js
  46. BIN
      CallCenterWeb.UI/rmyyecharts/src/assets/logo.png
  47. 32 0
      CallCenterWeb.UI/rmyyecharts/src/components/HelloWorld.vue
  48. 191 0
      CallCenterWeb.UI/rmyyecharts/src/components/IVRSatisfactionByNow.vue
  49. 155 0
      CallCenterWeb.UI/rmyyecharts/src/components/carType.vue
  50. 175 0
      CallCenterWeb.UI/rmyyecharts/src/components/connectionRate.vue
  51. 148 0
      CallCenterWeb.UI/rmyyecharts/src/components/conversationByNow.vue
  52. 167 0
      CallCenterWeb.UI/rmyyecharts/src/components/dispatchType.vue
  53. 154 0
      CallCenterWeb.UI/rmyyecharts/src/components/orderSatisfactionByNow.vue
  54. 116 0
      CallCenterWeb.UI/rmyyecharts/src/components/repairTotal.vue
  55. 141 0
      CallCenterWeb.UI/rmyyecharts/src/components/topCount.vue
  56. 101 0
      CallCenterWeb.UI/rmyyecharts/src/components/traffic.vue
  57. 168 0
      CallCenterWeb.UI/rmyyecharts/src/components/workorderByNow.vue
  58. 27 0
      CallCenterWeb.UI/rmyyecharts/src/main.js
  59. 26 0
      CallCenterWeb.UI/rmyyecharts/src/router/index.js
  60. 15 0
      CallCenterWeb.UI/rmyyecharts/src/store/index.js
  61. 66 0
      CallCenterWeb.UI/rmyyecharts/src/utils/Resize.vue
  62. 15 0
      CallCenterWeb.UI/rmyyecharts/src/utils/auth.js
  63. 86 0
      CallCenterWeb.UI/rmyyecharts/src/utils/autoResize.js
  64. 6 0
      CallCenterWeb.UI/rmyyecharts/src/utils/errorCode.js
  65. 48 0
      CallCenterWeb.UI/rmyyecharts/src/utils/index.js
  66. 82 0
      CallCenterWeb.UI/rmyyecharts/src/utils/request.js
  67. 252 0
      CallCenterWeb.UI/rmyyecharts/src/utils/selectTime.js
  68. 5 0
      CallCenterWeb.UI/rmyyecharts/src/views/About.vue
  69. 151 0
      CallCenterWeb.UI/rmyyecharts/src/views/Home.vue
  70. 23 0
      CallCenterWeb.UI/rmyyecharts/vue.config.js

+ 36 - 0
CallCenterWeb.UI/rmyyecharts/README.en.md

@@ -0,0 +1,36 @@
1
+# bigscreenhpjc1.2
2
+
3
+#### Description
4
+{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
5
+
6
+#### Software Architecture
7
+Software architecture description
8
+
9
+#### Installation
10
+
11
+1.  xxxx
12
+2.  xxxx
13
+3.  xxxx
14
+
15
+#### Instructions
16
+
17
+1.  xxxx
18
+2.  xxxx
19
+3.  xxxx
20
+
21
+#### Contribution
22
+
23
+1.  Fork the repository
24
+2.  Create Feat_xxx branch
25
+3.  Commit your code
26
+4.  Create Pull Request
27
+
28
+
29
+#### Gitee Feature
30
+
31
+1.  You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
32
+2.  Gitee blog [blog.gitee.com](https://blog.gitee.com)
33
+3.  Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
34
+4.  The most valuable open source project [GVP](https://gitee.com/gvp)
35
+5.  The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
36
+6.  The most popular members  [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 39 - 0
CallCenterWeb.UI/rmyyecharts/README.md

@@ -0,0 +1,39 @@
1
+# bigscreenhpjc1.2
2
+
3
+#### 介绍
4
+{**以下是 Gitee 平台说明,您可以替换此简介**
5
+Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
6
+无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
7
+
8
+#### 软件架构
9
+软件架构说明
10
+
11
+
12
+#### 安装教程
13
+
14
+1.  xxxx
15
+2.  xxxx
16
+3.  xxxx
17
+
18
+#### 使用说明
19
+
20
+1.  xxxx
21
+2.  xxxx
22
+3.  xxxx
23
+
24
+#### 参与贡献
25
+
26
+1.  Fork 本仓库
27
+2.  新建 Feat_xxx 分支
28
+3.  提交代码
29
+4.  新建 Pull Request
30
+
31
+
32
+#### 特技
33
+
34
+1.  使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
35
+2.  Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
36
+3.  你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
37
+4.  [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
38
+5.  Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
39
+6.  Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 5 - 0
CallCenterWeb.UI/rmyyecharts/babel.config.js

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  presets: [
3
+    '@vue/cli-plugin-babel/preset'
4
+  ]
5
+}

Разница между файлами не показана из-за своего большого размера
+ 12192 - 0
CallCenterWeb.UI/rmyyecharts/package-lock.json


+ 36 - 0
CallCenterWeb.UI/rmyyecharts/package.json

@@ -0,0 +1,36 @@
1
+{
2
+  "name": "bigscreenhpjc",
3
+  "version": "0.1.0",
4
+  "private": true,
5
+  "scripts": {
6
+    "dev": "vue-cli-service serve",
7
+    "build": "vue-cli-service build"
8
+  },
9
+  "dependencies": {
10
+    "@jiaminghi/data-view": "^2.10.0",
11
+    "axios": "^0.21.4",
12
+    "core-js": "^3.6.5",
13
+    "echarts": "^5.1.2",
14
+    "element-ui": "^2.15.5",
15
+    "jquery": "^3.6.0",
16
+    "js-cookie": "^2.2.0",
17
+    "vue": "^2.6.11",
18
+    "vue-axios": "^3.3.7",
19
+    "vue-router": "^3.2.0",
20
+    "vuex": "^3.4.0"
21
+  },
22
+  "devDependencies": {
23
+    "@vue/cli-plugin-babel": "~4.5.0",
24
+    "@vue/cli-plugin-router": "~4.5.0",
25
+    "@vue/cli-plugin-vuex": "~4.5.0",
26
+    "@vue/cli-service": "~4.5.0",
27
+    "node-sass": "^4.14.1",
28
+    "sass-loader": "^8.0.2",
29
+    "vue-template-compiler": "^2.6.11"
30
+  },
31
+  "browserslist": [
32
+    "> 1%",
33
+    "last 2 versions",
34
+    "not dead"
35
+  ]
36
+}

BIN
CallCenterWeb.UI/rmyyecharts/public/bitbug_favicon.ico


BIN
CallCenterWeb.UI/rmyyecharts/public/bitbug_favicon1.ico


BIN
CallCenterWeb.UI/rmyyecharts/public/favicon.ico


+ 43 - 0
CallCenterWeb.UI/rmyyecharts/public/index.html

@@ -0,0 +1,43 @@
1
+<!DOCTYPE html>
2
+<html lang="">
3
+
4
+<head>
5
+  <meta charset="utf-8">
6
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+  <meta name="viewport" content="width=device-width,initial-scale=1.0">
8
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
9
+  <!-- <link rel="stylesheet" type="text/css" href="./static/css/iconfont.css"> -->
10
+
11
+  <!-- <title>
12
+    <%= htmlWebpackPlugin.options.title %>
13
+  </title> -->
14
+  <title>人民医院数据可视化</title>
15
+  <style>
16
+    html {
17
+      height: 100%;
18
+      background-color: #000;
19
+    }
20
+
21
+    * {
22
+      margin: 0;
23
+      padding: 0;
24
+    }
25
+  </style>
26
+</head>
27
+
28
+<body>
29
+  <noscript>
30
+    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
31
+        Please enable it to continue.</strong>
32
+  </noscript>
33
+  <div id="app">
34
+  </div>
35
+  <!-- built files will be auto injected -->
36
+</body>
37
+
38
+<script type="text/javascript" src="/playerjs/jessibuca/index.js"></script>
39
+<script type="text/javascript" src="/playerjs/EasyWasmPlayer.js"></script>
40
+<script type="text/javascript" src="/playerjs/ZLMRTCClient.js"></script>
41
+<script src="./static/js/bg.js"></script>
42
+
43
+</html>

Разница между файлами не показана из-за своего большого размера
+ 19 - 0
CallCenterWeb.UI/rmyyecharts/public/playerjs/EasyWasmPlayer.js


Разница между файлами не показана из-за своего большого размера
+ 7546 - 0
CallCenterWeb.UI/rmyyecharts/public/playerjs/ZLMRTCClient.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/ff.js


BIN
CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/ff.wasm


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/ff.worker.js


Разница между файлами не показана из-за своего большого размера
+ 8 - 0
CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/index.js


BIN
CallCenterWeb.UI/rmyyecharts/public/playerjs/jessibuca/logo.png


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
CallCenterWeb.UI/rmyyecharts/public/static/css/he-standard.css


Разница между файлами не показана из-за своего большого размера
+ 1659 - 0
CallCenterWeb.UI/rmyyecharts/public/static/css/iconfont.css


BIN
CallCenterWeb.UI/rmyyecharts/public/static/css/iconfont.woff2


+ 103 - 0
CallCenterWeb.UI/rmyyecharts/public/static/js/bg.js

@@ -0,0 +1,103 @@
1
+//宇宙特效
2
+"use strict";
3
+var canvas = document.getElementById('canvas'),
4
+  ctx = canvas.getContext('2d'),
5
+  w = canvas.width = window.innerWidth,
6
+  h = canvas.height = window.innerHeight,
7
+
8
+  hue = 217,
9
+  stars = [],
10
+  count = 0,
11
+  maxStars = 1300;//星星数量
12
+
13
+var canvas2 = document.createElement('canvas'),
14
+  ctx2 = canvas2.getContext('2d');
15
+canvas2.width = 100;
16
+canvas2.height = 100;
17
+var half = canvas2.width / 2,
18
+  gradient2 = ctx2.createRadialGradient(half, half, 0, half, half, half);
19
+gradient2.addColorStop(0.025, '#CCC');
20
+gradient2.addColorStop(0.1, 'hsl(' + hue + ', 61%, 33%)');
21
+gradient2.addColorStop(0.25, 'hsl(' + hue + ', 64%, 6%)');
22
+gradient2.addColorStop(1, 'transparent');
23
+
24
+ctx2.fillStyle = gradient2;
25
+ctx2.beginPath();
26
+ctx2.arc(half, half, half, 0, Math.PI * 2);
27
+ctx2.fill();
28
+
29
+// End cache
30
+
31
+function random(min, max) {
32
+  if (arguments.length < 2) {
33
+    max = min;
34
+    min = 0;
35
+  }
36
+
37
+  if (min > max) {
38
+    var hold = max;
39
+    max = min;
40
+    min = hold;
41
+  }
42
+
43
+  return Math.floor(Math.random() * (max - min + 1)) + min;
44
+}
45
+
46
+function maxOrbit(x, y) {
47
+  var max = Math.max(x, y),
48
+    diameter = Math.round(Math.sqrt(max * max + max * max));
49
+  return diameter / 2;
50
+  //星星移动范围,值越大范围越小,
51
+}
52
+
53
+var Star = function() {
54
+
55
+  this.orbitRadius = random(maxOrbit(w, h));
56
+  this.radius = random(60, this.orbitRadius) / 8; 
57
+  //星星大小
58
+  this.orbitX = w / 2;
59
+  this.orbitY = h / 2;
60
+  this.timePassed = random(0, maxStars);
61
+  this.speed = random(this.orbitRadius) / 1000000; 
62
+  //星星移动速度
63
+  this.alpha = random(2, 10)/1000;
64
+
65
+  count++;
66
+  stars[count] = this;
67
+}
68
+
69
+Star.prototype.draw = function() {
70
+  var x = Math.sin(this.timePassed) * this.orbitRadius + this.orbitX,
71
+    y = Math.cos(this.timePassed) * this.orbitRadius + this.orbitY,
72
+    twinkle = random(10);
73
+
74
+  if (twinkle === 1 && this.alpha > 0) {
75
+    this.alpha -= 0.05;
76
+  } else if (twinkle === 2 && this.alpha < 1) {
77
+    this.alpha += 0.05;
78
+  }
79
+
80
+  ctx.globalAlpha = this.alpha;
81
+  ctx.drawImage(canvas2, x - this.radius / 2, y - this.radius / 2, this.radius, this.radius);
82
+  this.timePassed += this.speed;
83
+}
84
+
85
+for (var i = 0; i < maxStars; i++) {
86
+  new Star();
87
+}
88
+
89
+function animation() {
90
+  ctx.globalCompositeOperation = 'source-over';
91
+  ctx.globalAlpha = 0.5; //尾巴
92
+  ctx.fillStyle = 'hsla(' + hue + ', 64%, 6%, 2)';
93
+  ctx.fillRect(0, 0, w, h)
94
+
95
+  ctx.globalCompositeOperation = 'lighter';
96
+  for (var i = 1, l = stars.length; i < l; i++) {
97
+    stars[i].draw();
98
+  };
99
+
100
+  window.requestAnimationFrame(animation);
101
+}
102
+
103
+animation();

BIN
CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGI.TTF


BIN
CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGIB.TTF


BIN
CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGII.TTF


BIN
CallCenterWeb.UI/rmyyecharts/public/static/js/font/DS-DIGIT.TTF


Разница между файлами не показана из-за своего большого размера
+ 26 - 0
CallCenterWeb.UI/rmyyecharts/public/static/js/he-standard.js


+ 25 - 0
CallCenterWeb.UI/rmyyecharts/src/App.vue

@@ -0,0 +1,25 @@
1
+<template>
2
+  <div id="app">
3
+      <router-view/>
4
+  </div>
5
+</template>
6
+
7
+<style>
8
+/* #app {
9
+  font-family: Avenir, Helvetica, Arial, sans-serif;
10
+  -webkit-font-smoothing: antialiased;
11
+  -moz-osx-font-smoothing: grayscale;
12
+  text-align: center;
13
+  color: #2c3e50;
14
+}
15
+
16
+
17
+#nav a {
18
+  font-weight: bold;
19
+  color: #2c3e50;
20
+}
21
+
22
+#nav a.router-link-exact-active {
23
+  color: #42b983;
24
+} */
25
+</style>

+ 82 - 0
CallCenterWeb.UI/rmyyecharts/src/api/dataAnalysis/monitorData.js

@@ -0,0 +1,82 @@
1
+import request from '@/utils/request'
2
+
3
+// 获取当日顶部数据
4
+export function GetTopCountByNow() {
5
+  return request({
6
+    url: '/Info/GetTopCountByNow',
7
+    method: 'get',
8
+  })
9
+}
10
+
11
+// 获取当日话务量数据
12
+export function GetConversationByNow(form) {
13
+  return request({
14
+    url: '/Info/GetConversationByNow',
15
+    method: 'get',
16
+    params: form
17
+  })
18
+}
19
+
20
+//获取当日24小时呼入呼出
21
+export function GetConversation24ByNow(form) {
22
+  return request({
23
+    url: '/Info/GetConversation24ByNow',
24
+    method: 'get',
25
+    params: form
26
+  })
27
+}
28
+
29
+//获取当日24小时工单
30
+export function GetWorkorder24ByNow(form) {
31
+  return request({
32
+    url: '/Info/GetWorkorder24ByNow',
33
+    method: 'get',
34
+    params: form
35
+  })
36
+}
37
+
38
+//获取当日IVR满意度统计
39
+export function GetIVRSatisfactionByNow(form) {
40
+  return request({
41
+    url: '/Info/GetIVRSatisfactionByNow',
42
+    method: 'get',
43
+    params: form
44
+  })
45
+}
46
+
47
+//获取当日工单满意度统计
48
+export function GetOrderSatisfactionByNow(form) {
49
+  return request({
50
+    url: '/Info/GetOrderSatisfactionByNow',
51
+    method: 'get',
52
+    params: form
53
+  })
54
+}
55
+
56
+//获取当日车辆调度工单统计
57
+export function GetCarTypeByNow(form) {
58
+  return request({
59
+    url: '/Info/GetCarTypeByNow',
60
+    method: 'get',
61
+    params: form
62
+  })
63
+}
64
+
65
+
66
+//获取当日故障报修工单统计
67
+export function GetFaultRepairTypeByNow(form) {
68
+  return request({
69
+    url: '/Info/GetFaultRepairTypeByNow',
70
+    method: 'get',
71
+    params: form
72
+  })
73
+}
74
+
75
+//获取当日综合调度工单统计
76
+export function GetSchedulingTypeByNow(form) {
77
+  return request({
78
+    url: '/Info/GetSchedulingTypeByNow',
79
+    method: 'get',
80
+    params: form
81
+  })
82
+}

+ 31 - 0
CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.css

@@ -0,0 +1,31 @@
1
+@font-face {
2
+  font-family: "iconfont"; /* Project id 2813918 */
3
+  src: url('iconfont.woff2?t=1631675534594') format('woff2'),
4
+       url('iconfont.woff?t=1631675534594') format('woff'),
5
+       url('iconfont.ttf?t=1631675534594') format('truetype');
6
+}
7
+
8
+.iconfont {
9
+  font-family: "iconfont" !important;
10
+  font-size: 16px;
11
+  font-style: normal;
12
+  -webkit-font-smoothing: antialiased;
13
+  -moz-osx-font-smoothing: grayscale;
14
+}
15
+
16
+.icon-insert-bottom-full:before {
17
+  content: "\ea5b";
18
+}
19
+
20
+.icon-insert-left-full:before {
21
+  content: "\ea5c";
22
+}
23
+
24
+.icon-insert-right-full:before {
25
+  content: "\ea5d";
26
+}
27
+
28
+.icon-insert-top-full:before {
29
+  content: "\ea5e";
30
+}
31
+

Разница между файлами не показана из-за своего большого размера
+ 1 - 0
CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.js


+ 37 - 0
CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.json

@@ -0,0 +1,37 @@
1
+{
2
+  "id": "2813918",
3
+  "name": "HPJC",
4
+  "font_family": "iconfont",
5
+  "css_prefix_text": "icon-",
6
+  "description": "",
7
+  "glyphs": [
8
+    {
9
+      "icon_id": "18175292",
10
+      "name": "三角符,插入符,下",
11
+      "font_class": "insert-bottom-full",
12
+      "unicode": "ea5b",
13
+      "unicode_decimal": 59995
14
+    },
15
+    {
16
+      "icon_id": "18175314",
17
+      "name": "三角符,插入符,左",
18
+      "font_class": "insert-left-full",
19
+      "unicode": "ea5c",
20
+      "unicode_decimal": 59996
21
+    },
22
+    {
23
+      "icon_id": "18175365",
24
+      "name": "三角符,插入符,右",
25
+      "font_class": "insert-right-full",
26
+      "unicode": "ea5d",
27
+      "unicode_decimal": 59997
28
+    },
29
+    {
30
+      "icon_id": "18175370",
31
+      "name": "三角符,插入符,上",
32
+      "font_class": "insert-top-full",
33
+      "unicode": "ea5e",
34
+      "unicode_decimal": 59998
35
+    }
36
+  ]
37
+}

BIN
CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.ttf


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.woff


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/icon/iconfont.woff2


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/callTotal.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/callin.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/car.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/dispatching.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/frame.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/frame2.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/frame3.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/home.png


BIN
CallCenterWeb.UI/rmyyecharts/src/assets/image/repair.png


Разница между файлами не показана из-за своего большого размера
+ 1052 - 0
CallCenterWeb.UI/rmyyecharts/src/assets/js/h5splayer.js


+ 54 - 0
CallCenterWeb.UI/rmyyecharts/src/assets/js/h5splayerhelper.js

@@ -0,0 +1,54 @@
1
+import {H5sPlayerWS,H5sPlayerHls,H5sPlayerRTC} from './h5splayer.js'
2
+/** 
3
+ * Check on iOS platform
4
+*/
5
+function H5siOS() {
6
+
7
+  var iDevices = [
8
+    'iPad Simulator',
9
+    'iPhone Simulator',
10
+    'iPod Simulator',
11
+    'iPad',
12
+    'iPhone',
13
+    'iPod'
14
+  ];
15
+
16
+  if (!!navigator.platform) {
17
+    while (iDevices.length) {
18
+      if (navigator.platform === iDevices.pop()){ return true; }
19
+    }
20
+  }
21
+
22
+  return false;
23
+}
24
+
25
+/** 
26
+ *=================H5Player Create
27
+ *
28
+ */
29
+ 
30
+function H5sPlayerCreate(conf) {
31
+	var player;
32
+
33
+	if (H5siOS())
34
+	{
35
+        player = new H5sPlayerRTC(conf);
36
+	}else{
37
+        player = new H5sPlayerWS(conf);
38
+	}
39
+	return player;
40
+}
41
+
42
+ 
43
+/** 
44
+ *=================H5Player Delete
45
+ *
46
+ */
47
+function H5sPlayerDelete(player) {
48
+	// delete player;
49
+	
50
+	return true;
51
+}
52
+ 
53
+export {H5siOS,H5sPlayerCreate}
54
+

+ 246 - 0
CallCenterWeb.UI/rmyyecharts/src/assets/js/mRtcSdk.js

@@ -0,0 +1,246 @@
1
+var RtcAddrHeader="https://rtc.minirtc.com"
2
+function hasUserMedia() {
3
+    navigator.getUserMedia = navigator.getUserMedia || navigator.msGetUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
4
+    return !!navigator.getUserMedia;
5
+}
6
+function hasRTCPeerConnection() {
7
+    window.RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection || window.msRTCPeerConnection;
8
+    return !!window.RTCPeerConnection;
9
+}
10
+
11
+
12
+function checkWebrtc(){
13
+  if(hasUserMedia()&& hasRTCPeerConnection()) {
14
+    return true;
15
+  }
16
+  return false;
17
+}
18
+
19
+//需要jQ库
20
+function OpenDevRtcVideo(strauthId,strauthCode,strdevId,VideoId,callback)
21
+{
22
+	 var nDialogueId=0;
23
+	 var strAuthId   = strauthId;
24
+	 var strAuthCode = strauthCode;
25
+	 var strDevId    = strdevId;
26
+	 var mRtcConnection;
27
+	 var VideoCell = VideoId;
28
+	 var FpCallback= callback;
29
+	 //将网页的候选IP地址给设备
30
+	 function AddIceCandidateToDev(candi){
31
+		var jsondata={
32
+			AuthId:strAuthId,
33
+			AuthCode:strAuthCode,
34
+			DevId:strDevId,
35
+			method:"AddCandidate",
36
+			data:{
37
+				DialogueId:nDialogueId,
38
+				candidate:candi.candidate,
39
+				sdpMid:candi.sdpMid,
40
+				sdpMLineIndex:candi.sdpMLineIndex
41
+			}
42
+		};
43
+		var AddCandidateUrl=RtcAddrHeader+"/Iot/Dev/OnDevComSet";
44
+		$.ajax({
45
+				type: "POST",
46
+				url:AddCandidateUrl,
47
+				data: JSON.stringify(jsondata),
48
+				success: function(msg)
49
+				{
50
+						 console.log(msg);
51
+				},
52
+				error:function (event,qq, XMLHttpRequest)
53
+				{
54
+				  alert("SetRtcSdpAnser"+qq+XMLHttpRequest);
55
+				}
56
+			});
57
+		
58
+	}
59
+	 
60
+	 //开始连接
61
+	 function startPeerConnection() {
62
+		 var datajson={ 
63
+			 AuthId:strAuthId,
64
+			 AuthCode:strAuthCode,
65
+			 DevId:strDevId,
66
+			 method:"GetRtcSdpOffer",
67
+			 data:{
68
+				 iceurl:"114.116.249.245:3478",
69
+				 iceuname:"admin", 
70
+				 iceupass:"qweasdzxc", 
71
+				 icerealm:"realm"
72
+			 }
73
+		};
74
+		
75
+		var config = {
76
+		   'iceServers': [  
77
+				{ 
78
+					 'url': 'turn:'+ datajson.data.iceurl,
79
+					 'username': datajson.data.iceuname,
80
+					 'credential':datajson.data.iceupass 
81
+				}]
82
+		};
83
+		mRtcConnection = new RTCPeerConnection(config);
84
+		mRtcConnection.onaddstream = handleRemoteStreamAdded;
85
+		mRtcConnection.onicecandidate = function(event) 
86
+		{
87
+			  //这个逻辑是否需要优化
88
+			  if (event.candidate) {
89
+				 console.log(JSON.stringify(event.candidate));
90
+				 AddIceCandidateToDev(event.candidate);
91
+			  }
92
+		  
93
+		};
94
+		//rtc 连接状态改变
95
+		mRtcConnection.oniceconnectionstatechange = function(event) 
96
+		{
97
+			 console.log(mRtcConnection.iceConnectionState);
98
+			 FpCallback(strDevId,mRtcConnection.iceConnectionState);
99
+		};
100
+		
101
+		//获取设备SDP
102
+		var GetRtcSdpOfferUrl=RtcAddrHeader+"/Iot/Dev/OnDevComSet";
103
+		$.ajax({
104
+				type: "POST",
105
+				url:GetRtcSdpOfferUrl,
106
+				data:JSON.stringify(datajson),
107
+				dataType:"json",
108
+				success: function(data)
109
+				{
110
+					if(data.code==200){
111
+						var msg = data.data;
112
+						if(msg.status==200){
113
+							 nDialogueId = msg.DialogueId;
114
+							 var jsonObj = {type:"offer",sdp:msg.ipcsdp};  
115
+							 mRtcConnection.setRemoteDescription(new RTCSessionDescription(jsonObj));
116
+							 console.log("ttt:"+msg.ipccand);
117
+							 //此处是返回的设备本地的有线网络地址
118
+							 //var sss={candidate:msg.ipccand,sdpMid:"0",sdpMLineIndex:0};
119
+							 //remotecan = new RTCIceCandidate(sss);
120
+							 mRtcConnection.createAnswer().then(createAnswerAndSendMessage, handleCreateAnswerError);
121
+						}else{
122
+							alert("limit");
123
+						}
124
+					}else{
125
+						callback(strDevId,data.reason);
126
+					}
127
+				},
128
+				error:function (event,qq, XMLHttpRequest)
129
+				{
130
+				  alert("GetRtcSdpOffer://" + qq+XMLHttpRequest);
131
+				}
132
+			});
133
+	}
134
+	//获取设备的地址
135
+	 function GetDevIceCandidates(){
136
+		var jsondata={
137
+			 AuthId:strAuthId,
138
+			 AuthCode:strAuthCode,
139
+			 DevId:strDevId,
140
+			 method:"GetCandis",
141
+			 data:{
142
+				 DialogueId:nDialogueId
143
+			 }
144
+		};
145
+		var GetCandisHandlerUrl=RtcAddrHeader+"/Iot/Dev/OnDevComSet";
146
+		$.ajax({
147
+				type: "POST",
148
+				url:  GetCandisHandlerUrl,
149
+				data: JSON.stringify(jsondata),
150
+				dataType:"json",
151
+				success: function(data)
152
+				{
153
+					if(data.code==200)
154
+					{
155
+						var msg =data.data;
156
+						if(msg.status==200){
157
+							console.log(msg.cands.length);
158
+							if(msg.cands.length==0) 
159
+							{
160
+							   GetDevIceCandidates();	
161
+							}else{
162
+								for(var i=0;i<msg.cands.length;i++) {
163
+									 var Item =msg.cands[i];
164
+									 var sss={candidate:Item,sdpMid:"0",sdpMLineIndex:0};
165
+									 console.log(JSON.stringify(sss));
166
+									 var remotecan = new RTCIceCandidate(sss);
167
+									 mRtcConnection.addIceCandidate(remotecan).catch(e => 
168
+									 {
169
+										console.log("Failure during addIceCandidate(): " + e.name);
170
+									 });
171
+								}
172
+							}
173
+							 
174
+						}else{
175
+							 alert("not find DialogueId");
176
+						}	
177
+					}else{
178
+						 alert("GetCandisHandler webapi err");
179
+					}			
180
+						
181
+				},
182
+				error:function (event,qq, XMLHttpRequest)
183
+				{
184
+				  alert("SetRtcSdpAnser"+qq+XMLHttpRequest);
185
+				}
186
+			});
187
+	}
188
+
189
+	//设置应答,将sdp 给设备
190
+	 function createAnswerAndSendMessage(answer) {
191
+		//console.log('CreateAnswerAndSendMessage sending message',answer);
192
+		var sdp = answer.sdp;
193
+		mRtcConnection.setLocalDescription( answer);
194
+	 
195
+		var SetRtcSdpAnserUrl=RtcAddrHeader+"/Iot/Dev/OnDevComSet";
196
+		var jsondata={
197
+			 AuthId:strAuthId,
198
+			 AuthCode:strAuthCode,
199
+			 DevId:strDevId,
200
+			 method:"SetRtcSdpAnser",
201
+			 data:{ 
202
+			 DialogueId:nDialogueId,
203
+				 sdp:answer.sdp
204
+			 }
205
+		};
206
+		$.ajax({
207
+				type: "POST",
208
+				url:SetRtcSdpAnserUrl,
209
+				data: JSON.stringify(jsondata),
210
+				dataType:"json",
211
+				success: function(data)
212
+				{
213
+					if(data.code==200)
214
+					{
215
+						var msg =data.data;
216
+						if(msg.status==200){
217
+							 console.log("ok");
218
+							 GetDevIceCandidates();
219
+						}else{
220
+							 alert("not find DialogueId");
221
+						}	
222
+					}else{
223
+							 alert(" SetRtcSdpAnser webapi err");
224
+					}			
225
+						
226
+				},
227
+				error:function (event,qq, XMLHttpRequest)
228
+				{
229
+				  alert("SetRtcSdpAnser"+qq+XMLHttpRequest);
230
+				}
231
+		});
232
+	}
233
+
234
+	 function handleCreateAnswerError(error) {
235
+		console.log('CreateAnswer() error: ', error);
236
+	 }
237
+
238
+	 function handleRemoteStreamAdded(event) {
239
+		console.log('Handle remote stream added.');
240
+		VideoCell.srcObject = event.stream;
241
+		VideoCell.play()
242
+	}
243
+	
244
+	startPeerConnection();
245
+}
246
+export {checkWebrtc, OpenDevRtcVideo}

BIN
CallCenterWeb.UI/rmyyecharts/src/assets/logo.png


+ 32 - 0
CallCenterWeb.UI/rmyyecharts/src/components/HelloWorld.vue

@@ -0,0 +1,32 @@
1
+<template>
2
+  <div class="hello">
3
+   <h1>HelloWorld11111111111111</h1>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: 'HelloWorld',
10
+  props: {
11
+    msg: String
12
+  }
13
+}
14
+</script>
15
+
16
+<!-- Add "scoped" attribute to limit CSS to this component only -->
17
+<style scoped>
18
+h3 {
19
+  margin: 40px 0 0;
20
+}
21
+ul {
22
+  list-style-type: none;
23
+  padding: 0;
24
+}
25
+li {
26
+  display: inline-block;
27
+  margin: 0 10px;
28
+}
29
+a {
30
+  color: #42b983;
31
+}
32
+</style>

+ 191 - 0
CallCenterWeb.UI/rmyyecharts/src/components/IVRSatisfactionByNow.vue

@@ -0,0 +1,191 @@
1
+<template>
2
+	<div id="IVRSatisfactionByNow" style="width: 100%;height: 190px;"></div>
3
+</template>
4
+
5
+<script>
6
+	import {
7
+		GetIVRSatisfactionByNow
8
+	} from "../api/dataAnalysis/monitorData.js";
9
+	export default {
10
+		name: "Home",
11
+		props: {
12
+
13
+		},
14
+		components: {
15
+
16
+		},
17
+		data() {
18
+			return {
19
+				state: 0,
20
+				count: [],
21
+				// countname: ['基础和后勤保障部','信息科','设备科'],
22
+				countname: [],
23
+				countn: []
24
+			};
25
+		},
26
+		watch: {
27
+			"state": function() {
28
+				this.GetIVRSatisfactionByNow()
29
+			}
30
+		},
31
+		created() {
32
+			this.getDate()
33
+		},
34
+		mounted() {},
35
+		methods: {
36
+			getDate() {
37
+				GetIVRSatisfactionByNow().then((res) => {
38
+					if (res.state.toLowerCase() == 'success') {
39
+						let data = res.data
40
+						data.data[0] = {
41
+							basatisfied: 100,
42
+							nosatisfied: 110,
43
+							satisfied: 200
44
+						}
45
+						// let arr = [data.data[0].basatisfied,data.data[0].nosatisfied,data.data[0].satisfied]
46
+						let arr = [100, 110, 200]
47
+						this.count = arr.sort(this.ortChange).reverse()
48
+						this.count.forEach((v, n) => {
49
+							if (n == 0) {
50
+								Object.keys(data.data[0]).forEach((key, n) => {
51
+									if (v == data.data[0][key]) {
52
+										this.countname.push(this.getInf(key))
53
+										delete data.data[0][key]
54
+									}
55
+								})
56
+							} else if (n == 1) {
57
+								Object.keys(data.data[0]).forEach((key, n) => {
58
+									if (v == data.data[0][key]) {
59
+										this.countname.push(this.getInf(key))
60
+										delete data.data[0][key]
61
+									}
62
+								})
63
+							} else {
64
+								Object.keys(data.data[0]).forEach((key, n) => {
65
+									if (v == data.data[0][key]) {
66
+										this.countname.push(this.getInf(key))
67
+									}
68
+								})
69
+							}
70
+						})
71
+						console.log(this.count)
72
+						console.log(this.countname)
73
+						this.state = 1
74
+					}
75
+				});
76
+			},
77
+			ortChange(a, b) {
78
+				return a - b;
79
+			},
80
+			getInf(type) {
81
+				const state = {
82
+					"satisfied": '满意',
83
+					"basatisfied": '基本满意',
84
+					"nosatisfied": '不满意'
85
+				}
86
+				return state[type]
87
+			},
88
+			GetIVRSatisfactionByNow() {
89
+				let myChart = this.$echarts.init(document.getElementById("IVRSatisfactionByNow"));
90
+				var Color = ['#503e8d', '#5d3ec5',
91
+					'#874f5f', '#b6575c', '#623363', '#962e66', '#ff4e00', '#fff400', '#0089fe', '#00fdc7',
92
+					'#8f47ff', '#2672cc',
93
+				]
94
+				let option = {
95
+					grid: {
96
+						top: 1,
97
+						// bottom: 20,
98
+						left: 70,
99
+						right: 40,
100
+						height: '100%',
101
+					},
102
+					xAxis: {
103
+						show: false,
104
+						type: 'value'
105
+					},
106
+				 yAxis: [{
107
+						type: 'category',
108
+						inverse: true,
109
+						axisLabel: {
110
+							show: true,
111
+							textStyle: {
112
+								fontSize: '14',
113
+								color: '#fff'
114
+							},
115
+						},
116
+						splitLine: {
117
+							show: false
118
+						},
119
+						axisTick: {
120
+							show: false
121
+						},
122
+						axisLine: {
123
+							show: false
124
+						},
125
+						data: this.countname
126
+					}, {
127
+						type: 'category',
128
+						inverse: true,
129
+						axisTick: 'none',
130
+						axisLine: 'none',
131
+						show: true,
132
+						axisLabel: {
133
+							textStyle: {
134
+								color: '#ffffff',
135
+								fontSize: '14'
136
+							},
137
+							formatter: function(value) {
138
+								if (value >= 10000) {
139
+									return (value / 10000).toLocaleString() + '万';
140
+								} else {
141
+									return value.toLocaleString();
142
+								}
143
+							},
144
+						},
145
+				 	data: this.count
146
+					}],
147
+					series: [{
148
+							type: 'bar',
149
+							zlevel: 1,
150
+							showBackground: true,
151
+							backgroundStyle: {
152
+							   borderRadius: [0,20,20,0],
153
+							    color:'#1a3b55'
154
+							},
155
+							itemStyle: {
156
+								normal: {
157
+									barBorderRadius: [0,20,20,0],
158
+									color: function(params) {
159
+										var colorList = [];
160
+										for (var i = 6; i > 0; i--) {
161
+											colorList.push({
162
+												type: 'bar',
163
+												colorStops: [{
164
+													offset: 0,
165
+													color: Color[i * 2 - 2] // 0% 处的颜色
166
+												}, {
167
+													offset: 1,
168
+													color: Color[i * 2 - 1] // 100% 处的颜色
169
+												}],
170
+												globalCoord: false, // 缺省为 false
171
+
172
+											});
173
+										}
174
+
175
+										return colorList[params.dataIndex]
176
+									},
177
+								},
178
+							},
179
+				   barWidth: 25,
180
+							data: this.count
181
+				 	}]
182
+				};
183
+				myChart.setOption(option);
184
+
185
+			}
186
+		}
187
+	};
188
+</script>
189
+
190
+<style>
191
+</style>

+ 155 - 0
CallCenterWeb.UI/rmyyecharts/src/components/carType.vue

@@ -0,0 +1,155 @@
1
+<template>
2
+	<div id="carType" style="width: 100%;height: 190px;"></div>
3
+</template>
4
+
5
+<script>
6
+	import { GetCarTypeByNow } from "../api/dataAnalysis/monitorData.js";
7
+	export default {
8
+		name: "Home",
9
+		props: {
10
+	
11
+		},
12
+		components: {
13
+			
14
+		},
15
+		data() {
16
+			return {
17
+				state:0,
18
+				dataList:[],
19
+				dataName:[]
20
+			};
21
+		},
22
+		watch:{
23
+			"state": function() {
24
+				this.getChart()
25
+			}
26
+		},
27
+		created() {
28
+			this.getDate()
29
+		},
30
+		mounted() {
31
+			
32
+		},
33
+		methods: {
34
+			getDate() {
35
+				GetCarTypeByNow().then((res) => {
36
+					if(res.state.toLowerCase() == 'success') {
37
+						let data = res.data.data
38
+						// data.forEach(v => {
39
+						// 	this.dataList.push(v.COUNT)
40
+						// 	this.dataName.push(v.F_Name)
41
+						// })
42
+						this.dataList = [70, 60, 80,33,24,56,56,43,44]
43
+						this.dataName = ["设备器械转运", "血液制品转运","新生儿转运", 
44
+						"血站取血", "普通患者转运", "陪检转运","血站取血", "普通患者转运", "陪检转运"]
45
+						this.state = 1
46
+					}
47
+				});
48
+			},
49
+			getChart() {
50
+				let  myChart = this.$echarts.init(document.getElementById("carType"));				
51
+				let option = {
52
+				    grid: {
53
+				        left: "4%",
54
+				        right: "4%",
55
+				        // bottom: "15%",
56
+				        top: "20",
57
+						width:'90%',
58
+						height:'82%',
59
+				        containLabel: true
60
+				    },
61
+				    xAxis: {
62
+				        data: this.dataName,
63
+				        triggerEvent: true,
64
+				        axisTick: {
65
+				            show: false
66
+				        },
67
+				        axisLine: {
68
+				            show: true
69
+				        },
70
+				        axisLabel: {
71
+				            show: true,
72
+				            interval: 0,
73
+							rotate:15,
74
+				            textStyle: {
75
+				                // padding: [14,0,0,0],
76
+				                fontSize: 12,
77
+				                color: "rgba(255,255,255,1)",
78
+								
79
+				            }
80
+				        }
81
+				    },
82
+				    yAxis: {
83
+				        triggerEvent: true,
84
+				        
85
+				        splitLine: {
86
+				            show: false,
87
+				            lineStyle: {
88
+				                color: 'rgba(255,255,255,.1)'
89
+				            }
90
+				        },
91
+				        axisTick: {
92
+				            show: true
93
+				        },
94
+				        axisLine: {
95
+				            show: true,
96
+				            
97
+				        },
98
+				        axisLabel: {
99
+				            show: true,
100
+				            textStyle: {
101
+				                color: "rgb(148,159,167)",
102
+				                fontSize: 14
103
+				            }
104
+				        }
105
+				    },
106
+				    // color: ["#e54035"],
107
+				    series: [{
108
+				            name: "数量",
109
+				            barMinHeight: 10,
110
+				            type: "pictorialBar",
111
+				            barCategoryGap: "60%",
112
+				            // symbol: 'path://M0,10 L10,10 L5,0 L0,10 z',
113
+				            symbol: "path://M0,10 L10,10 C5.5,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z",
114
+				            itemStyle: {
115
+				                normal: {
116
+				                    //barBorderRadius: 5,
117
+				                    //渐变色
118
+				                    color: this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
119
+				                            offset: 0,
120
+				                            color: "#01EAED"
121
+				                        },
122
+				                        {
123
+				                            offset: 0.5,
124
+				                            color: "#02C4DD"
125
+				                        },
126
+				                        {
127
+				                            offset: 1,
128
+				                            color: "#029ED9"
129
+				                        }
130
+				                    ])
131
+				                }
132
+				            },
133
+				            label: {
134
+				                normal: {
135
+				                    show: true,
136
+				                    position: "top",
137
+				                    textStyle: {
138
+				                        color: "#fff",
139
+				                        fontSize:10
140
+				                    }
141
+				                }
142
+				            },
143
+				            data: this.dataList,
144
+				            z: 10
145
+				        }
146
+				    ]
147
+				}
148
+				myChart.setOption(option);
149
+			}
150
+		}
151
+	};
152
+</script>
153
+
154
+<style>
155
+</style>

Разница между файлами не показана из-за своего большого размера
+ 175 - 0
CallCenterWeb.UI/rmyyecharts/src/components/connectionRate.vue


+ 148 - 0
CallCenterWeb.UI/rmyyecharts/src/components/conversationByNow.vue

@@ -0,0 +1,148 @@
1
+<template>
2
+	<div id="conversation24ByNow" style="width: 100%;height: 190px;"></div>
3
+</template>
4
+
5
+<script>
6
+	import { GetConversation24ByNow } from "../api/dataAnalysis/monitorData.js";
7
+	export default {
8
+		name: "Home",
9
+		props: {
10
+	
11
+		},
12
+		components: {
13
+			
14
+		},
15
+		data() {
16
+			return {
17
+				state: 0,
18
+				hrcount:[],
19
+				hccount:[],
20
+				hours: []
21
+			};
22
+		},
23
+		watch:{
24
+			"state": function() {
25
+				this.getConversation24ByNow()
26
+			}
27
+		},
28
+		created() {
29
+			this.getDate()
30
+		},
31
+		mounted() {
32
+		},
33
+		methods: {
34
+			getDate() {
35
+				GetConversation24ByNow().then((res) => {
36
+					if(res.state.toLowerCase() == 'success') {
37
+						let data = res.data
38
+						// this.hrcount = data.hrcount[0]
39
+						// this.hccount = data.hccount[0]
40
+						// this.hours = data.hours[0]
41
+						this.hrcount = [100,200,333,234,556,100,200,333,234,556]
42
+						this.hccount = [333,234,133,556,444,333,234,133,556,444]
43
+						this.hours = ['00:00','04:00','08:00','12:00','00:00','04:00','08:00','12:00']
44
+						this.state = 1
45
+					}
46
+				});
47
+			},
48
+			getConversation24ByNow() {
49
+				let  myChart = this.$echarts.init(document.getElementById("conversation24ByNow"));
50
+				let option = {
51
+				    color: ['#ffcd00', '#00e9ff'],
52
+				    legend: {
53
+						top:-5,
54
+						itemWidth: 20,
55
+						itemHeight: 7,
56
+				        itemGap: 10,
57
+				        textStyle:{
58
+				             lineHeight :7,
59
+				             color:'#fff'
60
+				        },
61
+				        data: ['呼入量', '呼出量'],
62
+				    },
63
+				    grid: {
64
+						top: 20,
65
+						bottom: 20,
66
+						left: 30,
67
+						right: 20
68
+				    },
69
+				    xAxis: [
70
+				        {
71
+				            type: 'category',
72
+				            boundaryGap: true,
73
+				            axisLine: {
74
+				                show: true,
75
+				            },
76
+				            axisLabel: {
77
+				                textStyle: {
78
+				                    color: '#fff',
79
+				                    fontSize: 12,
80
+				                },
81
+				            },
82
+				            axisTick: {
83
+				                show: false,
84
+				            },
85
+				            data: this.hours,
86
+				        },
87
+				    ],
88
+				    yAxis: [
89
+				        {
90
+				            type: 'value',
91
+				            axisTick: {
92
+				                show: true,
93
+				            },
94
+							min: function (value) {
95
+							    return value.min - 100;
96
+							},
97
+				            splitLine: {
98
+				                show: true,
99
+				                lineStyle: {
100
+				                    type: 'dashed',
101
+				                    color: '#4d6a86',
102
+				                    width: 1,
103
+				                },
104
+				            },
105
+				            axisLine: {
106
+				                show: true,
107
+				                lineStyle: {
108
+				                    color: '#fff',
109
+				                },
110
+				            },
111
+				            axisLabel: {
112
+				                textStyle: {
113
+				                    color: '#fff',
114
+				                    fontSize: 12,
115
+				                },
116
+				            },
117
+				        },
118
+				    ],
119
+				    series: [
120
+				        {
121
+				            name: '呼入量',
122
+				            type: 'bar',
123
+				            barGap: 0,
124
+				            barWidth: 10,
125
+				            emphasis: {
126
+				                focus: 'series',
127
+				            },
128
+				            data: this.hrcount,
129
+				        },
130
+				        {
131
+				            name: '呼出量',
132
+				            type: 'bar',
133
+				            barWidth: 10,
134
+				            emphasis: {
135
+				                focus: 'series',
136
+				            },
137
+				            data: this.hccount,
138
+				        },
139
+				    ],
140
+				};
141
+				myChart.setOption(option);
142
+			},
143
+		}
144
+	};
145
+</script>
146
+
147
+<style>
148
+</style>

+ 167 - 0
CallCenterWeb.UI/rmyyecharts/src/components/dispatchType.vue

@@ -0,0 +1,167 @@
1
+<template>
2
+	<div id="dispatch" style="width: 100%;height: 190px;"></div>
3
+</template>
4
+
5
+<script>
6
+	import { GetSchedulingTypeByNow } from "../api/dataAnalysis/monitorData.js";
7
+	export default {
8
+		name: "Home",
9
+		props: {
10
+	
11
+		},
12
+		components: {
13
+			
14
+		},
15
+		data() {
16
+			return {
17
+				state: 0,
18
+				dataList: [],
19
+			};
20
+		},
21
+		watch:{
22
+			"state": function() {
23
+				this.getChart()
24
+			}
25
+		},
26
+		created() {
27
+			this.getDate()
28
+		},
29
+		mounted() {
30
+		},
31
+		methods: {
32
+			getDate() {
33
+				GetSchedulingTypeByNow().then((res) => {
34
+					if(res.state.toLowerCase() == 'success') {
35
+						let data = res.data.data
36
+						// data.forEach(v =>{
37
+						// 	this.dataList.push({
38
+						// 		value: v.COUNT,
39
+						// 		name: v.F_Name
40
+						// 	})
41
+						// })
42
+						this.dataList = [{
43
+						        name: '病床转移',
44
+						        value: 36
45
+						    },
46
+						    {
47
+						        name: '设备租赁',
48
+						        value: 20
49
+						    },
50
+						    {
51
+						        name: '红处方',
52
+						        value: 16
53
+						    },
54
+						    {
55
+						        name: '药品配送',
56
+						        value: 10
57
+						    },
58
+						    {
59
+						        name: '标本配送',
60
+						        value: 9
61
+						    },
62
+						    {
63
+						        name: '其他',
64
+						        value: 9
65
+						    }
66
+						]
67
+						this.state = 1
68
+					}
69
+				});
70
+			},
71
+			array2obj(array,key) {
72
+				var resObj = {};
73
+				for(var i=0;i<array.length;i++){
74
+					resObj[array[i][key]] = array[i];
75
+				}
76
+				return resObj;
77
+			},
78
+			getChart() {
79
+				let  myChart = this.$echarts.init(document.getElementById("dispatch"));			
80
+				let legendData1 = [];
81
+				let legendData2 = [];
82
+				let objData = this.array2obj(this.dataList, "name");
83
+				for (var i = 0; i < this.dataList.length; i++) {
84
+				    var halfLength = Math.ceil(this.dataList.length / 2);
85
+				    var itemName = this.dataList[i].name;
86
+				    if (i < halfLength) {
87
+				        legendData1.push(itemName)
88
+				    } else {
89
+				        legendData2.push(itemName)
90
+				    }
91
+				}
92
+				var colorList = ['#73DDFF', '#73ACFF', '#FDD56A', '#FDB36A', '#FD866A', '#9E87FF', '#58D5FF']
93
+				let option = {
94
+				    legend: [{
95
+				        type: "plain",
96
+				        left: '75%',
97
+				        top: 'center',
98
+				        align: 'left',
99
+						width: 70,
100
+						itemWidth: 15,
101
+						itemHeight:10,
102
+				        textStyle: {
103
+				          color: "#fff",
104
+						  fontSize:14
105
+				        },
106
+				        itemGap: 20,
107
+				        data: legendData1,
108
+						formatter: function(params) {
109
+							return params + ': ' + objData[params].value
110
+						}
111
+				    }, {
112
+						type: "plain",
113
+				        left: '50%',
114
+						top: 'center',
115
+						itemWidth: 15,
116
+						width: 70,
117
+						itemHeight:10,
118
+						align: 'left',
119
+						textStyle: {
120
+						  color: "#fff",
121
+						  fontSize:14
122
+						},
123
+						itemGap: 20,
124
+				        data: legendData2,
125
+						formatter: function(params) {
126
+							return params + ': ' + objData[params].value
127
+						}
128
+				    }],
129
+				    series: [{
130
+				        name: '数量',
131
+				        type: 'pie',
132
+				        radius: ['70%', '90%'],
133
+				        center: ['25%', '50%'],
134
+				        data: this.dataList,
135
+				         itemStyle: {
136
+				            normal: {
137
+				                color: function(params) {
138
+				                    return colorList[params.dataIndex]
139
+				                }
140
+				            }
141
+				        },
142
+				        label: {
143
+				            normal: {
144
+				                show: false
145
+				            },
146
+				            emphasis: {
147
+				                show: false,
148
+				                textStyle: {
149
+				                    fontSize: '12'
150
+				                }
151
+				            }
152
+				        },
153
+				        labelLine: {
154
+				            normal: {
155
+				                show: false
156
+				            }
157
+				        }
158
+				    }]
159
+				};
160
+				myChart.setOption(option);
161
+			}
162
+		}
163
+	};
164
+</script>
165
+
166
+<style>
167
+</style>

Разница между файлами не показана из-за своего большого размера
+ 154 - 0
CallCenterWeb.UI/rmyyecharts/src/components/orderSatisfactionByNow.vue


+ 116 - 0
CallCenterWeb.UI/rmyyecharts/src/components/repairTotal.vue

@@ -0,0 +1,116 @@
1
+<template>
2
+	<div id="carType" style="width: 100%;height: 190px;">
3
+		<el-table :data="orgNameData" size="mini" class="v-table" height="190" ref="tableData_realtime"
4
+			@cell-mouse-enter="hover_dibiao" @cell-mouse-leave="leave_dibiao">
5
+			<el-table-column prop="F_Name" label="工单类型" align="center" :show-overflow-tooltip="true"></el-table-column>
6
+			<el-table-column prop="COUNT" label="工单数量" align="center" :show-overflow-tooltip="true"></el-table-column>
7
+		</el-table>
8
+	</div>
9
+</template>
10
+
11
+<script>
12
+	import {
13
+		GetFaultRepairTypeByNow
14
+	} from "../api/dataAnalysis/monitorData.js";
15
+	export default {
16
+		name: "Home",
17
+		props: {},
18
+		watch: {
19
+
20
+		},
21
+		components: {
22
+
23
+		},
24
+		data() {
25
+			return {
26
+				branchData: [],
27
+				interval: null,
28
+				orgNameData: [],
29
+				clientHeight: ""
30
+
31
+			};
32
+		},
33
+		created() {
34
+			this.getBranchData();
35
+			this.$nextTick(() => {
36
+				this.tableData_dibiao() //轮播                
37
+			})
38
+			
39
+			// this.getDate()
40
+		},
41
+		mounted() {
42
+
43
+		},
44
+		methods: {
45
+			tableData_dibiao() {
46
+				const table = this.$refs.tableData_realtime
47
+				const divData = table.bodyWrapper
48
+				this.dibiao_clear = setInterval(() => {
49
+					divData.scrollTop += 1
50
+					if (divData.clientHeight + divData.scrollTop == divData.scrollHeight) {
51
+						divData.scrollTop = 0
52
+					}
53
+				}, 100)
54
+			},
55
+			hover_dibiao() { //鼠标移入清除定时器(暂停轮播)
56
+				clearInterval(this.dibiao_clear)
57
+			},
58
+			leave_dibiao() { //鼠标移出继续执行轮播
59
+				this.tableData_dibiao()
60
+			},
61
+			getBranchData() {
62
+				GetFaultRepairTypeByNow().then((res) => {
63
+					res = [{
64
+						F_Name: '基础建设',
65
+						COUNT: 23
66
+					}, {
67
+						F_Name: '保安类',
68
+						COUNT: 55
69
+					}, {
70
+						F_Name: '设备类',
71
+						COUNT: 34
72
+					}, {
73
+						F_Name: '信息类',
74
+						COUNT: 23
75
+					}, {
76
+						F_Name: '网通类',
77
+						COUNT: 12
78
+					}]
79
+					this.orgNameData = res
80
+				})
81
+			}
82
+		},
83
+	}
84
+</script>
85
+
86
+<style >
87
+	.el-table th, .el-table tr{
88
+		background-color: rgba(255,255,255,0) !important;
89
+		color: #fff !important;
90
+	}
91
+	.el-table td, .el-table th.is-leaf{
92
+		font-size: 14px !important;
93
+		border-bottom: 1px solid #1a3c56 !important;
94
+	}
95
+	.el-table, .el-table__expanded-cell{
96
+		background-color: rgba(255,255,255,0) !important;
97
+	}
98
+	.is-scrolling-none {
99
+		height: 180px !important;
100
+	}
101
+	::-webkit-scrollbar{
102
+		display:none;
103
+	}
104
+	.el-table tbody tr:hover>td {
105
+		background-color: rgba(255,255,255,0) !important;
106
+	}
107
+	.el-table__header {
108
+		background-color: #1a3d5a;
109
+	}
110
+	.el-table--mini td, .el-table--mini th{
111
+		padding: 12px 0 !important;
112
+	}
113
+	.el-table::before{
114
+		height: 0 !important;
115
+	}
116
+</style>

+ 141 - 0
CallCenterWeb.UI/rmyyecharts/src/components/topCount.vue

@@ -0,0 +1,141 @@
1
+<template>
2
+	<el-row :gutter="21">
3
+		<el-col :span="4">
4
+			<div class="calltotal datatotal">
5
+				<div class="dataTitle">总话务量</div>
6
+				<div class="datacon">{{dataList.hwcount}}</div>
7
+			</div>
8
+		</el-col>
9
+		<el-col :span="4">
10
+			<div class="callin datatotal">
11
+				<div class="dataTitle">来电咨询</div>
12
+				<div class="datacon">{{dataList.zxcount}}</div>
13
+			</div>
14
+		</el-col>
15
+		<el-col :span="4">
16
+			<div class="repair datatotal">
17
+				<div class="dataTitle">故障报修</div>
18
+				<div class="datacon">{{dataList.gzcount}}</div>
19
+			</div>
20
+		</el-col>
21
+		<el-col :span="4">
22
+			<div class="dispatching datatotal">
23
+				<div class="dataTitle">综合调度</div>
24
+				<div class="datacon">{{dataList.zhcount}}</div>
25
+			</div>
26
+		</el-col>
27
+		<el-col :span="4">
28
+			<div class="car datatotal">
29
+				<div class="dataTitle">车辆调度</div>
30
+				<div class="datacon">{{dataList.clcount}}</div>
31
+			</div>
32
+		</el-col>
33
+	</el-row>
34
+</template>
35
+
36
+<script>
37
+	import { GetTopCountByNow } from "../api/dataAnalysis/monitorData.js";
38
+	export default {
39
+		name: "Home",
40
+		props: {
41
+
42
+		},
43
+		components: {
44
+			
45
+		},
46
+		data() {
47
+			return {
48
+				dataList:{}
49
+			};
50
+		},
51
+		created() {
52
+			this.getData()
53
+		},
54
+		methods: {
55
+			getData() {
56
+				GetTopCountByNow().then((res) => {
57
+					if(res.state.toLowerCase() == 'success') {
58
+						this.dataList = res.data.data[0]
59
+					}
60
+				});
61
+			}
62
+		}
63
+	};
64
+</script>
65
+
66
+<style lang="scss" scoped>
67
+	.el-row {
68
+		margin-bottom: 20px;
69
+		margin-top: 130px;
70
+
71
+		&:last-child {
72
+			margin-bottom: 0;
73
+		}
74
+
75
+		.el-col {
76
+			border-radius: 4px;
77
+			margin: 0 30px;
78
+
79
+			.datatotal {
80
+				background-size: 100% 100%;
81
+				background-repeat: no-repeat;
82
+				min-height: 100px;
83
+				box-sizing: border-box;
84
+				padding-top: 23px;
85
+				
86
+				div{
87
+					width: 50%;
88
+					padding-left:40%;
89
+				}
90
+				
91
+				.dataTitle{
92
+					font-size: 20px;
93
+				}
94
+				.datacon{
95
+					font-size: 24px;
96
+					font-weight: 700;
97
+				}
98
+			}
99
+
100
+			.calltotal {
101
+				background-image: url("../assets/image/callTotal.png");
102
+				
103
+				.datacon{
104
+					color: #00f6ff;
105
+				}
106
+			}
107
+
108
+			.callin {
109
+				background-image: url("../assets/image/callin.png");
110
+				
111
+				.datacon{
112
+					color: #00ff90;
113
+				}
114
+			}
115
+
116
+			.repair {
117
+				background-image: url("../assets/image/repair.png");
118
+				
119
+				.datacon{
120
+					color: #ff6600;
121
+				}
122
+			}
123
+
124
+			.dispatching {
125
+				background-image: url("../assets/image/dispatching.png");
126
+				
127
+				.datacon{
128
+					color: #0084ff;
129
+				}
130
+			}
131
+
132
+			.car {
133
+				background-image: url("../assets/image/car.png");
134
+				
135
+				.datacon{
136
+					color: #9046ff;
137
+				}
138
+			}
139
+		}
140
+	}
141
+</style>

+ 101 - 0
CallCenterWeb.UI/rmyyecharts/src/components/traffic.vue

@@ -0,0 +1,101 @@
1
+<template>
2
+	<div id="traffic" style="width: 100%;height: 230px;"></div>
3
+</template>
4
+
5
+<script>
6
+	import { GetConversationByNow } from "../api/dataAnalysis/monitorData.js";
7
+	export default {
8
+		name: "Home",
9
+		props: {
10
+	
11
+		},
12
+		components: {
13
+			
14
+		},
15
+		data() {
16
+			return {
17
+				state: 0,
18
+				dataList:[]
19
+			};
20
+		},
21
+		created() {
22
+			this.getDate()
23
+		},
24
+		watch:{
25
+			"state": function() {
26
+				this.getTraffic()
27
+			}
28
+		},
29
+		mounted() {
30
+		},
31
+		methods: {
32
+			getDate() {
33
+				GetConversationByNow().then((res) => {
34
+					if(res.state.toLowerCase() == 'success') {
35
+						let data = res.data.data[0]
36
+						// this.dataList = [{
37
+						// 	name: '呼出量',
38
+						// 	value: data.hccount
39
+						// },{
40
+						// 	name: '呼入量',
41
+						// 	value: data.hccount
42
+						// }]
43
+						this.dataList = [{
44
+							name: '呼出量',
45
+							value: 100
46
+						},{
47
+							name: '呼入量',
48
+							value: 300
49
+						}]
50
+						this.state = 1
51
+					}
52
+				});
53
+			},
54
+			getTraffic() {
55
+				let  myChart = this.$echarts.init(document.getElementById("traffic"));
56
+				let option = {
57
+					visualMap: {
58
+						show: false,
59
+						min: 500,
60
+						max: 600,
61
+						inRange: {
62
+						},
63
+					},
64
+					series: [{
65
+						type: "pie",
66
+						radius: "70%",
67
+						center: ["50%", "50%"],
68
+						color: ["#ffae00", "#00f6ff"], 
69
+						data: this.dataList.sort(function(a, b) {
70
+							return a.value - b.value;
71
+						}),
72
+						itemStyle: {
73
+						      normal: {
74
+						        label: {
75
+						          show: true,
76
+						          position: "outside",
77
+						          color: "#ddd",
78
+								  fontSize: 14,
79
+						          formatter: function(params) {
80
+						          	return params.name + ':' + params.value
81
+						          },
82
+						        },
83
+						        labelLine: {
84
+						          length: 0,
85
+						          length2: 10,
86
+						          show: true,
87
+						          color: "#00ffff",
88
+						        },
89
+						      },
90
+						    },
91
+						roseType: "radius",
92
+					}]
93
+				};
94
+				myChart.setOption(option);
95
+			}
96
+		}
97
+	};
98
+</script>
99
+
100
+<style>
101
+</style>

+ 168 - 0
CallCenterWeb.UI/rmyyecharts/src/components/workorderByNow.vue

@@ -0,0 +1,168 @@
1
+<template>
2
+	<div id="workorder24ByNow" style="width: 100%;height: 190px;"> </div>
3
+</template>
4
+
5
+<script>
6
+	import { GetWorkorder24ByNow } from "../api/dataAnalysis/monitorData.js";
7
+	export default {
8
+		name: "Home",
9
+		props: {
10
+	
11
+		},
12
+		components: {
13
+			
14
+		},
15
+		data() {
16
+			return {
17
+				state: 0,
18
+				datacount: [],
19
+				hours: []
20
+			};
21
+		},
22
+		watch:{
23
+			"state": function() {
24
+				this.getWorkorder24ByNow()
25
+			}
26
+		},
27
+		created() {
28
+			this.getDate()
29
+		},
30
+		mounted() {
31
+		},
32
+		methods: {
33
+			getDate() {
34
+				GetWorkorder24ByNow().then((res) => {
35
+					if(res.state.toLowerCase() == 'success') {
36
+						let data = res.data
37
+						// this.datacount = data.count[0]
38
+						// this.hours = data.hours
39
+						this.datacount = [333,234,133,556,444,333,234,133,556,444]
40
+						this.hours = ['00:00','04:00','08:00','12:00','00:00','04:00','08:00','12:00']
41
+						this.state = 1
42
+					}
43
+				});
44
+			},
45
+			getWorkorder24ByNow() {
46
+				let  myChart = this.$echarts.init(document.getElementById("workorder24ByNow"));
47
+				let option = {
48
+					tooltip: {
49
+					    trigger: "axis",
50
+					    // axisPointer: { // 坐标轴指示器,坐标轴触发有效
51
+					    //     type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
52
+					    // },
53
+					    // borderRadius: 5,
54
+					    borderColor: "#00f6ff",
55
+						backgroundColor: '#00f6ff',
56
+					    // borderWidth: 1,
57
+					    formatter: function(params) { // params[0].data.nameCode
58
+					        return (
59
+					          params[0].name + ':'+params[0].value
60
+					        );
61
+					    }
62
+					},
63
+					grid: {
64
+						top: 20,
65
+						bottom: 20,
66
+						left: 30,
67
+						right: 20
68
+					},
69
+					xAxis: [{
70
+						type: 'category',
71
+						boundaryGap: false ,
72
+						axisTick: {
73
+							show: false,
74
+							alignWithLabel: true, //true 的时候有效,可以保证刻度线和标签对齐
75
+						},
76
+						axisLine: {
77
+							lineStyle: {
78
+								color: "#fff"
79
+							}
80
+						},
81
+						axisLabel: {
82
+						    textStyle: {
83
+						        color: '#fff',
84
+						        fontSize: 12,
85
+						    },
86
+						},
87
+						data: this.hours
88
+					}, ],
89
+					yAxis: [{
90
+						type: 'value',
91
+						splitLine: {
92
+							show: true,
93
+							lineStyle: {
94
+							    type: 'dashed',
95
+							    color: '#4d6a86',
96
+							    width: 1,
97
+							},
98
+						},
99
+						axisLabel: {
100
+						    textStyle: {
101
+						        color: '#fff',
102
+						        fontSize: 12,
103
+						    },
104
+						},
105
+						axisLine: {
106
+							show: true,
107
+							lineStyle: {
108
+								color: "#fff"
109
+							}
110
+						},
111
+						axisTick: {
112
+							show: false
113
+						},
114
+					}],
115
+					//手势放大柱状图折线图
116
+					dataZoom: {
117
+						type: "inside"
118
+					},
119
+					series: [{
120
+						//给折线图下方添加阴影
121
+						areaStyle: {
122
+							normal: {
123
+								color: this.$echarts.graphic.LinearGradient(0,0,0,1,
124
+									[{
125
+										offset: 0,
126
+										color: '#00ffc6'
127
+									},{
128
+										offset: 1,
129
+										color: '#005269'
130
+									}],
131
+									false
132
+								),
133
+								shadowColor: 'rgba(59, 34, 201,1)',
134
+								shadowBlur: 10,
135
+							}
136
+						},
137
+						name: '工作量',
138
+						type: 'line',
139
+						smooth: true,
140
+						itemStyle: {
141
+							normal: {
142
+								show: false,
143
+								color: "#00ffc6", //改变折线点的颜色
144
+								lineStyle: {
145
+									color: "#00ffc6" //改变折线颜色
146
+								},
147
+								label: {
148
+									show: false, //开启显示
149
+									position: 'top', //在上方显示
150
+									textStyle: { //数值样式
151
+										color: '#999999',
152
+										fontSize: 10
153
+									}
154
+								},
155
+			
156
+							}
157
+						},
158
+						data: this.datacount
159
+					}]
160
+				};
161
+				myChart.setOption(option);
162
+			}
163
+		}
164
+	};
165
+</script>
166
+
167
+<style>
168
+</style>

+ 27 - 0
CallCenterWeb.UI/rmyyecharts/src/main.js

@@ -0,0 +1,27 @@
1
+import Vue from 'vue'
2
+import App from './App.vue'
3
+import router from './router'
4
+import store from './store'
5
+import axios from 'axios'
6
+import VueAxios from "vue-axios";
7
+ 
8
+import ElementUI from 'element-ui';
9
+import 'element-ui/lib/theme-chalk/index.css';
10
+import '@/assets/icon/iconfont.css' 
11
+// 将自动注册所有组件为全局组件
12
+import dataV from '@jiaminghi/data-view'
13
+import $ from 'jquery'
14
+import * as echarts from 'echarts'
15
+Vue.prototype.$echarts = echarts;
16
+
17
+Vue.use(VueAxios, axios)
18
+Vue.use(dataV)
19
+Vue.use(ElementUI);
20
+// Vue.prototype.$http = axios
21
+Vue.config.productionTip = false
22
+
23
+new Vue({
24
+  router,
25
+  store,
26
+  render: h => h(App)
27
+}).$mount('#app')

+ 26 - 0
CallCenterWeb.UI/rmyyecharts/src/router/index.js

@@ -0,0 +1,26 @@
1
+import Vue from 'vue'
2
+import VueRouter from 'vue-router'
3
+import Home from '../views/Home.vue'
4
+
5
+Vue.use(VueRouter)
6
+
7
+const routes = [
8
+  {
9
+    path: '/',
10
+    component: Home
11
+  },
12
+  {
13
+    path: '/about',
14
+    name: 'About',
15
+    // route level code-splitting
16
+    // this generates a separate chunk (about.[hash].js) for this route
17
+    // which is lazy-loaded when the route is visited.
18
+    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
19
+  }
20
+]
21
+
22
+const router = new VueRouter({
23
+  routes
24
+})
25
+
26
+export default router

+ 15 - 0
CallCenterWeb.UI/rmyyecharts/src/store/index.js

@@ -0,0 +1,15 @@
1
+import Vue from 'vue'
2
+import Vuex from 'vuex'
3
+
4
+Vue.use(Vuex)
5
+
6
+export default new Vuex.Store({
7
+  state: {
8
+  },
9
+  mutations: {
10
+  },
11
+  actions: {
12
+  },
13
+  modules: {
14
+  }
15
+})

+ 66 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/Resize.vue

@@ -0,0 +1,66 @@
1
+<template>
2
+  <div id="resize" :ref="ref">
3
+    <template v-if="ready">
4
+      <slot></slot>
5
+    </template>
6
+  </div>
7
+</template>
8
+<style>
9
+#resize {
10
+  position: fixed;
11
+  top: 0px;
12
+  left: 0px;
13
+  overflow: hidden;
14
+  transform-origin: left top;
15
+  z-index: 999;
16
+}
17
+</style>
18
+<script>
19
+import autoResize from "./autoResize";
20
+
21
+export default {
22
+  name: "DvFullScreenContainer",
23
+  mixins: [autoResize],
24
+  data() {
25
+    return {
26
+      ref: "full-screen-container",
27
+      allWidth: 0,
28
+      scale: 0,
29
+      datavRoot: "",
30
+      ready: false,
31
+    };
32
+  },
33
+  methods: {
34
+    afterAutoResizeMixinInit() {
35
+      const { initConfig, setAppScale } = this;
36
+
37
+      initConfig();
38
+
39
+      setAppScale();
40
+
41
+      this.ready = true;
42
+    },
43
+    initConfig() {
44
+      const { dom } = this;
45
+      const { width, height } = screen;
46
+
47
+      this.allWidth = width;
48
+
49
+      dom.style.width = `${width}px`;
50
+      dom.style.height = `${height}px`;
51
+    },
52
+    setAppScale() {
53
+      const { allWidth, dom } = this;
54
+
55
+      const currentWidth = document.body.clientWidth;
56
+
57
+      dom.style.transform = `scale(${currentWidth / allWidth})`;
58
+    },
59
+    onResize() {
60
+      const { setAppScale } = this;
61
+
62
+      setAppScale();
63
+    },
64
+  },
65
+};
66
+</script>

+ 15 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/auth.js

@@ -0,0 +1,15 @@
1
+import Cookies from 'js-cookie'
2
+
3
+const TokenKey = 'Admin-Token'
4
+
5
+export function getToken() {
6
+  return Cookies.get(TokenKey)
7
+}
8
+
9
+export function setToken(token) {
10
+  return Cookies.set(TokenKey, token)
11
+}
12
+
13
+export function removeToken() {
14
+  return Cookies.remove(TokenKey)
15
+}

+ 86 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/autoResize.js

@@ -0,0 +1,86 @@
1
+import { debounce, observerDomResize } from '../utils/index'
2
+
3
+export default {
4
+  data () {
5
+    return {
6
+      dom: '',
7
+
8
+      width: 0,
9
+      height: 0,
10
+
11
+      debounceInitWHFun: '',
12
+
13
+      domObserver: ''
14
+    }
15
+  },
16
+  methods: {
17
+    async autoResizeMixinInit () {
18
+      const { initWH, getDebounceInitWHFun, bindDomResizeCallback, afterAutoResizeMixinInit } = this
19
+
20
+      await initWH(false)
21
+
22
+      getDebounceInitWHFun()
23
+
24
+      bindDomResizeCallback()
25
+
26
+      if (typeof afterAutoResizeMixinInit === 'function') afterAutoResizeMixinInit()
27
+    },
28
+    initWH (resize = true) {
29
+      const { $nextTick, $refs, ref, onResize } = this
30
+
31
+      return new Promise(resolve => {
32
+        // eslint-disable-next-line no-unused-vars
33
+        $nextTick(_ => {
34
+          const dom = this.dom = $refs[ref]
35
+
36
+          this.width = dom ? dom.clientWidth : 0
37
+          this.height = dom ? dom.clientHeight : 0
38
+
39
+          if (!dom) {
40
+            console.warn('DataV: Failed to get dom node, component rendering may be abnormal!')
41
+          } else if (!this.width || !this.height) {
42
+            console.warn('DataV: Component width or height is 0px, rendering abnormality may occur!')
43
+          }
44
+
45
+          if (typeof onResize === 'function' && resize) onResize()
46
+
47
+          resolve()
48
+        })
49
+      })
50
+    },
51
+    getDebounceInitWHFun () {
52
+      const { initWH } = this
53
+
54
+      this.debounceInitWHFun = debounce(100, initWH)
55
+    },
56
+    bindDomResizeCallback () {
57
+      const { dom, debounceInitWHFun } = this
58
+
59
+      this.domObserver = observerDomResize(dom, debounceInitWHFun)
60
+
61
+      window.addEventListener('resize', debounceInitWHFun)
62
+    },
63
+    unbindDomResizeCallback () {
64
+      let { domObserver, debounceInitWHFun } = this
65
+
66
+      if (!domObserver) return
67
+
68
+      domObserver.disconnect()
69
+      domObserver.takeRecords()
70
+      domObserver = null
71
+
72
+      window.removeEventListener('resize', debounceInitWHFun)
73
+    }
74
+  },
75
+  mounted () {
76
+    const { autoResizeMixinInit } = this
77
+
78
+    autoResizeMixinInit()
79
+  },
80
+  beforeDestroy () {
81
+    const { unbindDomResizeCallback } = this
82
+
83
+    unbindDomResizeCallback()
84
+  }
85
+}
86
+

+ 6 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/errorCode.js

@@ -0,0 +1,6 @@
1
+export default {
2
+  '401': '认证失败,无法访问系统资源',
3
+  '403': '当前操作没有权限',
4
+  '404': '访问资源不存在',
5
+  'default': '登陆超时,请重新登陆'
6
+}

+ 48 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/index.js

@@ -0,0 +1,48 @@
1
+export function randomExtend (minNum, maxNum) {
2
+    if (arguments.length === 1) {
3
+      return parseInt(Math.random() * minNum + 1, 10)
4
+    } else {
5
+      return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10)
6
+    }
7
+  }
8
+  
9
+  export function debounce (delay, callback) {
10
+    let lastTime
11
+  
12
+    return function () {
13
+      clearTimeout(lastTime)
14
+  
15
+      const [that, args] = [this, arguments]
16
+  
17
+      lastTime = setTimeout(() => {
18
+        callback.apply(that, args)
19
+      }, delay)
20
+    }
21
+  }
22
+  
23
+  export function observerDomResize (dom, callback) {
24
+    const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
25
+  
26
+    const observer = new MutationObserver(callback)
27
+  
28
+    observer.observe(dom, { attributes: true, attributeFilter: ['style'], attributeOldValue: true })
29
+  
30
+    return observer
31
+  }
32
+  
33
+  export function getPointDistance (pointOne, pointTwo) {
34
+    const minusX = Math.abs(pointOne[0] - pointTwo[0])
35
+  
36
+    const minusY = Math.abs(pointOne[1] - pointTwo[1])
37
+  
38
+    return Math.sqrt(minusX * minusX + minusY * minusY)
39
+  }
40
+  
41
+  export function uuid (hasHyphen) {
42
+    return (hasHyphen ? 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' : 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx').replace(/[xy]/g, function (c) {
43
+          const r = Math.random() * 16 | 0
44
+          const v = c == 'x' ? r : (r & 0x3 | 0x8)
45
+          return v.toString(16)
46
+    })
47
+  }
48
+  

+ 82 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/request.js

@@ -0,0 +1,82 @@
1
+import axios from 'axios'
2
+import { Notification, MessageBox, Message } from 'element-ui'
3
+// import store from '@/store'
4
+import { getToken } from '@/utils/auth'
5
+import errorCode from '@/utils/errorCode'
6
+
7
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
8
+// 创建axios实例
9
+const service = axios.create({
10
+  // axios中请求配置有baseURL选项,表示请求URL公共部分
11
+//   baseURL: process.env.VUE_APP_BASE_API,
12
+    baseURL:'http://39.164.159.192:8000/',
13
+  // 超时
14
+  timeout: 10000
15
+})
16
+// request拦截器
17
+service.interceptors.request.use(config => {
18
+  // 是否需要设置 token
19
+  const isToken = (config.headers || {}).isToken === false
20
+  if (getToken() && !isToken) {
21
+    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
22
+  }
23
+  return config
24
+}, error => {
25
+    console.log(error)
26
+    Promise.reject(error)
27
+})
28
+
29
+// 响应拦截器
30
+service.interceptors.response.use(res => {
31
+    // 未设置状态码则默认成功状态
32
+    const code = res.data.code || 200;
33
+    // 获取错误信息
34
+    const msg = errorCode[code] || res.data.msg || errorCode['default']
35
+    if (code === 401) {
36
+      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
37
+          confirmButtonText: '重新登录',
38
+          cancelButtonText: '取消',
39
+          type: 'warning'
40
+        }
41
+      ).then(() => {
42
+        // store.dispatch('LogOut').then(() => {
43
+        //   location.href = '/index';
44
+        // })
45
+      })
46
+    } else if (code === 500) {
47
+      Message({
48
+        message: msg,
49
+        type: 'error'
50
+      })
51
+      return Promise.reject(new Error(msg))
52
+    } else if (code !== 200) {
53
+      Notification.error({
54
+        title: msg
55
+      })
56
+      return Promise.reject('error')
57
+    } else {
58
+      return res.data
59
+    }
60
+  },
61
+  error => {
62
+    console.log('err' + error)
63
+    let { message } = error;
64
+    if (message == "Network Error") {
65
+      message = "后端接口连接异常";
66
+    }
67
+    else if (message.includes("timeout")) {
68
+      message = "系统接口请求超时";
69
+    }
70
+    else if (message.includes("Request failed with status code")) {
71
+      message = "系统接口" + message.substr(message.length - 3) + "异常";
72
+    }
73
+    Message({
74
+      message: message,
75
+      type: 'error',
76
+      duration: 5 * 1000
77
+    })
78
+    return Promise.reject(error)
79
+  }
80
+)
81
+
82
+export default service

+ 252 - 0
CallCenterWeb.UI/rmyyecharts/src/utils/selectTime.js

@@ -0,0 +1,252 @@
1
+// import { ListType } from "wangeditor/dist/menus/list"
2
+// import { objectMerge } from "."
3
+
4
+// 获取现在时间
5
+export function timeDay() {
6
+    var date = new Date()
7
+    var year = date.getFullYear()
8
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
9
+    var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
10
+    var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
11
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
12
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
13
+    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
14
+}
15
+//获取近一天时间
16
+export function getLastDate() {
17
+    var date = new Date()
18
+    var year = date.getFullYear()
19
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
20
+    var day = date.getDate() < 10 ? '0' + (date.getDate()-1) : (date.getDate()-1)
21
+    var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
22
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
23
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
24
+    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
25
+}
26
+
27
+//获取近一小时时间
28
+export function getLast1Date() {
29
+    var date = new Date()
30
+    var year = date.getFullYear()
31
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
32
+    var day = date.getDate()
33
+    var hours = date.getHours()
34
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
35
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
36
+    if (hours <  1 || hours == 1) {//如果凌晨1点
37
+        if(day > 10){
38
+            day =day - 1
39
+        }else{
40
+            day ="0"+ (day - 1)
41
+        }
42
+        hours = 23 + hours
43
+    }else if(hours > 1 && hours < 10){
44
+        hours = '0' +( hours - 1)
45
+    }else{
46
+        hours = hours - 1
47
+    }
48
+    return year + '-' + month + '-' + (day<10?'0'+day:day) + ' ' + hours + ':' + minutes + ':' + seconds
49
+}
50
+
51
+//获取近三个小时
52
+export function getLast3Date() {
53
+    var date = new Date()
54
+    var year = date.getFullYear()
55
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
56
+    var day = date.getDate()
57
+    var hours = date.getHours()
58
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
59
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
60
+    if (hours <  3 || hours == 3) {//如果凌晨3点
61
+        if(day > 10){
62
+            day =day - 1
63
+        }else{
64
+            day ="0"+ day - 1
65
+        }
66
+        hours = 21 + hours
67
+    }else if(hours > 3 && hours < 10){
68
+        hours = '0' +( hours - 3)
69
+    }else{
70
+        hours = hours - 3
71
+    }
72
+    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
73
+}
74
+
75
+//获取近六个小时
76
+export function getLast6Date() {
77
+    var date = new Date()
78
+    var year = date.getFullYear()
79
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
80
+    var day = date.getDate()
81
+    var hours = date.getHours()
82
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
83
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
84
+    if (hours <  6 || hours == 6) {//如果凌晨六点
85
+        if(day > 10){
86
+            day =day - 1
87
+        }else{
88
+            day ="0"+ day - 1
89
+        }
90
+        hours = 18 + hours
91
+    }else if(hours > 6 && hours < 10){
92
+        hours = '0' +( hours - 6)
93
+    }else{
94
+        hours = hours - 6
95
+    }
96
+    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
97
+}
98
+
99
+//获取近十二个小时
100
+export function getLast12Date() {
101
+    var date = new Date()
102
+    var year = date.getFullYear()
103
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
104
+    var day = date.getDate()
105
+    var hours = date.getHours()
106
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
107
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
108
+    if (hours <  12 || hours == 12) {
109
+        if(day > 10){
110
+            day = day - 1
111
+        }else{
112
+            day ="0"+ day - 1
113
+        }
114
+        hours = 12 + hours
115
+    }else if(hours > 12 && hours < 10){
116
+        hours = '0' +( hours - 12)
117
+    }else{
118
+        hours = hours - 12
119
+    }
120
+    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
121
+}
122
+
123
+// 近一周
124
+export function getLastWeek() {
125
+    var now = new Date();
126
+    var year = now.getFullYear();
127
+    var month = now.getMonth() + 1;//0-11表示1-12月
128
+    var day = now.getDate();
129
+    var hours = now.getHours() < 10 ? '0' + now.getHours() : now.getHours()
130
+    var minutes = now.getMinutes() < 10 ? '0' + now.getMinutes() : now.getMinutes()
131
+    var seconds = now.getSeconds() < 10 ? '0' + now.getSeconds() : now.getSeconds()
132
+    var dateObj = {};
133
+    dateObj.now = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
134
+    if (day - 7 <= 0) {   //如果在当月7日之前
135
+        var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate();    //1周前所在月的总天数
136
+        if (month - 1 <= 0) { //如果在当年的1月份
137
+            dateObj.last = (year - 1) + '-' + 12 + '-' + (31 - (7 - day)) + ' ' + hours + ':' + minutes + ':' + seconds;
138
+        } else {
139
+            dateObj.last = year + '-' + (month - 1<10? '0'+(month-1):(month-1)) + '-' + (lastMonthDay - (7 - day)) + ' ' + hours + ':' + minutes + ':' + seconds;
140
+        }
141
+    } else {
142
+        dateObj.last = year + '-' + (month<10?'0'+month:month) + '-' + ((day - 7)<10?'0'+(day - 7):(day - 7)) + ' ' + hours + ':' + minutes + ':' + seconds
143
+    }
144
+    return dateObj
145
+}
146
+
147
+// 近一个月
148
+export function getLastMonth() {
149
+    var now = new Date();
150
+    var year = now.getFullYear();
151
+    var month = now.getMonth() + 1;//0-11表示1-12月
152
+
153
+    var day = now.getDate();
154
+    var hours = now.getHours() < 10 ? '0' + now.getHours() : now.getHours()
155
+    var minutes = now.getMinutes() < 10 ? '0' + now.getMinutes() : now.getMinutes()
156
+    var seconds = now.getSeconds() < 10 ? '0' + now.getSeconds() : now.getSeconds()
157
+    var dateObj = {};
158
+    dateObj.now = year + '-' + month + '-' + day;
159
+    var nowMonthDay = new Date(year, month, 0).getDate();    //当前月的总天数
160
+    if (month - 1 <= 0) { //如果是1月,年数往前推一年<br>     
161
+        dateObj.last = (year - 1) + '-' + 12 + '-' + day;
162
+    } else {
163
+        var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate();
164
+        if (lastMonthDay < day) {    //1个月前所在月的总天数小于现在的天日期
165
+            if (day < nowMonthDay) {        //当前天日期小于当前月总天数
166
+                dateObj.last = year + '-' + (month - 1 < 10? '0'+(month-1) : (month-1)) + '-' + (lastMonthDay - (nowMonthDay - day)) + ' ' + hours + ':' + minutes + ':' + seconds;
167
+            } else {
168
+                dateObj.last = year + '-' + (month - 1 < 10? '0'+(month-1) : (month-1)) + '-' + lastMonthDay + ' ' + hours + ':' + minutes + ':' + seconds;
169
+            }
170
+        } else {
171
+            dateObj.last = year + '-' + (month - 1 < 10? '0'+(month-1) : (month-1)) + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
172
+        }
173
+    }
174
+    return dateObj
175
+}
176
+
177
+// 近3个月
178
+export function getLast3Month() {
179
+    var now = new Date();
180
+    var year = now.getFullYear();
181
+    var month = now.getMonth() + 1;//0-11表示1-12月
182
+    var day = now.getDate();
183
+    var hours = now.getHours() < 10 ? '0' + now.getHours() : now.getHours()
184
+    var minutes = now.getMinutes() < 10 ? '0' + now.getMinutes() : now.getMinutes()
185
+    var seconds = now.getSeconds() < 10 ? '0' + now.getSeconds() : now.getSeconds()
186
+    var dateObj = {};
187
+    dateObj.now = year + '-' + month + '-' + day;
188
+    var nowMonthDay = new Date(year, month, 0).getDate();    //当前月的总天数
189
+    if (month - 3 <= 0) { //如果是1、2、3月,年数往前推一年
190
+        var last3MonthDay = new Date((year - 1), (12 - (3 - parseInt(month))), 0).getDate();    //3个月前所在月的总天数
191
+        if (last3MonthDay < day) {    //3个月前所在月的总天数小于现在的天日期
192
+            dateObj.last = (year - 1) + '-' + (12 - (3 - month)) + '-' + last3MonthDay + ' ' + hours + ':' + minutes + ':' + seconds;
193
+        } else {
194
+            dateObj.last = (year - 1) + '-' + (12 - (3 - month)) + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
195
+        }
196
+    } else {
197
+        var last3MonthDay = new Date(year, (parseInt(month) - 3), 0).getDate();    //3个月前所在月的总天数
198
+        if (last3MonthDay < day) {    //3个月前所在月的总天数小于现在的天日期
199
+            if (day < nowMonthDay) {        //当前天日期小于当前月总天数,2月份比较特殊的月份
200
+                dateObj.last = year + '-' + (month - 3) + '-' + (last3MonthDay - (nowMonthDay - day)) + ' ' + hours + ':' + minutes + ':' + seconds;
201
+            } else {
202
+                dateObj.last = year + '-' + (month - 3) + '-' + last3MonthDay + ' ' + hours + ':' + minutes + ':' + seconds;
203
+            }
204
+        } else {
205
+            dateObj.last = year + '-' + (month - 3) + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
206
+        }
207
+    }
208
+    return dateObj
209
+}
210
+
211
+//获取近一年时间
212
+export function getLastYear() {
213
+    var date = new Date()
214
+    var year = date.getFullYear() - 1
215
+    var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
216
+    var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
217
+    var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
218
+    var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
219
+    var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
220
+    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
221
+}
222
+
223
+//校验起止时间
224
+export function getStarEndTime(starTime,endTime) {
225
+    let obj = {}
226
+    if(starTime > new Date()){
227
+        obj.$message.error({message: '开始时间不能超过当前时间' });
228
+        obj.starTime = "";
229
+        return
230
+    }
231
+    if(starTime == ""){
232
+        obj.$message({
233
+            message: '请选择开始时间',
234
+            type: 'warning'
235
+        });
236
+        obj.endTime = "";
237
+        return
238
+    }
239
+    if(endTime > new Date()){
240
+        obj.$message.error({message: '结束时间不能超过当前时间' });
241
+        obj.endTime = "";
242
+        return
243
+    }
244
+    if(endTime){
245
+        if(starTime > endTime){
246
+            obj.$message.error({message: '请正确选择时间' });
247
+            obj.endTime = "";
248
+            return
249
+        }
250
+    }
251
+    return obj
252
+}

+ 5 - 0
CallCenterWeb.UI/rmyyecharts/src/views/About.vue

@@ -0,0 +1,5 @@
1
+<template>
2
+  <div class="about">
3
+    <h1>This is an about page</h1>
4
+  </div>
5
+</template>

+ 151 - 0
CallCenterWeb.UI/rmyyecharts/src/views/Home.vue

@@ -0,0 +1,151 @@
1
+<template>
2
+	<Resize>
3
+		<div class="main">
4
+			<!-- 顶部 -->
5
+			<top-count></top-count>
6
+			<!-- 中间 -->
7
+			<el-row :gutter="20">
8
+				<!-- 话务 -->
9
+				<el-col :span="6">
10
+					<div class="grid-content">
11
+						<div class="title">话务量统计</div>
12
+						<traffic></traffic>
13
+						<connection-rate></connection-rate>
14
+					</div>
15
+				</el-col>
16
+				<el-col :span="12">
17
+					
18
+					<!-- 24小时话务趋势分析 -->
19
+					<div class="grid-content" style="margin-bottom: 10px;">
20
+						<div class="title">24小时话务趋势分析</div>
21
+						<conversation-by-now></conversation-by-now>
22
+					</div>
23
+					<!-- 24工作量统计 -->
24
+					<div class="grid-content">
25
+						<div class="title">日保障服务中心平台工作总量</div>
26
+						<workorder-by-now></workorder-by-now>
27
+					</div>
28
+				</el-col>
29
+				<el-col :span="6">
30
+					<!-- ivr满意度 -->
31
+					<div class="grid-content" style="margin-bottom: 10px;">
32
+						<div class="title">患者满意度</div>
33
+						<IVR-satisfaction-by-now></IVR-satisfaction-by-now>
34
+					</div>
35
+					<!-- 满意度统计 -->
36
+					<div class="grid-content">
37
+						<div class="title">满意度统计</div>
38
+						<order-satisfaction-by-now></order-satisfaction-by-now>
39
+					</div>
40
+				</el-col>
41
+			</el-row>
42
+			<el-row :gutter="20">
43
+				<!-- 话务 -->
44
+				<el-col :span="7">
45
+					<div class="grid-content">
46
+						<div class="title">车辆调度统计</div>
47
+						<car-type></car-type>
48
+					</div>
49
+				</el-col>
50
+				<el-col :span="10">
51
+					<div class="grid-content">
52
+						<div class="title">故障保修统计</div>
53
+						<repair-total></repair-total>
54
+					</div>
55
+				</el-col>
56
+				<el-col :span="7">
57
+					<div class="grid-content">
58
+						<div class="title">综合调度类型占比</div>
59
+						<dispatch-type></dispatch-type>
60
+					</div>
61
+				</el-col>
62
+			</el-row>
63
+		</div>
64
+	</Resize>
65
+</template>
66
+
67
+<script>
68
+	import topCount from "../components/topCount.vue";
69
+	import traffic from "../components/traffic.vue";
70
+	import connectionRate from "../components/connectionRate.vue";
71
+	import conversationByNow from "../components/conversationByNow.vue";
72
+	import workorderByNow from "../components/workorderByNow.vue";
73
+	import IVRSatisfactionByNow from "../components/IVRSatisfactionByNow.vue";
74
+	import orderSatisfactionByNow from "../components/orderSatisfactionByNow.vue";
75
+	import carType from "../components/carType.vue";
76
+	import dispatchType from "../components/dispatchType.vue";
77
+	import repairTotal from "../components/repairTotal.vue";
78
+	import Resize from "../utils/Resize.vue";
79
+
80
+	import {
81
+		timeDay,
82
+		getLast1Date,
83
+		getLastWeek,
84
+		getLastMonth,
85
+	} from "../utils/selectTime";
86
+	export default {
87
+		name: "Home",
88
+		props: {
89
+
90
+		},
91
+		components: {
92
+			Resize, topCount, traffic, connectionRate, conversationByNow,
93
+			 workorderByNow, IVRSatisfactionByNow, orderSatisfactionByNow,
94
+			 carType, dispatchType, repairTotal
95
+		},
96
+		data() {
97
+			return {};
98
+		},
99
+		mounted() {
100
+		},
101
+		methods: {
102
+		}
103
+	};
104
+</script>
105
+<style lang="scss" scoped>
106
+	@font-face {
107
+		font-family: dsdigit;
108
+		src: url("../../public/static/js/font/DS-DIGI.TTF");
109
+	}
110
+
111
+	.main {
112
+		color: #fff;
113
+		background-color: #000;
114
+		padding: 0 10px;
115
+		background-image: url("../assets/image/home.png");
116
+		background-size: cover;
117
+		box-sizing: border-box;
118
+		overflow: hidden;
119
+		height: 100%;
120
+		
121
+	}
122
+	.title{
123
+		width:100%;
124
+		height: 35px;
125
+		line-height: 35px;
126
+		font-weight: 600;
127
+		background-image: url("../assets/image/frame.png");
128
+		background-size: 100% 100%;
129
+		margin-bottom: 15px;
130
+		text-align: center;
131
+		font-size: 17px;
132
+	}
133
+	.el-row {
134
+		margin-bottom: 20px;
135
+		
136
+		&:last-child {
137
+			margin-bottom: 0;
138
+		}
139
+	}
140
+
141
+	.el-col {
142
+		border-radius: 4px;
143
+	}
144
+
145
+	.grid-content {
146
+		padding: 10px;
147
+		border-radius: 4px;
148
+		min-height: 36px;
149
+		background-color: rgba(0,45,92,.6)
150
+	}
151
+</style>

+ 23 - 0
CallCenterWeb.UI/rmyyecharts/vue.config.js

@@ -0,0 +1,23 @@
1
+const webpack = require('webpack')
2
+module.exports = {
3
+    publicPath: "./",
4
+    // 输出文件目录
5
+    outputDir: process.env.outputDir,
6
+    lintOnSave: false,
7
+    devServer: { //启动项目在8080端口自动打开
8
+        open: true,
9
+        port: 8080,
10
+        proxy: null,
11
+        disableHostCheck: true
12
+    },
13
+    // 打包体积大报的错
14
+    configureWebpack: (config) => {
15
+        if (process.env.NODE_ENV === 'production') {// 为生产环境修改配置...
16
+          config.mode = 'production';
17
+          config["performance"] = {//打包文件大小配置
18
+            "maxEntrypointSize": 10000000,
19
+            "maxAssetSize": 30000000
20
+          }
21
+        }
22
+      }
23
+}