detail.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  1. <template>
  2. <view class="tour-container">
  3. <uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="待检设备列表" @clickLeft="back"
  4. @clickRight="HandlScanCode"></uni-nav-bar>
  5. <view class="tour-wrapper">
  6. <view class="tour_tally-content">
  7. <view class="kd-equipment">
  8. <view class="kd-list-container">
  9. <u-list @scrolltolower="scrolltolower">
  10. <u-list-item v-for="(item, index) in euqiList" :key="index">
  11. <view class="kd-card">
  12. <view class="kd-card-wrapper">
  13. <view class="kd-cell">
  14. <text class="kd-label">工单名称</text>
  15. {{ item.code }}
  16. </view>
  17. <view class="kd-cell">
  18. <text class="kd-label">设备名称</text>
  19. {{ item.name }}
  20. </view>
  21. <view class="kd-cell">
  22. <text class="kd-label">设备型号</text>
  23. {{ item.model }}
  24. </view>
  25. <view class="kd-cell">
  26. <text class="kd-label">固资编号</text>
  27. {{ item.fixCode }}
  28. </view>
  29. <view class="kd-cell">
  30. <text class="kd-label">内部编号</text>
  31. {{ item.codeNumber }}
  32. </view>
  33. <view class="kd-cell">
  34. <text class="kd-label">规则名称</text>
  35. {{ item.planName }}
  36. </view>
  37. <view class="kd-cell">
  38. <text class="kd-label">工单生成时间</text>
  39. {{ item.createTime }}
  40. </view>
  41. <view class="kd-cell">
  42. <text class="kd-label">班次</text>
  43. {{ getCurrentClasses(item.createTime) }}
  44. </view>
  45. <view class="kd-cell">
  46. <text class="kd-label">执行结果</text>
  47. <text class="status-box text-warning"
  48. v-if="item.executeStatus === 0">待检</text>
  49. <text class="status-box text-primary"
  50. v-else-if="item.executeStatus === 1">已检</text>
  51. <text class="status-box text-danger"
  52. v-else-if="item.executeStatus === 2">异常</text>
  53. <text class="status-box text-primary"
  54. v-else-if="item.executeStatus === 3">已报修</text>
  55. </view>
  56. </view>
  57. <view class="card-footer">
  58. <button v-if="item.executeStatus == 0" type="primary" class="primary-btn"
  59. @click="handleCheck(item)">检查</button>
  60. <template v-if="item.orderStatus && item.orderStatus === 3">
  61. <button type="default" v-if="item.resultStatus === 3"
  62. @click="handLbxDetail(item)">报修详情</button>
  63. <button type="default" v-else-if="item.resultStatus === 2"
  64. @click="handLbx(item)">报修</button>
  65. </template>
  66. <button type="default"
  67. v-if="[0, 2, 3].includes(item.orderStatus) && item.executeStatus != 0"
  68. @click="checkDetail(item)">检查详情</button>
  69. </view>
  70. </view>
  71. </u-list-item>
  72. <u-list-item v-if="euqiList.length === 0">
  73. <view class="nodata">暂无数据</view>
  74. </u-list-item>
  75. </u-list>
  76. </view>
  77. </view>
  78. </view>
  79. <uni-popup ref="inputDialog" type="dialog">
  80. <uni-popup-dialog ref="inputClose" mode="input" title="您当前已超出计划完成时间,请填写原因" placeholder="请输入内容"
  81. :before-close="true" @close="handleClose" @confirm="timeoutCauseConfirm"></uni-popup-dialog>
  82. </uni-popup>
  83. </view>
  84. <u-modal :show="modalShow" title="提示" @confirm="modalShow = false">
  85. <view>
  86. 您还有
  87. <text class="text-warning">{{ worksheetInfo.awaitInspectSum }}</text>
  88. 台设备待检,不可报工
  89. </view>
  90. </u-modal>
  91. <Assign ref="assignRef" @success="assignSuccess" />
  92. <!-- <ScanCode @scancodedate="scancodedate"></ScanCode> -->
  93. </view>
  94. </template>
  95. <script>
  96. import Step from '@/components/Step/Step.vue'
  97. import StepItem from '@/components/Step/StepItem.vue'
  98. import PopSparePart from '@/pages/maintenanceWorkorder/components/PopSparePart.vue'
  99. import {
  100. getWorkOrderDetail,
  101. getDeviceList,
  102. startExecuting,
  103. signingWork,
  104. devicestatistics,
  105. deviceListQrCode
  106. } from '@/api/myTicket/index.js'
  107. import {
  108. getSpareParts
  109. } from '@/api/repair'
  110. import {
  111. get,
  112. post,
  113. postJ
  114. } from '@/utils/api.js'
  115. import Assign from '@/components/Assign.vue'
  116. import CellInfo from '@/components/CellInfo.vue'
  117. import KdTabs from '@/components/KdTabs.vue'
  118. import ScanCode from '@/components/ScanCode.vue'
  119. export default {
  120. components: {
  121. CellInfo,
  122. KdTabs,
  123. Assign,
  124. ScanCode,
  125. Step,
  126. StepItem,
  127. PopSparePart
  128. },
  129. data() {
  130. return {
  131. type: '',
  132. typeOptions: {
  133. CREATE: '生成工单',
  134. SPARE_PARTS_APPLY: '备品备件申请',
  135. ACCEPTANCE_CHEK: '验收',
  136. WORK_REPORT: '报工'
  137. },
  138. repairInfoLogList: [],
  139. modalShow: false,
  140. active: 0,
  141. typeActive: 0,
  142. statusList: {
  143. 0: '待接收',
  144. 1: '执行中',
  145. 3: '已完成'
  146. },
  147. pageId: '',
  148. planId: '',
  149. workOrderCode: '',
  150. worksheetInfo: {
  151. equiList: [],
  152. workOrder: {}
  153. },
  154. logs: {},
  155. equpStatus: [
  156. // {
  157. // name: '全部',
  158. // value: []
  159. // },
  160. {
  161. name: '全部',
  162. value: -1
  163. },
  164. {
  165. name: '待检',
  166. value: 0
  167. },
  168. {
  169. name: '已检',
  170. value: 1
  171. },
  172. {
  173. name: '异常',
  174. value: 2
  175. }
  176. ],
  177. euqiList: [],
  178. equipPage: 1,
  179. isEnd: false,
  180. cycleOptObj: {
  181. 1: '时/次',
  182. 2: '天/次',
  183. 3: '周/次',
  184. 4: '月/次',
  185. 5: '年/次',
  186. 11: '次/天',
  187. 12: '次/周',
  188. 13: '次/月',
  189. 14: '次/年'
  190. },
  191. barType: 0,
  192. qrContent: null,
  193. chooseTab: false
  194. }
  195. },
  196. async onLoad(options) {
  197. console.log('onLoad--------')
  198. console.log('options------------', options)
  199. // this.workOrderCode = options.workOrderCode
  200. this.deviceId = options.deviceId
  201. this.type = options.type
  202. // this.chooseTab = options.chooseTab
  203. this.getInfo()
  204. // 设备台账跳转详情
  205. // if (options.qrContent) {
  206. // this.qrContent = options.qrContent
  207. // await this.getInfo()
  208. // this.cbScancodedate({
  209. // code: this.qrContent
  210. // })
  211. // }
  212. },
  213. onShow() {
  214. console.log('onShow--------')
  215. this.getInfo()
  216. },
  217. onUnload() {
  218. uni.$off('scancodedate')
  219. },
  220. onHide() {
  221. uni.$off('scancodedate')
  222. },
  223. methods: {
  224. // 获取当前班次
  225. getCurrentClasses(date) {
  226. console.log(new Date(date).getHours())
  227. if (new Date(date).getHours() >= 7 && new Date(date).getHours() < 16) {
  228. return '白班'
  229. } else if (new Date(date).getHours() >= 16 && new Date(date).getHours() < 23) {
  230. return '晚班'
  231. } else {
  232. return '零点班'
  233. }
  234. },
  235. // 备件使用明细
  236. handlbjsymx(title, list) {
  237. this.$refs.PopSparePart.open(title, list)
  238. },
  239. // 跳转备品备件
  240. handlbpbj() {
  241. uni.navigateTo({
  242. url: `/pages/maintenanceWorkorder/sparepart/sparepartList?id=${this.pageId}`
  243. })
  244. },
  245. getCount() {
  246. devicestatistics({
  247. planId: this.planId
  248. }).then(data => {
  249. this.equpStatus = this.equpStatus.map(item => {
  250. switch (item.name) {
  251. case '全部':
  252. return {
  253. ...item, count: data.total
  254. }
  255. case '待检':
  256. return {
  257. ...item, count: data.isInspectedNum
  258. }
  259. case '已检':
  260. return {
  261. ...item, count: data.checkedNum
  262. }
  263. case '异常':
  264. return {
  265. ...item, count: data.abnormalNum
  266. }
  267. }
  268. })
  269. })
  270. },
  271. // 扫码枪扫码
  272. cbScancodedate(data) {
  273. this.Scancodedate(data.code)
  274. },
  275. // 相机扫码
  276. HandlScanCode() {
  277. let _this = this
  278. uni.scanCode({
  279. onlyFromCamera: true,
  280. success: function(res) {
  281. _this.Scancodedate(res.result)
  282. }
  283. })
  284. },
  285. Scancodedate(code) {
  286. let _this = this
  287. if (this.worksheetInfo.status.code === 0) {
  288. uni.showModal({
  289. title: '提示',
  290. content: '工单未开启执行,不可进行巡点检操作,请先点击“开始执行”!',
  291. confirmText: '开始执行', //这块是确定按钮的文字
  292. cancelText: '取消', //这块是取消的文字
  293. success: function(res) {
  294. if (res.confirm) {
  295. _this.handleExecute() // 执行确认后的操作
  296. } else {
  297. // 执行取消后的操作
  298. }
  299. }
  300. })
  301. return
  302. }
  303. this.qrContent = code.trim()
  304. this.barType = this.setBarType(this.qrContent)
  305. _this.getData()
  306. },
  307. // 设置barType
  308. setBarType(val) {
  309. let index = val.indexOf('@_@')
  310. let result = 0
  311. if (index !== -1) {
  312. let item = val.substr(index + 3, 1)
  313. if (item) {
  314. result = Number(item)
  315. }
  316. }
  317. return result
  318. },
  319. // 根据条码请求设备数据
  320. getData() {
  321. let par = {
  322. barType: this.barType,
  323. qrContent: this.qrContent
  324. }
  325. uni.showLoading({
  326. title: '加载中',
  327. mask: true
  328. })
  329. postJ(this.apiUrl + '/scan/getAssetInfo', par)
  330. .then(res => {
  331. let data = res.data
  332. this.matchEquipment(data)
  333. })
  334. .finally(() => {
  335. uni.hideLoading()
  336. })
  337. },
  338. matchEquipment(data) {
  339. let par = {
  340. assetCode: data.assetCode,
  341. workOrderId: this.worksheetInfo.id
  342. }
  343. console.log('par', par)
  344. post(this.apiUrl + '/workOrder/scanMatching', par).then(res => {
  345. let data = res.data
  346. if (!data) {
  347. uni.showModal({
  348. title: '提示',
  349. content: '本工单中,无此设备!',
  350. confirmText: '好的', //这块是确定按钮的文字
  351. showCancel: false,
  352. success: function(res) {
  353. if (res.confirm) {
  354. // 执行确认后的操作
  355. } else {
  356. // 执行取消后的操作
  357. }
  358. }
  359. })
  360. } else {
  361. // 未报工
  362. if (this.worksheetInfo.status.code === 1) {
  363. this.handleCheck(data)
  364. }
  365. // 已报工
  366. if (this.worksheetInfo.status.code === 3) {
  367. this.checkDetail(data)
  368. }
  369. }
  370. })
  371. },
  372. handleAssign() {
  373. console.log(this.worksheetInfo)
  374. this.$refs.assignRef.open(this.worksheetInfo.id)
  375. },
  376. assignSuccess() {
  377. this.back()
  378. },
  379. back() {
  380. uni.navigateBack({
  381. delta: 1
  382. })
  383. },
  384. // 报工
  385. handleReport() {
  386. if (this.worksheetInfo.finishNum !== this.worksheetInfo.total) {
  387. uni.showToast({
  388. title: '请完成巡检设备检查',
  389. icon: 'none'
  390. })
  391. } else {
  392. if (new Date(this.worksheetInfo.acceptTime).getTime() + this.worksheetInfo.duration * 60 * 1000 <
  393. new Date().getTime()) {
  394. this.$refs.inputDialog.open()
  395. return
  396. }
  397. this._report()
  398. }
  399. },
  400. handleClose() {
  401. this.$refs.inputDialog.close()
  402. },
  403. timeoutCauseConfirm(value) {
  404. if (!value) {
  405. uni.showToast({
  406. title: '请输入超时原因',
  407. icon: 'none'
  408. })
  409. return
  410. }
  411. this.$refs.inputDialog.close()
  412. this._report(value)
  413. },
  414. _report(timeoutCause = '') {
  415. signingWork({
  416. id: this.pageId,
  417. timeoutCause: timeoutCause
  418. }).then(() => {
  419. uni.showToast({
  420. icon: 'success',
  421. title: '操作成功!',
  422. duration: 2000
  423. })
  424. this.getInfo()
  425. })
  426. // post(
  427. // this.apiUrl + '/workOrder/reportWork',
  428. // {
  429. // workOrderId: this.pageId,
  430. // timeoutCause
  431. // },
  432. // true,
  433. // false
  434. // )
  435. // .then(res => {
  436. // let _this = this
  437. // if (res?.success) {
  438. // let data = res.data
  439. // if (data.length) {
  440. // uni.showModal({
  441. // title: '提示',
  442. // content: `有${data.length}台设备被标记为缺陷,是否要报修?`,
  443. // cancelText: '取消', // 取消按钮的文字
  444. // confirmText: '报修', // 确认按钮的文字
  445. // showCancel: true, // 是否显示取消按钮,默认为 true
  446. // success: res => {
  447. // if (res.confirm) {
  448. // if (data.length > 1) {
  449. // uni.navigateTo({
  450. // url: `/pages/tour_tally/detail/detail?workOrderCode=${this.workOrderCode}&id=${this.pageId}&chooseTab=true`
  451. // })
  452. // } else {
  453. // uni.navigateTo({
  454. // url: `/pages/repair/repair/index?source=5&workOrderCode=${this.workOrderCode}&equiCode=${data[0].equiCode}&equiId=${data[0].equiId}&workOrderId=${this.pageId}&equiName=${data[0].equiName}&equiModel=${data[0].equiModel}&equiLocation=${data[0].equiLocation}`
  455. // })
  456. // }
  457. // } else {
  458. // _this.getInfo()
  459. // }
  460. // }
  461. // })
  462. // } else {
  463. // uni.showToast({
  464. // icon: 'success',
  465. // title: '操作成功!',
  466. // duration: 2000
  467. // })
  468. // this.getInfo()
  469. // }
  470. // }
  471. // /* if (res?.success) {
  472. // uni.showToast({
  473. // icon: "success",
  474. // title: "操作成功!",
  475. // duration: 2000,
  476. // });
  477. // this.getInfo();
  478. // } */
  479. // })
  480. // .catch(res => {
  481. // if (res.code === '4444') {
  482. // this.$refs.inputDialog.open()
  483. // } else if (res.code === '5555') {
  484. // this.modalShow = true
  485. // // uni.showModal({
  486. // // title: '提示',
  487. // // content: `您还有 ${this.worksheetInfo.awaitInspectSum} 台设备待检,不可报工`,
  488. // // success: function (res) {},
  489. // // showCancel: false
  490. // // })
  491. // }
  492. // })
  493. },
  494. // 执行工单
  495. handleExecute() {
  496. startExecuting({
  497. id: this.pageId
  498. }).then(() => {
  499. uni.showToast({
  500. icon: 'success',
  501. title: '操作成功!',
  502. duration: 2000
  503. })
  504. this.getInfo()
  505. })
  506. // post(this.apiUrl + '/workOrder/execute', {
  507. // workOrderCode: this.workOrderCode
  508. // }).then(res => {
  509. // if (res?.success) {
  510. // uni.showToast({
  511. // icon: 'success',
  512. // title: '操作成功!',
  513. // duration: 2000
  514. // })
  515. // this.getInfo()
  516. // }
  517. // })
  518. },
  519. //巡点检设备加载更多
  520. scrolltolower() {
  521. // if (this.isEnd) return
  522. // this.equipPage++
  523. // this.getEquipList()
  524. },
  525. // 巡点检设备列表
  526. getEquipList() {
  527. const params = {
  528. planId: this.planId,
  529. status: this.equpStatus[this.typeActive].value,
  530. pageNum: 1,
  531. size: 9999
  532. }
  533. getDeviceList(params).then(data => {
  534. if (this.equipPage === 1) {
  535. this.euqiList = data.list
  536. } else {
  537. this.euqiList.push(...data.list)
  538. }
  539. this.isEnd = this.euqiList.length >= data.count
  540. })
  541. // post(this.apiUrl + `/workOrder/getEquipmentListApp?page=${this.equipPage}&size=10`, params, true).then(res => {
  542. // if (res?.success) {
  543. // if (this.equipPage === 1) {
  544. // this.euqiList = res.data.records
  545. // } else {
  546. // this.euqiList.push(...res.data.records)
  547. // }
  548. // this.isEnd = this.euqiList.length >= res.data.total
  549. // }
  550. // })
  551. },
  552. handleTabChange(value) {
  553. if (value === 1) {
  554. this.typeChange(0)
  555. }
  556. },
  557. finishTime(start, end) {
  558. if (!end) return ''
  559. let dur = new Date(end).getTime() - new Date(start).getTime()
  560. return Math.ceil(dur / 1000 / 60) + '分钟'
  561. },
  562. // 设备状态切换
  563. typeChange(type) {
  564. this.typeActive = type
  565. this.equipPage = 1
  566. this.getEquipList()
  567. },
  568. handleCheck({id}) {
  569. // uni.navigateTo({
  570. // url: `/pages/tour_tally/check/index?id=${id}&equiName=${equiName}&equiCode=${equiCode}&workOrderId=${this.pageId}&workOrderCode=${this.workOrderCode}`
  571. // })
  572. uni.navigateTo({
  573. url: `/pages/tour_tally/check/index?id=${id}`
  574. })
  575. },
  576. checkDetail({
  577. id
  578. }) {
  579. uni.navigateTo({
  580. url: `/pages/tour_tally/check/detail?id=${id}`
  581. })
  582. },
  583. getInfo() {
  584. deviceListQrCode({
  585. type: this.type,
  586. deviceId: this.deviceId
  587. }).then(data => {
  588. console.log('data--------------123----')
  589. console.log(data)
  590. this.euqiList = data
  591. })
  592. },
  593. // 报修
  594. handLbx(item) {
  595. console.log('item', item)
  596. uni.navigateTo({
  597. url: `/pages/repair/repair/index?source=5&workOrderCode=${this.workOrderCode}&equiCode=${item.equiCode}&equiId=${item.equiId}&workOrderId=${this.pageId}&equiName=${item.equiName}&equiModel=${item.equiModel}&equiLocation=${item.equiLocation}`
  598. })
  599. },
  600. // 报修详情
  601. handLbxDetail(item) {
  602. uni.navigateTo({
  603. url: `/pages/repair/detail/detail?id=${item.repairId}`
  604. })
  605. }
  606. }
  607. }
  608. </script>
  609. <style lang="scss" scoped>
  610. @import '@/components/submitted.scss';
  611. .list-cell {
  612. display: flex;
  613. align-items: center;
  614. justify-content: space-between;
  615. color: $uni-text-color-grey;
  616. padding: 5rpx 20rpx;
  617. }
  618. .font-sm {
  619. font-size: $uni-font-size-sm;
  620. }
  621. .font-text {
  622. color: $uni-text-color;
  623. }
  624. .btn-execute {
  625. background-color: $j-primary-border-green;
  626. width: 450rpx;
  627. margin-top: 5vh;
  628. }
  629. .btn-reassignment {
  630. color: $uni-color-primary;
  631. background-color: transparent;
  632. border: none;
  633. box-shadow: none;
  634. &::after {
  635. display: none;
  636. }
  637. }
  638. .tour-container {
  639. position: fixed;
  640. top: 0;
  641. bottom: 0;
  642. width: 100vw;
  643. display: flex;
  644. flex-direction: column;
  645. /deep/.u-popup {
  646. flex: none !important;
  647. }
  648. }
  649. .tour-wrapper {
  650. position: relative;
  651. flex: 1;
  652. }
  653. .tour_tally-content {
  654. padding-top: 40rpx;
  655. box-sizing: border-box;
  656. // height: calc(100vh - 88rpx);
  657. position: absolute;
  658. top: 0;
  659. bottom: 0;
  660. left: 0;
  661. right: 0;
  662. display: flex;
  663. flex-direction: column;
  664. }
  665. .kd-cell {
  666. min-height: 90rpx;
  667. border-bottom: 1px dashed #dadada;
  668. display: flex;
  669. align-items: center;
  670. .kd-label {
  671. display: inline-block;
  672. width: 7em;
  673. font-weight: bold;
  674. }
  675. .kd-content {
  676. flex: 1;
  677. word-break: break-all;
  678. }
  679. }
  680. .kd-baseInfo {
  681. padding: 0 32rpx;
  682. font-size: 28rpx;
  683. }
  684. .kd-equipment {
  685. flex: 1;
  686. display: flex;
  687. flex-direction: column;
  688. overflow: hidden;
  689. .kd-type-box {
  690. text-align: center;
  691. padding: 26rpx 0;
  692. view {
  693. position: relative;
  694. display: inline-block;
  695. width: 120rpx;
  696. padding: 4rpx 0;
  697. color: #747474;
  698. margin: 0 20rpx;
  699. background-color: rgba(215, 215, 215, 0.5);
  700. &.type—active {
  701. background-color: #1e7f35;
  702. color: #fff;
  703. }
  704. .count {
  705. position: absolute;
  706. top: -9px;
  707. right: -9px;
  708. width: 18px;
  709. height: 18px;
  710. border-radius: 50%;
  711. font-size: 12px;
  712. background-color: red;
  713. color: #fff;
  714. }
  715. }
  716. }
  717. .kd-list-container {
  718. flex: 1;
  719. display: flex;
  720. flex-direction: column;
  721. overflow: hidden;
  722. padding: 12rpx 18rpx;
  723. background-color: $page-bg;
  724. .u-list {
  725. flex: 1;
  726. height: 100% !important;
  727. }
  728. .nodata {
  729. font-size: 40rpx;
  730. text-align: center;
  731. padding-top: 30rpx;
  732. }
  733. }
  734. }
  735. .btn-sparepart {
  736. width: 450rpx;
  737. margin-top: 20rpx;
  738. }
  739. .spare-parts {
  740. flex: 1;
  741. overflow: hidden;
  742. }
  743. .kd-card {
  744. background-color: #fff;
  745. margin-bottom: 20rpx;
  746. padding: 8rpx 0;
  747. font-size: 28rpx;
  748. word-break: break-all;
  749. .kd-card-wrapper {
  750. padding: 0 30rpx;
  751. border-bottom: 1px solid #dadada;
  752. }
  753. .kd-cell {
  754. line-height: 60rpx;
  755. }
  756. .kd-cell:last-of-type {
  757. border-bottom: none;
  758. }
  759. .status-box {
  760. margin-right: 16rpx;
  761. }
  762. .card-footer {
  763. display: flex;
  764. justify-content: flex-end;
  765. align-items: center;
  766. padding: 8rpx 0 20rpx;
  767. button {
  768. width: 180rpx;
  769. height: 56rpx;
  770. line-height: 56rpx;
  771. font-size: 28rpx;
  772. margin: 0 8rpx;
  773. }
  774. .primary-btn {
  775. background-color: $j-primary-border-green;
  776. }
  777. }
  778. }
  779. </style>