index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <template>
  2. <div class="dashboard-editor-container">
  3. <div class="mtitle">
  4. <span style="font-size: 19px">欢迎使用,{{ user.nickName }}</span>
  5. <iframe
  6. allowtransparency="true"
  7. frameborder="0"
  8. width="180"
  9. height="36"
  10. scrolling="no"
  11. style="padding-top: 10px"
  12. src="//tianqi.2345.com/plugin/widget/index.htm?s=3&z=2&t=0&v=0&d=2&bd=0&k=&f=#545555&ltf=#545555&htf=ffffff&q=1&e=1&a=1&c=72036&w=180&h=36&align=center"
  13. ></iframe>
  14. <dselect v-model="deptId" style="width: 200px; float: right; margin-top: 10px"></dselect>
  15. <span style="float: right; padding-top: 16px; color: #838383">当前部门:</span>
  16. </div>
  17. <panel-group :cdata="data.count" />
  18. <!--散货过车和重量监控-->
  19. <div class="chart-wrapper">
  20. <div class="pop" style="width: 40%">
  21. <div class="out" style="margin: 0px; margin-top: 5px">
  22. <div class="int">
  23. <div class="bos" style="border: 0px">
  24. <div class="lab">
  25. <div class="bsg"></div>
  26. <div class="tit">
  27. <span>散货过车和重量监控</span>
  28. <span class="jz">截至{{ time }}</span>
  29. </div>
  30. </div>
  31. <div class="rows">
  32. <div class="row">
  33. <div class="ou">
  34. <div class="in" style="background: linear-gradient(90deg, rgba(120, 215, 121, 1) 26%, rgba(95, 196, 91, 1) 100%)">
  35. <div class="tti">本日</div>
  36. <div class="num">
  37. <span>{{ data.pass.sDayCar || 0 }}</span>
  38. <span class="unit">辆</span>
  39. </div>
  40. <div class="num">
  41. <span>{{ data.pass.sDayWeight ? (data.pass.sDayWeight / 1000).toFixed(0) : 0 }}</span>
  42. <span class="unit">吨</span>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="row">
  48. <div class="ou">
  49. <div class="in" style="background: linear-gradient(90deg, rgba(181, 188, 253, 1) 26%, rgba(120, 141, 248, 1) 100%)">
  50. <div class="tti">本周</div>
  51. <div class="num">
  52. <span>{{ data.pass.sWeekCar }}</span>
  53. <span class="unit">辆</span>
  54. </div>
  55. <div class="num">
  56. <span>{{ data.pass.sWeekWeight ? (data.pass.sWeekWeight / 1000).toFixed(0) : 0 }}</span>
  57. <span class="unit">吨</span>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. <div class="row">
  63. <div class="ou">
  64. <div class="in" style="background: linear-gradient(90deg, rgba(255, 206, 153, 1) 26%, rgba(250, 168, 113, 1) 100%)">
  65. <div class="tti">本月</div>
  66. <div class="num">
  67. <span>{{ data.pass.sMonthCar }}</span>
  68. <span class="unit">辆</span>
  69. </div>
  70. <div class="num">
  71. <span>{{ data.pass.sMonthWeight ? (data.pass.sMonthWeight / 1000).toFixed(0) : 0 }}</span>
  72. <span class="unit">吨</span>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. <!--集装箱过车和重量监控-->
  83. <div class="pop" style="width: 60%">
  84. <div class="out" style="margin: 0px; margin-top: 5px">
  85. <div class="int">
  86. <div class="bos" style="border: 0px">
  87. <div class="lab">
  88. <div class="bsg"></div>
  89. <div class="tit">
  90. <span>集装箱过车和重量监控</span>
  91. <span class="jz">截至{{ time }}</span>
  92. </div>
  93. </div>
  94. <div class="rows">
  95. <div class="row">
  96. <div class="ou">
  97. <div class="in" style="background: linear-gradient(90deg, rgba(254, 152, 244, 1) 26%, rgba(255, 114, 233, 1) 100%)">
  98. <div class="tti">本日</div>
  99. <div class="rows">
  100. <div class="row" style="text-align: center; width: 50%">
  101. <div class="num">
  102. <span>{{ data.pass.jDayCarI || 0 }}</span>
  103. <span class="unit">辆(进)</span>
  104. </div>
  105. <div class="num">
  106. <span>{{ data.pass.jDayBoxNumI || 0 }}</span>
  107. <span class="unit">标箱</span>
  108. </div>
  109. </div>
  110. <div class="row" style="text-align: left; width: 50%">
  111. <div class="num">
  112. <span>{{ data.pass.jDayCarE || 0 }}</span>
  113. <span class="unit">辆(出)</span>
  114. </div>
  115. <div class="num">
  116. <span>{{ data.pass.jDayBoxNumE || 0 }}</span>
  117. <span class="unit">标箱</span>
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. <div class="row">
  125. <div class="ou">
  126. <div class="in" style="background: linear-gradient(90deg, rgba(94, 173, 252, 1) 26%, rgba(68, 133, 254, 1) 100%)">
  127. <div class="tti">本周</div>
  128. <div class="rows">
  129. <div class="row" style="text-align: center; width: 50%">
  130. <div class="num">
  131. <span>{{ data.pass.jWeekCarI || 0 }}</span>
  132. <span class="unit">辆(进)</span>
  133. </div>
  134. <div class="num">
  135. <span>{{ data.pass.jWeekBoxNumI || 0 }}</span>
  136. <span class="unit">标箱</span>
  137. </div>
  138. </div>
  139. <div class="row" style="text-align: left; width: 50%">
  140. <div class="num">
  141. <span>{{ data.pass.jWeekCarE || 0 }}</span>
  142. <span class="unit">辆(出)</span>
  143. </div>
  144. <div class="num">
  145. <span>{{ data.pass.jWeekBoxNumE || 0 }}</span>
  146. <span class="unit">标箱</span>
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. <div class="row">
  154. <div class="ou">
  155. <div class="in" style="background: linear-gradient(90deg, rgba(129, 159, 253, 1) 26%, rgba(52, 97, 243, 1) 100%)">
  156. <div class="tti">本月</div>
  157. <div class="rows">
  158. <div class="row" style="text-align: center; width: 50%">
  159. <div class="num">
  160. <span>{{ data.pass.jMonthCarI || 0 }}</span>
  161. <span class="unit">辆(进)</span>
  162. </div>
  163. <div class="num">
  164. <span>{{ data.pass.jMonthBoxNumI || 0 }}</span>
  165. <span class="unit">标箱</span>
  166. </div>
  167. </div>
  168. <div class="row" style="text-align: left; width: 50%">
  169. <div class="num">
  170. <span>{{ data.pass.jMonthCarE || 0 }}</span>
  171. <span class="unit">辆(出)</span>
  172. </div>
  173. <div class="num">
  174. <span>{{ data.pass.jMonthBoxNumE || 0 }}</span>
  175. <span class="unit">标箱</span>
  176. </div>
  177. </div>
  178. </div>
  179. </div>
  180. </div>
  181. </div>
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. </div>
  188. <!--场内作业车辆实时统计 -->
  189. <div class="chart-wrapper">
  190. <div class="pop" style="width: 100%">
  191. <div class="out" style="margin: 0px; margin-top: 5px">
  192. <div class="int">
  193. <div class="bos" style="border: 0px">
  194. <div class="lab">
  195. <div class="bsg"></div>
  196. <div class="tit">
  197. <span>散货一次性通行概率</span>
  198. <span class="jz">截至{{ time }}</span>
  199. </div>
  200. <div class="years">
  201. <div class="year active">本周</div>
  202. <div class="year">更多</div>
  203. </div>
  204. </div>
  205. <div class="rows">
  206. <div class="row" style="width: 20%">
  207. <div class="ou">
  208. <div class="in" style="background: linear-gradient(90deg, rgba(254, 152, 244, 1) 26%, rgba(255, 114, 233, 1) 100%)">
  209. <div class="tti" style="font-size: 20px; padding-top: 20px">场内散货作业车辆</div>
  210. <div class="num" style="padding-top: 20px; padding-bottom: 20px">
  211. <span>{{ data.count.scars || 0 }}</span>
  212. <span class="unit">辆</span>
  213. </div>
  214. </div>
  215. </div>
  216. </div>
  217. <div class="row" style="width: 20%">
  218. <el-progress type="circle" :percentage="data.pass.sSuccess ? ((data.pass.sSuccess / data.pass.sDayCar) * 100).toFixed(0) : 0" :stroke-width="15"></el-progress>
  219. <div class="day">本日通行概率</div>
  220. </div>
  221. <div class="row" style="width: 60%">
  222. <BarChart :chartData="chartData1" type="line" height="160px"></BarChart>
  223. </div>
  224. </div>
  225. <div class="lab" style="margin-top: 20px">
  226. <div class="bsg"></div>
  227. <div class="tit">
  228. <span>集装箱一次性通行概率</span>
  229. <span class="jz">截至{{ time }}</span>
  230. </div>
  231. </div>
  232. <div class="rows">
  233. <div class="row" style="width: 20%">
  234. <div class="ou">
  235. <div class="in" style="background: linear-gradient(90deg, #46a6ff 26%, #81c2ff 100%)">
  236. <div class="tti" style="font-size: 20px; padding-top: 20px">场内集装箱作业车辆</div>
  237. <div class="num" style="padding-top: 15px; padding-bottom: 20px">
  238. <span>{{ data.count.jcars }}</span>
  239. <span class="unit">辆</span>
  240. </div>
  241. </div>
  242. </div>
  243. </div>
  244. <div class="row" style="width: 20%">
  245. <el-progress type="circle" :percentage="data.pass.jSuccess ? ((data.pass.jSuccess / data.pass.jDayCarI) * 100).toFixed(0) : 0" :stroke-width="15"></el-progress>
  246. <div class="day">本日通行概率</div>
  247. </div>
  248. <div class="row" style="width: 60%">
  249. <BarChart :chartData="chartData2" type="line" height="160px"></BarChart>
  250. </div>
  251. </div>
  252. </div>
  253. </div>
  254. </div>
  255. </div>
  256. </div>
  257. </div>
  258. </template>
  259. <script>
  260. import PanelGroup from './dashboard/PanelGroup';
  261. import BarChart from './dashboard/BarChart';
  262. import Vue from 'vue';
  263. export default {
  264. name: 'Index',
  265. components: {
  266. PanelGroup,
  267. BarChart
  268. },
  269. data() {
  270. return {
  271. user: this.$store.state.user,
  272. data: { count: {}, pass: {} },
  273. deptId: this.$store.state.user.deptId,
  274. time: this.util.getDate('times'),
  275. chartData1: [], //散货
  276. chartData2: [] //集装箱
  277. };
  278. },
  279. watch: {
  280. deptId(val) {
  281. this.getData();
  282. this.getWeek();
  283. }
  284. },
  285. created() {
  286. //this.getData();
  287. //this.getWeek();
  288. },
  289. methods: {
  290. getData() {
  291. this.ajax({ url: '/home/index', data: { deptId: this.deptId } }).then((response) => {
  292. this.data = response.data;
  293. });
  294. },
  295. getWeek() {
  296. this.chartData1 = [];
  297. this.chartData2 = [];
  298. this.ajax({ url: '/home/weekSelect', data: { deptId: this.deptId } }).then((response) => {
  299. response.data.s.forEach((item) => {
  300. this.chartData1.push({ name: item.date, value: ((item.success / item.total) * 100).toFixed(0) });
  301. });
  302. response.data.j.forEach((item) => {
  303. this.chartData2.push({ name: item.date, value: ((item.success / item.total) * 100).toFixed(0) });
  304. });
  305. });
  306. }
  307. }
  308. };
  309. </script>
  310. <style lang="scss" scoped>
  311. .dashboard-editor-container {
  312. padding: 15px 20px 0px 20px;
  313. .mtitle {
  314. margin-bottom: 20px;
  315. margin-top: -15px;
  316. }
  317. .chart-wrapper {
  318. margin-top: 12px;
  319. overflow: hidden;
  320. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.07);
  321. background: #fff;
  322. border-radius: 5px;
  323. .pop {
  324. float: left;
  325. width: 33.33%;
  326. overflow: hidden;
  327. .out {
  328. margin: 10px;
  329. .int {
  330. padding: 15px 15px 10px 15px;
  331. overflow: hidden;
  332. }
  333. }
  334. }
  335. }
  336. .bos {
  337. float: left;
  338. padding: 0px 10px 0px 10px;
  339. width: 100%;
  340. .years {
  341. float: right;
  342. margin-top: -30px;
  343. overflow: hidden;
  344. .year {
  345. float: left;
  346. padding: 5px 10px;
  347. background-color: #f6f6f6;
  348. cursor: pointer;
  349. font-size: 14px;
  350. color: #545555;
  351. &.active {
  352. background-color: rgb(64, 158, 255);
  353. color: white;
  354. }
  355. }
  356. }
  357. .rows {
  358. overflow: hidden;
  359. .row {
  360. float: left;
  361. width: 33.3333%;
  362. text-align: center;
  363. .ou {
  364. padding: 0px 10px 0px 10px;
  365. .in {
  366. padding: 10px;
  367. text-align: center;
  368. color: white;
  369. border-radius: 10px;
  370. .tti {
  371. font-size: 30px;
  372. font-weight: bold;
  373. }
  374. .num {
  375. padding-top: 5px;
  376. font-size: 22px;
  377. .unit {
  378. font-size: 15px;
  379. padding-left: 5px;
  380. }
  381. }
  382. }
  383. }
  384. .day {
  385. font-size: 18px;
  386. padding-top: 7px;
  387. color: #838383;
  388. }
  389. }
  390. }
  391. }
  392. }
  393. </style>