details.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <div class="page-title">
  5. <PageHeader title="出库单详情"> </PageHeader>
  6. </div>
  7. <div class="stepsStatus">
  8. <el-steps :active="active" align-center>
  9. <el-step title="创建"></el-step>
  10. <el-step title="待审核"></el-step>
  11. <el-step :title="stepsTitle" :status="stepsStatus"></el-step>
  12. </el-steps>
  13. </div>
  14. <div>
  15. <div class="content-detail">
  16. <header-title title="基本信息" size="16px"></header-title>
  17. <div class="mt20">
  18. <el-form label-width="110px">
  19. <el-col :span="8">
  20. <el-form-item label="出库单号">
  21. <span>{{ infoData.bizNo }}</span>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="8">
  25. <el-form-item label="出库物品类型">
  26. <span>{{ handleAssetType(infoData.extInfo.assetType) }}</span>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="8">
  30. <el-form-item label="出库场景">
  31. <span>{{ getSceneState(infoData.bizType) }}</span>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="8">
  35. <el-form-item label="关联订单:">
  36. <span>{{ extInfo.documentSource }}</span>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="8" v-if="infoData.bizType == 3">
  40. <el-form-item label="客户名称">
  41. <span>{{ infoData.clientName }}</span>
  42. </el-form-item> </el-col
  43. ><el-col :span="8" v-if="infoData.bizType == 3">
  44. <el-form-item label="客户联系人">
  45. <span>{{ infoData.clientUser }}</span>
  46. </el-form-item> </el-col
  47. ><el-col :span="8" v-if="infoData.bizType == 3">
  48. <el-form-item label="客户电话">
  49. <span>{{ infoData.clientPhone }}</span>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="8">
  53. <el-form-item
  54. :label="infoData.bizType == 4 ? '领料单' : '来源单据'"
  55. >
  56. <span>{{ infoData.bizNo }}</span>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="8">
  60. <el-form-item label="领料人联系方式">
  61. <span>{{ infoData.fromUserPhone }}</span>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="8">
  65. <el-form-item label="出库登记人">
  66. <span>{{ infoData.extInfo?.createUserName }}</span>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="8">
  70. <el-form-item label="权属部门">
  71. <span>{{ infoData.extInfo?.deptName }}</span>
  72. </el-form-item>
  73. </el-col>
  74. <!-- <el-col :span="8">
  75. <el-form-item label="创建时间">
  76. <span>{{ infoData.createTime }}</span>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="8">
  80. <el-form-item label="出库时间">
  81. <span>{{ infoData.createTime }}</span>
  82. </el-form-item>
  83. </el-col> -->
  84. <el-col :span="8">
  85. <el-form-item label="状态:">
  86. <span>{{ stepsTitle }}</span>
  87. </el-form-item>
  88. </el-col>
  89. <el-col :span="8">
  90. <el-form-item label="领料人部门">
  91. <span>{{ infoData.extInfo.verifyDeptName }}</span>
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="8">
  95. <el-form-item label="领料人">
  96. <span>{{ infoData.fromUser }}</span>
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="16">
  100. <el-form-item label="备注">
  101. <span>{{ infoData.remark }}</span>
  102. </el-form-item>
  103. </el-col>
  104. </el-form>
  105. </div>
  106. </div>
  107. <div class="content-detail mt20">
  108. <header-title title="产品信息" size="16px"></header-title>
  109. <el-table
  110. ref="productListTable"
  111. :data="productList"
  112. border
  113. tooltip-effect="dark"
  114. :max-height="300"
  115. :header-cell-style="rowClass"
  116. >
  117. <el-table-column label="序号" type="index" width="50">
  118. </el-table-column>
  119. <el-table-column
  120. label="编码"
  121. prop="categoryCode"
  122. align="center"
  123. :show-overflow-tooltip="true"
  124. ></el-table-column>
  125. <el-table-column
  126. label="名称"
  127. align="center"
  128. prop="categoryName"
  129. :show-overflow-tooltip="true"
  130. ></el-table-column>
  131. <el-table-column
  132. v-if="clientEnvironmentId == 4"
  133. label="级别"
  134. prop="level"
  135. align="center"
  136. >
  137. </el-table-column>
  138. <el-table-column
  139. label="型号"
  140. align="center"
  141. prop="categoryModel"
  142. :show-overflow-tooltip="true"
  143. ></el-table-column>
  144. <el-table-column
  145. label="规格"
  146. align="center"
  147. prop="specification"
  148. :show-overflow-tooltip="true"
  149. ></el-table-column>
  150. <el-table-column
  151. label="牌号"
  152. align="center"
  153. prop="brandNum"
  154. :show-overflow-tooltip="true"
  155. ></el-table-column>
  156. <el-table-column
  157. v-for="(item, index) in newColumns"
  158. :label="item.label"
  159. :align="item.align"
  160. :prop="item.prop"
  161. :show-overflow-tooltip="item.showOverflowTooltip"
  162. ></el-table-column>
  163. <el-table-column
  164. label="批次号"
  165. prop="batchNo"
  166. align="center"
  167. :show-overflow-tooltip="true"
  168. >
  169. </el-table-column>
  170. <el-table-column
  171. label="包装数量"
  172. v-if="clientEnvironmentId == 3"
  173. prop="packingQuantity"
  174. align="center"
  175. >
  176. <template slot-scope="{ row, $index }">
  177. {{ row.packingQuantity }} {{ row.packingUnit }}
  178. </template>
  179. </el-table-column>
  180. <el-table-column
  181. v-else
  182. label="包装数量"
  183. prop="packingQuantity"
  184. width="80"
  185. ></el-table-column>
  186. <el-table-column
  187. v-if="clientEnvironmentId == 3"
  188. label="最小包装单元"
  189. align="center"
  190. width="120"
  191. prop="minPackingQuantity"
  192. >
  193. <template slot-scope="{ row, $index }">
  194. {{ row.minPackingQuantity }} {{ row.measureUnit }} /{{
  195. row.packingUnit
  196. }}
  197. </template>
  198. </el-table-column>
  199. <el-table-column
  200. v-else
  201. label="包装单位"
  202. prop="packingUnit"
  203. ></el-table-column>
  204. <el-table-column
  205. label="计量数量"
  206. prop="measureQuantity"
  207. width="100"
  208. align="center"
  209. >
  210. </el-table-column>
  211. <el-table-column label="计量单位" prop="measureUnit" align="center">
  212. </el-table-column>
  213. <el-table-column
  214. label="重量"
  215. prop="weight"
  216. align="center"
  217. :show-overflow-tooltip="true"
  218. >
  219. </el-table-column>
  220. <el-table-column
  221. label="重量单位"
  222. prop="weightUnit"
  223. align="center"
  224. :show-overflow-tooltip="true"
  225. >
  226. </el-table-column>
  227. <el-table-column label="单价" prop="price" align="center">
  228. <template slot-scope="{ row }">
  229. <template>
  230. {{ row.price ? row.price : '-' + '元' }}/{{ row.measureUnit }}
  231. </template>
  232. </template>
  233. </el-table-column>
  234. <el-table-column
  235. label="金额"
  236. align="center"
  237. prop="contentImage"
  238. :show-overflow-tooltip="true"
  239. >
  240. <template slot-scope="{ row, $index }">
  241. {{ row.totalMoney ? row.totalMoney : 0 }}
  242. </template>
  243. </el-table-column>
  244. <el-table-column
  245. v-if="clientEnvironmentId == 4"
  246. label="采购原因"
  247. align="center"
  248. prop="purpose"
  249. :show-overflow-tooltip="true"
  250. ></el-table-column>
  251. <el-table-column
  252. label="仓库"
  253. prop="warehouseName"
  254. :show-overflow-tooltip="true"
  255. >
  256. </el-table-column>
  257. </el-table>
  258. </div>
  259. <div class="mt20">
  260. <header-title :title="`包装明细`" size="16px"></header-title>
  261. <el-table
  262. ref="showPackingListTable"
  263. :data="showPackingList"
  264. tooltip-effect="dark"
  265. :max-height="300"
  266. border
  267. :row-class-name="tableRowClassName"
  268. :header-cell-style="rowClass"
  269. v-el-table-infinite-scroll="pickingHandleScroll"
  270. >
  271. <el-table-column label="序号" type="index" width="50">
  272. </el-table-column>
  273. <el-table-column
  274. label="编码"
  275. prop="categoryCode"
  276. :show-overflow-tooltip="true"
  277. ></el-table-column>
  278. <el-table-column
  279. label="名称"
  280. prop="categoryName"
  281. :show-overflow-tooltip="true"
  282. ></el-table-column>
  283. <el-table-column
  284. label="批次号"
  285. prop="batchNo"
  286. :show-overflow-tooltip="true"
  287. ></el-table-column>
  288. <el-table-column
  289. label="发货条码"
  290. prop="barcodes"
  291. :show-overflow-tooltip="true"
  292. ></el-table-column>
  293. <el-table-column
  294. label="包装编码"
  295. prop="packageNo"
  296. :show-overflow-tooltip="true"
  297. ></el-table-column>
  298. <el-table-column
  299. label="包装数量"
  300. prop="packingQuantity"
  301. :show-overflow-tooltip="true"
  302. ></el-table-column>
  303. <el-table-column
  304. label="包装单位"
  305. prop="packingUnit"
  306. :show-overflow-tooltip="true"
  307. ></el-table-column>
  308. <el-table-column
  309. label="计量数量"
  310. prop="measureQuantity"
  311. :show-overflow-tooltip="true"
  312. ></el-table-column>
  313. <el-table-column
  314. label="计量单位"
  315. prop="measureUnit"
  316. :show-overflow-tooltip="true"
  317. ></el-table-column>
  318. <el-table-column
  319. label="物料代号"
  320. prop="materielDesignation"
  321. :show-overflow-tooltip="true"
  322. >
  323. </el-table-column>
  324. <el-table-column
  325. label="客户代号"
  326. prop="clientCode"
  327. :show-overflow-tooltip="true"
  328. >
  329. </el-table-column>
  330. <el-table-column
  331. label="刻码"
  332. prop="engrave"
  333. :show-overflow-tooltip="true"
  334. >
  335. </el-table-column>
  336. <el-table-column
  337. label="重量"
  338. prop="weight"
  339. :show-overflow-tooltip="true"
  340. >
  341. </el-table-column>
  342. <el-table-column
  343. label="重量单位"
  344. prop="weightUnit"
  345. :show-overflow-tooltip="true"
  346. >
  347. </el-table-column>
  348. <el-table-column
  349. label="质检结果"
  350. prop="result"
  351. :show-overflow-tooltip="true"
  352. >
  353. <template slot-scope="{ row }">
  354. <span>{{ qualityResults[row.result] }}</span>
  355. </template>
  356. </el-table-column>
  357. <el-table-column
  358. label="质检状态"
  359. prop="status"
  360. :show-overflow-tooltip="true"
  361. >
  362. <template slot-scope="{ row }">
  363. <span>{{ qualityStatus[row.status] }}</span>
  364. </template>
  365. </el-table-column>
  366. <el-table-column
  367. label="生产日期"
  368. prop="productionDate"
  369. :show-overflow-tooltip="true"
  370. >
  371. </el-table-column>
  372. <el-table-column
  373. label="采购日期"
  374. prop="purchaseDate"
  375. :show-overflow-tooltip="true"
  376. >
  377. </el-table-column>
  378. </el-table>
  379. </div>
  380. <div class="mt20">
  381. <header-title :title="`物料明细`" size="16px"> </header-title>
  382. <el-table
  383. ref="multipleTable"
  384. :data="showMaterialList"
  385. tooltip-effect="dark"
  386. :max-height="300"
  387. :row-class-name="tableRowClassName"
  388. :header-cell-style="rowClass"
  389. border
  390. style="width: 100%"
  391. stripe
  392. height="300px"
  393. v-el-table-infinite-scroll="materielHandleScroll"
  394. >
  395. <el-table-column label="序号" type="index" width="50">
  396. </el-table-column>
  397. <el-table-column
  398. label="编码"
  399. prop="categoryCode"
  400. :show-overflow-tooltip="true"
  401. ></el-table-column>
  402. <el-table-column
  403. label="名称"
  404. prop="categoryName"
  405. :show-overflow-tooltip="true"
  406. ></el-table-column>
  407. <el-table-column label="批次号" prop="batchNo"></el-table-column>
  408. <el-table-column
  409. label="物料编码"
  410. prop="materialCode"
  411. :show-overflow-tooltip="true"
  412. ></el-table-column>
  413. <el-table-column
  414. label="发货条码"
  415. prop="barcodes"
  416. :show-overflow-tooltip="true"
  417. ></el-table-column>
  418. <el-table-column
  419. label="计量数量"
  420. prop="measureQuantity"
  421. ></el-table-column>
  422. <el-table-column
  423. label="计量单位"
  424. prop="measureUnit"
  425. ></el-table-column>
  426. <el-table-column label="物料代号" prop="materielDesignation">
  427. </el-table-column>
  428. <el-table-column label="客户代号" prop="clientCode">
  429. </el-table-column>
  430. <el-table-column label="刻码" prop="engrave"> </el-table-column>
  431. <el-table-column width="100" label="重量" prop="weight">
  432. </el-table-column>
  433. <el-table-column label="重量单位" prop="weightUnit">
  434. </el-table-column>
  435. <el-table-column label="质检结果" prop="result" width="120">
  436. <template slot-scope="{ row }">
  437. <span>{{ qualityResults[row.result] }}</span>
  438. </template>
  439. </el-table-column>
  440. <el-table-column label="质检状态" prop="status" width="120">
  441. <template slot-scope="{ row }">
  442. <span>{{ qualityStatus[row.status] }}</span>
  443. </template>
  444. </el-table-column>
  445. </el-table>
  446. </div>
  447. </div>
  448. </el-card>
  449. </div>
  450. </template>
  451. <script>
  452. import elTableInfiniteScroll from 'el-table-infinite-scroll';
  453. import { getFile } from '@/api/system/file/index.js';
  454. import PageHeader from '@/components/PageHeader';
  455. import storageApi from '@/api/warehouseManagement';
  456. import { allCategoryLevel } from '@/api/classifyManage';
  457. import { useDictLabel, outputSceneState } from '@/utils/dict/index';
  458. import { mapGetters, mapActions } from 'vuex';
  459. export default {
  460. components: { PageHeader },
  461. directives: {
  462. 'el-table-infinite-scroll': elTableInfiniteScroll
  463. },
  464. data() {
  465. return {
  466. newColumns: [], // 动态表头
  467. qualityStatus: {
  468. 0: '未质检',
  469. 1: '已质检'
  470. }, // 质检状态 0未检 1已检
  471. qualityResults: {
  472. 1: '合格',
  473. 2: '不合格'
  474. }, // 质检结果 1合格 2不合格
  475. productList: [], // 产品列表
  476. showPackingList: [], // 展示的包装列表
  477. packingList: [], // 包装列表
  478. showMaterialList: [], // 展示物料列表
  479. materialList: [], // 物料列表
  480. extInfo: {}, // 扩展信息
  481. pageSize: 20,
  482. pickingPageNum: 1,
  483. materielPageNum: 1,
  484. codeList: [],
  485. infoData: {},
  486. stepsTitle: '已完成',
  487. stepsStatus: 'success',
  488. active: 0
  489. };
  490. },
  491. watch: {
  492. 'infoData.verifyStatus': {
  493. immediate: true,
  494. handler(val) {
  495. if (val == 0) {
  496. this.active = 1;
  497. this.stepsTitle = '未审核';
  498. this.stepsStatus = 'wait';
  499. } else if (val == 1) {
  500. this.active = 2;
  501. this.stepsTitle = '审核中';
  502. this.stepsStatus = 'process';
  503. } else if (val == 2) {
  504. this.active = 2;
  505. this.stepsTitle = '审核通过';
  506. this.stepsStatus = 'success';
  507. } else if (val == 3) {
  508. this.active = 2;
  509. this.stepsTitle = '驳回';
  510. this.stepsStatus = 'error';
  511. }
  512. }
  513. },
  514. packingList: {
  515. handler(newVal) {
  516. console.log('包装列表', newVal);
  517. console.log('当前包装列表加载页数', this.pickingPageNum);
  518. this.showPackingList = newVal.slice(
  519. 0,
  520. this.pageSize * (this.pickingPageNum > 0 ? this.pickingPageNum : 1)
  521. );
  522. },
  523. deep: true
  524. },
  525. materialList: {
  526. handler(newVal) {
  527. console.log('物料列表', newVal);
  528. console.log('当前物料列表加载页数', this.materielPageNum);
  529. this.showMaterialList = newVal.slice(
  530. 0,
  531. this.pageSize *
  532. (this.materielPageNum > 0 ? this.materielPageNum : 1)
  533. );
  534. },
  535. deep: true
  536. }
  537. },
  538. computed: {
  539. ...mapGetters(['getDictValue']),
  540. clientEnvironmentId() {
  541. return this.$store.state.user.info.clientEnvironmentId;
  542. }
  543. },
  544. created() {
  545. this.getFieldModel();
  546. this.requestDict('类型用途');
  547. this.getAllCategoryType();
  548. this._getInfo();
  549. },
  550. methods: {
  551. // 获取动态表头
  552. getFieldModel() {
  553. storageApi.fieldModel({ fieldModel: 't_main_category' }).then((res) => {
  554. let newRes = res.map((m) => {
  555. return {
  556. prop: 'extField.' + m.prop,
  557. label: m.label,
  558. align: 'center',
  559. showOverflowTooltip: true
  560. };
  561. });
  562. this.newColumns = [...newRes];
  563. });
  564. },
  565. pickingHandleScroll() {
  566. console.log('---------pickingHandleScroll------------');
  567. if (this.showPackingList.length < this.packingList.length) {
  568. if (this.packingList.length > this.pageSize) {
  569. this.pickingPageNum += 1;
  570. }
  571. this.pickingFetchData();
  572. }
  573. },
  574. pickingFetchData() {
  575. const start = (this.pickingPageNum - 1) * this.pageSize;
  576. const end = start + this.pageSize;
  577. this.showPackingList = this.showPackingList.concat(
  578. this.packingList.slice(start, end)
  579. );
  580. },
  581. materielHandleScroll() {
  582. console.log('---------materielHandleScroll------------');
  583. if (this.showMaterialList.length < this.materialList.length) {
  584. if (this.materialList.length > this.pageSize) {
  585. this.materielPageNum += 1;
  586. }
  587. this.materielFetchData();
  588. }
  589. },
  590. materielFetchData() {
  591. const start = (this.materielPageNum - 1) * this.pageSize;
  592. const end = start + this.pageSize;
  593. this.showMaterialList = this.showMaterialList.concat(
  594. this.materialList.slice(start, end)
  595. );
  596. console.log(this.showMaterialList);
  597. },
  598. ...mapActions('dict', ['requestDict']),
  599. getSceneState: useDictLabel(outputSceneState),
  600. handleAssetType(r) {
  601. const code = this.codeList.find((item) => item.dictCode == r);
  602. return code?.dictValue;
  603. },
  604. tableRowClassName({ row, rowIndex }) {
  605. console.log(row);
  606. if (row.result == 2) {
  607. return 'warning-row';
  608. } else {
  609. return '';
  610. }
  611. },
  612. rowClass({ row, column, rowIndex, columnIndex }) {
  613. if (rowIndex === 1) {
  614. return {
  615. display: 'none',
  616. background: '#EEEEEE'
  617. };
  618. }
  619. return { background: '#0000' };
  620. },
  621. async getAllCategoryType() {
  622. const { data } = await allCategoryLevel();
  623. this.codeList = data.map((item) => {
  624. return { dictCode: item.id, dictValue: item.name };
  625. });
  626. },
  627. async _getInfo() {
  628. let res = null;
  629. if (this.$route.query.id) {
  630. res = await storageApi.getInboundDetailsById(this.$route.query.id);
  631. } else {
  632. res = await storageApi.getInboundDetailsByBizNo(
  633. this.$route.query.bizNo
  634. );
  635. }
  636. this.infoData = res;
  637. this.extInfo = res.extInfo;
  638. this.productList = res.outInDetailList.map(
  639. (productItem, productIndex) => {
  640. return {
  641. ...productItem,
  642. outInDetailRecordRequestList:
  643. productItem.outInDetailRecordRequestList.map((packingItem) => {
  644. return {
  645. ...packingItem,
  646. categoryName: productItem.categoryName,
  647. categoryCode: productItem.categoryCode,
  648. materialDetailList: packingItem.materialDetailList.map(
  649. (materialItem) => {
  650. return {
  651. ...materialItem,
  652. categoryName: productItem.categoryName,
  653. categoryCode: productItem.categoryCode
  654. };
  655. }
  656. )
  657. };
  658. })
  659. };
  660. }
  661. );
  662. // 获取包装维度数据
  663. const arr = [];
  664. for (const key in this.productList) {
  665. for (const k in this.productList[key].outInDetailRecordRequestList) {
  666. arr.push({
  667. ...this.productList[key].outInDetailRecordRequestList[k]
  668. });
  669. }
  670. }
  671. this.packingList = arr;
  672. // 获取物料维度数据
  673. let iArr = [];
  674. arr.forEach((item) => {
  675. item.materialDetailList.forEach((ele) => {
  676. iArr.push({ ...ele });
  677. });
  678. });
  679. this.materialList = iArr;
  680. console.log(this.packingList);
  681. console.log(this.materialList);
  682. this.pickingFetchData();
  683. this.materielFetchData();
  684. },
  685. download(row) {
  686. if (row.storePath) {
  687. getFile({ objectName: row.storePath }, row.name);
  688. }
  689. }
  690. }
  691. };
  692. </script>
  693. <style lang="scss" scoped>
  694. .stepsStatus {
  695. width: 40%;
  696. margin: 0 auto;
  697. }
  698. .p20 {
  699. padding: 20px;
  700. }
  701. .flex {
  702. display: flex;
  703. }
  704. .title {
  705. justify-content: space-between;
  706. border-bottom: 1px solid #ccc;
  707. padding-bottom: 5px;
  708. span {
  709. font-size: 16px;
  710. }
  711. .col {
  712. padding-left: 40px;
  713. font-size: 14px;
  714. color: #aaaaaa;
  715. }
  716. }
  717. .degree {
  718. margin-right: 10px;
  719. padding: 0px 15px;
  720. color: #fff;
  721. font-size: 13px;
  722. line-height: 23px;
  723. border-radius: 23px;
  724. display: flex;
  725. align-items: center;
  726. justify-content: space-between;
  727. span {
  728. width: 5px;
  729. height: 5px;
  730. border-radius: 100%;
  731. margin-right: 6px;
  732. background-color: #fff;
  733. }
  734. }
  735. .red {
  736. background-color: rgb(163, 0, 20);
  737. }
  738. .blue {
  739. background-color: #1989fa;
  740. }
  741. .createdInfo {
  742. justify-content: space-around;
  743. margin-top: 10px;
  744. font-size: 14px;
  745. .col {
  746. color: #6e6e6e;
  747. padding-right: 10px;
  748. }
  749. }
  750. .mt40 {
  751. margin-top: 40px;
  752. }
  753. .custSteps {
  754. margin-top: 20px;
  755. margin-left: 70px;
  756. .box {
  757. width: 158px;
  758. border: 1px solid #ccc;
  759. padding: 10px;
  760. flex-direction: row;
  761. flex-wrap: wrap;
  762. // justify-content: space-between;
  763. font-size: 12px;
  764. color: #9e9e9e;
  765. .x {
  766. width: 20px;
  767. height: 15px;
  768. margin-right: 5px;
  769. }
  770. .q {
  771. background-color: #d0e4d5;
  772. }
  773. .b {
  774. background-color: #1989fa;
  775. }
  776. .g {
  777. background-color: #157a2c;
  778. }
  779. .r {
  780. background-color: #a30014;
  781. }
  782. .a {
  783. align-items: center;
  784. margin-bottom: 10px;
  785. }
  786. .mr10 {
  787. margin-right: 10px;
  788. }
  789. .mb0 {
  790. margin-bottom: 0;
  791. }
  792. }
  793. .stepsInfo {
  794. // flex: 1;
  795. width: 483px;
  796. }
  797. }
  798. .mt20 {
  799. margin-top: 20px;
  800. }
  801. .content-detail {
  802. overflow: hidden;
  803. }
  804. .executor {
  805. font-size: 14px;
  806. .col {
  807. color: #6e6e6e;
  808. padding-right: 10px;
  809. }
  810. }
  811. .result {
  812. justify-content: space-around;
  813. }
  814. .mr20 {
  815. margin-right: 20px;
  816. }
  817. .details {
  818. font-size: 14px;
  819. margin-bottom: 10px;
  820. }
  821. .customSteps {
  822. margin-top: 40px;
  823. font-size: 14px;
  824. margin-left: 80px;
  825. .time {
  826. font-size: 12px;
  827. color: #6e6e6e;
  828. margin-right: 20px;
  829. position: relative;
  830. &::after {
  831. content: '';
  832. width: 1px;
  833. height: 100%;
  834. background-color: #157a2c;
  835. position: absolute;
  836. right: -26px;
  837. }
  838. }
  839. .flex:last-child {
  840. .time {
  841. &::after {
  842. display: none;
  843. }
  844. }
  845. }
  846. .round {
  847. margin-right: 20px;
  848. width: 10px;
  849. height: 10px;
  850. border-radius: 100%;
  851. background-color: #157a2c;
  852. position: relative;
  853. span {
  854. position: absolute;
  855. top: 50%;
  856. left: 50%;
  857. width: 4px;
  858. height: 4px;
  859. background-color: #fff;
  860. border-radius: 100%;
  861. transform: translate(-2px, -2px);
  862. }
  863. }
  864. .text {
  865. .info {
  866. margin-top: 10px;
  867. width: 955px;
  868. background-color: #f0f3f3;
  869. overflow: hidden;
  870. padding: 10px;
  871. margin-bottom: 10px;
  872. }
  873. }
  874. }
  875. </style>