detailDialog.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  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
  229. label="包装单位"
  230. prop="packingUnit"
  231. ></el-table-column>
  232. <el-table-column
  233. label="计量数量"
  234. prop="totalCount"
  235. ></el-table-column>
  236. <el-table-column
  237. label="计量单位"
  238. prop="measuringUnit"
  239. ></el-table-column>
  240. <!-- <el-table-column label="领料部门" prop=""></el-table-column> -->
  241. <el-table-column
  242. v-if="infoData.bizType == 2 || infoData.bizType == 1"
  243. label="物料代号"
  244. prop="materielCode"
  245. width="130"
  246. >
  247. <template slot-scope="{ row }">
  248. {{ row.materielCode }}
  249. </template>
  250. </el-table-column>
  251. <el-table-column
  252. v-if="infoData.bizType == 2 || infoData.bizType == 1"
  253. label="客户代号"
  254. prop="clientCode"
  255. >
  256. <template slot-scope="{ row }">
  257. {{ row.clientCode }}
  258. </template>
  259. </el-table-column>
  260. <!-- v-if="infoData.bizType == 1" -->
  261. <el-table-column label="刻码" prop="engrave">
  262. <template slot-scope="{ row }">
  263. {{ row.engrave }}
  264. </template>
  265. </el-table-column>
  266. <el-table-column label="重量" prop="weight">
  267. <template slot-scope="{ row }">
  268. {{ row.weight }}
  269. </template>
  270. </el-table-column>
  271. <el-table-column label="重量单位" prop="weightUtil">
  272. <template slot-scope="{ row }">
  273. {{ row.weightUtil }}
  274. </template>
  275. </el-table-column>
  276. <el-table-column label="日期" prop="createTime" width="200">
  277. <template slot="header" slot-scope="scope">
  278. <!-- {{ dateTypes != 1 ? '采购日期' : '生产日期' }} -->
  279. 采购日期
  280. </template>
  281. <template slot-scope="{ row }">
  282. {{ row.createTime }}
  283. </template>
  284. </el-table-column>
  285. <el-table-column label="货位" prop="" width="200">
  286. <template slot-scope="{ row }">
  287. {{ row.position }}
  288. </template>
  289. </el-table-column>
  290. <!-- <el-table-column label="转消耗" prop="">
  291. <template slot-scope="{ row }">
  292. <el-checkbox
  293. disabled
  294. v-model="row.isTransferAsset"
  295. ></el-checkbox>
  296. </template>
  297. </el-table-column> -->
  298. </el-table>
  299. </div>
  300. <div class="mt20">
  301. <header-title :title="`出库物料明细`" size="16px"></header-title>
  302. <el-table
  303. ref="multipleTable1"
  304. :data="metaList"
  305. tooltip-effect="dark"
  306. style="width: 100%"
  307. height="300px"
  308. stripe
  309. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  310. >
  311. <el-table-column label="序号" type="index" width="50">
  312. </el-table-column>
  313. <el-table-column label="编码" prop="assetCode"> </el-table-column>
  314. <el-table-column label="名称" prop="assetName"> </el-table-column>
  315. <el-table-column label="批号" prop="manualBatchNo">
  316. </el-table-column>
  317. <el-table-column label="批次号" prop="batchNo"> </el-table-column>
  318. <el-table-column label="物料编码" prop="no"> </el-table-column>
  319. <el-table-column label="计量数量" prop="">
  320. <template slot-scope="{ row }">1</template>
  321. </el-table-column>
  322. <el-table-column label="计量单位" prop="measuringUnit">
  323. </el-table-column>
  324. <el-table-column label="物料代号" prop="meterielCode" width="130">
  325. </el-table-column>
  326. <el-table-column label="客户代号" prop="clientCode">
  327. </el-table-column>
  328. <el-table-column label="刻码" prop="engrave"> </el-table-column>
  329. <el-table-column label="重量" prop="weight"> </el-table-column>
  330. <el-table-column label="重量单位" prop="weightUnit">
  331. </el-table-column>
  332. </el-table>
  333. </div>
  334. </div>
  335. </el-card>
  336. </div>
  337. </template>
  338. <script>
  339. import StatusStep from '@/components/StatusStep/common.vue';
  340. // import { getInfo } from '@/api/stockManagement/outgoingManagement' '@/components/PageHeader'
  341. // import PageHeader from '@/components/PageHeader';
  342. import { tableHeader } from './common';
  343. import { mapGetters, mapActions } from 'vuex';
  344. import outin from '@/api/warehouseManagement/outin';
  345. import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
  346. import {
  347. getOutInBySourceBizNo,
  348. allCategoryLevel
  349. } from '@/api/classifyManage';
  350. import {
  351. materialType,
  352. warehousingType,
  353. useDict,
  354. useDictLabel,
  355. inputStatus,
  356. outputSceneState,
  357. auditStatus
  358. } from '@/utils/dict/index';
  359. import { getUser } from '@/api/system/user';
  360. export default {
  361. components: { StatusStep },
  362. props: ['businessId', 'type'],
  363. data() {
  364. return {
  365. metaList: [],
  366. infoData: {},
  367. warehousingMaterialList: [],
  368. materialCodeReqList: [],
  369. tableData2: [],
  370. fromUserList: [],
  371. activeName: 'a',
  372. num: 1,
  373. stepsList: [
  374. { status: 'Done', nodeName: '创建' },
  375. { status: 'Done', nodeName: '暂存', time: '2023-01-06' },
  376. { status: 'Done', nodeName: '收货中' },
  377. { status: 'Processing', nodeName: '已收货' }
  378. ],
  379. list: [
  380. {
  381. name: '紧急',
  382. color: 'red'
  383. },
  384. {
  385. name: '重要',
  386. color: 'blue'
  387. },
  388. {
  389. name: '已催办',
  390. color: 'red'
  391. }
  392. ],
  393. stepsTitle: '已完成',
  394. stepsStatus: 'success',
  395. active: 0,
  396. codeList: []
  397. };
  398. },
  399. watch: {
  400. 'infoData.verifyStatus': {
  401. immediate: true,
  402. handler(val) {
  403. if (val == 0) {
  404. this.active = 1;
  405. this.stepsTitle = '未审核';
  406. this.stepsStatus = 'wait';
  407. } else if (val == 1) {
  408. this.active = 2;
  409. this.stepsTitle = '审核中';
  410. this.stepsStatus = 'process';
  411. } else if (val == 2) {
  412. this.active = 2;
  413. this.stepsTitle = '审核通过';
  414. this.stepsStatus = 'success';
  415. } else if (val == 3) {
  416. this.active = 2;
  417. this.stepsTitle = '驳回';
  418. this.stepsStatus = 'error';
  419. }
  420. }
  421. }
  422. },
  423. computed: {
  424. ...mapGetters(['getDictValue']),
  425. tableHeader() {
  426. return tableHeader(this.infoData?.extInfo?.assetType);
  427. }
  428. },
  429. async created() {
  430. await this.getCodeList();
  431. this.getUser();
  432. this._getInfo();
  433. this.requestDict('类型用途');
  434. },
  435. methods: {
  436. async getCodeList() {
  437. const { data } = await allCategoryLevel();
  438. this.codeList = data.map((item) => {
  439. return { dictCode: item.id, dictValue: item.name };
  440. });
  441. },
  442. handleAssetType(r) {
  443. const code = this.codeList.find((item) => item.dictCode == r);
  444. return code?.dictValue;
  445. },
  446. getUserName(id) {
  447. let obj = this.fromUserList.find((x) => x.id == id);
  448. return obj && obj.name;
  449. },
  450. async getUser() {
  451. let res22 = await warehouseDefinition.getUserPage({
  452. groupId: 1,
  453. size: 9999,
  454. page: 1
  455. });
  456. this.fromUserList = res22.list;
  457. },
  458. // close() {
  459. // finishPageTab(); // 关闭当前页签
  460. // },
  461. ...mapActions('dict', ['requestDict']),
  462. getMaterialType: useDictLabel(materialType),
  463. getInputStatus: useDictLabel(inputStatus),
  464. getWarehousingType: useDictLabel(warehousingType),
  465. getSceneState: useDictLabel(outputSceneState),
  466. getAuditStatus: useDictLabel(auditStatus),
  467. async _getInfo() {
  468. // const res = await outin.getById(this.businessId);
  469. const res =
  470. this.type == 'sourceBizNo'
  471. ? await getOutInBySourceBizNo(this.businessId)
  472. : await outin.getById(this.businessId);
  473. console.log(res);
  474. this.infoData = {
  475. ...res,
  476. assetType: res.extInfo.assetType,
  477. fromUserPhone: res.fromUserPhone,
  478. verifyDeptName: res.extInfo.verifyDeptName
  479. };
  480. if (res) {
  481. // this.warehousingMaterialList = res.warehouseLedgerInfos.map(
  482. // (item) => {
  483. // item.selfSum = (item.warehouseLedgerDetails || []).reduce(
  484. // (sum, pre) => {
  485. // if (item.isUnpack) {
  486. // return ++sum;
  487. // }
  488. // return sum + pre.measurementUnit;
  489. // },
  490. // 0
  491. // );
  492. // return item;
  493. // }
  494. // );
  495. this.warehousingMaterialList = res.outInDetailVOList;
  496. // this.materialCodeReqList =
  497. // res.warehouseLedgerInfos.warehouseLedgerDetails;
  498. let arr = [];
  499. for (const key in res.outInDetailVOList) {
  500. for (const k in res.outInDetailVOList[key]
  501. .outInDetailRecordVOList) {
  502. arr.push({
  503. ...res.outInDetailVOList[key].outInDetailRecordVOList[k]
  504. });
  505. }
  506. }
  507. this.materialCodeReqList = arr;
  508. let arrs = [];
  509. for (const key in res.outInDetailVOList) {
  510. for (const j in res.outInDetailVOList[key]
  511. .outInDetailRecordVOList) {
  512. for (const k in res.outInDetailVOList[key]
  513. .outInDetailRecordVOList[j]
  514. .outInDetailRecordMaterialDetailVOList) {
  515. arrs.push({
  516. ...res.outInDetailVOList[key].outInDetailRecordVOList[j]
  517. .outInDetailRecordMaterialDetailVOList[k]
  518. });
  519. }
  520. }
  521. }
  522. this.metaList = arrs;
  523. // console.log('qwqwqw', arr);
  524. // res.warehouseLedgerInfos.ledgers;
  525. // .map((i) =>
  526. // (i.outInDetailRecordVOList || []).map((item) => ({
  527. // ...item,
  528. // isUnpack: i.isUnpack
  529. // }))
  530. // )
  531. // .flat();
  532. }
  533. },
  534. // 时间差计算
  535. difference(beginTime, endTime) {
  536. var dateBegin = new Date(beginTime);
  537. var dateEnd = new Date(endTime);
  538. var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
  539. var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
  540. var leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
  541. var hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数
  542. //计算相差分钟数
  543. var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
  544. var minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
  545. //计算相差秒数
  546. var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
  547. var seconds = Math.round(leave3 / 1000);
  548. if (dayDiff == -1) {
  549. dayDiff = 0;
  550. hours = 0;
  551. minutes = 0;
  552. }
  553. return dayDiff + '天' + hours + '小时' + minutes + '分钟';
  554. }
  555. }
  556. };
  557. </script>
  558. <style lang="scss" scoped>
  559. .stepsStatus {
  560. width: 40%;
  561. margin: 0 auto;
  562. }
  563. .p20 {
  564. padding: 20px;
  565. }
  566. .flex {
  567. display: flex;
  568. }
  569. .title {
  570. justify-content: space-between;
  571. border-bottom: 1px solid #ccc;
  572. padding-bottom: 5px;
  573. span {
  574. font-size: 16px;
  575. }
  576. .col {
  577. padding-left: 40px;
  578. font-size: 14px;
  579. color: #aaaaaa;
  580. }
  581. }
  582. .degree {
  583. margin-right: 10px;
  584. padding: 0px 15px;
  585. color: #fff;
  586. font-size: 13px;
  587. line-height: 23px;
  588. border-radius: 23px;
  589. display: flex;
  590. align-items: center;
  591. justify-content: space-between;
  592. span {
  593. width: 5px;
  594. height: 5px;
  595. border-radius: 100%;
  596. margin-right: 6px;
  597. background-color: #fff;
  598. }
  599. }
  600. .red {
  601. background-color: rgb(163, 0, 20);
  602. }
  603. .blue {
  604. background-color: #1989fa;
  605. }
  606. .createdInfo {
  607. justify-content: space-around;
  608. margin-top: 10px;
  609. font-size: 14px;
  610. .col {
  611. color: #6e6e6e;
  612. padding-right: 10px;
  613. }
  614. }
  615. .mt40 {
  616. margin-top: 40px;
  617. }
  618. .custSteps {
  619. margin-top: 20px;
  620. margin-left: 70px;
  621. .box {
  622. width: 158px;
  623. border: 1px solid #ccc;
  624. padding: 10px;
  625. flex-direction: row;
  626. flex-wrap: wrap;
  627. // justify-content: space-between;
  628. font-size: 12px;
  629. color: #9e9e9e;
  630. .x {
  631. width: 20px;
  632. height: 15px;
  633. margin-right: 5px;
  634. }
  635. .q {
  636. background-color: #d0e4d5;
  637. }
  638. .b {
  639. background-color: #1989fa;
  640. }
  641. .g {
  642. background-color: #157a2c;
  643. }
  644. .r {
  645. background-color: #a30014;
  646. }
  647. .a {
  648. align-items: center;
  649. margin-bottom: 10px;
  650. }
  651. .mr10 {
  652. margin-right: 10px;
  653. }
  654. .mb0 {
  655. margin-bottom: 0;
  656. }
  657. }
  658. .stepsInfo {
  659. // flex: 1;
  660. width: 483px;
  661. }
  662. }
  663. .mt20 {
  664. margin-top: 20px;
  665. }
  666. .content-detail {
  667. overflow: hidden;
  668. }
  669. .executor {
  670. font-size: 14px;
  671. .col {
  672. color: #6e6e6e;
  673. padding-right: 10px;
  674. }
  675. }
  676. .result {
  677. justify-content: space-around;
  678. }
  679. .mr20 {
  680. margin-right: 20px;
  681. }
  682. .details {
  683. font-size: 14px;
  684. margin-bottom: 10px;
  685. }
  686. .customSteps {
  687. margin-top: 40px;
  688. font-size: 14px;
  689. margin-left: 80px;
  690. .time {
  691. font-size: 12px;
  692. color: #6e6e6e;
  693. margin-right: 20px;
  694. position: relative;
  695. &::after {
  696. content: '';
  697. width: 1px;
  698. height: 100%;
  699. background-color: #157a2c;
  700. position: absolute;
  701. right: -26px;
  702. }
  703. }
  704. .flex:last-child {
  705. .time {
  706. &::after {
  707. display: none;
  708. }
  709. }
  710. }
  711. .round {
  712. margin-right: 20px;
  713. width: 10px;
  714. height: 10px;
  715. border-radius: 100%;
  716. background-color: #157a2c;
  717. position: relative;
  718. span {
  719. position: absolute;
  720. top: 50%;
  721. left: 50%;
  722. width: 4px;
  723. height: 4px;
  724. background-color: #fff;
  725. border-radius: 100%;
  726. transform: translate(-2px, -2px);
  727. }
  728. }
  729. .text {
  730. .info {
  731. margin-top: 10px;
  732. width: 955px;
  733. background-color: #f0f3f3;
  734. overflow: hidden;
  735. padding: 10px;
  736. margin-bottom: 10px;
  737. }
  738. }
  739. }
  740. </style>