orderList.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. <template>
  2. <view class="orderList">
  3. <!-- 头部筛选 -->
  4. <view class="orderList_header">
  5. <view class="orderList_header_item" @click="openPicker('gdState')">
  6. <text class="orderList_header_itemText">{{selectedGdState}}</text>
  7. <text class="pda pda-xiala"></text>
  8. </view>
  9. <view class="orderList_header_item" @click="openPicker('associationType')">
  10. <text class="orderList_header_itemText">{{selectedAssociationType}}</text>
  11. <text class="pda pda-xiala"></text>
  12. </view>
  13. </view>
  14. <!-- 列表 -->
  15. <view class="orderList_list">
  16. <view class="orderList_listItem" v-for="newOrder in newOrderList" :key="newOrder.id">
  17. <image class="ji" src="../../static/imgs/icon_ji.png" mode="widthFix"
  18. v-if="newOrder.emergencyType && newOrder.emergencyType.value == 2"></image>
  19. <image class="jiaji" src="../../static/imgs/icon_jiaji.png" mode="widthFix"
  20. v-if="newOrder.emergencyType && newOrder.emergencyType.value == 3"></image>
  21. <view class="orderList_listItem_header">
  22. <view class="orderList_listItem_header_title">
  23. <view class="associationType_icon" v-if="newOrder.isHalfInspect === 1"> 半 </view>
  24. <view class="associationType_icon" v-else-if="newOrder.taskType.associationType.value == 'specimen'">标
  25. </view>
  26. <view class="associationType_icon" v-else-if="newOrder.taskType.associationType.value == 'drugsBag'"> 药
  27. </view>
  28. <view class="associationType_icon" v-else-if="newOrder.taskType.associationType.value == 'specimenPlan'"> 巡
  29. </view>
  30. <view class="associationType_icon" v-else-if="newOrder.taskType.associationType.value == 'jPBag'"> 静 </view>
  31. <view class="associationType_icon" v-else-if="newOrder.taskType.associationType.value == 'inspect'"> 病
  32. </view>
  33. <view class="associationType_icon"
  34. v-else-if="newOrder.taskType.associationType.value == 'patientTransport'"> 病
  35. </view>
  36. <view class="associationType_icon" v-else-if="newOrder.taskType.associationType.value == 'other'"> 其
  37. </view>
  38. <view class="taskNameAndWorkerName">
  39. <text class="taskName">{{newOrder.isHalfInspect === 1? "半程陪检": newOrder.taskType.taskName}}</text>
  40. <text class="workerName"
  41. v-if="newOrder.patient &&(newOrder.taskType.associationType.value =='patientTransport' ||newOrder.taskType.associationType.value =='inspect')">-{{newOrder.patient.patientName}}</text>
  42. </view>
  43. </view>
  44. <text class="orderList_listItem_header_more"
  45. :class="newOrder.stateTextClass">{{newOrder.gdState.name }}</text>
  46. </view>
  47. <view class="orderList_listItem_item">
  48. <view class="orderList_listItem_item_content">
  49. <text class="orderList_listItem_item_name"
  50. v-if="newOrder.worker">{{newOrder.worker.name}}{{newOrder.worker.phone? "-" + newOrder.worker.phone: ""}}</text>
  51. <text class="orderList_listItem_item_name" v-else>暂未接单</text>
  52. <text class="orderList_listItem_item_time" v-if="newOrder.showCreateTime">{{newOrder.showCreateTime}}</text>
  53. <text class="orderList_listItem_item_time"
  54. v-else-if="newOrder.yyjdTime && newOrder.gdState.value == GDSTATE['定时预约']">{{newOrder.yyjdTime | formatDate('MM-dd HH:mm')}}</text>
  55. </view>
  56. <view class="orderList_listItem_item_btns" v-if="
  57. newOrder.gdState.value == GDSTATE['待抢单'] ||
  58. newOrder.gdState.value == GDSTATE['待接单'] ||
  59. newOrder.gdState.value == GDSTATE['待到达'] ||
  60. newOrder.gdState.value == GDSTATE['定时预约'] ||
  61. newOrder.gdState.value == GDSTATE['待评价']
  62. ">
  63. <button type="primary" class="btn" v-if="newOrder.gdState.value == GDSTATE['待评价']"
  64. @click="showAppraise(newOrder.id)">评价</button>
  65. <button type="primary" class="btn" v-if="
  66. newOrder.gdState.value == GDSTATE['待抢单'] ||
  67. newOrder.gdState.value == GDSTATE['待接单'] ||
  68. newOrder.gdState.value == GDSTATE['待到达'] ||
  69. newOrder.gdState.value == GDSTATE['定时预约']
  70. " @click="openRecallModal(newOrder.id)">撤销</button>
  71. <button type="primary" class="btn" v-if="newOrder.gdState.value == GDSTATE['定时预约']"
  72. @click="openExecModal(newOrder.id)">立即执行</button>
  73. <button type="primary" class="btn" v-if="
  74. (newOrder.gdState.value == GDSTATE['待抢单'] ||
  75. newOrder.gdState.value == GDSTATE['待到达']) &&
  76. newOrder.taskType.allowUrgent == 1 &&
  77. !newOrder.urgentDetails
  78. " @click="showJiaji(newOrder.id)">加急</button>
  79. </view>
  80. </view>
  81. </view>
  82. </view>
  83. <seiminFooterNav></seiminFooterNav>
  84. <seiminModel ref="seiminModel"></seiminModel>
  85. <seiminPicker ref="sPicker" titleColor="#808080" titleFontSize="28rpx" confirmColor="#333" confirmFontSize="38rpx"
  86. confirmFontWeight="500" itemFontSize="28rpx" @onClose="closePicker" @onConfirm="confirmPicker"
  87. :pickerList="pickerList">
  88. </seiminPicker>
  89. </view>
  90. </template>
  91. <script>
  92. import {
  93. mapState,
  94. mapActions
  95. } from "vuex";
  96. import {
  97. reqFetchDataList,
  98. reqDelWorkOrder,
  99. reqUrge,
  100. reqDirectStartOrder,
  101. reqEvaluate,
  102. } from "../../request/api.js";
  103. import {
  104. GDSTATE
  105. } from "../../utils/enum.gdstate.js";
  106. import {
  107. WORKORDEREVALUATION
  108. } from "../../utils/enum.workorderEvaluation.js";
  109. export default {
  110. name: 'orderList',
  111. data() {
  112. return {
  113. // 工单状态
  114. GDSTATE: GDSTATE,
  115. // 当前筛选的工单状态
  116. selectedGdState: '执行中',
  117. // 当前筛选的关联类型
  118. selectedAssociationType: '全部',
  119. //工单状态筛选列表
  120. gdStates: [{
  121. value: -1,
  122. label: '全部'
  123. },
  124. {
  125. value: 1,
  126. label: '执行中'
  127. },
  128. {
  129. value: 2,
  130. label: '待评价'
  131. },
  132. ],
  133. //关联类型筛选列表
  134. associationTypes: [{
  135. value: -1,
  136. label: '全部'
  137. }, ],
  138. newOrderList: [], //工单列表
  139. totalNum: 0, //工单总数量
  140. idx: 0, //页码
  141. pageNum: 20, //每页的工单数量
  142. pickerList: [], //picker列表
  143. type: '', //打开picker的类型,工单状态||关联类型
  144. checkStatus: {}, //审核状态列表
  145. };
  146. },
  147. computed: {
  148. ...mapState("login", ["loginInfo"]),
  149. },
  150. methods: {
  151. ...mapActions("dictionary", ["vxDictionary"]),
  152. //评价
  153. showAppraise(id) {
  154. this.$refs.seiminModel.show({
  155. skin: 'evaluate',
  156. content: "工单已完成,请对本次服务做出评价!",
  157. btns: [{
  158. click: () => {
  159. console.log('取消');
  160. this.$refs.seiminModel.close();
  161. }
  162. },
  163. {
  164. click: () => {
  165. console.log('确定');
  166. let serviceEvaluationId;
  167. this.$refs.seiminModel.close();
  168. uni.showLoading({
  169. title: '加载中',
  170. mask: true,
  171. })
  172. //算出评级
  173. switch (this.$refs.seiminModel.stars.indexOf('pda-haoping1')) {
  174. case -1:
  175. //五星
  176. serviceEvaluationId = WORKORDEREVALUATION['非常好评'];
  177. break;
  178. case 1:
  179. //一星
  180. serviceEvaluationId = WORKORDEREVALUATION['极差'];
  181. break;
  182. case 2:
  183. //二星
  184. serviceEvaluationId = WORKORDEREVALUATION['差'];
  185. break;
  186. case 3:
  187. //三星
  188. serviceEvaluationId = WORKORDEREVALUATION['一般'];
  189. break;
  190. case 4:
  191. //四星
  192. serviceEvaluationId = WORKORDEREVALUATION['好评'];
  193. break;
  194. }
  195. let postData = {
  196. serviceEvaluation: {
  197. id: serviceEvaluationId
  198. },
  199. remark: this.$refs.seiminModel.evaluateTextArea,
  200. };
  201. reqEvaluate(id, postData).then(res => {
  202. uni.hideLoading();
  203. if (res.status == 200) {
  204. this.$refs.seiminModel.show({
  205. skin: 'toast',
  206. icon: 'success',
  207. content: '评价成功',
  208. })
  209. this.init();
  210. } else {
  211. this.$refs.seiminModel.show({
  212. skin: 'toast',
  213. icon: 'error',
  214. content: '评价失败',
  215. })
  216. }
  217. })
  218. }
  219. }
  220. ]
  221. });
  222. },
  223. //撤销
  224. openRecallModal(id) {
  225. this.$refs.seiminModel.show({
  226. icon: "warn",
  227. content: "您确认要撤销工单吗?撤销工单我们会通知服务台、支助人员不再执行此工单,请谨慎操作,如确认撤销请点击确认。",
  228. btns: [{
  229. click: () => {
  230. console.log('取消');
  231. this.$refs.seiminModel.close();
  232. }
  233. },
  234. {
  235. click: () => {
  236. console.log('确定');
  237. this.$refs.seiminModel.close();
  238. uni.showLoading({
  239. title: '加载中',
  240. mask: true,
  241. })
  242. reqDelWorkOrder(id).then(res => {
  243. uni.hideLoading();
  244. if (res.status == 200) {
  245. this.$refs.seiminModel.show({
  246. skin: 'toast',
  247. icon: 'success',
  248. content: '撤销成功',
  249. })
  250. this.init();
  251. } else {
  252. this.$refs.seiminModel.show({
  253. skin: 'toast',
  254. icon: 'error',
  255. content: '撤销失败',
  256. })
  257. }
  258. })
  259. }
  260. }
  261. ]
  262. });
  263. },
  264. //立即执行
  265. openExecModal(id) {
  266. this.$refs.seiminModel.show({
  267. icon: 'warn',
  268. content: '您确认要立即执行该工单吗?',
  269. btns: [{
  270. click: () => {
  271. console.log('取消');
  272. this.$refs.seiminModel.close();
  273. }
  274. }, {
  275. click: () => {
  276. console.log('确认');
  277. this.$refs.seiminModel.close();
  278. uni.showLoading({
  279. title: '加载中',
  280. mask: true,
  281. })
  282. reqDirectStartOrder(id).then(res => {
  283. uni.hideLoading();
  284. if (res.status == 200) {
  285. this.$refs.seiminModel.show({
  286. skin: 'toast',
  287. icon: 'success',
  288. content: '您的加急申请已成功,调度人员会紧急处理!',
  289. })
  290. this.init();
  291. } else {
  292. this.$refs.seiminModel.show({
  293. skin: 'toast',
  294. icon: 'error',
  295. content: '加急失败',
  296. })
  297. }
  298. })
  299. }
  300. }, ]
  301. })
  302. },
  303. //加急
  304. showJiaji(id) {
  305. this.$refs.seiminModel.urgentTextArea = '';
  306. this.$refs.seiminModel.show({
  307. title: '',
  308. skin: 'urgent',
  309. content: "请填写加急原因,填写后我们会根据您的诉求优先处理",
  310. btns: [{
  311. click: () => {
  312. console.log('取消');
  313. this.$refs.seiminModel.close();
  314. }
  315. },
  316. {
  317. click: () => {
  318. console.log('确定', this.$refs.seiminModel.urgentTextArea);
  319. const urgentTextArea = this.$refs.seiminModel.urgentTextArea;
  320. if (urgentTextArea.trim() === '') {
  321. uni.showToast({
  322. icon: 'none',
  323. title: '请填写加急原因',
  324. })
  325. return;
  326. }
  327. this.$refs.seiminModel.close();
  328. uni.showLoading({
  329. title: '加载中',
  330. mask: true,
  331. })
  332. let postData = {
  333. urgentDetails: {
  334. workerOrder: id,
  335. checkStatus: {
  336. id: this.checkStatus[1]
  337. },
  338. urgentReason: urgentTextArea,
  339. },
  340. };
  341. reqUrge(postData).then(res => {
  342. uni.hideLoading();
  343. if (res.status == 200) {
  344. this.$refs.seiminModel.show({
  345. skin: 'toast',
  346. icon: 'success',
  347. content: '加急成功',
  348. })
  349. this.init();
  350. } else {
  351. this.$refs.seiminModel.show({
  352. skin: 'toast',
  353. icon: 'error',
  354. content: '加急失败',
  355. })
  356. }
  357. })
  358. }
  359. }
  360. ]
  361. });
  362. },
  363. //关闭
  364. closePicker() {
  365. this.$refs.sPicker._close();
  366. },
  367. //打开
  368. openPicker(type) {
  369. this.type = type;
  370. this.$refs.sPicker._open();
  371. if (type === 'gdState') {
  372. //工单状态
  373. this.pickerList = this.gdStates;
  374. let index = this.pickerList.findIndex(v => v.label === this.selectedGdState);
  375. let obj = this.pickerList.find(v => v.label === this.selectedGdState);
  376. this.$refs.sPicker._changeValue(index);
  377. this.selectedGdState = obj && obj.label;
  378. } else if (type === 'associationType') {
  379. //关联类型
  380. this.pickerList = this.associationTypes;
  381. let index = this.pickerList.findIndex(v => v.label === this.selectedAssociationType);
  382. let obj = this.pickerList.find(v => v.label === this.selectedAssociationType);
  383. this.$refs.sPicker._changeValue(index);
  384. this.selectedAssociationType = obj && obj.label;
  385. }
  386. },
  387. //确定:接收子组件传来的参数
  388. confirmPicker(checkedObj) {
  389. if (this.type === 'gdState') {
  390. //工单状态
  391. this.selectedGdState = checkedObj.label;
  392. } else if (this.type === 'associationType') {
  393. //关联类型
  394. this.selectedAssociationType = checkedObj.label;
  395. }
  396. let index = this.pickerList.findIndex(v => v.label === checkedObj.label);
  397. this.$refs.sPicker._changeValue(index);
  398. this.init();
  399. },
  400. // 获取页面数据
  401. init() {
  402. uni.showLoading({
  403. title: "加载中",
  404. mask: true,
  405. });
  406. Promise.all([
  407. this.queryWorkOrdersRequest(), //查询最新工单列表
  408. this.queryDictionary('association_types'), //获取数据字典-关联类型
  409. this.queryDictionary('check_status'), //获取数据字典-审核状态
  410. ]).then((values) => {
  411. uni.hideLoading();
  412. uni.stopPullDownRefresh();
  413. this.queryWorkOrdersResponse(values[0]);
  414. this.queryDictionaryResponse(values[1], 'association_types');
  415. this.queryDictionaryResponse(values[2], 'check_status');
  416. });
  417. },
  418. // 查询最新工单列表(上拉)
  419. reachBottom() {
  420. //没有更多
  421. if (this.newOrderList.length == this.totalNum) {
  422. uni.showToast({
  423. icon: 'none',
  424. title: '没有更多工单了'
  425. })
  426. return;
  427. }
  428. uni.showLoading({
  429. title: "加载中",
  430. mask: true,
  431. });
  432. Promise.all([
  433. this.queryWorkOrdersRequest(true), //查询最新工单列表
  434. ]).then((values) => {
  435. uni.hideLoading();
  436. this.queryWorkOrdersResponse(values[0], true);
  437. });
  438. },
  439. // 查询最新工单列表
  440. queryWorkOrdersRequest(idxPlus = false) {
  441. console.log(this.selectedGdState, this.selectedAssociationType);
  442. console.log(this.gdStates, this.associationTypes);
  443. if (idxPlus) {
  444. //累加
  445. ++this.idx;
  446. } else {
  447. this.idx = 0;
  448. }
  449. let postData = {
  450. workOrder: {
  451. createDept: this.loginInfo.user.dept.id,
  452. platform: 2,
  453. searchDays: 2,
  454. },
  455. idx: this.idx,
  456. sum: this.pageNum,
  457. };
  458. let selectedGdStateValue = this.gdStates.find(v => v.label == this.selectedGdState).value;
  459. let associationTypesValue = this.associationTypes.find(v => v.label == this.selectedAssociationType).value;
  460. // 工单状态
  461. // 执行中包含状态:待抢单、待接单、待到达、待送达、执行中、定时预约
  462. if (selectedGdStateValue == 1) {
  463. // 执行中
  464. postData.workOrder.nurseState = 1;
  465. } else if (selectedGdStateValue == 2) {
  466. // 待评价
  467. postData.workOrder.gdState = {
  468. id: "73"
  469. };
  470. }
  471. //关联类型
  472. if (associationTypesValue != -1) {
  473. postData.workOrder.taskType = {
  474. associationType: {
  475. id: associationTypesValue,
  476. }
  477. }
  478. }
  479. return reqFetchDataList("nurse", "workOrder", postData);
  480. },
  481. // 查询最新工单列表
  482. queryWorkOrdersResponse(res, idxPlus = false) {
  483. if (res.status == 200) {
  484. res.list = res.list || [];
  485. this.totalNum = res.totalNum || 0;
  486. let newOrderList = res.list.map((v) => {
  487. if (v.gdState) {
  488. if (
  489. v.gdState.value == GDSTATE["待接单"] ||
  490. v.gdState.value == GDSTATE["待抢单"]
  491. ) {
  492. v.stateTextClass = "red";
  493. } else if (
  494. v.gdState.value == GDSTATE["待评价"] ||
  495. v.gdState.value == GDSTATE["已完成"]
  496. ) {
  497. v.stateTextClass = "green";
  498. } else {
  499. v.stateTextClass = "yellow";
  500. }
  501. }
  502. return v;
  503. });
  504. if (idxPlus) {
  505. //累加
  506. this.newOrderList = this.newOrderList.concat(newOrderList);
  507. } else {
  508. this.newOrderList = newOrderList;
  509. }
  510. } else {
  511. this.$refs.seiminModel.show({
  512. skin: "toast",
  513. icon: "error",
  514. content: res.msg || "获取数据失败",
  515. });
  516. throw new Error(res.msg || '获取数据失败');
  517. }
  518. },
  519. // 获取数据字典
  520. queryDictionary(key) {
  521. let postData = {
  522. "type": "list",
  523. key
  524. };
  525. return this.vxDictionary(postData);
  526. },
  527. // 获取数据字典
  528. queryDictionaryResponse(res, type) {
  529. let obj = {};
  530. let arr = [];
  531. switch (type) {
  532. case 'association_types':
  533. arr = res.map(v => ({
  534. value: v.id,
  535. label: v.name
  536. }));
  537. this.associationTypes = [{
  538. label: '全部',
  539. value: -1
  540. }, ...arr];
  541. break;
  542. case 'check_status':
  543. obj = {};
  544. res.forEach(v => {
  545. obj[v.value] = v.id;
  546. })
  547. this.checkStatus = obj;
  548. break;
  549. }
  550. },
  551. },
  552. mounted() {
  553. this.init();
  554. },
  555. onPullDownRefresh() {
  556. this.init();
  557. },
  558. onReachBottom() {
  559. this.reachBottom();
  560. }
  561. }
  562. </script>
  563. <style lang="scss" scoped>
  564. .orderList {
  565. padding-bottom: 108rpx;
  566. // 头部筛选
  567. .orderList_header {
  568. height: 88rpx;
  569. background-color: #fff;
  570. border-bottom: 1px solid #E5E9ED;
  571. position: fixed;
  572. left: 0;
  573. z-index: 99;
  574. width: 100%;
  575. @include flex(center, center);
  576. .orderList_header_item {
  577. flex: 1;
  578. height: 100%;
  579. padding: 0 50rpx;
  580. border-right: 1px solid #E5E9ED;
  581. @include flex(space-between, center);
  582. &:last-of-type {
  583. border-right: none;
  584. }
  585. .orderList_header_itemText {
  586. color: #333;
  587. font-size: 38rpx;
  588. }
  589. .pda-xiala {
  590. color: #DDE1E5;
  591. }
  592. }
  593. }
  594. // 列表
  595. .orderList_list {
  596. padding: 88rpx 24rpx 0;
  597. .orderList_listItem {
  598. width: 702rpx;
  599. min-height: 320rpx;
  600. background-color: #fff;
  601. margin-top: 8rpx;
  602. border-radius: 8rpx;
  603. border: 2rpx solid #e5e9ed;
  604. position: relative;
  605. padding: 0 24rpx;
  606. font-size: 32rpx;
  607. @include semicircle(#f9fafb, 82rpx);
  608. @include flex(flex-start, stretch, column);
  609. .ji,
  610. .jiaji {
  611. width: 60rpx;
  612. position: absolute;
  613. right: 0;
  614. top: 0;
  615. }
  616. .orderList_listItem_header {
  617. height: 86rpx;
  618. border-bottom: 2rpx dashed #e5e9ed;
  619. @include flex(space-between, center);
  620. .orderList_listItem_header_title {
  621. color: #333;
  622. flex: 1;
  623. @include flex(flex-start, center);
  624. .associationType_icon {
  625. width: 48rpx;
  626. height: 48rpx;
  627. border-radius: 50%;
  628. background-color: #F0F6ED;
  629. border: 1px solid #39b199;
  630. font-size: 24rpx;
  631. color: #39b199;
  632. margin-right: 8rpx;
  633. @include flex(center, center);
  634. }
  635. .taskNameAndWorkerName {
  636. flex: 1;
  637. @include flex;
  638. .taskName {
  639. max-width: 10em;
  640. @include clamp;
  641. }
  642. .workerName {
  643. flex: 1;
  644. @include clamp;
  645. }
  646. }
  647. }
  648. .orderList_listItem_header_more {
  649. color: #666;
  650. }
  651. }
  652. .orderList_listItem_item {
  653. height: 88rpx;
  654. border-bottom: 1px solid #e5e9ed;
  655. color: #333;
  656. font-size: 30rpx;
  657. flex: 1;
  658. @include flex(flex-start, stretch, column);
  659. &:last-of-type {
  660. border-bottom: none;
  661. }
  662. .orderList_listItem_item_content {
  663. min-height: 143rpx;
  664. flex: 1;
  665. @include flex(space-between, center);
  666. .orderList_listItem_item_name {
  667. font-size: 38rpx;
  668. font-weight: bold;
  669. }
  670. .orderList_listItem_item_time {
  671. color: #666;
  672. font-size: 28rpx;
  673. }
  674. }
  675. .orderList_listItem_item_btns {
  676. position: relative;
  677. left: -24rpx;
  678. width: 698rpx;
  679. height: 88rpx;
  680. @include btn_background;
  681. @include flex;
  682. .btn {
  683. flex: 1;
  684. background-color: transparent;
  685. position: relative;
  686. @include flex(center, center);
  687. &::before {
  688. content: '';
  689. position: absolute;
  690. right: 0;
  691. top: 0;
  692. width: 2rpx;
  693. height: 100%;
  694. border-right: 2rpx solid #fff;
  695. }
  696. &:last-of-type::before {
  697. border-right: none;
  698. }
  699. &::after {
  700. border: none;
  701. }
  702. }
  703. }
  704. }
  705. }
  706. }
  707. }
  708. </style>