workMeeting.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. <template>
  2. <div>
  3. <div class="border-shadow">
  4. <query></query>
  5. <card :title="'核心指标'">
  6. <CoreData :data-list="coreData"></CoreData>
  7. </card>
  8. </div>
  9. <a-row :style="{ marginTop: '15px' }">
  10. <a-col :span="18">
  11. <div class="left border-shadow">
  12. <card :title="'会议室管理'"></card>
  13. <div class="huiyi_ksh">
  14. <div class="aside">
  15. <a-menu
  16. style="width: 100%"
  17. :default-selected-keys="defaultSelectedKeys"
  18. mode="inline"
  19. @click="huiyiClick"
  20. >
  21. <!-- style="width: 100px" -->
  22. <!-- :open-keys.sync="openKeys" -->
  23. <a-menu-item v-for="(item, index) in tabsArr" :key="index + ''">
  24. {{ item.title }}
  25. </a-menu-item>
  26. </a-menu>
  27. </div>
  28. <div class="container">
  29. <timeline
  30. v-for="(item, index) in tabsItemArr"
  31. :key="index"
  32. v-bind="{
  33. startTime: 8,
  34. endTime: 17,
  35. huiyiInfo: item.shiyong,
  36. }"
  37. :style="{ height: '60px' }"
  38. ></timeline>
  39. </div>
  40. </div>
  41. <div class="huiyi_detailed">
  42. <a-row>
  43. <a-col :span="2" class="label"> 会议主题: </a-col>
  44. <a-col :span="6">
  45. <a-input></a-input>
  46. </a-col>
  47. <a-col :span="2" class="label"> 会议配置: </a-col>
  48. <a-col :span="6">
  49. <a-input></a-input>
  50. </a-col>
  51. <a-col :span="2" class="label"> 会议预约: </a-col>
  52. <a-col :span="6">
  53. <a-input></a-input>
  54. </a-col>
  55. </a-row>
  56. <a-row>
  57. <a-col :span="2" class="label"> 参会人员: </a-col>
  58. <a-col :span="14"> </a-col>
  59. <a-col :span="4"> 会议成本:30 元/小时 </a-col>
  60. <a-col :span="4"> 会议费用:35 元/小时 </a-col>
  61. </a-row>
  62. </div>
  63. </div>
  64. </a-col>
  65. <a-col :span="6">
  66. <div class="right border-shadow">
  67. <card :title="'成本趋势'">
  68. <div class="cben">
  69. <div class="total">成本趋势: <span>成本集中</span></div>
  70. <div
  71. class="myChart"
  72. ref="myChart2"
  73. :style="{ height: '475px' }"
  74. ></div>
  75. </div>
  76. </card>
  77. </div>
  78. </a-col>
  79. </a-row>
  80. </div>
  81. </template>
  82. <script>
  83. import query from "@/components/common/query.vue";
  84. import card from "@/components/common/card.vue";
  85. import timeline from "@/components/common/timeLine.vue";
  86. export default {
  87. components: {
  88. query,
  89. card,
  90. timeline,
  91. },
  92. data() {
  93. const listData = [];
  94. for (let i = 0; i < 100; i++) {
  95. listData.push({
  96. index: i + 1,
  97. name: "物理饭",
  98. department: "技术开发部门",
  99. time: "2023.02.03 00:00:00",
  100. });
  101. }
  102. return {
  103. options: [
  104. {
  105. value: 1,
  106. name: "中讯1",
  107. },
  108. {
  109. value: 2,
  110. name: "中讯2",
  111. },
  112. ],
  113. floors: [
  114. {
  115. value: 7,
  116. name: "7层",
  117. },
  118. {
  119. value: 8,
  120. name: "8层",
  121. },
  122. ],
  123. columns: [
  124. { title: "序号", dataIndex: "index", key: "1", width: 48 },
  125. { title: "姓名", dataIndex: "name", key: "2", width: 60 },
  126. { title: "部门", dataIndex: "department", key: "3", width: 80 },
  127. { title: "最后进入时间", dataIndex: "time", key: "4", width: 90 },
  128. ],
  129. listData: listData,
  130. coreData: [
  131. {
  132. title: "会议室饱和度",
  133. num: "90%",
  134. unit: "/月",
  135. historyDesc: "同比",
  136. historyNum: 0.4,
  137. },
  138. {
  139. title: "会议室占用率",
  140. num: "80%",
  141. unit: "/天",
  142. historyDesc: "同比",
  143. historyNum: 0.4,
  144. },
  145. {
  146. title: "会议室占用率",
  147. num: "80%",
  148. unit: "/天",
  149. historyDesc: "同比",
  150. historyNum: 0.4,
  151. },
  152. {
  153. title: "人均成本(会议)",
  154. num: 80,
  155. unit: "元/人/月",
  156. historyDesc: "同比",
  157. historyNum: 0.4,
  158. },
  159. {
  160. type: 1,
  161. isHighLight: false,
  162. title: "值得关注",
  163. content: "增加会议室",
  164. },
  165. ],
  166. defaultSelectedKeys: ["0"],
  167. tabsItemArr: [],
  168. tabsArr: [
  169. {
  170. title: "701",
  171. focus: true,
  172. content: [
  173. {
  174. date: "2023.08.01",
  175. week: "周一",
  176. shiyong: [
  177. {
  178. name: "1",
  179. startTime: "2023.08.01 08:40:00",
  180. endTime: "2023.08.01 10:40:00",
  181. },
  182. {
  183. name: "2",
  184. startTime: "2023.08.01 12:25:00",
  185. endTime: "2023.08.01 13:42:00",
  186. },
  187. {
  188. name: "3",
  189. startTime: "2023.08.01 15:21:00",
  190. endTime: "2023.08.01 16:22:00",
  191. },
  192. ],
  193. },
  194. {
  195. date: "2023.08.02",
  196. week: "周二",
  197. shiyong: [
  198. {
  199. name: "1",
  200. startTime: "2023.08.01 08:40:00",
  201. endTime: "2023.08.01 10:40:00",
  202. },
  203. {
  204. name: "2",
  205. startTime: "2023.08.01 12:25:00",
  206. endTime: "2023.08.01 13:42:00",
  207. },
  208. {
  209. name: "3",
  210. startTime: "2023.08.01 15:21:00",
  211. endTime: "2023.08.01 16:22:00",
  212. },
  213. ],
  214. },
  215. {
  216. date: "2023.08.03",
  217. week: "周三",
  218. shiyong: [
  219. {
  220. name: "1",
  221. startTime: "2023.08.01 08:40:00",
  222. endTime: "2023.08.01 10:40:00",
  223. },
  224. {
  225. name: "2",
  226. startTime: "2023.08.01 12:25:00",
  227. endTime: "2023.08.01 13:42:00",
  228. },
  229. {
  230. name: "3",
  231. startTime: "2023.08.01 15:21:00",
  232. endTime: "2023.08.01 16:22:00",
  233. },
  234. ],
  235. },
  236. {
  237. date: "2023.08.04",
  238. week: "周四",
  239. shiyong: [
  240. {
  241. name: "1",
  242. startTime: "2023.08.01 08:40:00",
  243. endTime: "2023.08.01 10:40:00",
  244. },
  245. {
  246. name: "2",
  247. startTime: "2023.08.01 12:25:00",
  248. endTime: "2023.08.01 13:42:00",
  249. },
  250. {
  251. name: "3",
  252. startTime: "2023.08.01 15:21:00",
  253. endTime: "2023.08.01 16:22:00",
  254. },
  255. ],
  256. },
  257. {
  258. date: "2023.08.05",
  259. week: "周五",
  260. shiyong: [
  261. {
  262. name: "1",
  263. startTime: "2023.08.01 08:40:00",
  264. endTime: "2023.08.01 10:40:00",
  265. },
  266. {
  267. name: "2",
  268. startTime: "2023.08.01 12:25:00",
  269. endTime: "2023.08.01 13:42:00",
  270. },
  271. {
  272. name: "3",
  273. startTime: "2023.08.01 15:21:00",
  274. endTime: "2023.08.01 16:22:00",
  275. },
  276. ],
  277. },
  278. ],
  279. },
  280. {
  281. title: "702",
  282. focus: false,
  283. content: [
  284. {
  285. date: "2023.08.01",
  286. week: "周一",
  287. shiyong: [
  288. {
  289. name: "1",
  290. startTime: "2023.08.01 08:40:00",
  291. endTime: "2023.08.01 10:40:00",
  292. },
  293. {
  294. name: "2",
  295. startTime: "2023.08.01 12:25:00",
  296. endTime: "2023.08.01 13:42:00",
  297. },
  298. {
  299. name: "3",
  300. startTime: "2023.08.01 15:21:00",
  301. endTime: "2023.08.01 16:22:00",
  302. },
  303. ],
  304. },
  305. {
  306. date: "2023.08.02",
  307. week: "周二",
  308. shiyong: [
  309. {
  310. name: "1",
  311. startTime: "2023.08.01 08:40:00",
  312. endTime: "2023.08.01 10:40:00",
  313. },
  314. {
  315. name: "2",
  316. startTime: "2023.08.01 12:25:00",
  317. endTime: "2023.08.01 13:42:00",
  318. },
  319. {
  320. name: "3",
  321. startTime: "2023.08.01 15:21:00",
  322. endTime: "2023.08.01 16:22:00",
  323. },
  324. ],
  325. },
  326. {
  327. date: "2023.08.03",
  328. week: "周三",
  329. shiyong: [
  330. {
  331. name: "1",
  332. startTime: "2023.08.01 08:40:00",
  333. endTime: "2023.08.01 10:40:00",
  334. },
  335. {
  336. name: "2",
  337. startTime: "2023.08.01 12:25:00",
  338. endTime: "2023.08.01 13:42:00",
  339. },
  340. {
  341. name: "3",
  342. startTime: "2023.08.01 15:21:00",
  343. endTime: "2023.08.01 16:22:00",
  344. },
  345. ],
  346. },
  347. {
  348. date: "2023.08.04",
  349. week: "周四",
  350. shiyong: [
  351. {
  352. name: "1",
  353. startTime: "2023.08.01 08:40:00",
  354. endTime: "2023.08.01 10:40:00",
  355. },
  356. {
  357. name: "2",
  358. startTime: "2023.08.01 12:25:00",
  359. endTime: "2023.08.01 13:42:00",
  360. },
  361. {
  362. name: "3",
  363. startTime: "2023.08.01 15:21:00",
  364. endTime: "2023.08.01 16:22:00",
  365. },
  366. ],
  367. },
  368. {
  369. date: "2023.08.05",
  370. week: "周五",
  371. shiyong: [
  372. {
  373. name: "1",
  374. startTime: "2023.08.01 08:40:00",
  375. endTime: "2023.08.01 10:40:00",
  376. },
  377. {
  378. name: "2",
  379. startTime: "2023.08.01 12:25:00",
  380. endTime: "2023.08.01 13:42:00",
  381. },
  382. {
  383. name: "3",
  384. startTime: "2023.08.01 15:21:00",
  385. endTime: "2023.08.01 16:22:00",
  386. },
  387. ],
  388. },
  389. ],
  390. },
  391. {
  392. title: "703",
  393. content: [
  394. {
  395. date: "2023.08.01",
  396. week: "周一",
  397. shiyong: [
  398. {
  399. name: "1",
  400. startTime: "2023.08.01 08:40:00",
  401. endTime: "2023.08.01 10:40:00",
  402. },
  403. {
  404. name: "2",
  405. startTime: "2023.08.01 12:25:00",
  406. endTime: "2023.08.01 13:42:00",
  407. },
  408. {
  409. name: "3",
  410. startTime: "2023.08.01 15:21:00",
  411. endTime: "2023.08.01 16:22:00",
  412. },
  413. ],
  414. },
  415. {
  416. date: "2023.08.02",
  417. week: "周二",
  418. shiyong: [
  419. {
  420. name: "1",
  421. startTime: "2023.08.01 08:40:00",
  422. endTime: "2023.08.01 10:40:00",
  423. },
  424. {
  425. name: "2",
  426. startTime: "2023.08.01 12:25:00",
  427. endTime: "2023.08.01 13:42:00",
  428. },
  429. {
  430. name: "3",
  431. startTime: "2023.08.01 15:21:00",
  432. endTime: "2023.08.01 16:22:00",
  433. },
  434. ],
  435. },
  436. {
  437. date: "2023.08.03",
  438. week: "周三",
  439. shiyong: [
  440. {
  441. name: "1",
  442. startTime: "2023.08.01 08:40:00",
  443. endTime: "2023.08.01 10:40:00",
  444. },
  445. {
  446. name: "2",
  447. startTime: "2023.08.01 12:25:00",
  448. endTime: "2023.08.01 13:42:00",
  449. },
  450. {
  451. name: "3",
  452. startTime: "2023.08.01 15:21:00",
  453. endTime: "2023.08.01 16:22:00",
  454. },
  455. ],
  456. },
  457. {
  458. date: "2023.08.04",
  459. week: "周四",
  460. shiyong: [
  461. {
  462. name: "1",
  463. startTime: "2023.08.01 08:40:00",
  464. endTime: "2023.08.01 10:40:00",
  465. },
  466. {
  467. name: "2",
  468. startTime: "2023.08.01 12:25:00",
  469. endTime: "2023.08.01 13:42:00",
  470. },
  471. {
  472. name: "3",
  473. startTime: "2023.08.01 15:21:00",
  474. endTime: "2023.08.01 16:22:00",
  475. },
  476. ],
  477. },
  478. {
  479. date: "2023.08.05",
  480. week: "周五",
  481. shiyong: [
  482. {
  483. name: "1",
  484. startTime: "2023.08.01 08:40:00",
  485. endTime: "2023.08.01 10:40:00",
  486. },
  487. {
  488. name: "2",
  489. startTime: "2023.08.01 12:25:00",
  490. endTime: "2023.08.01 13:42:00",
  491. },
  492. {
  493. name: "3",
  494. startTime: "2023.08.01 15:21:00",
  495. endTime: "2023.08.01 16:22:00",
  496. },
  497. ],
  498. },
  499. ],
  500. },
  501. ],
  502. };
  503. },
  504. mounted() {
  505. this.setEchart2();
  506. this.changeTab(0);
  507. },
  508. methods: {
  509. handleChange(value) {
  510. console.log(`selected ${value}`);
  511. },
  512. getTimeRange() {
  513. this.$refs.timeRange.getTimeRange(); // 获取时间段
  514. },
  515. huiyiClick(e) {
  516. this.changeTab(e.key);
  517. },
  518. changeTab(index) {
  519. this.tabsItemArr = this.tabsArr[index].content;
  520. },
  521. setEchart1() {},
  522. setEchart2() {
  523. let that = this;
  524. let chart = this.$echarts.init(this.$refs.myChart2);
  525. let xLabel = ["3.26", "3.27", "3.28", "3.29", "3.30", "3.31"];
  526. let yData = [
  527. {
  528. name: "市场部",
  529. color: "#5087ec",
  530. startColor: "rgba(80,135,236,.6)",
  531. endColor: "rgba(80,135,236,.6)",
  532. data: ["110", "130", "150", "170", "150", "130"],
  533. },
  534. {
  535. name: "办公室",
  536. color: "#68bbc4",
  537. startColor: "rgba(104,187,196,.6)",
  538. endColor: "rgba(104,187,196,.6)",
  539. data: ["210", "230", "250", "270", "250", "230"],
  540. },
  541. {
  542. name: "产品中心",
  543. color: "#60b565",
  544. startColor: "rgba(96,181,101,.6)",
  545. endColor: "rgba(96,181,101,.6)",
  546. data: ["310", "330", "350", "370", "350", "330"],
  547. },
  548. {
  549. name: "智慧院",
  550. color: "#f2bd42",
  551. startColor: "rgba(242,189,66,.6)",
  552. endColor: "rgba(242,189,66,.6)",
  553. data: ["410", "430", "450", "470", "450", "430"],
  554. },
  555. {
  556. name: "业务一部",
  557. color: "#ee752f",
  558. startColor: "rgba(238,117,47,.6)",
  559. endColor: "rgba(238,117,47,.6)",
  560. data: ["510", "530", "550", "570", "550", "530"],
  561. },
  562. {
  563. name: "其他部门",
  564. color: "#d95040",
  565. startColor: "rgba(217,80,64,.6)",
  566. endColor: "rgba(217,80,64,.6)",
  567. data: ["610", "630", "650", "670", "650", "630"],
  568. },
  569. ];
  570. let ySeries = yData.map(function (item) {
  571. return {
  572. name: item.name,
  573. type: "line",
  574. stack: "Total",
  575. // symbol: "circle", // 默认是空心圆(中间是白色的),改成实心圆
  576. showAllSymbol: true,
  577. symbolSize: 8,
  578. smooth: true,
  579. lineStyle: {
  580. normal: {
  581. width: 2,
  582. color: item.color, // 线条颜色
  583. },
  584. },
  585. itemStyle: {
  586. color: item.color,
  587. },
  588. areaStyle: {
  589. normal: {
  590. //线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
  591. color: new that.$echarts.graphic.LinearGradient(
  592. 0,
  593. 0,
  594. 0,
  595. 1,
  596. [
  597. {
  598. offset: 0,
  599. color: item.startColor,
  600. },
  601. {
  602. offset: 1,
  603. color: item.endColor,
  604. },
  605. ],
  606. false
  607. ),
  608. },
  609. },
  610. data: item.data,
  611. };
  612. });
  613. let options = {
  614. // backgroundColor: "#000237",
  615. tooltip: {
  616. trigger: "axis",
  617. // backgroundColor: "transparent",
  618. axisPointer: {
  619. lineStyle: {
  620. color: {
  621. type: "linear",
  622. x: 0,
  623. y: 0,
  624. x2: 0,
  625. y2: 1,
  626. colorStops: [
  627. {
  628. offset: 0,
  629. color: "rgba(126,199,255,0)", // 0% 处的颜色
  630. },
  631. {
  632. offset: 0.5,
  633. color: "rgba(126,199,255,1)", // 100% 处的颜色
  634. },
  635. {
  636. offset: 1,
  637. color: "rgba(126,199,255,0)", // 100% 处的颜色
  638. },
  639. ],
  640. global: false, // 缺省为 false
  641. },
  642. },
  643. },
  644. },
  645. legend: {
  646. align: "left",
  647. top: "5%",
  648. textStyle: {
  649. color: "#000000",
  650. fontSize: 16,
  651. },
  652. },
  653. grid: {
  654. top: "20%",
  655. left: "15%",
  656. right: "10%",
  657. bottom: "10%",
  658. // containLabel: true
  659. },
  660. xAxis: [
  661. {
  662. type: "category",
  663. // boundaryGap: false,
  664. axisLine: {
  665. //坐标轴轴线相关设置。数学上的x轴
  666. show: true,
  667. lineStyle: {
  668. color: "#6e7079",
  669. },
  670. },
  671. axisLabel: {
  672. //坐标轴刻度标签的相关设置
  673. textStyle: {
  674. color: "#000000",
  675. padding: 8,
  676. fontSize: 14,
  677. },
  678. formatter: function (data) {
  679. return data;
  680. },
  681. },
  682. splitLine: {
  683. show: false,
  684. lineStyle: {
  685. color: "#233653",
  686. },
  687. },
  688. axisTick: {
  689. show: true,
  690. inside: true,
  691. },
  692. data: xLabel,
  693. },
  694. ],
  695. yAxis: [
  696. {
  697. min: 0,
  698. splitLine: {
  699. show: true,
  700. lineStyle: {
  701. color: "#e8e8e8",
  702. },
  703. },
  704. axisLine: {
  705. show: false,
  706. lineStyle: {
  707. color: "#233653",
  708. },
  709. },
  710. axisLabel: {
  711. show: true,
  712. textStyle: {
  713. color: "#000000",
  714. padding: 8,
  715. },
  716. formatter: function (value) {
  717. if (value === 0) {
  718. return value;
  719. }
  720. return value;
  721. },
  722. },
  723. axisTick: {
  724. show: false,
  725. },
  726. },
  727. ],
  728. series: ySeries,
  729. };
  730. chart.setOption(options);
  731. },
  732. },
  733. };
  734. </script>
  735. <style lang="less" scoped>
  736. .left {
  737. padding-right: 15px;
  738. margin-right: 5px;
  739. }
  740. .right {
  741. padding-left: 15px;
  742. margin-left: 5px;
  743. }
  744. .cben {
  745. font-weight: bold;
  746. span {
  747. font-size: 20px;
  748. }
  749. }
  750. .huiyi_ksh {
  751. height: 300px;
  752. .aside {
  753. width: 100px;
  754. height: 100%;
  755. margin-right: 5px;
  756. display: inline-block;
  757. overflow: hidden;
  758. overflow-y: auto;
  759. }
  760. .container {
  761. width: calc(100% - 100px - 5px);
  762. height: 100%;
  763. display: inline-block;
  764. vertical-align: top;
  765. overflow: hidden;
  766. overflow-y: auto;
  767. }
  768. }
  769. .huiyi_detailed {
  770. height: 205px;
  771. .ant-row {
  772. height: 60px;
  773. line-height: 60px;
  774. .label {
  775. text-align: right;
  776. }
  777. }
  778. }
  779. </style>