orderList.vue 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363
  1. <template>
  2. <div>
  3. <el-row class="track-detail">
  4. <!-- 订单追踪、订单详情 -->
  5. <el-col :span="7" v-loading="!orderDetailStutus && !showTrack" element-loading-text="拼命加载中">
  6. <div class="order_detail">
  7. <div class="detail_title">
  8. <div v-show="buttonStatus !== 0 && buttonStatus !== 10" class="detail_txt" @click="orderDetailStutus = 0" :class="{ detail_txt_ac: !orderDetailStutus }">
  9. 订单跟踪
  10. </div>
  11. <div class="detail_txt" @click="orderDetailStutus = 1" :class="{ detail_txt_ac: !!orderDetailStutus }">
  12. 订单详情
  13. </div>
  14. </div>
  15. <order-track v-show="showTrack" :riderArriveTime="riderArriveTime" :buttonStatus="buttonStatus" :trackOrder="trackOrder" v-if="!orderDetailStutus && needTrack"></order-track>
  16. <order-detail v-show="showDetail" :buttonStatus="buttonStatus" :orderDetail="orderDetail" v-else></order-detail>
  17. <!-- 订单跟踪、订单详情底部按钮 -->
  18. <div class="bottom-btns" v-show="showDetail || showTrack">
  19. <!-- 新订单 -->
  20. <div class="btns" v-if="buttonStatus === 0">
  21. <el-button size="small" @click.native="itemAddRemark(list[curIdx].id, list[curIdx])" class="btn_bots">添加备注</el-button>
  22. <el-button size="small" @click.native="iGnoreOrder(list[curIdx].id)" class="btn_bots">忽略订单</el-button>
  23. <el-button size="small" @click.native="orderPrinter(list[curIdx].waimaiOrderId)" class="btn_bots">补打发票</el-button>
  24. <el-button size="small" @click.native="deleteItem(list[curIdx])" class="btn_bots btn">发起配送</el-button>
  25. </div>
  26. <!-- 预约单 -->
  27. <div class="btns" v-if="buttonStatus === 10">
  28. <div class="btn_bot">
  29. <el-dropdown>
  30. <span class="el-dropdown-link">更多</span>
  31. <el-dropdown-menu slot="dropdown">
  32. <el-dropdown-item @click.native="orderPrinter(list[curIdx].waimaiOrderId)" v-if="list[curIdx].waimaiOrderId"><span style="color: #fc7200">补打发票</span></el-dropdown-item>
  33. <el-dropdown-item @click.native="iGnoreOrder(list[curIdx].id)">忽略订单</el-dropdown-item>
  34. </el-dropdown-menu>
  35. </el-dropdown>
  36. </div>
  37. <el-button size="small" @click.native="itemAddRemark(list[curIdx].id, list[curIdx])" class="btn_bots">添加备注</el-button>
  38. <el-button size="small" @click.native="settingTime(list[curIdx])" class="btn_bots btn">{{
  39. list[curIdx].delayTime ? "修改定时" : "定时发单"
  40. }}</el-button>
  41. <el-button size="small" @click.native="deleteItem(list[curIdx])" class="btn_bots btn">发起配送</el-button>
  42. </div>
  43. <!-- 待接单 -->
  44. <div class="btns" v-if="buttonStatus === 1">
  45. <el-button size="small" @click.native="cancelOrder(list[curIdx].id)" class="btn_bots">取消订单</el-button>
  46. <el-button size="small" @click.native="orderPrinter(list[curIdx].waimaiOrderId)" v-if="list[curIdx].waimaiOrderId" class="btn_bots">补打发票</el-button>
  47. <el-button size="small" @click.native="addTip(list[curIdx].id)" class="btn_bots btn">加小费</el-button>
  48. </div>
  49. <!-- 取货中 -->
  50. <div class="btns" v-if="buttonStatus === 2">
  51. <el-button size="small" @click.native="cancelOrder(list[curIdx].id)" class="btn_bots">取消订单</el-button>
  52. <el-button size="small" @click.native="orderPrinter(list[curIdx].waimaiOrderId)" v-if="list[curIdx].waimaiOrderId" class="btn_bots btn">补打发票</el-button>
  53. </div>
  54. <!-- 配送中 -->
  55. <div class="btns" v-if="buttonStatus === 3">
  56. <el-button size="small" @click.native="orderPrinter(list[curIdx].waimaiOrderId)" v-if="list[curIdx].waimaiOrderId" class="btn_bots btn">补打发票</el-button>
  57. </div>
  58. <!-- 异常单 -->
  59. <div class="btns" v-if="buttonStatus === -2">
  60. <el-button size="small" @click.native="orderPrinter(list[curIdx].waimaiOrderId)" v-if="list[curIdx].waimaiOrderId" class="btn_bots">补打发票</el-button>
  61. <el-button size="small" @click.native="orderBack(list[curIdx].id)" class="btn_bots btn">撤回订单</el-button>
  62. </div>
  63. <!-- 已取消 -->
  64. <div class="btns" v-if="buttonStatus === -1">
  65. <!-- <el-button size='small' @click.native="orderPrinter(list[curIdx].waimaiOrderId)" class="btn_bots btn">再来一单</el-button> -->
  66. </div>
  67. </div>
  68. </div>
  69. </el-col>
  70. </el-row>
  71. <el-row class="list-info">
  72. <el-col :span="17">
  73. <div v-loading="isLoading" element-loading-text="正在计算中...">
  74. <div :class="
  75. curIdx === i ? 'order_item active-order-item' : 'order_item'
  76. " @click="chooseOrder(item, i)" v-for="(item, i) in list" :key="i">
  77. <div class="order_item_header">
  78. <div class="order_item_header_l">
  79. <div v-if="item.daySeq" class="Serial_number">
  80. #{{ item.daySeq }}
  81. </div>
  82. <img :src="item.logo || item.waimaiLogo" class="logo" />
  83. <span class="name">{{ item.shopName }}</span>
  84. <div class="sign_time" v-if="item.waimaiOrderId && [1,2].includes(item.takeType)">
  85. {{ item.exceptTime.slice(5) }}前送达
  86. </div>
  87. <div class="sign_txt" v-if="item.waimaiOrderId && item.takeType == 0">
  88. 立即送达
  89. </div>
  90. <div class="sign_d" v-if="item.buttonStatus === 10 && item.timeTxt">{{item.timeTxt}}自动发起配送</div>
  91. <!-- <div class="sign_d">预约 09/10 17:30自动发起配送</div> -->
  92. </div>
  93. <!-- 新订单 -->
  94. <div class="order_item_header_r" v-if="item.buttonStatus === 0">
  95. <!-- <span class="header_r">已发单1分钟</span> -->
  96. <el-tag v-if="tabNum === -1" class="header_r">新订单</el-tag>
  97. <el-button size="small" class="btn" @click.stop="deleteItem(item)">发起配送</el-button>
  98. </div>
  99. <!-- 预约单 -->
  100. <div class="order_item_header_r" v-if="item.buttonStatus === 10">
  101. <!-- <span class="header_r">已发单1分钟</span> -->
  102. <el-tag v-if="tabNum === -1" class="header_r">预约单</el-tag>
  103. <!-- <el-button size='small' @click.stop="iGnoreOrder(item.id)">忽略订单</el-button> -->
  104. <!-- <el-button size='small' @click.stop="itemAddRemark(item.id, item)">添加备注</el-button> -->
  105. <el-button size="small" class="btn" @click.stop="settingTime(item)">{{
  106. item.delayTime ? "修改定时" : "定时发单"
  107. }}</el-button>
  108. <!-- <el-button
  109. size="small"
  110. class="btn"
  111. @click.stop="deleteItem(item)"
  112. >发起配送</el-button
  113. > -->
  114. </div>
  115. <!-- 待接单 -->
  116. <div class="order_item_header_r" v-if="item.buttonStatus === 1">
  117. <el-tag v-if="tabNum === -1" class="header_r">待接单</el-tag>
  118. <span class="header_r">已发单{{ item.takeTimeTxt }}</span>
  119. <!-- <el-button size='small' @click.stop="cancelOrder(item.id)">取消订单</el-button> -->
  120. <el-button size="small" class="btn" @click.stop="orderPrinter(item.waimaiOrderId)" v-if="item.waimaiOrderId">补打发票</el-button>
  121. <!-- <el-button size='small' class="btn" @click.stop="addTip(item.id)">加&nbsp;小&nbsp;费</el-button> -->
  122. </div>
  123. <!-- 取货中 -->
  124. <div class="order_item_header_r" v-if="item.buttonStatus === 2">
  125. <el-tag v-if="tabNum === -1" class="header_r">取货中</el-tag>
  126. <!-- <span v-show="Number(item.riderArriveMinute)" class="header_r">预计{{Number(item.riderArriveMinute)}}分钟取件</span> -->
  127. <!-- <el-button size='small' @click.stop="cancelOrder(item.id)">取消订单</el-button> -->
  128. <el-button size="small" class="btn" @click.stop="orderPrinter(item.waimaiOrderId)" v-if="item.waimaiOrderId">补打发票</el-button>
  129. </div>
  130. <!-- 配送中 -->
  131. <div class="order_item_header_r" v-if="item.buttonStatus === 3">
  132. <el-tag v-if="tabNum === -1" class="header_r">配送中</el-tag>
  133. <span class="header_r" v-if="item.exceptTime">预计{{ item.exceptTime }}送达</span>
  134. <el-button size="small" class="btn" @click.stop="orderPrinter(item.waimaiOrderId)" v-if="item.waimaiOrderId">补打发票</el-button>
  135. </div>
  136. <!-- 异常单 -->
  137. <div class="order_item_header_r" v-if="item.buttonStatus === -2">
  138. <el-tag class="header_r">{{
  139. showCancelType(item.cancelType)
  140. }}</el-tag>
  141. <el-button size="small" class="btn" @click.stop="orderBack(item.id)">撤回订单</el-button>
  142. </div>
  143. <!-- 取消单 -->
  144. <div class="order_item_header_r" v-if="item.buttonStatus === -1">
  145. <el-tag class="header_r">{{
  146. showCancelType(item.cancelType)
  147. }}</el-tag>
  148. <!-- <el-button size='small' class="btn" @click.stop="orderBack(item.id)">撤回订单</el-button> -->
  149. </div>
  150. <!-- 猎豹平台已完成 -->
  151. <div class="order_item_header_r" v-if="item.buttonStatus === 97">
  152. <el-tag v-if="tabNum === -1" class="header_r">已完成</el-tag>
  153. </div>
  154. <!-- 其他平台已完成 -->
  155. <div class="order_item_header_r" v-if="item.buttonStatus === 98">
  156. <el-tag v-if="tabNum === -1" class="header_r">其他平台已完成</el-tag>
  157. </div>
  158. </div>
  159. <div class="order_item_cont">
  160. <div class="content">
  161. {{ item.receiptContactName
  162. }}<span>{{ item.receiptPhone }}</span>
  163. </div>
  164. <div class="address">
  165. <!-- {{ item.receiptProvinceName }}
  166. {{ item.receiptCityName }} -->
  167. {{ item.receiptDistrictName }}
  168. {{ item.receiptAddress }}
  169. <span class="distance" @click.stop="checkMap(item)">
  170. <i class="el-icon-location"></i>
  171. <span>查看地图</span>
  172. <!-- <span v-if="item.orderDistance < 1000">
  173. {{ item.orderDistance }}m
  174. </span>
  175. <span v-else> {{ item.orderDistance / 1000 }}km </span> -->
  176. </span>
  177. </div>
  178. <div v-if="item.caution" class="itme_r">
  179. 备注:{{ item.caution }}
  180. </div>
  181. </div>
  182. </div>
  183. <!-- <div v-if="item.caution" class="itme_r">备注:{{ item.caution }}</div> -->
  184. </div>
  185. </el-col>
  186. </el-row>
  187. <!-- 发起配送 -->
  188. <send-order-popup :tabNum="tabNum" ref="sendOrderPopup"></send-order-popup>
  189. <!-- 骑手、商家、发件人地图 -->
  190. <order-map ref="orderMap"></order-map>
  191. <!-- 备注弹出层 -->
  192. <el-dialog width="580px" center title="新增备注" destroy-on-close :visible.sync="dialogTableVisible">
  193. <div>
  194. <el-input placeholder="请添加备注信息,最多输入20个字!" v-model="remark" clearable :maxlength="20" />
  195. </div>
  196. <div style="text-align: center; margin-top: 20px">
  197. <el-button @click.stop="dialogTableVisible = false">取消</el-button>
  198. <el-button type="primary" class="submit-btn" @click.stop="commitRemark(orderId, item)">确定</el-button>
  199. </div>
  200. </el-dialog>
  201. <!-- 设置预约发单时间弹出层 -->
  202. <el-dialog width="580px" center :title="exceptTime" destroy-on-close :visible.sync="settingTimeStatus">
  203. <div>
  204. <span>提前多长时间发起配送:</span>
  205. <el-select size="small" style="width: 80px" v-model="timeValue" placeholder="请选择">
  206. <el-option v-for="(item, index) in timeList" :key="index" :label="item" :value="item"></el-option>
  207. </el-select>
  208. <span>小时</span>
  209. </div>
  210. <p style="color: #f74141">
  211. 提示:设置后系统将根据您设置的提前时间自动发单。{{delayTime ? '' : '如需骑手立即取件请点击立即配送!'}}
  212. </p>
  213. <div style="text-align: center; margin-top: 20px">
  214. <el-button v-if="delayTime" @click.stop="cancalSettingTime">取消预约发单</el-button>
  215. <el-button type="primary" class="submit-btn" @click.stop="commitTimeValue(orderId)">{{delayTime ? '确定修改' : '保存'}}</el-button>
  216. </div>
  217. </el-dialog>
  218. <!-- 取消订单弹出层 -->
  219. <el-dialog width="680px" center title="取消原因" destroy-on-close :visible.sync="cancelStatus">
  220. <div class="cancel-list">
  221. <div class="item" @click.stop="changeReason(item)" :class="[
  222. (index + 1) % 3 == 0 ? 'no-margin' : '',
  223. item.id == reasonIndex ? 'active' : '',
  224. ]" v-for="(item, index) in cancelList" :key="index">
  225. {{ item.name }}
  226. </div>
  227. </div>
  228. <div class="text-area">
  229. <el-input show-word-limit :rows="4" type="textarea" resize="none" :maxlength="50" placeholder="请输入其他原因" v-model="cancelReason"></el-input>
  230. </div>
  231. <div style="text-align: center; margin-top: 20px">
  232. <el-button @click.stop="cancelStatus = false">取消</el-button>
  233. <el-button type="primary" class="submit-btn" @click.stop="commitCancelReason(orderId)">确定</el-button>
  234. </div>
  235. </el-dialog>
  236. <!-- 加小费弹出层 -->
  237. <el-dialog width="580px" center title="加小费" destroy-on-close :visible.sync="addTipStatus">
  238. <div>
  239. <div class="tip-title">小费金额</div>
  240. <div class="tip-list">
  241. <div class="tip-item" @click.stop="tipActive = index" :class="tipActive == index ? 'tip-active' : ''" v-for="(item, index) in tipList" :key="index">
  242. {{ item }}元
  243. </div>
  244. <div class="tip-item" @click.stop="tipActive = -1" :class="tipActive == -1 ? 'tip-active' : ''">
  245. <el-input placeholder="其他金额" v-model="tipAmount" />
  246. </div>
  247. </div>
  248. <!-- 支付方式 -->
  249. <div class="choose-self" style="border: none">
  250. <div class="self-top">
  251. <span>支付方式</span>
  252. </div>
  253. <div class="pay-list">
  254. <div class="pay-item" @click.stop="paymentType = item.id" :class="paymentType == item.id ? 'pay-active' : ''" v-for="(item, index) in payList" :key="index">
  255. <img :src="item.icon" class="pay-icon" />
  256. <span>{{ item.name }}</span>
  257. </div>
  258. </div>
  259. </div>
  260. </div>
  261. <div style="text-align: center; margin-top: 20px">
  262. <el-button @click.stop="addTipStatus = false">取消</el-button>
  263. <el-button type="primary" class="submit-btn" @click.stop="richMoney(orderId)">确定</el-button>
  264. </div>
  265. </el-dialog>
  266. <!-- 支付二维码弹出层 -->
  267. <qr-code v-if="showCode" @paySuccess="paySuccess" @refreshCode="recharge" @closeCode="showCode = false" ref="code" :payAmount="payAmount" :link="link" :paymentType="paymentType" :orderSn="orderSn"></qr-code>
  268. </div>
  269. </template>
  270. <script>
  271. import moment from "moment";
  272. import bus from "../../common/bus.js";
  273. import orderMap from "./orderAMap.vue";
  274. import OrderDetail from "./orderDetail.vue";
  275. import orderTrack from "./orderTrack.vue";
  276. import { mapState } from "vuex";
  277. import sendOrderPopup from "./sendOrderPopup.vue";
  278. import qrCode from "../../common/qrCode.vue";
  279. import {
  280. sendValuation,
  281. waimaiprinter,
  282. addRemark,
  283. ignoreOrder,
  284. rollOrder,
  285. setDeliveryTime,
  286. cancelTimingPublish,
  287. cancelOrder,
  288. trackOrder,
  289. detailOrder,
  290. tips,
  291. getRiderArriveTime,
  292. getPayResult,
  293. getMapData,
  294. } from "../../api/order.js";
  295. export default {
  296. name: "OrderList",
  297. data() {
  298. return {
  299. payAmount: 0,
  300. paymentType: 1, // 1 支付宝 0 微信
  301. payList: [
  302. {
  303. id: 1,
  304. name: "支付宝支付",
  305. icon: "../../../static/image/alipay.png",
  306. },
  307. {
  308. id: 2,
  309. name: "微信支付",
  310. icon: "../../../static/image/we-chat.png",
  311. },
  312. {
  313. id: 4,
  314. name: "余额/三方支付",
  315. icon: "../../../static/image/yu-e.png",
  316. },
  317. ],
  318. tipActive: 0,
  319. tipList: [1, 2, 5, 10, 15, 20, 30, 50],
  320. tipAmount: "", // 小费金额
  321. addTipStatus: false, // 加小费弹出层
  322. reasonIndex: null, // 取消原因索引
  323. chooseReason: "", // 选择取消原因
  324. cancelReason: "", // 输入取消原因
  325. cancelList: [
  326. { id: 1, name: "无骑手接单" },
  327. { id: 2, name: "骑手接单后不取货" },
  328. { id: 3, name: "骑手电车装不下" },
  329. { id: 4, name: "计划有变,无需配送" },
  330. { id: 5, name: "骑手服务态度恶劣" },
  331. { id: 6, name: "骑手要求取消订单" },
  332. { id: 7, name: "信息填写错误" },
  333. { id: 8, name: "其他原因" },
  334. ],
  335. timeList: [1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 6, 7, 8, 9, 10, 11, 12],
  336. timeValue: 1, // 定时发单,默认1小时
  337. cancelStatus: false, // 取消订单弹出层
  338. settingTimeStatus: false, // 定时发单弹出层
  339. needTrack: false,
  340. orderDetailStutus: 1,
  341. isLoading: false,
  342. dialogTableVisible: false,
  343. remark: "",
  344. orderId: "",
  345. item: {},
  346. radio: "",
  347. needTrack: false,
  348. curIdx: 0,
  349. trackOrder: {},
  350. orderDetail: {},
  351. showDetail: false,
  352. showTrack: false,
  353. showCode: false,
  354. link: "",
  355. buttonStatus: 0,
  356. exceptTime: "",
  357. delayTime: "", // 预约延迟时间
  358. riderArriveTime: {}, //骑手预计取货送达时间
  359. };
  360. },
  361. props: {
  362. tabNum: Number,
  363. list: Array,
  364. },
  365. components: {
  366. sendOrderPopup,
  367. orderMap,
  368. OrderDetail,
  369. orderTrack,
  370. qrCode,
  371. },
  372. watch: {
  373. tabNum(newVal, oldVal) {
  374. this.curIdx = 0;
  375. },
  376. list: {
  377. handler(newVal, oldVal) {
  378. this.buttonStatus = newVal.length ? newVal[0].buttonStatus : 0;
  379. if (this.buttonStatus === 0 || this.buttonStatus === 10) {
  380. this.needTrack = false;
  381. this.orderDetailStutus = 1;
  382. } else {
  383. this.needTrack = true;
  384. this.orderDetailStutus = 0;
  385. }
  386. this.getDetailOrder();
  387. this.getTrackOrder();
  388. this.getRiderArriveTime();
  389. },
  390. immediate: true,
  391. },
  392. },
  393. destroyed() {},
  394. computed: {
  395. ...mapState(["userInfo"]),
  396. },
  397. methods: {
  398. paySuccess() {
  399. this.showCode = false;
  400. this.addTipStatus = false;
  401. bus.$emit("refreshData");
  402. bus.$emit("refreshData2");
  403. },
  404. richMoney() {
  405. let reg = /(^[1-9]\d*$)/g;
  406. if (this.tipActive == -1) {
  407. if (!reg.test(this.tipAmount * 1)) {
  408. return this.$message({
  409. message: "请选择或输入正确的整数金额",
  410. type: "error",
  411. });
  412. }
  413. }
  414. let params = {
  415. orderId: this.orderId,
  416. tipAmount:
  417. this.tipActive == -1 ? this.tipAmount : this.tipList[this.tipActive],
  418. paymentType: this.paymentType,
  419. createType: 1,
  420. };
  421. tips(params).then((res) => {
  422. if (res.code == 200) {
  423. if (this.paymentType == 4) {
  424. // 余额支付
  425. this.$message({
  426. message: "小费添加成功",
  427. type: "success",
  428. });
  429. bus.$emit("refreshData");
  430. bus.$emit("refreshData2");
  431. this.addTipStatus = false;
  432. this.tipAmount = "";
  433. } else if (this.paymentType == 1 || this.paymentType == 2) {
  434. // 支付宝、微信支付
  435. this.payAmount = res.data.amount || 0;
  436. this.orderSn = res.data.orderSn;
  437. this.link = res.data.data;
  438. this.showCode = true;
  439. }
  440. } else {
  441. this.$message({
  442. message: res.msg,
  443. type: "error",
  444. });
  445. }
  446. });
  447. },
  448. addTip(orderId) {
  449. this.orderId = orderId;
  450. this.paymentType = 4;
  451. this.addTipStatus = true;
  452. },
  453. changeReason(item) {
  454. this.reasonIndex = item.id;
  455. this.chooseReason = item.name;
  456. },
  457. // 取消订单
  458. commitCancelReason() {
  459. if (!this.reasonIndex) {
  460. return this.$message({
  461. message: "请选择取消原因",
  462. type: "error",
  463. });
  464. }
  465. if (this.reasonIndex == 8 && !this.cancelReason.trim()) {
  466. return this.$message({
  467. message: "请填写其他取消原因",
  468. type: "error",
  469. });
  470. }
  471. this.$confirm("取消订单可能会存在违约金, 是否继续?", "提示", {
  472. confirmButtonText: "取消",
  473. cancelButtonText: "确定",
  474. center: true,
  475. type: "warning",
  476. })
  477. .then(() => {
  478. this.cancelStatus = false;
  479. })
  480. .catch(() => {
  481. cancelOrder({
  482. orderId: this.orderId,
  483. cancelReason:
  484. this.reasonIndex != 8 ? this.chooseReason : this.cancelReason,
  485. }).then((res) => {
  486. if (res.code == 200) {
  487. this.$message({
  488. message: "取消订单成功",
  489. type: "success",
  490. });
  491. this.orderId = "";
  492. this.cancelReason = "";
  493. this.chooseReason = "";
  494. this.reasonIndex = null;
  495. bus.$emit("refreshData");
  496. bus.$emit("refreshData2");
  497. this.cancelStatus = false;
  498. } else {
  499. this.$message({
  500. message: res.msg,
  501. type: "error",
  502. });
  503. }
  504. });
  505. });
  506. },
  507. // 取消定时发单
  508. cancalSettingTime() {
  509. cancelTimingPublish({ orderId: this.item.id }).then((res) => {
  510. this.settingTimeStatus = false;
  511. if (res.code == 200) {
  512. this.$message({
  513. message: "取消定时发单成功",
  514. type: "success",
  515. });
  516. this.item = {};
  517. bus.$emit("refreshData");
  518. bus.$emit("refreshData2");
  519. } else {
  520. this.$message({
  521. message: res.msg,
  522. type: "error",
  523. });
  524. }
  525. });
  526. },
  527. commitTimeValue() {
  528. let timestamp = new Date().valueOf();
  529. let exT = moment(this.item.exceptTime).valueOf();
  530. let nowTime = moment(exT)
  531. .subtract(this.timeValue, "hours")
  532. .format("YYYY-MM-DD HH:mm:ss"); //当前时间的前n小时时间
  533. let t1 = moment(nowTime).valueOf(); // 时间戳
  534. console.log(nowTime, this.item, "-------------");
  535. if (t1 - timestamp < 0) {
  536. return this.$message({
  537. message: `设置发单时间超出当前时间`,
  538. type: "error",
  539. });
  540. }
  541. setDeliveryTime({
  542. orderId: this.item.id,
  543. delayTime: this.timeValue,
  544. }).then((res) => {
  545. this.settingTimeStatus = false;
  546. if (res.code == 200) {
  547. this.$message({
  548. message: "设置定时发单成功",
  549. type: "success",
  550. });
  551. this.item = {};
  552. bus.$emit("refreshData");
  553. bus.$emit("refreshData2");
  554. } else {
  555. this.$message({
  556. message: res.msg,
  557. type: "error",
  558. });
  559. }
  560. });
  561. },
  562. // 定时发单
  563. settingTime(item) {
  564. this.item = item;
  565. this.settingTimeStatus = true;
  566. this.delayTime = item.delayTime;
  567. this.timeValue = item.delayTime ? item.delayTime : 1;
  568. this.exceptTime = `预约期望${item.exceptTime.slice(5)}送达`;
  569. },
  570. // 取消订单
  571. cancelOrder(orderId) {
  572. this.orderId = orderId;
  573. this.cancelStatus = true;
  574. },
  575. chooseOrder(v, index) {
  576. this.buttonStatus = this.list[index].buttonStatus;
  577. if (this.buttonStatus === 0 || this.buttonStatus === 10) {
  578. this.needTrack = false;
  579. this.orderDetailStutus = 1;
  580. } else {
  581. this.needTrack = true;
  582. this.orderDetailStutus = 0;
  583. }
  584. this.curIdx = index;
  585. this.getDetailOrder();
  586. this.getTrackOrder();
  587. this.getRiderArriveTime();
  588. },
  589. // 忽略订单
  590. iGnoreOrder(orderId) {
  591. this.orderId = orderId;
  592. this.$confirm("确定要忽略此单?", "提示", {
  593. confirmButtonText: "确定",
  594. cancelButtonText: "取消",
  595. center: true,
  596. type: "warning",
  597. })
  598. .then(() => {
  599. console.log(11111);
  600. ignoreOrder({ orderId }).then((res) => {
  601. if (res.code == 200) {
  602. this.$message({
  603. type: "success",
  604. message: "已忽略!",
  605. });
  606. bus.$emit("refreshData");
  607. bus.$emit("refreshData2");
  608. } else {
  609. this.$message({
  610. message: res.msg,
  611. type: "error",
  612. });
  613. }
  614. });
  615. })
  616. .catch(() => {
  617. this.$message({
  618. type: "info",
  619. message: "已取消",
  620. });
  621. });
  622. },
  623. itemAddRemark(orderId, item) {
  624. this.dialogTableVisible = true;
  625. this.orderId = orderId;
  626. this.item = item;
  627. this.remark = item.takeRemark || "";
  628. },
  629. // 一键发单备注
  630. commitRemark(orderId, item) {
  631. // if(!this.remark.trim()){
  632. // return this.$message({
  633. // message: '请输入发单备注再确认!',
  634. // type: "error",
  635. // });
  636. // }
  637. let params = {
  638. orderId,
  639. remark: this.remark.trim(),
  640. };
  641. addRemark(params).then((res) => {
  642. this.dialogTableVisible = false;
  643. if (res.code == 200) {
  644. this.$message({
  645. message: "添加备注成功",
  646. type: "success",
  647. });
  648. bus.$emit("refreshData");
  649. bus.$emit("refreshData2");
  650. // this.$set(
  651. // this.list.find((v) => {
  652. // return item.id == v.id;
  653. // }),
  654. // "takeRemark",
  655. // this.remark
  656. // );
  657. // this.$forceUpdate();
  658. } else {
  659. this.$message({
  660. message: res.msg,
  661. type: "error",
  662. });
  663. }
  664. });
  665. },
  666. // 查看地图
  667. checkMap(item) {
  668. this.$refs.orderMap.setDialogStatus(item);
  669. },
  670. deleteItem(item) {
  671. this.getValuation(item);
  672. },
  673. // 撤回订单
  674. orderBack(orderId) {
  675. rollOrder({ orderId }).then((res) => {
  676. if (res.code == 200) {
  677. this.$message({
  678. message: "操作成功",
  679. type: "success",
  680. });
  681. bus.$emit("refreshData");
  682. bus.$emit("refreshData2");
  683. } else {
  684. this.$message({
  685. message: res.msg,
  686. type: "error",
  687. });
  688. }
  689. });
  690. },
  691. // 补打发票
  692. orderPrinter(waimaiId) {
  693. if (!waimaiId) return;
  694. waimaiprinter({ waimaiId }).then((res) => {
  695. if (res.code == 200) {
  696. this.$message({
  697. message: "操作成功",
  698. type: "success",
  699. });
  700. } else {
  701. this.$message({
  702. message: res.msg,
  703. type: "error",
  704. });
  705. }
  706. });
  707. },
  708. // 计价
  709. getValuation(order) {
  710. let requestData = {
  711. productId: order.productId,
  712. transport: 0,
  713. productAmount: 50,
  714. sendAddress: {
  715. id: order.sendAddressId,
  716. provinceName: order.sendProvinceName,
  717. cityName: order.sendCityName,
  718. districtName: order.sendDistrictName,
  719. street: order.sendStreet,
  720. lat: order.sendLat,
  721. lng: order.sendLng,
  722. phone: order.sendPhone,
  723. extension: order.sendExtension,
  724. contact: order.sendContactName,
  725. address: order.sendAddress,
  726. cityCode: order.sendCityCode,
  727. },
  728. receiptAddress: {
  729. id: order.receiptAddressId,
  730. provinceName: order.receiptProvince,
  731. cityName: order.receiptCityName,
  732. districtName: order.receiptDistrictName,
  733. lat: order.receiptLat,
  734. lng: order.receiptLng,
  735. phone: order.receiptPhone,
  736. extension: order.receiptExtension,
  737. contact: order.receiptContactName,
  738. street: order.receiptStreet || "",
  739. address: order.receiptAddress,
  740. cityCode: order.receiptCityCode,
  741. },
  742. takeTime: order.takeTime,
  743. weight: order.weight,
  744. takeType: order.takeType,
  745. type: this.userInfo.memberType == 1 ? 1 : 2,
  746. isWaimai: order.waimaiId ? true : false,
  747. waimaiOrderId: order.waimaiOrderId,
  748. takeRemark: order.takeRemark || "",
  749. orderId: order.id,
  750. };
  751. this.isLoading = true;
  752. sendValuation(requestData).then((res) => {
  753. console.log(res, "发起配送计算");
  754. this.isLoading = false;
  755. if (res.code == 200) {
  756. res.data.optionals.forEach((item) => {
  757. item.optionals = item.optionals ? item.optionals : [];
  758. item.lowOptionals = item.lowOptionals ? item.lowOptionals : [];
  759. item.supports = item.supports ? item.supports : [];
  760. });
  761. this.$refs.sendOrderPopup.init(res.data, {
  762. ...requestData,
  763. orderId: order.id,
  764. orderSn: order.orderSn,
  765. });
  766. }
  767. });
  768. },
  769. // 订单详情
  770. getDetailOrder() {
  771. this.showDetail = false;
  772. if (this.list.length) {
  773. this.orderId = this.list[this.curIdx].id;
  774. } else {
  775. return;
  776. }
  777. detailOrder({ orderId: this.orderId }).then((res) => {
  778. if (res.code === 200) {
  779. this.orderDetail = res.data;
  780. this.showDetail = true;
  781. } else {
  782. this.$message({
  783. message: res.msg,
  784. type: "error",
  785. });
  786. }
  787. });
  788. },
  789. // 订单跟踪
  790. getTrackOrder() {
  791. if (this.buttonStatus === 0 || this.buttonStatus === 10) return;
  792. this.showTrack = false;
  793. if (this.list.length) {
  794. this.orderId = this.list[this.curIdx].id;
  795. } else {
  796. return;
  797. }
  798. trackOrder({ orderId: this.orderId }).then((res) => {
  799. if (res.code === 200) {
  800. this.trackOrder = res.data;
  801. this.showTrack = true;
  802. } else {
  803. this.$message({
  804. message: res.msg,
  805. type: "error",
  806. });
  807. }
  808. });
  809. },
  810. // 获取骑手预计到达时间
  811. getRiderArriveTime() {
  812. // 只有取货中和配送中调用该接口
  813. if (![2, 3].includes(this.buttonStatus)) return;
  814. if (this.list.length) {
  815. this.orderId = this.list[this.curIdx].id;
  816. } else {
  817. return;
  818. }
  819. getRiderArriveTime({ orderId: this.orderId }).then((res) => {
  820. if(res.code === 200){
  821. this.riderArriveTime = res.data
  822. }
  823. });
  824. },
  825. showCancelType(type) {
  826. let name = "";
  827. switch (type) {
  828. case 1:
  829. name = "商家取消";
  830. break;
  831. case 2:
  832. name = "骑手取消";
  833. break;
  834. case 3:
  835. name = "系统取消";
  836. break;
  837. case 4:
  838. name = "用户取消";
  839. break;
  840. case 5:
  841. name = "平台取消";
  842. break;
  843. default:
  844. name = "已取消";
  845. break;
  846. }
  847. return name;
  848. },
  849. showDeliveryStatus(item) {
  850. let name = "";
  851. if (item.wmstatus === 4) {
  852. return (name = "其他平台完成");
  853. }
  854. if (item.deliveryStatus === 4) {
  855. return (name = "已完成");
  856. }
  857. if (item.deliveryStatus === -1) {
  858. return (name = "已取消");
  859. }
  860. // if (item.deliveryStatus === -2) {
  861. // return this.showCancelType(item.cancelType);
  862. // }
  863. },
  864. },
  865. };
  866. </script>
  867. <!-- Add "scoped" attribute to limit CSS to this component only -->
  868. <style lang="scss" scoped="scoped">
  869. .el-row {
  870. position: absolute !important;
  871. width: 100%;
  872. left: 0;
  873. top: 0;
  874. }
  875. .track-detail {
  876. display: flex;
  877. justify-content: flex-end;
  878. height: calc(100vh - 210px);
  879. /deep/ .el-col {
  880. // margin-right: 15px;
  881. height: 100%;
  882. z-index: 2;
  883. }
  884. .order-detail {
  885. height: calc(100vh - 250px);
  886. overflow: auto;
  887. }
  888. .detail_cont {
  889. height: calc(100vh - 250px);
  890. overflow: auto;
  891. }
  892. }
  893. .list-info {
  894. height: calc(100vh - 210px);
  895. overflow-y: auto;
  896. }
  897. .choose-self {
  898. padding-top: 25px;
  899. border-bottom: 1px solid #eee;
  900. .self-top {
  901. display: flex;
  902. align-items: center;
  903. margin-bottom: 11px;
  904. .choose-self-icon {
  905. width: 4px;
  906. height: 15px;
  907. margin-right: 10px;
  908. }
  909. span {
  910. font-size: 14px;
  911. font-family: PingFang SC;
  912. font-weight: 400;
  913. color: #92959b;
  914. }
  915. }
  916. .pay-list {
  917. display: flex;
  918. align-items: center;
  919. padding-top: 10px;
  920. .pay-item {
  921. flex: 1;
  922. display: flex;
  923. justify-content: center;
  924. text-align: center;
  925. align-items: center;
  926. height: 51px;
  927. border: 1px solid #eee;
  928. border-radius: 8px;
  929. cursor: pointer;
  930. &.pay-active {
  931. border-color: #fc7200;
  932. }
  933. &:nth-child(2) {
  934. margin: 0 13px;
  935. }
  936. span {
  937. font-size: 14px;
  938. font-family: PingFang SC;
  939. font-weight: bold;
  940. color: #222222;
  941. }
  942. .pay-icon {
  943. margin-right: 6px;
  944. }
  945. .pay-icon:nth-child(1) {
  946. width: 25px;
  947. height: 24px;
  948. }
  949. }
  950. }
  951. }
  952. .tip-title {
  953. font-size: 14px;
  954. font-family: PingFang SC;
  955. font-weight: 400;
  956. color: #92959b;
  957. padding-bottom: 13px;
  958. }
  959. .tip-list {
  960. display: flex;
  961. flex-wrap: wrap;
  962. .tip-item {
  963. margin-right: 10px;
  964. margin-bottom: 10px;
  965. width: 93px;
  966. height: 38px;
  967. line-height: 38px;
  968. text-align: center;
  969. font-size: 13px;
  970. font-family: PingFang SC;
  971. font-weight: 400;
  972. color: #222222;
  973. box-sizing: border-box;
  974. background: #f4f4f4;
  975. cursor: pointer;
  976. border-radius: 2px;
  977. border: 1px solid transparent;
  978. /deep/ .el-input__inner {
  979. border: none;
  980. height: 32px !important;
  981. background-color: #f4f4f4;
  982. font-size: 13px;
  983. padding: 0 15px !important;
  984. }
  985. }
  986. .tip-active {
  987. border-color: #fc7200;
  988. color: #fc7200;
  989. }
  990. }
  991. .text-area {
  992. /deep/ .el-textarea__inner {
  993. background-color: #f2f2f2;
  994. border: none;
  995. }
  996. }
  997. .cancel-list {
  998. display: flex;
  999. flex-wrap: wrap;
  1000. .item {
  1001. color: #222;
  1002. width: 193px;
  1003. height: 50px;
  1004. line-height: 50px;
  1005. box-sizing: border-box;
  1006. text-align: center;
  1007. font-size: 16px;
  1008. border: 2px solid #d7d7d7;
  1009. border-radius: 6px;
  1010. margin-right: 20px;
  1011. margin-bottom: 20px;
  1012. cursor: pointer;
  1013. &:last-child {
  1014. color: #d7d7d7;
  1015. }
  1016. &.active {
  1017. color: #fc7101;
  1018. border-color: #fc7101;
  1019. }
  1020. }
  1021. .no-margin {
  1022. margin-right: 0 !important;
  1023. }
  1024. }
  1025. .ignore-modal {
  1026. .title {
  1027. font-size: 14px;
  1028. font-family: PingFang SC;
  1029. font-weight: 400;
  1030. color: #92959b;
  1031. }
  1032. .check-item {
  1033. display: flex;
  1034. align-items: center;
  1035. margin-top: 20px;
  1036. .radio {
  1037. width: 14px;
  1038. height: 14px;
  1039. margin-right: 6px;
  1040. }
  1041. span {
  1042. font-size: 14px;
  1043. font-family: PingFang SC;
  1044. font-weight: 400;
  1045. color: #222222;
  1046. }
  1047. }
  1048. }
  1049. .submit-btn {
  1050. border: none !important;
  1051. background-color: #fc7200;
  1052. }
  1053. .active-order-item {
  1054. border: 2px solid #fc7200;
  1055. height: 136px !important;
  1056. width: calc(100% - 4px) !important;
  1057. }
  1058. .order_item {
  1059. width: 100%;
  1060. height: 140px;
  1061. background: #fff;
  1062. margin-bottom: 10px;
  1063. border-radius: 5px;
  1064. .order_item_header {
  1065. width: 100%;
  1066. height: 49px;
  1067. display: flex;
  1068. align-items: center;
  1069. border-bottom: 1px solid #f0f0f0;
  1070. position: relative;
  1071. display: flex;
  1072. align-items: center;
  1073. justify-content: space-between;
  1074. padding-right: 10px;
  1075. box-sizing: border-box;
  1076. .order_item_header_l,
  1077. .order_item_header_r {
  1078. display: flex;
  1079. align-items: center;
  1080. }
  1081. .Serial_number {
  1082. width: 60px;
  1083. height: 26px;
  1084. background: #fc7200;
  1085. border-radius: 0 30px 30px 0;
  1086. font-size: 10px;
  1087. font-weight: 500;
  1088. color: #ffffff;
  1089. text-align: center;
  1090. line-height: 26px;
  1091. }
  1092. .logo {
  1093. width: 21px;
  1094. height: 21px;
  1095. border-radius: 50%;
  1096. margin-left: 23px;
  1097. }
  1098. .name {
  1099. font-size: 14px;
  1100. font-weight: 500;
  1101. color: #333333;
  1102. margin-left: 5px;
  1103. }
  1104. .sign_time {
  1105. padding: 0 8px;
  1106. height: 20px;
  1107. border: 1px solid #009cff;
  1108. background: #f2faff;
  1109. border-radius: 2px;
  1110. text-align: center;
  1111. line-height: 20px;
  1112. font-size: 12px;
  1113. font-weight: 600;
  1114. color: #009cff;
  1115. margin-left: 15px;
  1116. }
  1117. .sign_txt {
  1118. width: 64px;
  1119. height: 20px;
  1120. border: 1px solid #009cff;
  1121. background: #f2faff;
  1122. border-radius: 2px;
  1123. text-align: center;
  1124. line-height: 20px;
  1125. font-size: 12px;
  1126. font-weight: 600;
  1127. color: #009cff;
  1128. margin-left: 10px;
  1129. }
  1130. .sign_d {
  1131. height: 20px;
  1132. border: 1px solid #f74141;
  1133. background: #fff5f5;
  1134. border-radius: 2px;
  1135. text-align: center;
  1136. line-height: 20px;
  1137. font-size: 12px;
  1138. font-weight: 600;
  1139. color: #f74141;
  1140. margin-left: 10px;
  1141. padding: 0 7px;
  1142. }
  1143. .header_r {
  1144. font-size: 14px;
  1145. font-weight: 400;
  1146. color: #333333;
  1147. margin-right: 22px;
  1148. }
  1149. .btn {
  1150. background: #fc7200;
  1151. border-color: #fc7200;
  1152. color: #fff;
  1153. // position: absolute;
  1154. // right: 10px;
  1155. }
  1156. }
  1157. .order_item_cont {
  1158. display: flex;
  1159. flex-direction: column;
  1160. justify-content: space-evenly;
  1161. padding: 5px 20px;
  1162. height: 80px;
  1163. }
  1164. .address {
  1165. .distance {
  1166. margin-left: 10px;
  1167. color: #409eff;
  1168. cursor: pointer;
  1169. font-size: 16px;
  1170. }
  1171. }
  1172. }
  1173. .itme_r {
  1174. font-size: 14px;
  1175. font-weight: 400;
  1176. color: #b1b1b1;
  1177. word-wrap: break-word;
  1178. }
  1179. .order_detail {
  1180. position: relative;
  1181. width: 100%;
  1182. height: 100%;
  1183. border-left: 10px solid #f1f2f5;
  1184. background: #fff;
  1185. box-sizing: border-box;
  1186. border-left: 10px solid #f1f2f5;
  1187. .bottom-btns {
  1188. position: absolute;
  1189. bottom: 0;
  1190. left: 0;
  1191. width: 100%;
  1192. border-top: 2px dotted #f0f0f0;
  1193. background: #fff;
  1194. }
  1195. .detail_title {
  1196. width: 100%;
  1197. height: 44px;
  1198. background: #fafafa;
  1199. padding-left: 16px;
  1200. box-sizing: border-box;
  1201. display: flex;
  1202. align-items: center;
  1203. font-size: 12px;
  1204. font-weight: 600;
  1205. display: flex;
  1206. align-items: flex-end;
  1207. .detail_txt {
  1208. color: #b1b1b1;
  1209. padding-bottom: 13px;
  1210. border-bottom: 2px solid #fafafa;
  1211. margin-right: 28px;
  1212. cursor: pointer;
  1213. z-index: 2;
  1214. }
  1215. .detail_txt_ac {
  1216. color: #00152a;
  1217. border-color: #00152a;
  1218. }
  1219. }
  1220. .btns {
  1221. margin: 10px 15px;
  1222. display: flex;
  1223. flex-wrap: wrap;
  1224. justify-content: space-between;
  1225. .btn {
  1226. background: #fc7200;
  1227. border-color: #fc7200;
  1228. color: #fff !important;
  1229. }
  1230. .btn_bots {
  1231. margin: 0 !important;
  1232. margin-bottom: 10px !important;
  1233. }
  1234. .btn_bot {
  1235. width: 74px;
  1236. display: flex;
  1237. align-items: center;
  1238. justify-content: center;
  1239. color: #888888;
  1240. margin-bottom: 10px !important;
  1241. .el-dropdown-link {
  1242. cursor: pointer;
  1243. }
  1244. }
  1245. }
  1246. .detail_cont {
  1247. width: 100%;
  1248. padding: 16px;
  1249. box-sizing: border-box;
  1250. .detail_title2 {
  1251. width: 100%;
  1252. font-size: 12px;
  1253. font-weight: 600;
  1254. color: #777777;
  1255. margin-bottom: 15px;
  1256. }
  1257. .shop_detail {
  1258. width: 100%;
  1259. display: flex;
  1260. margin-bottom: 10px;
  1261. img {
  1262. width: 47px;
  1263. height: 47px;
  1264. border-radius: 4px 4px 4px 4px;
  1265. margin-right: 12px;
  1266. }
  1267. .info {
  1268. flex-grow: 1;
  1269. display: flex;
  1270. justify-content: space-between;
  1271. .shop_title {
  1272. width: 70%;
  1273. font-size: 14px;
  1274. font-weight: 500;
  1275. color: #333333;
  1276. line-height: 18px;
  1277. }
  1278. .shop_num {
  1279. color: #b1b1b1;
  1280. }
  1281. }
  1282. }
  1283. .detail_ine {
  1284. width: 100%;
  1285. height: 1px;
  1286. border-top: 2px dotted #f0f0f0;
  1287. margin: 16px 0;
  1288. }
  1289. .info2 {
  1290. width: 100%;
  1291. display: flex;
  1292. .title {
  1293. font-size: 14px;
  1294. font-weight: 400;
  1295. width: 80px;
  1296. color: #b1b1b1;
  1297. }
  1298. .cont {
  1299. font-size: 14px;
  1300. font-weight: 400;
  1301. color: #333333;
  1302. line-height: 20px;
  1303. }
  1304. .cont2 {
  1305. color: #fc7200;
  1306. }
  1307. }
  1308. .info3 {
  1309. margin-top: 10px;
  1310. }
  1311. .info4 {
  1312. display: flex;
  1313. justify-content: space-between;
  1314. }
  1315. .btns {
  1316. margin-top: 30px;
  1317. .btn {
  1318. background: #fc7200;
  1319. border-color: #fc7200;
  1320. color: #fff;
  1321. }
  1322. }
  1323. }
  1324. }
  1325. </style>