index_kanban.vue 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358
  1. <template>
  2. <!-- <dv-full-screen-container> -->
  3. <div ref="scrollDiv" class="screen">
  4. <!-- :style="{height:height}" -->
  5. <div class="statistics">
  6. <div
  7. class="editDate"
  8. style="background-color: rgba(0, 0, 0, 0); display: block; width: 100%"
  9. >
  10. <!-- 标题装饰组件 -->
  11. <!-- <header-decoration />
  12. <div class="stitle">实验室管理看板</div>
  13. <div class="block" style="display:none">
  14. <span class="demonstration">开始:</span>
  15. <el-date-picker
  16. v-model="BeginDate"
  17. type="year"
  18. size="mini"
  19. value-format="yyyy"
  20. format="yyyy年"
  21. style="width: 96px;"
  22. :clearable="false"
  23. placeholder="选择日期"
  24. @change="checkYear(BeginDate,'begin')"
  25. />
  26. </div>
  27. <div class="block">
  28. <span class="demonstration">查询年度:</span>
  29. <el-date-picker
  30. v-model="endDate"
  31. type="year"
  32. size="mini"
  33. value-format="yyyy"
  34. format="yyyy年"
  35. :clearable="false"
  36. style="width: 96px;"
  37. placeholder="选择日期"
  38. @change="checkYear(endDate,'end')"
  39. >
  40. <el-date-picker
  41. v-model="endDate"
  42. type="year"
  43. value-format="yyyy"
  44. placeholder="选择年"
  45. @change="checkYear(endDate,'end')"
  46. />
  47. </el-date-picker>
  48. </div> -->
  49. <div class="date-filter-bar">
  50. <el-button-group class="date-range-btns">
  51. <!-- <el-button
  52. size="mini"
  53. :type="activeDateRange === 'week' ? 'primary' : 'default'"
  54. @click="setDateRange('week')"
  55. >
  56. 近一周
  57. </el-button> -->
  58. <el-button
  59. size="mini"
  60. :type="activeDateRange === 'month' ? 'primary' : 'default'"
  61. @click="setDateRange('month')"
  62. >
  63. 近一月
  64. </el-button>
  65. <el-button
  66. size="mini"
  67. :type="activeDateRange === 'year' ? 'primary' : 'default'"
  68. @click="setDateRange('year')"
  69. >
  70. 本年
  71. </el-button>
  72. <el-button
  73. size="mini"
  74. :type="activeDateRange === 'threeYears' ? 'primary' : 'default'"
  75. @click="setDateRange('threeYears')"
  76. >
  77. 近三年
  78. </el-button>
  79. </el-button-group>
  80. <el-date-picker
  81. v-model="endDate"
  82. class="date-range-picker"
  83. type="monthrange"
  84. size="mini"
  85. align="right"
  86. unlink-panels
  87. style="background-color: rgba(0, 0, 0, 0)"
  88. format="yyyy 年 MM 月"
  89. value-format="yyyy-MM"
  90. range-separator="至"
  91. start-placeholder="开始日期"
  92. end-placeholder="结束日期"
  93. @change="onDateRangeChange"
  94. />
  95. </div>
  96. </div>
  97. <div class="kanban-tab-bar">
  98. <el-tabs v-model="activeKanbanTab">
  99. <el-tab-pane label="人员培训" name="personnel" />
  100. <el-tab-pane label="设备管理" name="equipment" />
  101. <el-tab-pane label="内部比对及外部质评" name="qualityCompare" />
  102. <el-tab-pane label="应急预案及风险控制" name="emergency" />
  103. <el-tab-pane label="内部审核" name="internalAudit" />
  104. <el-tab-pane label="管理评审" name="managementReview" />
  105. </el-tabs>
  106. </div>
  107. <div class="w2222" v-if="relOf">
  108. <div v-if="activeKanbanTab === 'personnel'" class="kanban-tab-panel">
  109. <div class="kanban-chart-row kanban-chart-row--pie">
  110. <div class="kanban-chart-cell">
  111. <s4renYuanPeiXun
  112. v-if="showAll || showComponents[1]"
  113. width="100%"
  114. height="100%"
  115. :colorw="colorw"
  116. style="box-shadow: none"
  117. :data="getS4renYuanPeiXun()"
  118. />
  119. </div>
  120. <div class="kanban-chart-cell">
  121. <s5renYuanJianDu
  122. v-if="showAll || showComponents[3]"
  123. width="100%"
  124. height="100%"
  125. :colorw="colorw"
  126. style="box-shadow: none"
  127. :data="getS5renYuanJianDu()"
  128. />
  129. </div>
  130. </div>
  131. <div class="kanban-chart-row kanban-chart-row--bar">
  132. <div class="kanban-chart-cell">
  133. <s4renYuanPeiXunCol
  134. v-if="showAll || showComponents[2]"
  135. width="100%"
  136. height="100%"
  137. :colorw="colorw"
  138. :direction="direction"
  139. style="box-shadow: none"
  140. :data="getS4renYuanPeiXunFB()"
  141. />
  142. </div>
  143. <div class="kanban-chart-cell">
  144. <s5renYuanJianDuCol
  145. v-if="showAll || showComponents[4]"
  146. width="100%"
  147. height="100%"
  148. :colorw="colorw"
  149. :direction="direction"
  150. style="box-shadow: none"
  151. :data="getS5renYuanJianDuFB()"
  152. />
  153. </div>
  154. </div>
  155. </div>
  156. <div v-if="activeKanbanTab === 'equipment'" class="kanban-tab-panel">
  157. <div class="kanban-chart-row kanban-chart-row--pie">
  158. <div class="kanban-chart-cell">
  159. <s7sheBeiJiaoZhun
  160. v-if="showAll || showComponents[5]"
  161. width="100%"
  162. height="100%"
  163. :colorw="colorw"
  164. style="box-shadow: none"
  165. :data="getJiaoYanObjNum()"
  166. />
  167. </div>
  168. <div class="kanban-chart-cell">
  169. <s8sheBeiHeCha
  170. v-if="showAll || showComponents[7]"
  171. width="100%"
  172. height="100%"
  173. :colorw="colorw"
  174. style="box-shadow: none"
  175. :data="gethechaObjNum()"
  176. />
  177. </div>
  178. </div>
  179. <div class="kanban-chart-row kanban-chart-row--bar">
  180. <div class="kanban-chart-cell">
  181. <s7sheBeiJiaoZhunCol
  182. v-if="showAll || showComponents[6]"
  183. width="100%"
  184. height="100%"
  185. :colorw="colorw"
  186. :direction="direction"
  187. style="box-shadow: none"
  188. :data="getJiaoYanObjNumFB()"
  189. />
  190. </div>
  191. <div class="kanban-chart-cell">
  192. <s8sheBeiHeChaCol
  193. v-if="showAll || showComponents[8]"
  194. width="100%"
  195. height="100%"
  196. :colorw="colorw"
  197. :direction="direction"
  198. style="box-shadow: none"
  199. :data="gethechaObjNumFB()"
  200. />
  201. </div>
  202. </div>
  203. </div>
  204. <div
  205. v-if="activeKanbanTab === 'qualityCompare'"
  206. class="kanban-tab-panel"
  207. >
  208. <div class="kanban-chart-row kanban-chart-row--pie">
  209. <div class="kanban-chart-cell">
  210. <s9neiBuZhiLiang
  211. v-if="showAll || showComponents[9]"
  212. width="100%"
  213. height="100%"
  214. :colorw="colorw"
  215. style="box-shadow: none"
  216. :data="getS9neiBuZhiLiang()"
  217. />
  218. </div>
  219. <div class="kanban-chart-cell">
  220. <s10waiBuNengLi
  221. v-if="showAll || showComponents[11]"
  222. width="100%"
  223. height="100%"
  224. :colorw="colorw"
  225. style="box-shadow: none"
  226. :data="getnengtliObjNum()"
  227. />
  228. </div>
  229. </div>
  230. <div class="kanban-chart-row kanban-chart-row--bar">
  231. <div class="kanban-chart-cell">
  232. <s9neiBuZhiLiangCol
  233. v-if="showAll || showComponents[10]"
  234. width="100%"
  235. height="100%"
  236. :colorw="colorw"
  237. :direction="direction"
  238. style="box-shadow: none"
  239. :data="getS9neiBuZhiLiangFB()"
  240. />
  241. </div>
  242. <div class="kanban-chart-cell">
  243. <s10waiBuNengLiCol
  244. v-if="showAll || showComponents[12]"
  245. width="100%"
  246. height="100%"
  247. :colorw="colorw"
  248. :direction="direction"
  249. style="box-shadow: none"
  250. :data="getnengtliObjNumFB()"
  251. />
  252. </div>
  253. </div>
  254. </div>
  255. <div v-if="activeKanbanTab === 'emergency'" class="kanban-tab-panel">
  256. <div class="kanban-chart-row kanban-chart-row--pie">
  257. <div class="kanban-chart-cell">
  258. <s15tousu
  259. v-if="showAll || showComponents[13]"
  260. width="100%"
  261. height="100%"
  262. :colorw="colorw"
  263. style="box-shadow: none"
  264. :data="getS3tousu()"
  265. />
  266. </div>
  267. <div class="kanban-chart-cell">
  268. <s12fengXian
  269. v-if="showAll || showComponents[15]"
  270. width="100%"
  271. height="100%"
  272. :colorw="colorw"
  273. style="box-shadow: none"
  274. :data="getS12fengXian()"
  275. />
  276. </div>
  277. </div>
  278. <div class="kanban-chart-row kanban-chart-row--bar">
  279. <div class="kanban-chart-cell">
  280. <s15tousuCol
  281. v-if="showAll || showComponents[14]"
  282. width="100%"
  283. height="100%"
  284. :colorw="colorw"
  285. :direction="direction"
  286. style="box-shadow: none"
  287. :data="getS3tousuFB()"
  288. />
  289. </div>
  290. <div class="kanban-chart-cell">
  291. <s12fengXianCol
  292. v-if="showAll || showComponents[16]"
  293. width="100%"
  294. height="100%"
  295. :colorw="colorw"
  296. :direction="direction"
  297. style="box-shadow: none"
  298. :data="getS12fengXianFB()"
  299. />
  300. </div>
  301. </div>
  302. </div>
  303. <div
  304. v-if="activeKanbanTab === 'internalAudit'"
  305. class="kanban-tab-panel"
  306. >
  307. <div class="kanban-chart-row kanban-chart-row--pie">
  308. <div class="kanban-chart-cell">
  309. <s2manYiDu
  310. v-if="showAll || showComponents[17]"
  311. width="100%"
  312. height="100%"
  313. :colorw="colorw"
  314. style="box-shadow: none"
  315. :data="getS2manYiDu()"
  316. />
  317. </div>
  318. <div class="kanban-chart-cell">
  319. <s2manYiDuCol
  320. v-if="showAll || showComponents[18]"
  321. width="100%"
  322. height="100%"
  323. :colorw="colorw"
  324. :direction="direction"
  325. style="box-shadow: none"
  326. :data="getS2manYiDuFB()"
  327. />
  328. </div>
  329. </div>
  330. <div class="kanban-chart-row kanban-chart-row--bar">
  331. <div class="kanban-chart-cell">
  332. <s14bufuhexiang
  333. v-if="showAll || showComponents[19]"
  334. width="100%"
  335. height="100%"
  336. :colorw="colorw"
  337. :direction="direction"
  338. style="box-shadow: none"
  339. :data="getS14bufuhexiang()"
  340. />
  341. </div>
  342. </div>
  343. </div>
  344. <div
  345. v-if="activeKanbanTab === 'managementReview'"
  346. class="kanban-tab-panel"
  347. >
  348. <div class="kanban-chart-row kanban-chart-row--pie">
  349. <div class="kanban-chart-cell">
  350. <s1zhiLiangMuBiao
  351. v-if="showAll || showComponents[21]"
  352. width="100%"
  353. height="100%"
  354. :colorw="colorw"
  355. style="box-shadow: none"
  356. :data="getS1renwu()"
  357. />
  358. </div>
  359. <div class="kanban-chart-cell">
  360. <s1zhiLiangMuBiaoCol
  361. v-if="showAll || showComponents[22]"
  362. width="100%"
  363. height="100%"
  364. :colorw="colorw"
  365. :direction="direction"
  366. style="box-shadow: none"
  367. :data="getS1renwuFB()"
  368. />
  369. </div>
  370. </div>
  371. <div class="kanban-chart-row kanban-chart-row--bar">
  372. <div class="kanban-chart-cell">
  373. <s16bzJunZhu
  374. v-if="showAll || showComponents[23]"
  375. width="100%"
  376. height="100%"
  377. :colorw="colorw"
  378. :direction="direction"
  379. style="box-shadow: none"
  380. :data="getbzJunZhujNum()"
  381. />
  382. </div>
  383. </div>
  384. </div>
  385. <div class="clear" />
  386. </div>
  387. </div>
  388. </div>
  389. </template>
  390. <script>
  391. // 全屏展示
  392. import screenfull from 'screenfull'
  393. import * as echarts from 'echarts'
  394. // 大屏标题组件
  395. import headerDecoration from './headerDecoration'
  396. import s1zhiLiangMuBiao from './item/s1zhiLiangMuBiao.vue'
  397. import s1zhiLiangMuBiaoCol from './item/s1zhiLiangMuBiaoCol.vue'
  398. import s1zhiLiang1 from './item/s1zhiLiang1.vue'
  399. import s1zhiLiang2 from './item/s1zhiLiang2.vue'
  400. import s1zhiLiang3 from './item/s1zhiLiang3.vue'
  401. import s1jianCe from './item/s1jianCe.vue'
  402. import s2manYiDu from './item/s2manYiDu.vue'
  403. import s2manYiDuCol from './item/s2manYiDuPro.vue'
  404. import s3tousu from './item/s3tousu.vue'
  405. import s4renYuanPeiXun from './item/s4renYuanPeiXun.vue'
  406. import s4renYuanPeiXunCol from './item/s4renYuanPeiXunCol.vue'
  407. import s5renYuanJianDu from './item/s5renYuanJianDu.vue'
  408. import s5renYuanJianDuCol from './item/s5renYuanJianDuCol.vue'
  409. import s6sheBeiWeiHu from './item/s6sheBeiWeiHu.vue'
  410. import s7sheBeiJiaoZhun from './item/s7sheBeiJiaoZhun.vue'
  411. import s7sheBeiJiaoZhunCol from './item/s7sheBeiJiaoZhunCol.vue'
  412. import s8sheBeiHeCha from './item/s8sheBeiHeCha.vue'
  413. import s8sheBeiHeChaCol from './item/s8sheBeiHeChaCol.vue'
  414. import s9neiBuZhiLiang from './item/s9neiBuZhiLiang.vue'
  415. import s9neiBuZhiLiangCol from './item/s9neiBuZhiLiangCol.vue'
  416. import s10waiBuNengLi from './item/s10waiBuNengLi.vue'
  417. import s10waiBuNengLiCol from './item/s10waiBuNengLiCol.vue'
  418. import s11biaoZhunWu from './item/s11biaoZhunWuCol2.vue'
  419. import s11biaoZhunWucol from './item/s11biaoZhunWuCol.vue'
  420. import s12fengXian from './item/s12fengXian.vue'
  421. import s12fengXianCol from './item/s12fengXianCol.vue'
  422. import s13shengWu from './item/s13shengWu.vue'
  423. import s14bufuhexiang from './item/s14bufuhexiangCol.vue'
  424. import s15tousu from './item/s15tousu.vue'
  425. import s15tousuCol from './item/s15tousuCol.vue'
  426. import s16bzJunZhu from './item/s16bzJunZhuCol2.vue'
  427. import s17bzXiBao from './item/s17bzXiBao.vue'
  428. import none from './item/none.vue'
  429. // import * as echarts from 'echarts'
  430. import {
  431. DBData,
  432. getConfig,
  433. getJiaoYanObj,
  434. gethechaObj,
  435. getgangqianpeixunFBObj,
  436. getguanshenObjFB,
  437. getzhiliangmubiaotitleObj,
  438. getneishenObjFB,
  439. getfengxianObjFB,
  440. getyingjiObjFB,
  441. getwaibuObjFB,
  442. getneibuObjFB,
  443. getJiaoYanObjFB,
  444. gethechaObjFB,
  445. getnengliObj,
  446. getkangningyangpinObj,
  447. getzaigangrenyuanFBObj,
  448. getgaijinxiangObj,
  449. getbufuheObj,
  450. getguanshenObj,
  451. getneishenObj,
  452. getfengxianObj,
  453. getyingjiObj,
  454. getneibuObj,
  455. getwaibuObj,
  456. gethechaMGObj,
  457. getJiaoYanMGObj,
  458. getgangqianpeixunObj,
  459. getzaigangrenyuanObj,
  460. getfenzuZLZBObj,
  461. getzongZLMBObj,
  462. getzhiliangzhibiaotitleObj,
  463. getyangPinCaiJiObj,
  464. getbiaozhunTObj,
  465. getbzJunZhuObj,
  466. getbzJunZhuTObj,
  467. getbzXiBaoObj,
  468. getbzXiBaoTObj
  469. } from './js/selectDB.js'
  470. import sendDatas from './sendDatas.js'
  471. import repostCurd from '@/business/platform/form/utils/custom/joinCURD.js'
  472. export default {
  473. components: {
  474. headerDecoration,
  475. none,
  476. s1zhiLiang1,
  477. s1zhiLiang2,
  478. s1zhiLiang3,
  479. s1zhiLiangMuBiao,
  480. s1zhiLiangMuBiaoCol,
  481. s1jianCe,
  482. s2manYiDu,
  483. s2manYiDuCol,
  484. s3tousu,
  485. s4renYuanPeiXun,
  486. s4renYuanPeiXunCol,
  487. s5renYuanJianDu,
  488. s5renYuanJianDuCol,
  489. s6sheBeiWeiHu,
  490. s7sheBeiJiaoZhun,
  491. s7sheBeiJiaoZhunCol,
  492. s8sheBeiHeCha,
  493. s8sheBeiHeChaCol,
  494. s9neiBuZhiLiang,
  495. s9neiBuZhiLiangCol,
  496. s10waiBuNengLi,
  497. s10waiBuNengLiCol,
  498. s11biaoZhunWu,
  499. s12fengXian,
  500. s12fengXianCol,
  501. s13shengWu,
  502. s14bufuhexiang,
  503. s15tousu,
  504. s15tousuCol,
  505. s16bzJunZhu,
  506. s17bzXiBao,
  507. s11biaoZhunWucol
  508. },
  509. mixins: [sendDatas],
  510. props: {
  511. shows: {
  512. // 传入的内容显示序号
  513. type: Array,
  514. default: () => []
  515. },
  516. displayType: {
  517. // 显示类型,默认为横向 ,作为表单统计图的外部引用为 line
  518. type: String,
  519. default: 'row'
  520. }
  521. },
  522. data() {
  523. return {
  524. direction: 'x',
  525. height: window.screen.height - 200 + 'px',
  526. BeginDate: '',
  527. endDate: '',
  528. activeDateRange: 'month',
  529. activeKanbanTab: 'personnel',
  530. jiaoyanObj: [],
  531. jiaoyanMGObj: [],
  532. hechaObj: [],
  533. hechaMGObj: [],
  534. waibuObj: [],
  535. waibuObjfb: [],
  536. neibuObj: [],
  537. neibuObjfb: [],
  538. yingjiObj: [],
  539. yingjifbObj: [],
  540. fengxianObj: [],
  541. fengxianfbObj: [],
  542. neishenObj: [],
  543. neishenfbObj: [],
  544. guanshenObj: [],
  545. guanshenfbObj: [],
  546. bufuheObj: [],
  547. gaijinxiangObj: [],
  548. nengliObj: [],
  549. buhegelvObj: [],
  550. zhiliangzhibiaotitle: [],
  551. biaozhunTObj: [],
  552. bzJunZhuObj: [],
  553. bzJunZhuTObj: [],
  554. bzXiBaoObj: [],
  555. bzXiBaoTObj: [],
  556. fenzuzlmb: [],
  557. zaigangrenyuan: [],
  558. zaigangrenyuanfb: [],
  559. gangqianpeixun: [],
  560. gangqianpeixunfb: [],
  561. relData: {},
  562. relOf: false,
  563. selectEnd: '',
  564. selectBeg: '',
  565. showAll: true,
  566. timer: '',
  567. timer1: '',
  568. showComponents: {}, // 显示全部统计子组件 , 若有新增,往后累计。 供动态表单进行查阅使用。
  569. dataScope: [],
  570. colorw: '#000',
  571. pageOT: 1,
  572. rollup: true,
  573. idsStr: '',
  574. quality: [],
  575. quality1: [],
  576. allEcharts: [],
  577. bumen: '',
  578. zhiliangmuTitle: [],
  579. zhiliangmuNeirong: [],
  580. zhiliangxianzhi: [],
  581. tableNum: [],
  582. pageAll: 0,
  583. fadeinout: true,
  584. allBuMen: [],
  585. bfBuMen: [],
  586. tableData: {
  587. header: [
  588. '<span style="font-size:16px;height:53px">质量指标</span>',
  589. '<span style="font-size:16px;height:53px">百分比/数量</span>'
  590. ],
  591. rowNum: 10,
  592. columnWidth: [600, 400],
  593. align: ['left', 'right'],
  594. data: [
  595. // ['行1列1', '行1列2', '行1列3'],
  596. ]
  597. },
  598. tableData1: {
  599. header: [
  600. '<span style="font-size:16px;height:53px">质量指标</span>',
  601. '<span style="font-size:16px;height:53px">计算公式</span>',
  602. '<span style="font-size:16px;height:53px">指标限值</span>'
  603. ],
  604. rowNum: 5,
  605. columnWidth: [300, 900, 200],
  606. align: ['left', 'left', 'right'],
  607. data: [
  608. // ['行1列1', '行1列2', '行1列3'],
  609. ]
  610. }
  611. }
  612. },
  613. watch: {
  614. activeKanbanTab() {
  615. this.scheduleKanbanChartResize()
  616. },
  617. relOf(val) {
  618. if (val) {
  619. this.scheduleKanbanChartResize()
  620. }
  621. },
  622. zhiliangmuNeirong: {
  623. handler() {
  624. // this.drawLine()
  625. this.pageAll = this.zhiliangmuNeirong.length
  626. },
  627. deep: true
  628. }
  629. },
  630. created() {
  631. // this.currentTime()
  632. // this.getqualityData()
  633. // if (screenfull.isEnabled && !screenfull.isFullscreen) {
  634. // this.allView()
  635. // }
  636. },
  637. provide() {
  638. return { rollcontinue: this.rollcontinue, rollstop: this.rollstop }
  639. },
  640. mounted() {
  641. /* 以shows是否有参数来判断, 是否需要仅显示部分子组件*/
  642. if (this.shows.length > 0) {
  643. this.showAll = false
  644. this.isShowComponents()
  645. }
  646. /* 开始及结束时间的默认设置*/
  647. if (!Array.isArray(this.endDate) || this.endDate.length !== 2) {
  648. this.setDateRange('month')
  649. } else {
  650. this.getqualityData()
  651. }
  652. // 获取统计的配置
  653. // if (this.buhegelvObj.length > 0) {
  654. // this.timer1 = setInterval(() => {
  655. // if (this.pageOT >= this.pageAll) {
  656. // this.pageOT = 1
  657. // } else {
  658. // this.pageOT = this.pageOT + 1
  659. // }
  660. // // console.log(this.pageOT)
  661. // }, 8000)
  662. // }
  663. // this.drawLine()
  664. },
  665. updated() {
  666. // this.drawLine();
  667. this.allEcharts.forEach((i) => {
  668. i.resize()
  669. })
  670. },
  671. beforeDestroy() {
  672. if (screenfull.isFullscreen) {
  673. screenfull.toggle()
  674. }
  675. clearInterval(this.timer)
  676. },
  677. methods: {
  678. scheduleKanbanChartResize() {
  679. this.$nextTick(() => {
  680. requestAnimationFrame(() => {
  681. this.resizeVisibleKanbanCharts()
  682. })
  683. })
  684. },
  685. resizeVisibleKanbanCharts() {
  686. if (!this.$el) return
  687. this.$el
  688. .querySelectorAll('.kanban-tab-panel canvas')
  689. .forEach((canvas) => {
  690. const chartDom = canvas.parentElement
  691. if (!chartDom) return
  692. const chart = echarts.getInstanceByDom(chartDom)
  693. if (chart) chart.resize()
  694. })
  695. },
  696. /* 判断是否统计子组件中传递过来的,是否需要隐藏。若需要则进行隐藏的遍历 */
  697. isShowComponents() {
  698. /* 将参数进行显示 */
  699. for (let i = 0; i < this.shows.length; i++) {
  700. this.showComponents[this.shows[i]] = true
  701. }
  702. },
  703. getqualityData() {
  704. const { deptList } = this.$store.getters || {}
  705. const filterLetter = [
  706. '综合',
  707. '质量',
  708. '科研',
  709. '教学',
  710. '医疗',
  711. '样品',
  712. '助理',
  713. '急诊'
  714. ]
  715. const AllDeptList = deptList.filter((d) => d.depth === 4)
  716. const deptEntity = deptList.filter(
  717. (d) =>
  718. d.depth === 4 && !filterLetter.some((i) => d.positionName.includes(i))
  719. )
  720. this.idsStr = deptEntity.map((i) => i.positionId).join(',')
  721. this.bumen = AllDeptList.map((i) => i.positionId).join(',')
  722. this.allBuMen = AllDeptList.map((i) => ({
  723. NAME_: i.positionName,
  724. numA: 0,
  725. num: 0,
  726. wnum: 0,
  727. chu: 0
  728. }))
  729. this.bfBuMen = deptEntity.map((i) => ({
  730. NAME_: i.positionName,
  731. numA: 0,
  732. num: 0,
  733. wnum: 0,
  734. chu: 0
  735. }))
  736. console.log('aaaa', this.bfBuMen)
  737. this.getConfigData(this.endDate, this.bumen, this.idsStr)
  738. },
  739. getNextMonth(date) {
  740. const arr = date.split('-')
  741. const year = arr[0] // 获取当前日期的年份
  742. const month = arr[1] // 获取当前日期的月份
  743. let year2 = year
  744. let month2 = parseInt(month) + 1
  745. if (month2 == 13) {
  746. year2 = parseInt(year2) + 1
  747. month2 = 1
  748. }
  749. month2 = month2 > 9 ? month2 : '0' + month2
  750. const t2 = year2 + '-' + month2
  751. return t2
  752. },
  753. /* 查询统计配置中的完成率*/
  754. getConfigData(end, allDept, filterDept) {
  755. console.log(end, allDept, filterDept)
  756. const that = this
  757. this.tableData.data = []
  758. this.tableData1.data = []
  759. const queryEnd = [...end]
  760. queryEnd[2] = queryEnd[1]
  761. queryEnd[1] = this.getNextMonth(queryEnd[1])
  762. Promise.all([
  763. repostCurd('query', getConfig()),
  764. repostCurd('query', getyangPinCaiJiObj(queryEnd, filterDept)),
  765. repostCurd('query', getzhiliangzhibiaotitleObj(queryEnd, filterDept)),
  766. repostCurd('query', getzongZLMBObj(queryEnd, filterDept)),
  767. repostCurd('query', getfenzuZLZBObj(queryEnd, filterDept)),
  768. repostCurd('query', getzaigangrenyuanObj(queryEnd, allDept)),
  769. repostCurd('query', getgangqianpeixunObj(queryEnd, allDept)),
  770. repostCurd('query', getJiaoYanObj(queryEnd, allDept)),
  771. repostCurd('query', getJiaoYanObjFB(queryEnd, allDept)),
  772. repostCurd('query', gethechaObj(queryEnd, allDept)),
  773. repostCurd('query', gethechaObjFB(queryEnd, allDept)),
  774. repostCurd('query', getwaibuObj(queryEnd, allDept)),
  775. repostCurd('query', getneibuObj(queryEnd, allDept)),
  776. repostCurd('query', getyingjiObj(queryEnd, allDept)),
  777. repostCurd('query', getfengxianObj(queryEnd, allDept)),
  778. repostCurd('query', getneishenObj(queryEnd, allDept)),
  779. repostCurd('query', getguanshenObj(queryEnd, allDept)),
  780. repostCurd('query', getbufuheObj(queryEnd, allDept)),
  781. repostCurd('query', getgaijinxiangObj(queryEnd, allDept)),
  782. repostCurd('query', getzaigangrenyuanFBObj(queryEnd, allDept)),
  783. repostCurd('query', getgangqianpeixunFBObj(queryEnd, allDept)),
  784. repostCurd('query', getneibuObjFB(queryEnd, allDept)),
  785. repostCurd('query', getwaibuObjFB(queryEnd, allDept)),
  786. repostCurd('query', getyingjiObjFB(queryEnd, allDept)),
  787. repostCurd('query', getfengxianObjFB(queryEnd, allDept)),
  788. repostCurd('query', getneishenObjFB(queryEnd, allDept)),
  789. repostCurd('query', getguanshenObjFB(queryEnd, allDept)),
  790. repostCurd('query', getzhiliangmubiaotitleObj(queryEnd, filterDept))
  791. ]).then(
  792. ([
  793. response,
  794. response1,
  795. response2,
  796. response3,
  797. response4,
  798. response5,
  799. response6,
  800. response7,
  801. response8,
  802. response9,
  803. response10,
  804. response11,
  805. response12,
  806. response13,
  807. response14,
  808. response15,
  809. response16,
  810. response17,
  811. response18,
  812. fb,
  813. fb1,
  814. fb2,
  815. fb3,
  816. fb4,
  817. fb5,
  818. fb6,
  819. fb7,
  820. fb8
  821. ]) => {
  822. that.config = response.variables.data
  823. that.buhegelvObj = response1.variables.data
  824. that.zhiliangzhibiaotitle = response2.variables.data
  825. that.tableNum = response3.variables.data
  826. const arr = this.tableNum
  827. const aa = []
  828. for (let j = 0; j < arr.length; j++) {
  829. const changeArr = [
  830. '<span style="font-size:14px;height:45px;line-height:45px;display:inline-block">' +
  831. arr[j].zhi_liang_zhi_bia +
  832. '</span>',
  833. '<span style="font-size:14px;height:45px;line-height:45px;display:inline-block">' +
  834. arr[j].location.toFixed(2) +
  835. '</span>'
  836. ]
  837. // aa.push(changeArr)
  838. const changeArr1 = [
  839. '<span style="font-size:14px;height:45px;display:inline-block;">' +
  840. arr[j].zhi_liang_zhi_bia +
  841. '</span>',
  842. '<span style="font-size:14px;height:45px;display:inline-block;">' +
  843. arr[j].ji_suan_gong_shi_ +
  844. '</span>',
  845. '<span style="font-size:14px;height:45px;display:inline-block;">' +
  846. arr[j].zhi_biao_xian_zhi +
  847. '</span>'
  848. ]
  849. that.tableData.data.push(changeArr)
  850. that.tableData1.data.push(changeArr1)
  851. }
  852. const qqaa = response4.variables.data
  853. that.fenzuzlmb = this.sortArr(qqaa, 'bzbm')
  854. // console.log(that.fenzuzlmb,'qqaaqqaaqqaa')
  855. that.zaigangrenyuan = response5.variables.data
  856. that.gangqianpeixun = response6.variables.data
  857. that.jiaoyanObj = response7.variables.data
  858. that.jiaoyanMGObj = response8.variables.data
  859. that.hechaObj = response9.variables.data
  860. that.hechaMGObj = response10.variables.data
  861. that.waibuObj = response11.variables.data
  862. that.neibuObj = response12.variables.data
  863. that.yingjiObj = response13.variables.data
  864. that.fengxianObj = response14.variables.data
  865. that.neishenObj = response15.variables.data
  866. that.guanshenObj = response16.variables.data
  867. that.bufuheObj = response17.variables.data
  868. that.gaijinxiangObj = response18.variables.data
  869. that.getzzzbNum()
  870. that.zaigangrenyuanfb = fb.variables.data
  871. that.gangqianpeixunfb = fb1.variables.data
  872. that.neibuObjfb = fb2.variables.data
  873. that.waibuObjfb = fb3.variables.data
  874. that.yingjifbObj = fb4.variables.data
  875. that.fengxianfbObj = fb5.variables.data
  876. that.neishenfbObj = fb6.variables.data
  877. that.guanshenfbObj = fb7.variables.data
  878. that.zhiliangmubiaotitle = fb8.variables.data
  879. that.relOf = true
  880. }
  881. )
  882. },
  883. /* 查询全部*/
  884. selectAll() {
  885. this.relOf = false
  886. this.getqualityData()
  887. },
  888. checkYear(year, data) {
  889. this.selectAll()
  890. },
  891. onDateRangeChange(val) {
  892. if (!val || val.length !== 2) return
  893. this.activeDateRange = ''
  894. this.dataScope = val
  895. this.selectAll()
  896. },
  897. formatMonth(date) {
  898. const year = date.getFullYear()
  899. const month = String(date.getMonth() + 1).padStart(2, '0')
  900. return `${year}-${month}`
  901. },
  902. setDateRange(range) {
  903. const now = new Date()
  904. const end = this.formatMonth(now)
  905. const startDate = new Date()
  906. let start
  907. switch (range) {
  908. case 'week':
  909. startDate.setDate(startDate.getDate() - 7)
  910. start = this.formatMonth(startDate)
  911. break
  912. case 'month':
  913. startDate.setMonth(startDate.getMonth() - 1)
  914. start = this.formatMonth(startDate)
  915. break
  916. case 'year':
  917. start = `${now.getFullYear()}-01`
  918. break
  919. case 'threeYears':
  920. startDate.setFullYear(startDate.getFullYear() - 3)
  921. start = this.formatMonth(startDate)
  922. break
  923. default:
  924. return
  925. }
  926. this.activeDateRange = range
  927. this.endDate = [start, end]
  928. this.dataScope = [start, end]
  929. this.selectAll()
  930. },
  931. /* 获取当前年份*/
  932. getDate(year) {
  933. year = year || 0
  934. const nowDate = new Date()
  935. const date = new Date(new Date().setDate(1) + 31 * 24 * 60 * 60 * 1000)
  936. let month = date.getMonth() + 1
  937. const m1 = nowDate.getMonth() + 1
  938. const month1 = m1 < 10 ? '0' + m1 : nowDate.getMonth() + 1
  939. month = month < 10 ? '0' + month : '' + month
  940. // console.log([nowDate.getFullYear() - year + "-" + month1,date.getFullYear() + "-" + month])
  941. // return [nowDate.getFullYear() - year + "-" + month1,date.getFullYear() + "-" + month];
  942. return [
  943. nowDate.getFullYear() - year + '-01',
  944. nowDate.getFullYear() - year + '-' + month1
  945. ]
  946. },
  947. sortArr(arr, str) {
  948. if (!arr?.length) return [] // 空数组直接返回
  949. // 1. 按属性排序
  950. const sorted = [...arr].sort((a, b) => a[str].localeCompare(b[str]))
  951. // 2. 使用 Map 进行分组(更高效)
  952. const grouped = sorted.reduce((map, item) => {
  953. const key = item[str]
  954. map.has(key) ? map.get(key).push(item) : map.set(key, [item])
  955. return map
  956. }, new Map())
  957. // 3. 转换为目标格式 [{ id_: key, data: [...] }]
  958. return [...grouped].map(([id_, data]) => ({ id_, data }))
  959. },
  960. getzzzbNum() {
  961. // 1. 生成月份数组
  962. const [startDate, endDate] = [this.endDate[0], this.endDate[1]]
  963. const [startYear, startMonth] = startDate.split('-').map(Number)
  964. const [endYear, endMonth] = endDate.split('-').map(Number)
  965. const monthCount =
  966. endYear > startYear
  967. ? (endYear - startYear) * 12 + endMonth - startMonth + 1
  968. : endMonth - startMonth + 1
  969. const dateArray = Array.from({ length: monthCount }, (_, i) => {
  970. const month = startMonth + i
  971. const year = startYear + Math.floor((month - 1) / 12)
  972. const paddedMonth = String(month % 12 || 12).padStart(2, '0')
  973. return `${year}-${paddedMonth}`
  974. })
  975. // 2. 合并 quality 和 fenzuzlmb 数据
  976. const qualityMap = new Map(this.quality.map((item) => [item.id_, item]))
  977. this.fenzuzlmb.forEach((item) => {
  978. if (qualityMap.has(item.id_)) {
  979. qualityMap.get(item.id_).data = item.data || ''
  980. }
  981. })
  982. // 3. 按日期重组数据
  983. const zongfz = [...qualityMap.values()]
  984. .map(({ id_, name_, data = [] }) => {
  985. const zlzbfz = dateArray.map((name_) => ({ name_ }))
  986. data.forEach(({ bzsj, zhi_liang_zhi_bia, location }) => {
  987. const target = zlzbfz.find((item) => item.name_ === bzsj)
  988. if (target) target[zhi_liang_zhi_bia] = location
  989. })
  990. return { id: id_, name: name_, data: zlzbfz }
  991. })
  992. .filter((item) =>
  993. item.data.some((entry) => Object.keys(entry).length > 1)
  994. )
  995. // 4. 提取标题和指标值
  996. const title = [
  997. 'name_',
  998. ...this.zhiliangzhibiaotitle.map((item) => item.zhi_liang_zhi_bia)
  999. ]
  1000. const zbval = this.zhiliangzhibiaotitle.map((item) =>
  1001. parseFloat(item.zhi_biao_xian_zhi.match(/(\d+(\.\d+)?)/)[0])
  1002. )
  1003. // 5. 更新组件数据
  1004. Object.assign(this, {
  1005. zhiliangmuTitle: title,
  1006. zhiliangmuNeirong: zongfz,
  1007. zhiliangxianzhi: zbval,
  1008. pageAll: zongfz.length
  1009. })
  1010. clearInterval(this.timer1)
  1011. },
  1012. goBack() {
  1013. this.$router.back(-1)
  1014. this.fadeinout = true
  1015. clearInterval(this.timer1)
  1016. },
  1017. rollcontinue() {
  1018. this.fadeinout = false
  1019. this.timer1 = setInterval(() => {
  1020. if (this.pageOT >= Math.ceil(this.pageAll / 2) + 7) {
  1021. this.pageOT = 1
  1022. } else {
  1023. this.pageOT = this.pageOT + 1
  1024. }
  1025. }, 4000)
  1026. this.rollup = true
  1027. },
  1028. rollstop() {
  1029. this.fadeinout = true
  1030. clearInterval(this.timer1)
  1031. // console.log('dfhjsdifjsojfjiofjoijdiffffjidffffff')
  1032. this.rollup = false
  1033. }
  1034. }
  1035. }
  1036. </script>
  1037. <style lang="scss" scoped>
  1038. .statistics {
  1039. height: 100%;
  1040. display: flex;
  1041. flex-direction: column;
  1042. overflow: hidden;
  1043. color: #fff;
  1044. .editDate {
  1045. flex-shrink: 0;
  1046. min-height: 40px;
  1047. overflow: visible;
  1048. background-color: rgb(249, 255, 255);
  1049. position: relative;
  1050. }
  1051. .kanban-tab-bar {
  1052. width: 100%;
  1053. flex-shrink: 0;
  1054. padding: 0 1%;
  1055. ::v-deep .el-tabs__header {
  1056. margin-bottom: 0;
  1057. }
  1058. ::v-deep .el-tabs__item {
  1059. color: #606266;
  1060. height: 36px;
  1061. line-height: 36px;
  1062. font-size: 13px;
  1063. }
  1064. ::v-deep .el-tabs__item.is-active {
  1065. color: rgb(0, 191, 191);
  1066. }
  1067. ::v-deep .el-tabs__active-bar {
  1068. background-color: rgb(0, 191, 191);
  1069. }
  1070. ::v-deep .el-tabs__nav-wrap::after {
  1071. background-color: #e4e7ed;
  1072. }
  1073. }
  1074. .w2222 {
  1075. flex: 1;
  1076. min-height: 0;
  1077. overflow-x: hidden;
  1078. overflow-y: auto;
  1079. }
  1080. .date-filter-bar {
  1081. width: 100%;
  1082. min-height: 40px;
  1083. text-align: center;
  1084. margin: 8px 0 8px 1%;
  1085. font-size: 100%;
  1086. color: #fff !important;
  1087. align-items: center;
  1088. display: flex;
  1089. flex-shrink: 0;
  1090. gap: 12px;
  1091. $filter-control-height: 32px;
  1092. $filter-border: 1px solid #dcdfe6;
  1093. ::v-deep .date-range-btns {
  1094. display: inline-flex;
  1095. align-items: stretch;
  1096. .el-button {
  1097. box-sizing: border-box;
  1098. height: $filter-control-height;
  1099. min-height: $filter-control-height;
  1100. padding: 0 12px;
  1101. line-height: calc(#{$filter-control-height} - 2px);
  1102. border: $filter-border;
  1103. }
  1104. .el-button--primary {
  1105. border-color: rgb(0, 191, 191);
  1106. }
  1107. }
  1108. ::v-deep .date-range-picker.el-date-editor.el-range-editor {
  1109. box-sizing: border-box;
  1110. height: $filter-control-height !important;
  1111. min-height: $filter-control-height;
  1112. line-height: calc(#{$filter-control-height} - 2px);
  1113. border: $filter-border;
  1114. border-radius: 4px;
  1115. padding: 0 10px;
  1116. display: inline-flex;
  1117. align-items: center;
  1118. vertical-align: middle;
  1119. background-color: rgba(0, 0, 0, 0);
  1120. .el-range-input {
  1121. height: auto;
  1122. line-height: 1;
  1123. margin: 0;
  1124. color: #000;
  1125. background-color: transparent;
  1126. }
  1127. .el-range-separator {
  1128. height: auto;
  1129. line-height: 1;
  1130. color: #000;
  1131. }
  1132. .el-range__icon,
  1133. .el-range__close-icon {
  1134. height: auto;
  1135. line-height: 1;
  1136. margin-top: 0;
  1137. }
  1138. }
  1139. }
  1140. .block {
  1141. float: left;
  1142. font-size: 14px;
  1143. }
  1144. }
  1145. #dv-full-screen-container {
  1146. // background-image: url('./img/stars.png');
  1147. background-size: 100% 100%;
  1148. box-shadow: 0 0 3px blue;
  1149. display: flex;
  1150. flex-direction: column;
  1151. // background-color: #f9ffff;
  1152. display: flex;
  1153. flex-direction: column;
  1154. align-items: stretch;
  1155. // .headerContent{
  1156. // flex: 1;
  1157. // }
  1158. }
  1159. .el-scrollbar__wrap {
  1160. overflow-x: hidden;
  1161. }
  1162. .goBackButton {
  1163. width: 2%;
  1164. position: absolute;
  1165. right: 0;
  1166. }
  1167. .shiyankanbanfanhui {
  1168. border: none;
  1169. .border-box-content {
  1170. display: flex;
  1171. align-items: center;
  1172. justify-content: center;
  1173. }
  1174. }
  1175. .stitle {
  1176. text-align: center;
  1177. font-size: 150%;
  1178. // font-family: PingFangSC-Semibold, sans-serif;
  1179. font-weight: 600;
  1180. margin: 0;
  1181. }
  1182. .ttitle {
  1183. font-size: 120%;
  1184. font-weight: 600;
  1185. height: 2%;
  1186. margin: 1% 0;
  1187. }
  1188. .screen {
  1189. height: 100%;
  1190. display: flex;
  1191. flex-direction: column;
  1192. overflow: hidden;
  1193. margin: 0 0.5%;
  1194. }
  1195. .clear {
  1196. clear: both;
  1197. }
  1198. .congxiebox7 {
  1199. background-color: rgba(6, 30, 93, 0.5);
  1200. box-shadow: rgb(128 128 128 / 30%) 0px 0px 40px inset;
  1201. border: 1px solid rgba(128, 128, 128, 0.3);
  1202. margin: 1% 0 0 0;
  1203. font-size: 12px;
  1204. }
  1205. .gongshiAll {
  1206. display: flex;
  1207. align-items: center;
  1208. justify-content: center;
  1209. // width: 20%;
  1210. .touwidth {
  1211. width: 30%;
  1212. text-align: right;
  1213. }
  1214. .gongshiXian {
  1215. border-bottom: #fff solid 2px;
  1216. padding-bottom: 6%;
  1217. text-align: center;
  1218. font-size: 12px;
  1219. }
  1220. }
  1221. .mubiaozhi {
  1222. text-align: center;
  1223. margin-top: 3%;
  1224. }
  1225. .nullDate {
  1226. height: 100%;
  1227. text-align: center;
  1228. line-height: 100%;
  1229. font-size: 6vh;
  1230. display: flex;
  1231. align-items: center;
  1232. justify-content: center;
  1233. }
  1234. .componentsData {
  1235. height: 92%;
  1236. }
  1237. .nullDate1 {
  1238. height: 50%;
  1239. width: 25%;
  1240. display: inline-block;
  1241. text-align: center;
  1242. line-height: 50%;
  1243. font-size: 2vh;
  1244. display: flex;
  1245. align-items: center;
  1246. justify-content: center;
  1247. }
  1248. .kanban-tab-panel {
  1249. width: 100%;
  1250. padding: 8px 0;
  1251. }
  1252. .kanban-chart-row {
  1253. display: flex;
  1254. width: 100%;
  1255. gap: 12px;
  1256. &--pie {
  1257. height: 320px;
  1258. }
  1259. &--bar {
  1260. height: 400px;
  1261. margin-top: 12px;
  1262. }
  1263. }
  1264. .kanban-chart-cell {
  1265. flex: 1;
  1266. min-width: 0;
  1267. height: 100%;
  1268. box-sizing: border-box;
  1269. ::v-deep .statisticsPage {
  1270. width: 100% !important;
  1271. height: 100%;
  1272. float: none;
  1273. box-shadow: none;
  1274. > div:hover {
  1275. transform: none !important;
  1276. transition: none !important;
  1277. }
  1278. }
  1279. }
  1280. </style>
  1281. <style lang="scss">
  1282. .el-year-table .today .cell {
  1283. color: #606266 !important;
  1284. font-weight: 100 !important;
  1285. }
  1286. </style>
  1287. <style lang="scss" scoped>
  1288. .statistics ::v-deep .date-filter-bar .el-input__inner {
  1289. background-color: rgba(0, 0, 0, 0);
  1290. color: #000;
  1291. }
  1292. .date-range-btns {
  1293. margin-right: 0;
  1294. ::v-deep .el-button {
  1295. background-color: rgba(0, 0, 0, 0);
  1296. color: #000;
  1297. border-color: #dcdfe6;
  1298. }
  1299. ::v-deep .el-button--primary {
  1300. background-color: rgb(0, 191, 191);
  1301. border-color: rgb(0, 191, 191);
  1302. color: #fff;
  1303. }
  1304. }
  1305. .fade-in {
  1306. animation: fadeIn 1s linear forwards;
  1307. }
  1308. @keyframes fadeIn {
  1309. from {
  1310. opacity: 0;
  1311. }
  1312. to {
  1313. opacity: 1;
  1314. }
  1315. }
  1316. .fade-out {
  1317. animation: fadeOut 1s linear forwards;
  1318. }
  1319. @keyframes fadeOut {
  1320. from {
  1321. opacity: 1;
  1322. }
  1323. to {
  1324. opacity: 0;
  1325. }
  1326. }
  1327. </style>