detailDialog copy.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <div class="page-title">
  5. <!-- <PageHeader title="出库单详情"> </PageHeader> -->
  6. </div>
  7. <!-- <StatusStep :activeCode="infoData.verifyStatus" /> -->
  8. <div>
  9. <div class="content-detail">
  10. <header-title title="基本信息" size="16px"></header-title>
  11. <div class="mt20">
  12. <el-form label-width="110px">
  13. <el-col :span="8">
  14. <el-form-item label="出库单号">
  15. <span>{{ infoData.bizNo }}</span>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="8">
  19. <el-form-item label="出库物品类型">
  20. <!-- <span>{{
  21. infoData.bizType == 3
  22. ? '物品'
  23. : getDictValue('类型用途', infoData.assetType)
  24. }}</span> -->
  25. <span>{{ handleAssetType(infoData.assetType) }}</span>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="8">
  29. <el-form-item label="出库场景">
  30. <span>{{ getSceneState(infoData.bizType) }}</span>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="8" v-if="infoData.bizType == 3">
  34. <el-form-item label="客户名称">
  35. <span>{{ infoData.clientName }}</span>
  36. </el-form-item> </el-col
  37. ><el-col :span="8" v-if="infoData.bizType == 3">
  38. <el-form-item label="客户联系人">
  39. <span>{{ infoData.clientUser }}</span>
  40. </el-form-item> </el-col
  41. ><el-col :span="8" v-if="infoData.bizType == 3">
  42. <el-form-item label="客户电话">
  43. <span>{{ infoData.clientPhone }}</span>
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="8">
  47. <el-form-item
  48. :label="infoData.bizType == 4 ? '领料单' : '来源单据'"
  49. >
  50. <span>{{ infoData.sourceBizNo }}</span>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="8">
  54. <el-form-item label="领料人">
  55. <span>{{ infoData.fromUser }}</span>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="8">
  59. <el-form-item label="领料人联系方式">
  60. <span>{{ infoData.fromUserPhone }}</span>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="8">
  64. <el-form-item label="出库登记人">
  65. <span>{{ infoData.extInfo?.createUserName }}</span>
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="8">
  69. <el-form-item label="权属部门">
  70. <span>{{ infoData.extInfo?.deptName }}</span>
  71. </el-form-item>
  72. </el-col>
  73. <el-col :span="8">
  74. <el-form-item label="创建时间">
  75. <span>{{ infoData.createTime }}</span>
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="8">
  79. <el-form-item label="出库时间">
  80. <span>{{ infoData.createTime }}</span>
  81. </el-form-item>
  82. </el-col>
  83. <el-col :span="8">
  84. <el-form-item label="审核人部门">
  85. <span>{{ infoData.verifyDeptName }}</span>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="8">
  89. <el-form-item label="审核人">
  90. <span>{{ infoData.verifyName }}</span>
  91. </el-form-item>
  92. </el-col>
  93. <el-col :span="16">
  94. <el-form-item label="备注">
  95. <span>{{ infoData.remark }}</span>
  96. </el-form-item>
  97. </el-col>
  98. </el-form>
  99. </div>
  100. </div>
  101. <div class="content-detail mt20">
  102. <header-title title="出库物品明细" size="16px"></header-title>
  103. <div class="mt20">
  104. <div class="mt10">
  105. <el-table
  106. ref="multipleTable"
  107. :data="warehousingMaterialList"
  108. tooltip-effect="dark"
  109. style="width: 100%"
  110. stripe
  111. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  112. >
  113. <el-table-column label="序号" type="index" width="50">
  114. </el-table-column>
  115. <el-table-column
  116. label="编码"
  117. prop="categoryCode"
  118. ></el-table-column>
  119. <el-table-column label="名称" prop="name"></el-table-column>
  120. <el-table-column
  121. v-for="(item, index) in tableHeader"
  122. :key="index"
  123. align="center"
  124. :label="item.label"
  125. :prop="item.prop"
  126. >
  127. <template slot-scope="{ row }">
  128. <template v-if="item.formatter">{{
  129. item.formatter(row)
  130. }}</template>
  131. <template v-else>{{ row[item.prop] }}</template>
  132. </template>
  133. </el-table-column>
  134. <el-table-column
  135. label="批号"
  136. prop="manualBatchNo"
  137. ></el-table-column>
  138. <el-table-column
  139. label="批次号"
  140. prop="batchNo"
  141. ></el-table-column>
  142. <el-table-column label="最小包装单元" width="120">
  143. <template slot-scope="{ row }">
  144. {{ row.minPackingCount }}{{ row.measuringUnit }}/{{
  145. row.packingUnit
  146. }}
  147. </template>
  148. </el-table-column>
  149. <el-table-column label="包装数量" prop="availableCountBase">
  150. <template slot-scope="{ row }">
  151. {{ row.packingCount }}{{ row.packingUnit }}
  152. </template>
  153. </el-table-column>
  154. <el-table-column
  155. label="计量数量"
  156. prop="count"
  157. ></el-table-column>
  158. <el-table-column
  159. label="计量单位"
  160. prop="measuringUnit"
  161. ></el-table-column>
  162. <el-table-column label="重量" prop="weight"></el-table-column>
  163. <el-table-column
  164. label="重量单位"
  165. prop="weightUnit"
  166. ></el-table-column>
  167. <el-table-column label="单价">
  168. <template slot-scope="{ row }">
  169. {{ row.price ? row.price : '-' }}元/{{ row.weightUnit }}
  170. </template>
  171. </el-table-column>
  172. <el-table-column
  173. label="金额"
  174. prop="totalMoney"
  175. ></el-table-column>
  176. <el-table-column
  177. label="货位"
  178. prop="position"
  179. width="200"
  180. ></el-table-column>
  181. </el-table>
  182. </div>
  183. </div>
  184. </div>
  185. <!-- ${
  186. infoData.bizType == 3
  187. ? '物品'
  188. : getDictValue('类型用途', infoData.assetType)
  189. }明细 -->
  190. <div class="mt20">
  191. <header-title :title="`出库包装明细`" size="16px"></header-title>
  192. <el-table
  193. ref="multipleTable"
  194. :data="materialCodeReqList"
  195. tooltip-effect="dark"
  196. style="width: 100%"
  197. height="300px"
  198. stripe
  199. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  200. >
  201. <el-table-column label="序号" type="index" width="50">
  202. </el-table-column>
  203. <!-- ${
  204. infoData.bizType == 3
  205. ? '物品'
  206. : getDictValue('类型用途', infoData.assetType)
  207. } -->
  208. <el-table-column
  209. :label="`编码`"
  210. prop="categoryCode"
  211. ></el-table-column>
  212. <el-table-column :label="`名称`" prop="name"></el-table-column>
  213. <el-table-column
  214. label="批号"
  215. prop="manualBatchNo"
  216. ></el-table-column>
  217. <el-table-column label="批次号" prop="batchNo"></el-table-column>
  218. <el-table-column
  219. label="包装编码"
  220. prop="code"
  221. width="80"
  222. ></el-table-column>
  223. <el-table-column label="包装数量" prop="packingCount" width="80">
  224. <template slot-scope="{ row }">
  225. {{ row.packingCount == 0 ? '0' : row.packingCount }}
  226. </template>
  227. </el-table-column>
  228. <el-table-column label="单位" prop="packingUnit"></el-table-column>
  229. <el-table-column
  230. label="计量数量"
  231. prop="totalCount"
  232. ></el-table-column>
  233. <el-table-column
  234. label="计量单位"
  235. prop="measuringUnit"
  236. ></el-table-column>
  237. <!-- <el-table-column label="领料部门" prop=""></el-table-column> -->
  238. <el-table-column
  239. v-if="infoData.bizType == 2 || infoData.bizType == 1"
  240. label="物料代号"
  241. prop="materielCode"
  242. width="130"
  243. >
  244. <template slot-scope="{ row }">
  245. {{ row.materielCode }}
  246. </template>
  247. </el-table-column>
  248. <el-table-column
  249. v-if="infoData.bizType == 2 || infoData.bizType == 1"
  250. label="客户代号"
  251. prop="clientCode"
  252. >
  253. <template slot-scope="{ row }">
  254. {{ row.clientCode }}
  255. </template>
  256. </el-table-column>
  257. <!-- v-if="infoData.bizType == 1" -->
  258. <el-table-column label="刻码" prop="engrave">
  259. <template slot-scope="{ row }">
  260. {{ row.engrave }}
  261. </template>
  262. </el-table-column>
  263. <el-table-column label="重量" prop="weight">
  264. <template slot-scope="{ row }">
  265. {{ row.weight }}
  266. </template>
  267. </el-table-column>
  268. <el-table-column label="重量单位" prop="weightUtil">
  269. <template slot-scope="{ row }">
  270. {{ row.weightUtil }}
  271. </template>
  272. </el-table-column>
  273. <el-table-column label="日期" prop="createTime" width="200">
  274. <template slot="header" slot-scope="scope">
  275. <!-- {{ dateTypes != 1 ? '采购日期' : '生产日期' }} -->
  276. 采购日期
  277. </template>
  278. <template slot-scope="{ row }">
  279. {{ row.createTime }}
  280. </template>
  281. </el-table-column>
  282. <el-table-column label="货位" prop="" width="200">
  283. <template slot-scope="{ row }">
  284. {{ row.position }}
  285. </template>
  286. </el-table-column>
  287. <!-- <el-table-column label="转消耗" prop="">
  288. <template slot-scope="{ row }">
  289. <el-checkbox
  290. disabled
  291. v-model="row.isTransferAsset"
  292. ></el-checkbox>
  293. </template>
  294. </el-table-column> -->
  295. </el-table>
  296. </div>
  297. <div class="mt20">
  298. <header-title :title="`出库物料明细`" size="16px"></header-title>
  299. <el-table
  300. ref="multipleTable1"
  301. :data="metaList"
  302. tooltip-effect="dark"
  303. style="width: 100%"
  304. height="300px"
  305. stripe
  306. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  307. >
  308. <el-table-column label="序号" type="index" width="50">
  309. </el-table-column>
  310. <el-table-column label="编码" prop="assetCode"> </el-table-column>
  311. <el-table-column label="名称" prop="assetName"> </el-table-column>
  312. <el-table-column label="批号" prop="manualBatchNo">
  313. </el-table-column>
  314. <el-table-column label="批次号" prop="batchNo"> </el-table-column>
  315. <el-table-column label="物料编码" prop="no"> </el-table-column>
  316. <el-table-column label="计量数量" prop="">
  317. <template slot-scope="{ row }">1</template>
  318. </el-table-column>
  319. <el-table-column label="计量单位" prop="measuringUnit">
  320. </el-table-column>
  321. <el-table-column label="物料代号" prop="meterielCode" width="130">
  322. </el-table-column>
  323. <el-table-column label="客户代号" prop="clientCode">
  324. </el-table-column>
  325. <el-table-column label="刻码" prop="engrave"> </el-table-column>
  326. <el-table-column label="重量" prop="weight"> </el-table-column>
  327. <el-table-column label="重量单位" prop="weightUnit">
  328. </el-table-column>
  329. </el-table>
  330. </div>
  331. </div>
  332. </el-card>
  333. </div>
  334. </template>
  335. <script>
  336. import StatusStep from '@/components/StatusStep/common.vue';
  337. // import { getInfo } from '@/api/stockManagement/outgoingManagement' '@/components/PageHeader'
  338. // import PageHeader from '@/components/PageHeader';
  339. import { tableHeader } from './common';
  340. import { mapGetters, mapActions } from 'vuex';
  341. import outin from '@/api/warehouseManagement/outin';
  342. import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
  343. import {
  344. getOutInBySourceBizNo,
  345. allCategoryLevel
  346. } from '@/api/classifyManage';
  347. import {
  348. materialType,
  349. warehousingType,
  350. useDict,
  351. useDictLabel,
  352. inputStatus,
  353. outputSceneState,
  354. auditStatus
  355. } from '@/utils/dict/index';
  356. import { getUser } from '@/api/system/user';
  357. export default {
  358. components: { StatusStep },
  359. props: ['businessId', 'type'],
  360. data() {
  361. return {
  362. metaList: [],
  363. infoData: {},
  364. warehousingMaterialList: [],
  365. materialCodeReqList: [],
  366. tableData2: [],
  367. fromUserList: [],
  368. activeName: 'a',
  369. num: 1,
  370. stepsList: [
  371. { status: 'Done', nodeName: '创建' },
  372. { status: 'Done', nodeName: '暂存', time: '2023-01-06' },
  373. { status: 'Done', nodeName: '收货中' },
  374. { status: 'Processing', nodeName: '已收货' }
  375. ],
  376. list: [
  377. {
  378. name: '紧急',
  379. color: 'red'
  380. },
  381. {
  382. name: '重要',
  383. color: 'blue'
  384. },
  385. {
  386. name: '已催办',
  387. color: 'red'
  388. }
  389. ],
  390. stepsTitle: '已完成',
  391. stepsStatus: 'success',
  392. active: 0,
  393. codeList: []
  394. };
  395. },
  396. watch: {
  397. 'infoData.verifyStatus': {
  398. immediate: true,
  399. handler(val) {
  400. if (val == 0) {
  401. this.active = 1;
  402. this.stepsTitle = '未审核';
  403. this.stepsStatus = 'wait';
  404. } else if (val == 1) {
  405. this.active = 2;
  406. this.stepsTitle = '审核中';
  407. this.stepsStatus = 'process';
  408. } else if (val == 2) {
  409. this.active = 2;
  410. this.stepsTitle = '审核通过';
  411. this.stepsStatus = 'success';
  412. } else if (val == 3) {
  413. this.active = 2;
  414. this.stepsTitle = '驳回';
  415. this.stepsStatus = 'error';
  416. }
  417. }
  418. }
  419. },
  420. computed: {
  421. ...mapGetters(['getDictValue']),
  422. tableHeader() {
  423. return tableHeader(this.infoData?.extInfo?.assetType);
  424. }
  425. },
  426. async created() {
  427. await this.getCodeList();
  428. this.getUser();
  429. this._getInfo();
  430. this.requestDict('类型用途');
  431. },
  432. methods: {
  433. async getCodeList() {
  434. const { data } = await allCategoryLevel();
  435. this.codeList = data.map((item) => {
  436. return { dictCode: item.id, dictValue: item.name };
  437. });
  438. },
  439. handleAssetType(r) {
  440. const code = this.codeList.find((item) => item.dictCode == r);
  441. return code?.dictValue;
  442. },
  443. getUserName(id) {
  444. let obj = this.fromUserList.find((x) => x.id == id);
  445. return obj && obj.name;
  446. },
  447. async getUser() {
  448. let res22 = await warehouseDefinition.getUserPage({
  449. groupId: 1,
  450. size: 9999,
  451. page: 1
  452. });
  453. this.fromUserList = res22.list;
  454. },
  455. // close() {
  456. // finishPageTab(); // 关闭当前页签
  457. // },
  458. ...mapActions('dict', ['requestDict']),
  459. getMaterialType: useDictLabel(materialType),
  460. getInputStatus: useDictLabel(inputStatus),
  461. getWarehousingType: useDictLabel(warehousingType),
  462. getSceneState: useDictLabel(outputSceneState),
  463. getAuditStatus: useDictLabel(auditStatus),
  464. async _getInfo() {
  465. // const res = await outin.getById(this.businessId);
  466. const res =
  467. this.type == 'sourceBizNo'
  468. ? await getOutInBySourceBizNo(this.businessId)
  469. : await outin.getById(this.businessId);
  470. console.log(res);
  471. this.infoData = {
  472. ...res,
  473. assetType: res.extInfo.assetType,
  474. fromUserPhone: res.fromUserPhone,
  475. verifyDeptName: res.extInfo.verifyDeptName
  476. };
  477. if (res) {
  478. // this.warehousingMaterialList = res.warehouseLedgerInfos.map(
  479. // (item) => {
  480. // item.selfSum = (item.warehouseLedgerDetails || []).reduce(
  481. // (sum, pre) => {
  482. // if (item.isUnpack) {
  483. // return ++sum;
  484. // }
  485. // return sum + pre.measurementUnit;
  486. // },
  487. // 0
  488. // );
  489. // return item;
  490. // }
  491. // );
  492. this.warehousingMaterialList = res.outInDetailVOList;
  493. // this.materialCodeReqList =
  494. // res.warehouseLedgerInfos.warehouseLedgerDetails;
  495. let arr = [];
  496. for (const key in res.outInDetailVOList) {
  497. for (const k in res.outInDetailVOList[key]
  498. .outInDetailRecordVOList) {
  499. arr.push({
  500. ...res.outInDetailVOList[key].outInDetailRecordVOList[k]
  501. });
  502. }
  503. }
  504. this.materialCodeReqList = arr;
  505. let arrs = [];
  506. for (const key in res.outInDetailVOList) {
  507. for (const j in res.outInDetailVOList[key]
  508. .outInDetailRecordVOList) {
  509. for (const k in res.outInDetailVOList[key]
  510. .outInDetailRecordVOList[j]
  511. .outInDetailRecordMaterialDetailVOList) {
  512. arrs.push({
  513. ...res.outInDetailVOList[key].outInDetailRecordVOList[j]
  514. .outInDetailRecordMaterialDetailVOList[k]
  515. });
  516. }
  517. }
  518. }
  519. this.metaList = arrs;
  520. // console.log('qwqwqw', arr);
  521. // res.warehouseLedgerInfos.ledgers;
  522. // .map((i) =>
  523. // (i.outInDetailRecordVOList || []).map((item) => ({
  524. // ...item,
  525. // isUnpack: i.isUnpack
  526. // }))
  527. // )
  528. // .flat();
  529. }
  530. },
  531. // 时间差计算
  532. difference(beginTime, endTime) {
  533. var dateBegin = new Date(beginTime);
  534. var dateEnd = new Date(endTime);
  535. var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
  536. var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
  537. var leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
  538. var hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数
  539. //计算相差分钟数
  540. var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
  541. var minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
  542. //计算相差秒数
  543. var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
  544. var seconds = Math.round(leave3 / 1000);
  545. if (dayDiff == -1) {
  546. dayDiff = 0;
  547. hours = 0;
  548. minutes = 0;
  549. }
  550. return dayDiff + '天' + hours + '小时' + minutes + '分钟';
  551. }
  552. }
  553. };
  554. </script>
  555. <style lang="scss" scoped>
  556. .stepsStatus {
  557. width: 40%;
  558. margin: 0 auto;
  559. }
  560. .p20 {
  561. padding: 20px;
  562. }
  563. .flex {
  564. display: flex;
  565. }
  566. .title {
  567. justify-content: space-between;
  568. border-bottom: 1px solid #ccc;
  569. padding-bottom: 5px;
  570. span {
  571. font-size: 16px;
  572. }
  573. .col {
  574. padding-left: 40px;
  575. font-size: 14px;
  576. color: #aaaaaa;
  577. }
  578. }
  579. .degree {
  580. margin-right: 10px;
  581. padding: 0px 15px;
  582. color: #fff;
  583. font-size: 13px;
  584. line-height: 23px;
  585. border-radius: 23px;
  586. display: flex;
  587. align-items: center;
  588. justify-content: space-between;
  589. span {
  590. width: 5px;
  591. height: 5px;
  592. border-radius: 100%;
  593. margin-right: 6px;
  594. background-color: #fff;
  595. }
  596. }
  597. .red {
  598. background-color: rgb(163, 0, 20);
  599. }
  600. .blue {
  601. background-color: #1989fa;
  602. }
  603. .createdInfo {
  604. justify-content: space-around;
  605. margin-top: 10px;
  606. font-size: 14px;
  607. .col {
  608. color: #6e6e6e;
  609. padding-right: 10px;
  610. }
  611. }
  612. .mt40 {
  613. margin-top: 40px;
  614. }
  615. .custSteps {
  616. margin-top: 20px;
  617. margin-left: 70px;
  618. .box {
  619. width: 158px;
  620. border: 1px solid #ccc;
  621. padding: 10px;
  622. flex-direction: row;
  623. flex-wrap: wrap;
  624. // justify-content: space-between;
  625. font-size: 12px;
  626. color: #9e9e9e;
  627. .x {
  628. width: 20px;
  629. height: 15px;
  630. margin-right: 5px;
  631. }
  632. .q {
  633. background-color: #d0e4d5;
  634. }
  635. .b {
  636. background-color: #1989fa;
  637. }
  638. .g {
  639. background-color: #157a2c;
  640. }
  641. .r {
  642. background-color: #a30014;
  643. }
  644. .a {
  645. align-items: center;
  646. margin-bottom: 10px;
  647. }
  648. .mr10 {
  649. margin-right: 10px;
  650. }
  651. .mb0 {
  652. margin-bottom: 0;
  653. }
  654. }
  655. .stepsInfo {
  656. // flex: 1;
  657. width: 483px;
  658. }
  659. }
  660. .mt20 {
  661. margin-top: 20px;
  662. }
  663. .content-detail {
  664. overflow: hidden;
  665. }
  666. .executor {
  667. font-size: 14px;
  668. .col {
  669. color: #6e6e6e;
  670. padding-right: 10px;
  671. }
  672. }
  673. .result {
  674. justify-content: space-around;
  675. }
  676. .mr20 {
  677. margin-right: 20px;
  678. }
  679. .details {
  680. font-size: 14px;
  681. margin-bottom: 10px;
  682. }
  683. .customSteps {
  684. margin-top: 40px;
  685. font-size: 14px;
  686. margin-left: 80px;
  687. .time {
  688. font-size: 12px;
  689. color: #6e6e6e;
  690. margin-right: 20px;
  691. position: relative;
  692. &::after {
  693. content: '';
  694. width: 1px;
  695. height: 100%;
  696. background-color: #157a2c;
  697. position: absolute;
  698. right: -26px;
  699. }
  700. }
  701. .flex:last-child {
  702. .time {
  703. &::after {
  704. display: none;
  705. }
  706. }
  707. }
  708. .round {
  709. margin-right: 20px;
  710. width: 10px;
  711. height: 10px;
  712. border-radius: 100%;
  713. background-color: #157a2c;
  714. position: relative;
  715. span {
  716. position: absolute;
  717. top: 50%;
  718. left: 50%;
  719. width: 4px;
  720. height: 4px;
  721. background-color: #fff;
  722. border-radius: 100%;
  723. transform: translate(-2px, -2px);
  724. }
  725. }
  726. .text {
  727. .info {
  728. margin-top: 10px;
  729. width: 955px;
  730. background-color: #f0f3f3;
  731. overflow: hidden;
  732. padding: 10px;
  733. margin-bottom: 10px;
  734. }
  735. }
  736. }
  737. </style>