Production.vue 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018
  1. <!--
  2. * @Author: your name
  3. * @Date: 2021-10-21 17:51:22
  4. * @LastEditTime: 2021-11-29 18:27:13
  5. * @LastEditors: Please set LastEditors
  6. * @Description: 生产经营页面
  7. * @FilePath: \hyyfScreen\src\views\Production\Production.vue
  8. -->
  9. <template>
  10. <div class="production">
  11. <!-- 第一列 -->
  12. <div class="production-column production-side-column">
  13. <div class="production-column-item">
  14. <pro-board :title="'存栏结构'">
  15. <chart-amount-pie :data="inventoryPieData"></chart-amount-pie>
  16. </pro-board>
  17. </div>
  18. <div class="production-column-item">
  19. <pro-board :title="'存栏变动'">
  20. <chart-amount-line :data="amountLineData"></chart-amount-line>
  21. </pro-board>
  22. </div>
  23. <div class="production-column-item">
  24. <pro-board :title="'母猪分布'">
  25. <chart-sow-bar :data="amountPieData"></chart-sow-bar>
  26. </pro-board>
  27. </div>
  28. </div>
  29. <!-- 第二列 -->
  30. <div class="production-column production-mid-column">
  31. <div class="production-column-item">
  32. <pro-board
  33. :title="'重要指标'"
  34. :click="true"
  35. @getClick="clickIndicators"
  36. >
  37. <important-items :data="importantData"></important-items>
  38. <!-- 重要指标的图 -->
  39. <transition name="fade">
  40. <div v-if="indicatorsVisible" class="indicators">
  41. <div class="indicators-title">
  42. <div class="target">指标数量:78</div>
  43. <div class="target">上升指标:58</div>
  44. <div class="target">下降指标:15</div>
  45. <div class="target">持平指标:5</div>
  46. </div>
  47. <div class="indicators-search">
  48. <div class="indicators-search-icon"></div>
  49. <input
  50. class="indicators-search-input"
  51. type="text"
  52. placeholder="搜索"
  53. />
  54. </div>
  55. <div class="indicators-charts">
  56. <indicator-item
  57. v-for="(item, index) in indicatorsData"
  58. :key="item.title"
  59. v-bind="item"
  60. :id="index"
  61. @clickItem="clickItem(index)"
  62. >
  63. </indicator-item>
  64. </div>
  65. </div>
  66. </transition>
  67. <transition name="fade">
  68. <div
  69. v-if="indicatorsItemVisible"
  70. class="indicators indicator-one-item"
  71. >
  72. <div class="back-triangle" @click="clickBack"></div>
  73. <div class="indicator-item-title">
  74. {{ indicatorsData[indicatorIndex].title }}
  75. <span
  76. :class="
  77. indicatorsData[indicatorIndex].ifPositive
  78. ? 'positive'
  79. : 'negative'
  80. "
  81. class="num-common"
  82. >
  83. {{ indicatorsData[indicatorIndex].titleNum }}
  84. </span>
  85. <span
  86. :class="
  87. indicatorsData[indicatorIndex].ifPositive
  88. ? 'positive'
  89. : 'negative'
  90. "
  91. class="num-common"
  92. >
  93. {{ indicatorsData[indicatorIndex].subtitleNum }}
  94. </span>
  95. </div>
  96. <div class="indicator-item-subtitle">
  97. {{ indicatorsData[indicatorIndex].littleTitle }}
  98. </div>
  99. <indicator-one-chart
  100. v-bind="indicatorsData[indicatorIndex]"
  101. ></indicator-one-chart>
  102. </div>
  103. </transition>
  104. </pro-board>
  105. </div>
  106. <div class="production-column-item">
  107. <pro-board :title="'销售分析'">
  108. <div class="sales">
  109. <!-- <div class="sales-condition">
  110. <el-date-picker
  111. v-model="getSalesDates"
  112. type="datetimerange"
  113. :picker-options="pickerOptions"
  114. range-separator="至"
  115. start-placeholder="开始日期"
  116. end-placeholder="结束日期"
  117. align="right"
  118. size="mini">
  119. </el-date-picker>
  120. </div> -->
  121. <div class="sales-content">
  122. <div class="sales-left">
  123. <div class="up">
  124. <label>本月销售额</label>
  125. <span>{{ weekSales }}元</span>
  126. <div class="sales-change">
  127. <div>
  128. <div
  129. class="triangle-change"
  130. :class="
  131. weekSalesChange > 0 ? 'triangle-up' : 'triangle-down'
  132. "
  133. ></div>
  134. <span
  135. :class="weekSalesChange > 0 ? 'color-up' : 'color-down'"
  136. >{{ weekSalesChange }}%</span
  137. >
  138. &nbsp;&nbsp;&nbsp;环比上月
  139. </div>
  140. </div>
  141. </div>
  142. <div class="down">
  143. <label>本月销售量</label>
  144. <span>{{ weekSalesVolume }}头</span>
  145. <div class="sales-change">
  146. <div>
  147. <div
  148. class="triangle-change"
  149. :class="
  150. weekSalesVolumeChange > 0
  151. ? 'triangle-up'
  152. : 'triangle-down'
  153. "
  154. ></div>
  155. <span
  156. :class="
  157. weekSalesVolumeChange > 0 ? 'color-up' : 'color-down'
  158. "
  159. >{{ weekSalesVolumeChange }}%</span
  160. >
  161. &nbsp;&nbsp;&nbsp;环比上月
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. <div class="sales-right">
  167. <chart-sales :data="salesChartData"></chart-sales>
  168. </div>
  169. </div>
  170. </div>
  171. </pro-board>
  172. </div>
  173. <div class="production-column-item">
  174. <pro-board :title="'应付排名'">
  175. <ying-shou :data="yingfuData"></ying-shou>
  176. </pro-board>
  177. </div>
  178. </div>
  179. <!-- 第三列 -->
  180. <div class="production-column production-side-column">
  181. <div class="production-column-item">
  182. <pro-board :title="'工作看板'">
  183. <work-items @workInfo="getWorkInfo(value)"></work-items>
  184. </pro-board>
  185. </div>
  186. <!-- 工作看板点击后出现的东西 -->
  187. <div class="work-infos" v-show="ifWorkInfos">
  188. <div class="kuang">
  189. <div class="work-info-title">工作任务</div>
  190. <div class="work-info-wrap">
  191. <div class="work-info-content">
  192. <div class="work-info-content-top">
  193. <div class="work-info-content-history">
  194. <div class="history-title">历史工作任务</div>
  195. <div class="history-content">
  196. <div
  197. class="history-content-item"
  198. v-for="item in historyData"
  199. :key="item.id"
  200. >
  201. <span class="history-content-item-data">{{
  202. item.date
  203. }}</span>
  204. <span class="history-content-item-data">{{
  205. item.content
  206. }}</span>
  207. <span class="history-content-item-data">{{
  208. item.person
  209. }}</span>
  210. </div>
  211. </div>
  212. </div>
  213. <div class="work-info-content-condition">
  214. <div class="history-title">发布任务</div>
  215. <div class="condition-content">
  216. <div class="condition-content-item">
  217. <div>执行日期:</div>
  218. <el-select
  219. size="mini"
  220. style="width: 65%; position: relative; top: -5px"
  221. >
  222. <el-option></el-option>
  223. </el-select>
  224. </div>
  225. <div class="condition-content-item">
  226. <div>负责人:</div>
  227. <el-select
  228. size="mini"
  229. style="width: 65%; position: relative; top: -5px"
  230. >
  231. <el-option></el-option>
  232. </el-select>
  233. </div>
  234. </div>
  235. </div>
  236. </div>
  237. <div class="work-info-content-main">
  238. <div class="history-title">内容</div>
  239. <div class="main-content">我是内容</div>
  240. </div>
  241. </div>
  242. </div>
  243. </div>
  244. </div>
  245. <div class="production-column-item2">
  246. <pro-board :title="'成本分析'">
  247. <div style="height: 100%">
  248. <div style="height: 90%;padding-top:30px;">
  249. <!-- 扇形图 -->
  250. <chart-cost-pie
  251. :data="costPieData"
  252. :title="costTitles[costIndex]"
  253. >
  254. </chart-cost-pie>
  255. <!-- 柱状图 -->
  256. <chart-cost-line
  257. :data="costLineData"
  258. :xAxisData="costTitles"
  259. @changeCostIndex="changeCostIndex"
  260. >
  261. </chart-cost-line>
  262. </div>
  263. </div>
  264. </pro-board>
  265. </div>
  266. </div>
  267. </div>
  268. </template>
  269. <script>
  270. import ProBoard from "./board/ProBoard.vue";
  271. import ChartAmountPie from "./board/ChartAmountPie.vue";
  272. import ChartAmountLine from "./board/ChartAmountLine.vue";
  273. import ChartSowBar from "./board/ChartSowBar.vue";
  274. import ChartSales from "./board/ChartSales.vue";
  275. import YingShou from "./board/YingShou.vue";
  276. import WorkItems from "./board/WorkItems.vue";
  277. import ImportantItems from "./board/ImportantItems.vue";
  278. import ChartCostPie from "./board/ChartCostPie.vue";
  279. import ChartCostLine from "./board/ChartCostLine.vue";
  280. import IndicatorItem from "./board/IndicatorItem.vue";
  281. import IndicatorOneChart from "./board/IndicatorOneChart.vue";
  282. // 网络请求
  283. import {
  284. getInventoryAndProduct,
  285. getInventoryLines,
  286. getProductionCondition,
  287. getYingFu,
  288. getCostData,
  289. getTheSales,
  290. getWorkPlans,
  291. } from "../../utils/chenApi";
  292. export default {
  293. name: "Production",
  294. data() {
  295. return {
  296. inventoryPieData: [],
  297. amountPieData: [
  298. {
  299. farmId: 1,
  300. id: 1,
  301. month: 10,
  302. rate: 1,
  303. stockName: "总存栏",
  304. stockQuantity: 1000,
  305. stockType: "total_stock",
  306. subareaId: 9,
  307. year: 2021,
  308. },
  309. {
  310. farmId: 1,
  311. id: 2,
  312. month: 10,
  313. rate: 0.01,
  314. stockName: "母猪存栏",
  315. stockQuantity: 10,
  316. stockType: "sow_stock",
  317. subareaId: 9,
  318. year: 2021,
  319. },
  320. {
  321. farmId: 1,
  322. id: 3,
  323. month: 10,
  324. rate: 0.09,
  325. stockName: "公猪存栏",
  326. stockQuantity: 90,
  327. stockType: "boar_stock",
  328. subareaId: 9,
  329. year: 2021,
  330. },
  331. {
  332. farmId: 1,
  333. id: 4,
  334. month: 10,
  335. rate: 0.1,
  336. stockName: "哺乳仔猪存栏",
  337. stockQuantity: 100,
  338. stockType: "grice_stock",
  339. subareaId: 9,
  340. year: 2021,
  341. },
  342. {
  343. farmId: 1,
  344. id: 5,
  345. month: 10,
  346. rate: 0.1,
  347. stockName: "保育猪存栏",
  348. stockQuantity: 100,
  349. stockType: "piglet_stock",
  350. subareaId: 9,
  351. year: 2021,
  352. },
  353. {
  354. farmId: 1,
  355. id: 6,
  356. month: 10,
  357. rate: 0.1,
  358. stockName: "育肥猪存栏",
  359. stockQuantity: 100,
  360. stockType: "fatpig_stock",
  361. subareaId: 9,
  362. year: 2021,
  363. },
  364. ],
  365. amountLineData: {
  366. boarStock: [],
  367. fatpigStock: [],
  368. griceStock: [],
  369. month: [],
  370. pigletStock: [],
  371. sowStock: [],
  372. },
  373. pickerOptions: {
  374. // 快捷选项
  375. shortcuts: [
  376. {
  377. text: "最近一周",
  378. onClick(picker) {
  379. const end = new Date();
  380. const start = new Date();
  381. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  382. picker.$emit("pick", [start, end]);
  383. },
  384. },
  385. {
  386. text: "最近一个月",
  387. onClick(picker) {
  388. const end = new Date();
  389. const start = new Date();
  390. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  391. picker.$emit("pick", [start, end]);
  392. },
  393. },
  394. {
  395. text: "最近三个月",
  396. onClick(picker) {
  397. const end = new Date();
  398. const start = new Date();
  399. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  400. picker.$emit("pick", [start, end]);
  401. },
  402. },
  403. ],
  404. },
  405. getSalesDates: [], // 获取销售分析的时间
  406. weekSales: 1545252,
  407. weekSalesChange: 10,
  408. weekSalesVolume: 1000,
  409. weekSalesVolumeChange: -10,
  410. salesChartData: {
  411. // 销售图的数据
  412. quantitys: [46, 45, 100],
  413. sellDates: ["10-20周三", "10-21周四", "10-22周五"],
  414. },
  415. yingfuData: [],
  416. historyData: [
  417. {
  418. id: 1,
  419. date: "7日12日下午",
  420. content: "1000头仔猪进入厂区",
  421. person: "李海涛",
  422. },
  423. {
  424. id: 2,
  425. date: "7日12日下午",
  426. content: "1000头仔猪进入厂区",
  427. person: "李海涛",
  428. },
  429. {
  430. id: 3,
  431. date: "7日12日下午",
  432. content: "1000头仔猪进入厂区",
  433. person: "李海涛",
  434. },
  435. {
  436. id: 4,
  437. date: "7日12日下午",
  438. content: "1000头仔猪进入厂区",
  439. person: "李海涛",
  440. },
  441. {
  442. id: 5,
  443. date: "7日12日下午",
  444. content: "1000头仔猪进入厂区",
  445. person: "李海涛",
  446. },
  447. ],
  448. ifWorkInfos: false, // 工作看板点击后出现的工作任务
  449. importantData: [],
  450. costTitles: ["总成本", "基础猪群", "保育猪群", "育肥猪群", "后备猪群"], // 成本分析 - 被选中的名字
  451. costIndex: 0, // 成本分析 - 名字数组的 index
  452. costPieData: {},
  453. costLineData: [],
  454. indicatorsVisible: false, // 是否显示股票图
  455. indicatorsData: [
  456. {
  457. id: 1,
  458. title: "窝均产仔数",
  459. subtitle: "母猪每一胎生产的仔猪数量",
  460. littleTitle:
  461. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  462. titleNum: "23",
  463. subtitleNum: "+1",
  464. ifPositive: true,
  465. },
  466. {
  467. id: 2,
  468. title: "产房存活率",
  469. subtitle: "每一窝仔猪断奶前平均存活率",
  470. littleTitle:
  471. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  472. titleNum: "92.5%",
  473. subtitleNum: "+0.75%",
  474. ifPositive: true,
  475. },
  476. {
  477. id: 3,
  478. title: "保育存活率",
  479. subtitle: "保育阶段的猪只存活率",
  480. littleTitle:
  481. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  482. titleNum: "97.3%",
  483. subtitleNum: "-0.43%",
  484. ifPositive: false,
  485. },
  486. {
  487. id: 4,
  488. title: "年提供出栏猪数",
  489. subtitle: "每年可以提供出栏猪",
  490. littleTitle:
  491. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  492. titleNum: "214525",
  493. subtitleNum: "+13.2%",
  494. ifPositive: true,
  495. },
  496. {
  497. id: 5,
  498. title: "保育存活率",
  499. subtitle: "保育阶段的猪只存活率",
  500. littleTitle:
  501. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  502. titleNum: "97.3%",
  503. subtitleNum: "-0.43%",
  504. ifPositive: false,
  505. },
  506. {
  507. id: 6,
  508. title: "窝均产仔数",
  509. subtitle: "母猪每一胎生产的仔猪数量",
  510. littleTitle:
  511. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  512. titleNum: "23",
  513. subtitleNum: "+1",
  514. ifPositive: true,
  515. },
  516. {
  517. id: 7,
  518. title: "保育存活率",
  519. subtitle: "保育阶段的猪只存活率",
  520. littleTitle:
  521. "年利用窝数 * 平均窝产正常仔数 * 仔猪成活率 * 查询期间的基础母猪平均存栏",
  522. titleNum: "97.3%",
  523. subtitleNum: "-0.43%",
  524. ifPositive: false,
  525. },
  526. ],
  527. indicatorsItemVisible: false, // 只要指标的一张图
  528. indicatorIndex: 0,
  529. workPlans: {} // 工作看板
  530. };
  531. },
  532. components: {
  533. ProBoard,
  534. ChartAmountPie,
  535. ChartAmountLine,
  536. ChartSowBar,
  537. ChartSales,
  538. YingShou,
  539. WorkItems,
  540. ImportantItems,
  541. ChartCostPie,
  542. ChartCostLine,
  543. IndicatorItem,
  544. IndicatorOneChart,
  545. },
  546. mounted() {
  547. this.initInventoryAndProduct();
  548. this.initInventoryLines();
  549. this.initProductionCondition(); // 重要指标 - 百分率
  550. this.initYingFu(); // 应付排名
  551. this.initCostData(); // 成本分析
  552. this.initTheSales(); // 销售分析
  553. this.initWorkPlans(); // 工作看板
  554. },
  555. methods: {
  556. getWorkInfo(value) {
  557. // 工作看板的点击事件
  558. console.log(value);
  559. this.ifWorkInfos = !this.ifWorkInfos;
  560. },
  561. clickIndicators() {
  562. this.indicatorsVisible = !this.indicatorsVisible;
  563. console.log(this.indicatorsVisible);
  564. },
  565. clickItem(index) {
  566. // setTimeout(() => {
  567. // this.indicatorsVisible = true
  568. // })
  569. this.indicatorIndex = index;
  570. this.indicatorsItemVisible = true;
  571. console.log(111111111);
  572. },
  573. clickBack() {
  574. this.indicatorsItemVisible = false;
  575. },
  576. // 第一列:存栏结构 + 存栏变动
  577. initInventoryAndProduct() {
  578. getInventoryAndProduct({}).then((res) => {
  579. if (res.code === 10000) {
  580. // this.inventoryLinesData = res.data
  581. console.log(res.data);
  582. // this.inventoryPieData = res.data.slice(0, 6)
  583. this.inventoryPieData = [
  584. res.data["sow_stock"],
  585. res.data["boar_stock"],
  586. res.data["grice_stock"],
  587. res.data["piglet_stock"],
  588. res.data["fatpig_stock"],
  589. ];
  590. }
  591. });
  592. },
  593. // 存栏情况 - 存栏变动折线图数据请求
  594. initInventoryLines() {
  595. getInventoryLines({}).then((res) => {
  596. if (res.code === 10000) {
  597. this.amountLineData = res.data;
  598. } else {
  599. this.amountLineData = {
  600. boarStock: [],
  601. fatpigStock: [],
  602. griceStock: [],
  603. month: [],
  604. pigletStock: [],
  605. sowStock: [],
  606. };
  607. }
  608. });
  609. },
  610. // 重要指标 - 百分率
  611. initProductionCondition() {
  612. getProductionCondition({}).then((res) => {
  613. this.importantData = [];
  614. if (res.code === 10000) {
  615. const items = [
  616. "grice_rate",
  617. "piglet_rate",
  618. "fatpig_rate",
  619. "break_rate",
  620. "breed_rate",
  621. "psy",
  622. ];
  623. items.forEach((item) => {
  624. let itemNum =
  625. (parseFloat(res.data[item].stockQuantity) * 100).toFixed(2) + "%";
  626. if (item === "psy") {
  627. itemNum = res.data[item].stockQuantity;
  628. }
  629. this.importantData.push({
  630. id: res.data[item].id,
  631. name: res.data[item].stockName,
  632. num: itemNum,
  633. });
  634. });
  635. }
  636. });
  637. },
  638. // 应付排名
  639. initYingFu() {
  640. getYingFu({}).then((res) => {
  641. console.log("应付", res);
  642. if (res.code === 10000) {
  643. this.yingfuData = res.data;
  644. }
  645. });
  646. },
  647. // 成本分析
  648. initCostData() {
  649. getCostData({}).then((res) => {
  650. if (res.code === 10000) {
  651. this.costLineData = [
  652. res.data["total"],
  653. res.data["baseGroup"],
  654. res.data["pigletGroup"],
  655. res.data["fattenPig"],
  656. res.data["replaceGilt"],
  657. ];
  658. this.costPieData = this.costLineData[this.costIndex];
  659. }
  660. });
  661. },
  662. // 成本分析 - 数据改变
  663. changeCostIndex(value) {
  664. this.costIndex = value;
  665. this.costPieData = this.costHisData[value];
  666. },
  667. // 销售分析
  668. initTheSales() {
  669. getTheSales({
  670. type: 2,
  671. }).then((res) => {
  672. if (res.code === 10000) {
  673. this.weekSales = res.data.money;
  674. this.weekSalesChange = res.data.moneyPercent;
  675. this.weekSalesVolume = res.data.quantity;
  676. this.weekSalesVolumeChange = res.data.quantityPercent;
  677. this.salesChartData = {
  678. moneyList: res.data.moneyList,
  679. quantityList: res.data.quantityList,
  680. timeList: res.data.timeList,
  681. };
  682. }
  683. });
  684. },
  685. // 工作看板
  686. initWorkPlans() {
  687. getWorkPlans({}).then(({code, data}) => {
  688. if (code === 10000) {
  689. this.workPlans = data
  690. }
  691. });
  692. },
  693. },
  694. };
  695. </script>
  696. <style scoped>
  697. .production {
  698. height: 100%;
  699. display: flex;
  700. flex-direction: row;
  701. justify-content: space-between;
  702. position: relative;
  703. padding-top: 20px;
  704. }
  705. /* 每一列 */
  706. .production-column {
  707. display: flex;
  708. flex-direction: column;
  709. justify-content: space-between;
  710. }
  711. .production-side-column {
  712. width: 25%;
  713. }
  714. .production-mid-column {
  715. width: 45%;
  716. }
  717. /* 每一列的每一个面板 */
  718. .production-column-item {
  719. height: 32%;
  720. }
  721. .production-column-item2 {
  722. height: 66%;
  723. }
  724. /** 重要指标的图 */
  725. .indicators {
  726. position: absolute;
  727. background-color: rgb(0, 0, 0);
  728. color: #fff;
  729. top: 26px;
  730. width: 100%;
  731. height: 290%;
  732. z-index: 10;
  733. overflow: auto;
  734. }
  735. /* 标题栏 */
  736. .indicators-title {
  737. font-weight: 700;
  738. font-size: 24px;
  739. display: flex;
  740. flex-direction: row;
  741. justify-content: space-around;
  742. margin-top: 30px;
  743. }
  744. /* 搜索框 */
  745. .indicators-search {
  746. height: 34px;
  747. margin: 30px 8px 0px;
  748. /* padding-top: 4px; */
  749. background-color: rgb(56, 55, 55);
  750. border-radius: 4px;
  751. display: flex;
  752. flex-direction: row;
  753. justify-content: space-around;
  754. }
  755. .indicators-search-icon {
  756. margin-top: 2px;
  757. width: 30px;
  758. height: 30px;
  759. background: url("../../assets/Production/u4772.svg") no-repeat;
  760. background-size: 100% 100%;
  761. }
  762. .indicators-search-input {
  763. width: calc(96% - 30px);
  764. font-size: 18px;
  765. background-color: transparent;
  766. color: #fff;
  767. outline: unset;
  768. border: 0;
  769. }
  770. /** 重要指标图的过渡动画 */
  771. .fade-enter-active,
  772. .fade-leave-active {
  773. transition: opacity 1s;
  774. }
  775. .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  776. opacity: 0;
  777. }
  778. /** 重要指标图 - 一张图 */
  779. .indicator-one-item {
  780. text-align: left;
  781. z-index: 11;
  782. }
  783. /* 返回的三角形 */
  784. .back-triangle {
  785. width: 0px;
  786. height: 0px;
  787. border: 30px solid;
  788. border-color: transparent rgba(124, 121, 121, 0.5) transparent;
  789. border-left: 120px;
  790. float: right;
  791. margin-top: 20px;
  792. margin-right: 20px;
  793. }
  794. .indicator-item-title {
  795. font-size: 25px;
  796. font-weight: 700;
  797. margin-top: 30px;
  798. margin-left: 20px;
  799. text-align: left;
  800. display: inline-block;
  801. }
  802. .num-common {
  803. font-size: 14px;
  804. display: inline-block;
  805. margin-left: 20px;
  806. position: relative;
  807. bottom: 4px;
  808. }
  809. /* 红色 */
  810. .positive {
  811. color: red;
  812. }
  813. /* 绿色 */
  814. .negative {
  815. color: green;
  816. }
  817. .indicator-item-subtitle {
  818. margin: 20px 30px 20px 20px;
  819. font-size: 18px;
  820. }
  821. /* 销售分析 */
  822. .sales {
  823. position: relative;
  824. }
  825. .sales-condition {
  826. margin-top: 15px;
  827. position: absolute;
  828. right: 4px;
  829. z-index: 10;
  830. }
  831. .sales-content {
  832. padding-top: 20px;
  833. width: 100%;
  834. display: flex;
  835. flex-direction: row;
  836. justify-content: space-around;
  837. color: #fff;
  838. }
  839. .sales-left {
  840. width: 23%;
  841. line-height: 25px;
  842. padding-top: 30px;
  843. }
  844. .sales-left > .up {
  845. margin-bottom: 10px;
  846. }
  847. .sales-left > .up > label,
  848. .sales-left > .down > label {
  849. display: block;
  850. text-align: center;
  851. font-size: 13px;
  852. }
  853. .sales-left > .up > span,
  854. .sales-left > .down > span {
  855. display: block;
  856. text-align: center;
  857. font-size: 16px;
  858. }
  859. .sales-left > .up > .sales-change,
  860. .sales-left > .down > .sales-change {
  861. display: flex;
  862. justify-content: space-around;
  863. font-size: 13px;
  864. }
  865. /* 三角形 */
  866. .triangle-change {
  867. display: inline-block;
  868. /* width: 4px; */
  869. height: 4px;
  870. border-style: solid;
  871. border-width: 4px;
  872. margin-right: 10px;
  873. }
  874. .triangle-up {
  875. border-color: transparent transparent rgb(238, 16, 16) transparent;
  876. }
  877. .triangle-down {
  878. border-color: rgb(12, 202, 12) transparent transparent transparent;
  879. position: relative;
  880. top: 4px;
  881. }
  882. .color-up {
  883. color: rgb(238, 16, 16);
  884. }
  885. .color-down {
  886. color: rgb(12, 202, 12);
  887. }
  888. /* 销售情况右侧 */
  889. .sales-right {
  890. width: 77%;
  891. /* border-left: 1px solid rgba(228, 228, 228, 1); */
  892. /* height: 200px; */
  893. /* background-color: #fff; */
  894. }
  895. /* 工作看板 */
  896. .work-infos {
  897. width: 800px;
  898. height: 470px;
  899. position: absolute;
  900. left: 0;
  901. right: 0;
  902. top: 0;
  903. bottom: 0;
  904. margin: auto;
  905. background-color: rgb(3, 16, 50);
  906. }
  907. .kuang {
  908. width: 100%;
  909. height: 100%;
  910. background: url("../../assets/BioSafety/kuang.png") no-repeat;
  911. background-size: contain;
  912. }
  913. .work-info-title {
  914. color: rgb(87, 221, 255);
  915. font-weight: bold;
  916. font-size: 18px;
  917. margin-top: 5px;
  918. }
  919. .work-info-wrap {
  920. width: 86%;
  921. height: 77%;
  922. background-color: rgb(4, 5, 26);
  923. margin: 20px auto;
  924. padding-top: 2.5%;
  925. }
  926. .work-info-content {
  927. border: 2px solid rgb(51, 153, 153);
  928. width: 95%;
  929. height: 95%;
  930. margin: auto;
  931. }
  932. .work-info-content-top {
  933. display: flex;
  934. justify-content: space-around;
  935. }
  936. /* 工作任务 —— 历史工作任务 */
  937. .work-info-content-history {
  938. display: inline-block;
  939. margin-top: 10px;
  940. width: 60%;
  941. }
  942. .history-title {
  943. color: rgb(87, 221, 255);
  944. font-size: 14px;
  945. }
  946. .history-content {
  947. background-color: rgb(33, 41, 58);
  948. margin: 5px 10px;
  949. height: 100px;
  950. overflow-y: scroll;
  951. }
  952. ::-webkit-scrollbar {
  953. /*隐藏滚轮*/
  954. display: none;
  955. }
  956. .history-content-item {
  957. display: flex;
  958. justify-content: space-between;
  959. color: rgb(87, 221, 255);
  960. }
  961. .history-content-item:hover {
  962. background-color: rgb(25, 91, 104);
  963. cursor: pointer;
  964. }
  965. .history-content-item-data {
  966. margin: 5px 10px;
  967. }
  968. /* 工作任务 —— 发布任务 */
  969. .work-info-content-condition {
  970. display: inline-block;
  971. margin-top: 10px;
  972. width: 40%;
  973. }
  974. .condition-content {
  975. width: 100%;
  976. height: 100px;
  977. margin: 5px 10px;
  978. display: flex;
  979. flex-direction: column;
  980. justify-content: space-between;
  981. padding-top: 10px;
  982. }
  983. .condition-content-item {
  984. display: flex;
  985. justify-content: space-between;
  986. margin-left: 20px;
  987. margin-right: 30px;
  988. color: rgb(87, 221, 255);
  989. }
  990. /* 工作任务 —— 内容 */
  991. .work-info-content-main {
  992. }
  993. .main-content {
  994. background-color: rgb(15, 18, 38);
  995. margin: 10px;
  996. height: 130px;
  997. color: #fff;
  998. padding: 10px;
  999. text-align: left;
  1000. text-indent: 2em;
  1001. }
  1002. </style>