admin.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944
  1. <template>
  2. <div class="mod-home" id="content">
  3. <el-button @click="fullScreen" class="full-screen-btn">全屏</el-button>
  4. <el-row :span="24" class="sample-bg">
  5. <el-col :span="6" class="bg1-1">
  6. <el-row :span="24" class="bg1-1-1">
  7. <div class="box-company-title">
  8. <div class="company-title">{{ systemName }}</div>
  9. </div>
  10. </el-row>
  11. <el-row :span="24" class="bg1-1-2">
  12. <div class="box-custom-number">
  13. <div class="custom-number">客户数:{{ analytics.clients }}</div>
  14. </div>
  15. </el-row>
  16. <el-row :span="24" class="bg1-1-1">
  17. <div class="box-contract-number">
  18. <div class="contract-number">合同数:{{ analytics.num }}</div>
  19. </div>
  20. </el-row>
  21. <el-row :span="24" class="bg1-1-2">
  22. <div class="box-contract-amount">
  23. <div class="contract-amount">
  24. 合同总金额:{{ analytics.totalAmount }}
  25. </div>
  26. </div>
  27. </el-row>
  28. </el-col>
  29. <el-col :span="12" class="bg1-2">
  30. <el-row :span="24" class="bg1-2-1">
  31. <div ref="boxnoticetitle" class="box-notice-title" @dblclick="doubleClick">
  32. <div ref="noticetitle" :class="isTran ? 'notice-title notice-title-animation' : 'notice-title'">{{
  33. noticeContent }}</div>
  34. </div>
  35. </el-row>
  36. <el-row :span="24" class="bg1-2-2">
  37. <div class="box-stat-number">
  38. <div class="stat-number">
  39. <div class="item">
  40. <div class="title">在制物料总数</div>
  41. <div class="number">{{ produceCensus.produceNum }}</div>
  42. </div>
  43. <div class="item">
  44. <div class="title">已完成数量</div>
  45. <div class="number">{{ produceCensus.completeNum }}</div>
  46. </div>
  47. <div class="item">
  48. <div class="title">损坏数量</div>
  49. <div class="number">{{ produceCensus.damageNum }}</div>
  50. </div>
  51. <div class="item">
  52. <div class="title">生产总值</div>
  53. <div class="number">{{ produceCensus.totalOutputValue }}</div>
  54. </div>
  55. </div>
  56. </div>
  57. </el-row>
  58. <el-row :span="24" class="bg1-2-3">
  59. <div class="box-contract-table">
  60. <div class="contract-table table">
  61. <el-table ref="contractProdTable" :data="contractProdList" height="100%"
  62. :row-class-name="contractProdListAddClass" style="width: 100%">
  63. <el-table-column type="index" label="序号"></el-table-column>
  64. <el-table-column prop="orderCode" label="合同号"></el-table-column>
  65. <el-table-column prop="productName" label="物料名称"></el-table-column>
  66. <el-table-column prop="prodCode" label="物料编号"></el-table-column>
  67. <el-table-column prop="batchNo" label="批次号"></el-table-column>
  68. <el-table-column label="生产进度" width="180">
  69. <template slot-scope="scope">
  70. <el-progress :percentage="parseInt(scope.row.progressBar)"></el-progress>
  71. </template>
  72. </el-table-column>
  73. <el-table-column prop="customerName" label="客户名称"></el-table-column>
  74. <el-table-column prop="curOperator" label="当前操作人"></el-table-column>
  75. </el-table>
  76. </div>
  77. </div>
  78. </el-row>
  79. </el-col>
  80. <el-col :span="6" class="bg1-3">
  81. <el-row :span="24" class="bg1-3-1">
  82. <div class="box-custom-ranking">
  83. <div class="custom-ranking">客户排名</div>
  84. </div>
  85. </el-row>
  86. <el-row :span="24" class="bg1-3-2">
  87. <div class="box-custom-ranking">
  88. <div class="custom-ranking">
  89. <div class="table">
  90. <el-table ref="customerRankTable" :data="customerRankList" height="100%"
  91. row-class-name="custom-ranking-table-row" style="width: 100%">
  92. <el-table-column prop="customerName" label="客户名称"></el-table-column>
  93. <el-table-column label="合同金额占比">
  94. <template slot-scope="scope">
  95. <el-progress :text-inside="true" :stroke-width="16" :percentage="scope.row.percentage * 100"
  96. status="success"></el-progress>
  97. </template>
  98. </el-table-column>
  99. </el-table>
  100. </div>
  101. </div>
  102. </div>
  103. </el-row>
  104. </el-col>
  105. </el-row>
  106. <el-row :span="24" class="sample-bg1">
  107. <el-col :span="6" class="bg2-1">
  108. <el-row :span="24" class="bg2-3-1">
  109. <div class="box-contract-alert">
  110. <div class="contract-alert">合同预警</div>
  111. </div>
  112. </el-row>
  113. <el-row :span="24" class="bg2-3-2">
  114. <div class="box-contract-alert">
  115. <div class="contract-alert">
  116. <div class="table">
  117. <el-table ref="contractAlarmTable" :data="contractAlarmList" height="100%"
  118. row-class-name="custom-ranking-table-row" style="width: 100%">
  119. <el-table-column type="index" label="序号"></el-table-column>
  120. <el-table-column prop="contractNumber" label="合同号"></el-table-column>
  121. <!-- <el-table-column prop="orderCode" label="任务单号"></el-table-column> -->
  122. <el-table-column prop="remainTime" label="剩余时间(天)" width="100"></el-table-column>
  123. <el-table-column prop="deliveryTime" label="交付日期"></el-table-column>
  124. <el-table-column prop="customerName" label="客户名称"></el-table-column>
  125. <!-- <el-table-column prop="salesmenName" label="业务员"></el-table-column> -->
  126. </el-table>
  127. </div>
  128. </div>
  129. </div>
  130. </el-row>
  131. </el-col>
  132. <el-col :span="6" class="bg2-2">
  133. <el-row :span="24" class="bg2-3-1">
  134. <div class="box-contract-alert">
  135. <div class="contract-alert">报损记录</div>
  136. </div>
  137. </el-row>
  138. <el-row :span="24" class="bg2-3-2">
  139. <div class="box-contract-alert">
  140. <div class="contract-alert">
  141. <div class="table">
  142. <el-table ref="damageTable" :data="damageList" height="100%" row-class-name="custom-ranking-table-row"
  143. style="width: 100%">
  144. <el-table-column type="index" label="序号"></el-table-column>
  145. <el-table-column prop="productName" label="物料"></el-table-column>
  146. <el-table-column prop="prodCode" label="编号"></el-table-column>
  147. <!-- <el-table-column prop="damageReason" label="原因"></el-table-column> -->
  148. <el-table-column prop="liableUserName" label="报损人" width="80"></el-table-column>
  149. <el-table-column prop="createTime" label="报损时间"></el-table-column>
  150. </el-table>
  151. </div>
  152. </div>
  153. </div>
  154. </el-row>
  155. </el-col>
  156. <el-col :span="6" class="bg2-1">
  157. <el-row :span="24" class="bg2-3-1">
  158. <div class="box-contract-alert">
  159. <div class="contract-alert">报工</div>
  160. </div>
  161. </el-row>
  162. <el-row :span="24" class="bg2-3-2">
  163. <div class="box-contract-alert">
  164. <div class="contract-alert">
  165. <div class="table">
  166. <el-table ref="submittedRecordTable" :data="submittedRecordList" height="100%"
  167. row-class-name="custom-ranking-table-row" style="width: 100%">
  168. <el-table-column type="index" label="序号"></el-table-column>
  169. <el-table-column prop="nodeName" label="工序" width="70"></el-table-column>
  170. <el-table-column prop="taskName" label="物料名字"></el-table-column>
  171. <el-table-column prop="endTime" label="完成时间"></el-table-column>
  172. <el-table-column prop="operatorName" label="操作人名字"></el-table-column>
  173. </el-table>
  174. </div>
  175. </div>
  176. </div>
  177. </el-row>
  178. </el-col>
  179. <el-col :span="6" class="bg2-2">
  180. <el-row :span="24" class="bg2-3-1">
  181. <div class="box-contract-alert">
  182. <div class="contract-alert">出库记录</div>
  183. </div>
  184. </el-row>
  185. <el-row :span="24" class="bg2-3-2">
  186. <div class="box-contract-alert">
  187. <div class="contract-alert">
  188. <div class="table">
  189. <el-table ref="outboundRecordTable" :data="outboundRecordList" height="100%"
  190. row-class-name="custom-ranking-table-row" style="width: 100%">
  191. <el-table-column type="index" label="序号"></el-table-column>
  192. <el-table-column prop="materialName" label="物品"></el-table-column>
  193. <el-table-column prop="cnt" label="数量" width="50"></el-table-column>
  194. <el-table-column prop="createTime" label="时间"></el-table-column>
  195. <el-table-column prop="applicant" label="申请人"></el-table-column>
  196. </el-table>
  197. </div>
  198. </div>
  199. </div>
  200. </el-row>
  201. </el-col>
  202. </el-row>
  203. <el-dialog title="设置通知内容" :visible.sync="dialogFormVisible">
  204. <el-form :model="noticeForm">
  205. <el-form-item label="通知内容">
  206. <el-input v-model="noticeForm.content" autocomplete="off"></el-input>
  207. </el-form-item>
  208. </el-form>
  209. <div slot="footer">
  210. <el-button @click="dialogFormVisible = false">取 消</el-button>
  211. <el-button type="primary" @click="dialogSubmit">确 定</el-button>
  212. </div>
  213. </el-dialog>
  214. </div>
  215. </template>
  216. <script>
  217. import {
  218. getAnalytics,
  219. getContractAlarmList,
  220. getCustomerRankList,
  221. getDamageList,
  222. getOutboundRecordList,
  223. getContractProdList,
  224. getSubmittedRecordList,
  225. getProduceCensus
  226. } from '@/api/home'
  227. export default {
  228. computed: {
  229. systemName() {
  230. return (window.SITE_CONFIG && window.SITE_CONFIG.systemName) || '木之云数字化平台';
  231. }
  232. },
  233. name: 'admin',
  234. components: {},
  235. data() {
  236. return {
  237. analytics: {
  238. clients: '', // 客户数
  239. num: '', // 合同数
  240. totalAmount: '' // 合同总金额
  241. },
  242. analyticsTimer: null,
  243. // 合同预警列表
  244. contractAlarmList: [],
  245. contractAlarmListTimer: null,
  246. // 客户排名列表
  247. customerRankList: [],
  248. customerRankListTimer: null,
  249. // 报损记录列表
  250. damageList: [],
  251. damageListTimer: null,
  252. // 出库记录列表
  253. outboundRecordList: [],
  254. outboundRecordListTimer: null,
  255. // 合同生产记录列表
  256. contractProdList: [],
  257. contractProdListTimer: null,
  258. // 报工列表
  259. submittedRecordList: [],
  260. submittedRecordListTimer: null,
  261. // 生产统计
  262. produceCensus: {
  263. produceNum: 0, // 在制物料总数
  264. completeNum: 0, // 已完成数量
  265. damageNum: 0, // 损坏数量
  266. totalOutputValue: 0 // 生产总值
  267. },
  268. produceCensusTimer: null,
  269. dialogFormVisible: false,
  270. noticeForm: {
  271. content: ''
  272. },
  273. noticeContent: '',
  274. isTran: false
  275. }
  276. },
  277. created() {
  278. this.getAnalytics()
  279. this.analyticsTimer = setInterval(this.getAnalytics, 1000 * 3600) // 1小时刷新
  280. this.getContractAlarmList()
  281. this.contractAlarmListTimer = setInterval(
  282. this.getContractAlarmList,
  283. 1000 * 60 * 10
  284. ) // 10分钟刷新
  285. this.getCustomerRankList()
  286. this.damageListTimer = setInterval(
  287. this.getCustomerRankList,
  288. 1000 * 60 * 10
  289. ) // 10分钟刷新
  290. this.getDamageList()
  291. this.customerRankListTimer = setInterval(
  292. this.getDamageList,
  293. 1000 * 60 * 10
  294. ) // 10分钟刷新
  295. this.getOutboundRecordList()
  296. this.outboundRecordListTimer = setInterval(
  297. this.getOutboundRecordList,
  298. 1000 * 60 * 5
  299. ) // 5分钟刷新
  300. this.getContractProdList()
  301. this.contractProdListTimer = setInterval(
  302. this.getContractProdList,
  303. 1000 * 60 * 10
  304. ) // 10分钟刷新
  305. this.getSubmittedRecordList()
  306. this.submittedRecordListTimer = setInterval(
  307. this.getSubmittedRecordList,
  308. 1000 * 60 * 5
  309. ) // 5分钟刷新
  310. this.getProduceCensus()
  311. this.produceCensusTimer = setInterval(this.getProduceCensus, 1000 * 60 * 5) // 5分钟刷新
  312. this.getNoticeContent()
  313. this.setTitleScroll()
  314. },
  315. mounted() {
  316. this.contractProdTableScroll()
  317. this.customerRankTableScroll()
  318. this.contractAlarmTableScroll()
  319. this.outboundRecordTableScroll()
  320. this.submittedRecordTableScroll()
  321. this.damageTableScroll()
  322. },
  323. beforeDestroy() {
  324. clearInterval(this.analyticsTimer)
  325. clearInterval(this.contractAlarmListTimer)
  326. clearInterval(this.damageListTimer)
  327. clearInterval(this.customerRankListTimer)
  328. clearInterval(this.outboundRecordListTimer)
  329. clearInterval(this.contractProdListTimer)
  330. clearInterval(this.submittedRecordListTimer)
  331. clearInterval(this.produceCensusTimer)
  332. },
  333. methods: {
  334. setTitleScroll() {
  335. this.$nextTick(() => {
  336. let boxWidth = this.$refs.boxnoticetitle.offsetWidth
  337. let contentWidth = this.$refs.noticetitle.offsetWidth
  338. if (contentWidth > boxWidth) {
  339. // 设置水平滚动效果
  340. this.isTran = true
  341. }
  342. })
  343. },
  344. getNoticeContent() {
  345. let content = sessionStorage.getItem('noticeContent')
  346. if (content == null || content === '') {
  347. content = '双击此处修改通知内容'
  348. }
  349. this.noticeContent = content
  350. },
  351. doubleClick() {
  352. this.dialogFormVisible = true
  353. },
  354. dialogSubmit() {
  355. this.noticeContent = this.noticeForm.content
  356. this.dialogFormVisible = false
  357. sessionStorage.setItem('noticeContent', this.noticeContent)
  358. this.setTitleScroll()
  359. },
  360. // 合同统计
  361. getAnalytics() {
  362. getAnalytics({}).then(({ data }) => {
  363. if (data && data.code === '200') {
  364. this.analytics = { ...data.data }
  365. }
  366. })
  367. },
  368. // 合同预警列表
  369. getContractAlarmList() {
  370. let params = {
  371. current: 1,
  372. size: 20
  373. }
  374. getContractAlarmList(params).then(({ data }) => {
  375. if (data && data.code === '200') {
  376. this.contractAlarmList = data.data.records
  377. }
  378. })
  379. },
  380. // 客户排名列表
  381. getCustomerRankList() {
  382. let params = {
  383. current: 1,
  384. size: 20
  385. }
  386. getCustomerRankList(params).then(({ data }) => {
  387. if (data && data.code === '200') {
  388. this.customerRankList = data.data
  389. }
  390. })
  391. },
  392. // 报损记录列表
  393. getDamageList() {
  394. let params = {
  395. current: 1,
  396. size: 20
  397. }
  398. getDamageList(params).then(({ data }) => {
  399. if (data && data.code === '200') {
  400. this.damageList = data.data.records
  401. }
  402. })
  403. },
  404. // 出库记录列表
  405. getOutboundRecordList() {
  406. let params = {
  407. current: 1,
  408. size: 20
  409. }
  410. getOutboundRecordList(params).then(({ data }) => {
  411. if (data && data.code === '200') {
  412. this.outboundRecordList = data.data.records
  413. }
  414. })
  415. },
  416. // 合同生产记录列表
  417. getContractProdList() {
  418. let params = {
  419. current: 1,
  420. size: 20
  421. }
  422. getContractProdList(params).then(({ data }) => {
  423. if (data && data.code === '200') {
  424. this.contractProdList = data.data.records
  425. }
  426. })
  427. },
  428. contractProdListAddClass({ row, rowIndex }) {
  429. if (row.warningState === '3') {
  430. return 'custom-ranking-table-row overdue-row'
  431. }
  432. if (row.warningState === '2') {
  433. return 'custom-ranking-table-row warning-row'
  434. }
  435. return 'custom-ranking-table-row'
  436. },
  437. // 报工列表
  438. getSubmittedRecordList() {
  439. let params = {
  440. current: 1,
  441. size: 20
  442. }
  443. getSubmittedRecordList(params).then(({ data }) => {
  444. if (data && data.code === '200') {
  445. this.submittedRecordList = data.data.records
  446. }
  447. })
  448. },
  449. // 生产统计
  450. getProduceCensus() {
  451. getProduceCensus({}).then(({ data }) => {
  452. if (data && data.code === '200') {
  453. this.produceCensus = data.data
  454. }
  455. })
  456. },
  457. contractProdTableScroll() {
  458. this.$nextTick(() => {
  459. const divData = this.$refs.contractProdTable.bodyWrapper
  460. setInterval(() => {
  461. divData.scrollTop += 1
  462. if (
  463. divData.clientHeight + divData.scrollTop + 1 >
  464. divData.scrollHeight
  465. ) {
  466. divData.scrollTop = 0
  467. }
  468. }, 50)
  469. })
  470. },
  471. customerRankTableScroll() {
  472. this.$nextTick(() => {
  473. const divData = this.$refs.customerRankTable.bodyWrapper
  474. setInterval(() => {
  475. divData.scrollTop += 1
  476. if (
  477. divData.clientHeight + divData.scrollTop + 1 >
  478. divData.scrollHeight
  479. ) {
  480. divData.scrollTop = 0
  481. }
  482. }, 50)
  483. })
  484. },
  485. contractAlarmTableScroll() {
  486. this.$nextTick(() => {
  487. const divData = this.$refs.contractAlarmTable.bodyWrapper
  488. setInterval(() => {
  489. divData.scrollTop += 1
  490. if (
  491. divData.clientHeight + divData.scrollTop + 1 >
  492. divData.scrollHeight
  493. ) {
  494. divData.scrollTop = 0
  495. }
  496. }, 50)
  497. })
  498. },
  499. outboundRecordTableScroll() {
  500. this.$nextTick(() => {
  501. const divData = this.$refs.outboundRecordTable.bodyWrapper
  502. setInterval(() => {
  503. divData.scrollTop += 1
  504. if (
  505. divData.clientHeight + divData.scrollTop + 1 >
  506. divData.scrollHeight
  507. ) {
  508. divData.scrollTop = 0
  509. }
  510. }, 50)
  511. })
  512. },
  513. submittedRecordTableScroll() {
  514. this.$nextTick(() => {
  515. const divData = this.$refs.submittedRecordTable.bodyWrapper
  516. setInterval(() => {
  517. divData.scrollTop += 1
  518. if (
  519. divData.clientHeight + divData.scrollTop + 1 >
  520. divData.scrollHeight
  521. ) {
  522. divData.scrollTop = 0
  523. }
  524. }, 50)
  525. })
  526. },
  527. damageTableScroll() {
  528. this.$nextTick(() => {
  529. const divData = this.$refs.damageTable.bodyWrapper
  530. setInterval(() => {
  531. divData.scrollTop += 1
  532. if (
  533. divData.clientHeight + divData.scrollTop + 1 >
  534. divData.scrollHeight
  535. ) {
  536. divData.scrollTop = 0
  537. }
  538. }, 50)
  539. })
  540. },
  541. // 全屏显示
  542. fullScreen() {
  543. const element = document.getElementById('content')
  544. element.requestFullscreen()
  545. }
  546. }
  547. }
  548. </script>
  549. <style>
  550. html,
  551. body,
  552. .site-wrapper,
  553. .site-content__wrapper,
  554. .site-content,
  555. .el-tabs--top,
  556. .el-tabs__content,
  557. .el-tab-pane,
  558. .el-card,
  559. .el-card__body {
  560. height: 100%;
  561. }
  562. .custom-ranking-table-row {
  563. font-size: 8px;
  564. }
  565. .el-table .warning-row {
  566. color: #FFD700;
  567. }
  568. .el-table .overdue-row {
  569. color: #FF0000;
  570. }
  571. </style>
  572. <style scoped>
  573. .mod-home {
  574. /* line-height: 1.5; */
  575. height: 100%;
  576. position: relative;
  577. }
  578. .full-screen-btn {
  579. position: absolute;
  580. top: 0;
  581. right: 0;
  582. z-index: 9;
  583. padding: 0 0;
  584. border-radius: 0;
  585. }
  586. .sample-bg {
  587. background-color: #021327;
  588. height: 60%;
  589. }
  590. .sample-bg1 {
  591. background-color: #021327;
  592. height: 40%;
  593. }
  594. .bg1-1 {
  595. /* background-color: yellow; */
  596. height: 100%;
  597. }
  598. .bg1-2 {
  599. /* background-color: orange; */
  600. height: 100%;
  601. }
  602. .bg1-3 {
  603. /* background-color: orchid; */
  604. height: 100%;
  605. }
  606. .bg2-1 {
  607. /* background-color: red; */
  608. height: 100%;
  609. }
  610. .bg2-2 {
  611. /* background-color: aqua; */
  612. height: 100%;
  613. }
  614. .bg1-1-1 {
  615. height: 25%;
  616. padding: 10px 10px;
  617. /* border: 1px solid black; */
  618. }
  619. .bg1-1-2 {
  620. height: 25%;
  621. padding: 10px;
  622. /* border: 1px solid black; */
  623. }
  624. .box-company-title {
  625. background-color: #094198;
  626. display: flex;
  627. height: 100%;
  628. }
  629. .company-title {
  630. font-size: 20px;
  631. color: aliceblue;
  632. margin: 0 auto;
  633. align-items: center;
  634. display: flex;
  635. }
  636. .box-custom-number {
  637. background-color: #d65246;
  638. display: flex;
  639. height: 100%;
  640. }
  641. .custom-number {
  642. font-size: 20px;
  643. color: aliceblue;
  644. margin: 0 auto;
  645. align-items: center;
  646. display: flex;
  647. }
  648. .box-contract-number {
  649. background-color: #11d2b7;
  650. display: flex;
  651. height: 100%;
  652. }
  653. .contract-number {
  654. font-size: 20px;
  655. color: aliceblue;
  656. margin: 0 auto;
  657. align-items: center;
  658. display: flex;
  659. }
  660. .box-contract-amount {
  661. background-color: #f6a647;
  662. display: flex;
  663. height: 100%;
  664. }
  665. .contract-amount {
  666. font-size: 20px;
  667. color: aliceblue;
  668. margin: 0 auto;
  669. align-items: center;
  670. display: flex;
  671. }
  672. /*中间通知区域*/
  673. .bg1-2-1 {
  674. height: 15%;
  675. padding: 10px;
  676. /* border: 1px solid black; */
  677. }
  678. .bg1-2-2 {
  679. height: 25%;
  680. padding: 10px;
  681. /* border: 1px solid black; */
  682. }
  683. .bg1-2-3 {
  684. height: 60%;
  685. padding: 10px;
  686. /* border: 1px solid black; */
  687. }
  688. .box-notice-title {
  689. background-color: #2fb5f2;
  690. display: flex;
  691. height: 100%;
  692. width: 100%;
  693. margin: 0 auto;
  694. overflow: hidden;
  695. }
  696. .notice-title {
  697. font-size: 20px;
  698. color: red;
  699. margin: 0 auto;
  700. align-items: center;
  701. display: flex;
  702. white-space: nowrap;
  703. }
  704. .notice-title-animation {
  705. animation: wordsLoop 25s linear infinite normal;
  706. }
  707. @keyframes wordsLoop {
  708. 0% {
  709. transform: translateX(0);
  710. -webkit-transform: translateX(0);
  711. }
  712. 100% {
  713. transform: translateX(-51%);
  714. -webkit-transform: translateX(-51%);
  715. }
  716. }
  717. @-webkit-keyframes wordsLoop {
  718. 0% {
  719. transform: translateX(0);
  720. -webkit-transform: translateX(0);
  721. }
  722. 100% {
  723. transform: translateX(-51%);
  724. -webkit-transform: translateX(-51%);
  725. }
  726. }
  727. .box-stat-number {
  728. background-color: #415065;
  729. display: flex;
  730. height: 100%;
  731. }
  732. .stat-number {
  733. font-size: 20px;
  734. color: aliceblue;
  735. margin: 0 auto;
  736. align-items: center;
  737. display: flex;
  738. justify-content: space-around;
  739. width: 100%;
  740. }
  741. .stat-number>.item {
  742. height: 80%;
  743. display: flex;
  744. flex-direction: column;
  745. justify-content: space-around;
  746. }
  747. .stat-number>.item>.title {
  748. color: darkturquoise;
  749. }
  750. .stat-number>.item>.number {
  751. text-align: center;
  752. }
  753. /*合同列表*/
  754. .box-contract-table {
  755. background-color: #415065;
  756. display: flex;
  757. height: 100%;
  758. }
  759. .contract-table {
  760. font-size: 20px;
  761. color: aliceblue;
  762. margin: 0 auto;
  763. align-items: center;
  764. display: flex;
  765. justify-content: space-around;
  766. width: 100%;
  767. }
  768. .bg1-3-1 {
  769. height: 10%;
  770. /* min-height: 45px; */
  771. padding: 10px;
  772. /* border: 1px solid black; */
  773. }
  774. .bg1-3-2 {
  775. height: 90%;
  776. padding: 2px 10px 10px;
  777. /* border: 1px solid black; */
  778. }
  779. /*客户排名*/
  780. .box-custom-ranking {
  781. background-color: #415065;
  782. height: 100%;
  783. }
  784. .custom-ranking {
  785. font-size: 14px;
  786. color: aliceblue;
  787. display: flex;
  788. flex-direction: column;
  789. align-items: center;
  790. justify-content: center;
  791. text-align: justify;
  792. width: 100%;
  793. height: 100%;
  794. }
  795. .custom-ranking>.table {
  796. background-color: darkturquoise;
  797. height: 100%;
  798. width: 100%;
  799. }
  800. .bg2-3-1 {
  801. height: 10%;
  802. padding: 5px 10px;
  803. /* border: 1px solid black; */
  804. }
  805. .bg2-3-2 {
  806. height: 90%;
  807. padding: 2px 10px 10px;
  808. /* border: 1px solid black; */
  809. }
  810. /*合同预警*/
  811. .box-contract-alert {
  812. background-color: #415065;
  813. height: 100%;
  814. }
  815. .contract-alert {
  816. font-size: 14px;
  817. color: aliceblue;
  818. display: flex;
  819. flex-direction: column;
  820. align-items: center;
  821. justify-content: center;
  822. text-align: justify;
  823. width: 100%;
  824. height: 100%;
  825. }
  826. .contract-alert>.title>div {
  827. background-color: #415065;
  828. width: 100%;
  829. display: flex;
  830. align-items: center;
  831. justify-content: center;
  832. text-align: justify;
  833. }
  834. .contract-alert>.table {
  835. background-color: darkturquoise;
  836. height: 100%;
  837. width: 100%;
  838. }
  839. .table thead .cell {
  840. font-size: 12px;
  841. -webkit-transform: scale(0.8) !important;
  842. }
  843. .table tbody .cell {
  844. font-size: 12px;
  845. -webkit-transform: scale(0.8) !important;
  846. }
  847. /* 设置滚动条的样式 */
  848. ::-webkit-scrollbar {
  849. width: 6px;
  850. height: 6px;
  851. }
  852. /* 滚动槽 */
  853. ::-webkit-scrollbar-track {
  854. -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3);
  855. border-radius: 10px;
  856. }
  857. /* 滚动条滑块 */
  858. ::-webkit-scrollbar-thumb {
  859. border-radius: 10px;
  860. background: rgba(0, 0, 0, 0.1);
  861. -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
  862. }
  863. ::-webkit-scrollbar-thumb:window-inactive {
  864. background: rgba(161, 156, 156, 0.2);
  865. }
  866. </style>