orderDetail.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <template>
  2. <el-dialog
  3. :title="$t('ding-dan-xiang-qing')"
  4. :visible.sync="showDialog"
  5. class="common-dialog"
  6. width="80%"
  7. @close="cancel"
  8. destroy-on-close
  9. append-to-body
  10. >
  11. <div class="main-panel" v-if="orderInfo.id">
  12. <div class="panel">
  13. <div class="title">{{ $t('ji-chu-xin-xi') }}</div>
  14. <div class="content">
  15. <el-row class="row">
  16. <el-col :span="8">
  17. <span class="head">{{ $t('ding-dan-hao') }}:</span>
  18. <span class="control-label">{{ orderInfo.orderSn }}</span>
  19. </el-col>
  20. <el-col :span="8">
  21. <span class="head">{{ $t('zong-jin-e') }}:</span>
  22. <span class="control-label">
  23. {{ $pinia._s.get('user').getSymbol }}{{ orderInfo.amount }}
  24. </span>
  25. </el-col>
  26. <el-col :span="8">
  27. <span class="head">{{ $t('ding-dan-zhuang-tai') }}:</span>
  28. <!-- <span :class="`control-label ${changeClassName(orderInfo.statusText)}`">
  29. {{ orderInfo.statusText }}
  30. </span> -->
  31. <span class="control-label normal-status">{{ orderInfo.statusText }}</span>
  32. </el-col>
  33. </el-row>
  34. <el-row class="row">
  35. <el-col :span="8">
  36. <span class="head">{{ $t('serviceFee') }}:</span>
  37. <span class="control-label">{{ orderInfo.serviceFee.toFixed(2) }}</span>
  38. </el-col>
  39. <el-col :span="8">
  40. <span class="head">{{ $t('ding-dan-shi-jian') }}:</span>
  41. <span class="control-label">{{ orderInfo.createTime }}</span>
  42. </el-col>
  43. <el-col :span="8">
  44. <span class="head">{{ $t('xia-dan-zhuo-ma') }}:</span>
  45. <span class="control-label">
  46. {{ orderInfo.newTableInfo ? orderInfo.newTableInfo.tableNumber : '-' }}
  47. </span>
  48. </el-col>
  49. </el-row>
  50. <el-row class="row">
  51. <el-col :span="24">
  52. <span class="head">{{ $t('bei-zhu-xin-xi') }}:</span>
  53. <span class="control-label">{{ orderInfo.remark ? orderInfo.remark : '-' }}</span>
  54. </el-col>
  55. </el-row>
  56. </div>
  57. </div>
  58. <div class="panel">
  59. <div class="title">{{ $t('zhi-fu-xin-xi') }}</div>
  60. <div class="content">
  61. <el-row class="row">
  62. <el-col :span="8">
  63. <span class="head">{{ $t('zhi-fu-jin-e') }}:</span>
  64. <span class="control-label">
  65. {{ $pinia._s.get('user').getSymbol }}{{ orderInfo.payAmount.toFixed(2) }}
  66. </span>
  67. </el-col>
  68. <el-col :span="8">
  69. <span class="head">{{ $t('zhi-fu-zhuang-tai') }}:</span>
  70. <!-- <span class="control-label payed-status" v-if="orderInfo.payStatus == 'B'">
  71. {{ getName(payStatusList, orderInfo.payStatus) }}
  72. </span>
  73. <span class="control-label normal-status" v-else>
  74. {{ getName(payStatusList, orderInfo.payStatus) }}
  75. </span> -->
  76. <span :class="`control-label ${changeClassName(orderInfo.payStatus)}`">
  77. {{ getName(payStatusList, orderInfo.payStatus) }}
  78. </span>
  79. </el-col>
  80. <el-col :span="8">
  81. <span class="head">{{ $t('jian-mian-jin-e') }}:</span>
  82. <span class="control-label">
  83. {{ $pinia._s.get('user').getSymbol }}{{ orderInfo.discount.toFixed(2) }}
  84. </span>
  85. </el-col>
  86. </el-row>
  87. <el-row class="row">
  88. <el-col :span="8">
  89. <span class="head">{{ $t('zhi-fu-fang-shi') }}:</span>
  90. <span class="control-label">{{ getName(payTypeList, orderInfo.payType) }}</span>
  91. </el-col>
  92. <el-col :span="8">
  93. <span class="head">{{ $t('zhi-fu-shi-jian') }}:</span>
  94. <span class="control-label">{{ orderInfo.payTime ? orderInfo.payTime : '-' }}</span>
  95. </el-col>
  96. <el-col :span="8">
  97. <span class="head">{{ $t('shi-yong-qia-quan') }}:</span>
  98. <span class="control-label">
  99. {{
  100. orderInfo.couponInfo
  101. ? $pinia._s.get('user').getSymbol +
  102. orderInfo.couponInfo.amount +
  103. '(' +
  104. orderInfo.couponInfo.name +
  105. ')'
  106. : '-'
  107. }}
  108. </span>
  109. </el-col>
  110. </el-row>
  111. <el-row class="row">
  112. <el-col :span="8">
  113. <span class="head">{{ $t('shi-yong-ji-fen') }}:</span>
  114. <span class="control-label">{{ orderInfo.usePoint ? orderInfo.usePoint : 0 }}</span>
  115. </el-col>
  116. <el-col :span="8">
  117. <span class="head">{{ $t('ji-fen-jin-e') }}:</span>
  118. <span class="control-label">
  119. {{ $pinia._s.get('user').getSymbol }}{{ orderInfo.pointAmount.toFixed(2) }}
  120. </span>
  121. </el-col>
  122. <el-col :span="8">
  123. <span class="head">{{ $t('pei-song-fei-yong') }}:</span>
  124. <span class="control-label">
  125. {{ $pinia._s.get('user').getSymbol }}{{ orderInfo.deliveryFee.toFixed(2) }}
  126. </span>
  127. </el-col>
  128. </el-row>
  129. </div>
  130. </div>
  131. <!-- <div class="panel">
  132. <div class="title">{{ $t('hui-yuan-xin-xi') }}</div>
  133. <div class="content">
  134. <el-row class="row">
  135. <el-col :span="6">
  136. <span class="head">{{ $t('hui-yuan-ID') }}:</span>
  137. <span class="control-label" v-if="orderInfo.userInfo && orderInfo.isVisitor == 'N'">{{ orderInfo.userInfo.id }}</span>
  138. <span class="control-label" v-else>{{ $t('you-ke') }}</span>
  139. </el-col>
  140. <el-col :span="6">
  141. <span class="head">{{ $t('hui-yuan-hao') }}:</span>
  142. <span class="control-label" v-if="orderInfo.userInfo && orderInfo.isVisitor == 'N'">{{ orderInfo.userInfo.no }}</span>
  143. <span class="control-label" v-else>{{ $t('you-ke') }}</span>
  144. </el-col>
  145. <el-col :span="6">
  146. <span class="head">{{ $t('hui-yuan-ming-cheng') }}:</span>
  147. <span class="control-label" v-if="orderInfo.userInfo && orderInfo.isVisitor == 'N'">{{ orderInfo.userInfo.name }}</span>
  148. <span class="control-label" v-else>{{ $t('you-ke') }}<span v-if="orderInfo.userInfo">{{ $t('guan-li-yuan') }}{{ orderInfo.userInfo.name }}{{ $t('dai-xia-dan') }}</span></span>
  149. </el-col>
  150. <el-col :span="6">
  151. <span class="head">{{ $t('shou-ji-hao') }}:</span>
  152. <span class="control-label">{{ orderInfo.userInfo.mobile ? orderInfo.userInfo.mobile : '-' }}</span>
  153. </el-col>
  154. </el-row>
  155. </div>
  156. </div> -->
  157. <div class="panel">
  158. <div class="title">{{ $t('shang-pin-xin-xi') }}</div>
  159. <div class="content">
  160. <el-table ref="tables" v-loading="loading" :data="orderInfo.goods">
  161. <el-table-column :label="$t('shang-pin-ID')" width="66">
  162. <template slot-scope="scope">
  163. {{ scope.row.id.slice(-4) }}
  164. </template>
  165. </el-table-column>
  166. <el-table-column :label="$t('tu-pian')" align="center" prop="name">
  167. <template slot-scope="scope">
  168. <img class="goods-logo" style="margin: 0 auto" :src="scope.row.image" />
  169. </template>
  170. </el-table-column>
  171. <el-table-column :label="$t('ming-cheng')" align="left" prop="name">
  172. <template slot-scope="scope">
  173. <span class="goods-name">{{ scope.row.name }}</span>
  174. </template>
  175. </el-table-column>
  176. <el-table-column :label="$t('gui-ge')" align="center">
  177. <template slot-scope="scope">
  178. <span v-if="scope.row.specList">
  179. <span class="spec-item" v-for="spec in scope.row.specList">
  180. {{ spec.specValue }}
  181. </span>
  182. </span>
  183. <span v-else>--</span>
  184. </template>
  185. </el-table-column>
  186. <el-table-column :label="$t('jia-ge')" align="center" prop="price" />
  187. <el-table-column :label="$t('you-hui-jin-e')" align="center" prop="discount" />
  188. <el-table-column :label="$t('shu-liang')" align="center" prop="num" />
  189. </el-table>
  190. </div>
  191. </div>
  192. <!-- <div class="panel" v-if="orderInfo.type == 'goods'">
  193. <div class="title">{{ $t('pei-song-xin-xi') }}</div>
  194. <div class="content">
  195. <el-row class="row">
  196. <el-col :span="8">
  197. <span class="head">{{ $t('pei-song-fang-shi') }}:</span>
  198. <span class="control-label" v-if="orderInfo.orderMode == 'oneself'">
  199. {{ $t('men-dian-zi-ti') }}
  200. </span>
  201. <span class="control-label" v-else>{{ $t('wu-liu-pei-song') }}</span>
  202. </el-col>
  203. <el-col :span="16" v-if="orderInfo.orderMode == 'oneself'">
  204. <span class="head">{{ $t('zi-ti-di-zhi') }}:</span>
  205. <span class="control-label">
  206. {{ orderInfo.storeInfo.name }} {{ orderInfo.storeInfo.phone }}
  207. {{ orderInfo.storeInfo.address }}
  208. </span>
  209. </el-col>
  210. <el-col :span="8" v-if="orderInfo.orderMode == 'express' && orderInfo.address">
  211. <span class="head">{{ $t('shou-huo-ren') }}:</span>
  212. <span class="control-label">
  213. {{ orderInfo.address.name ? orderInfo.address.name : '--' }}
  214. </span>
  215. </el-col>
  216. <el-col :span="8" v-if="orderInfo.orderMode == 'express' && orderInfo.address">
  217. <span class="head">{{ $t('lian-xi-dian-hua') }}:</span>
  218. <span class="control-label">
  219. {{ orderInfo.address.mobile ? orderInfo.address.mobile : '-' }}
  220. </span>
  221. </el-col>
  222. </el-row>
  223. <el-row class="row">
  224. <el-col :span="24" v-if="orderInfo.orderMode == 'express' && orderInfo.address">
  225. <span class="head">{{ $t('xiang-xi-di-zhi') }}:</span>
  226. <span class="control-label">
  227. {{ orderInfo.address.provinceName }}{{ orderInfo.address.cityName
  228. }}{{ orderInfo.address.regionName }}{{ orderInfo.address.detail }}
  229. </span>
  230. </el-col>
  231. </el-row>
  232. </div>
  233. </div> -->
  234. <div class="panel" v-if="orderInfo.expressInfo">
  235. <div class="title">{{ $t('wu-liu-xin-xi') }}</div>
  236. <div class="content">
  237. <el-row class="row">
  238. <el-col :span="8">
  239. <span class="head">{{ $t('wu-liu-gong-si') }}:</span>
  240. <span class="control-label" v-if="orderInfo.expressInfo.expressCompany">
  241. {{ orderInfo.expressInfo.expressCompany }}
  242. </span>
  243. <span class="control-label" v-else>--</span>
  244. </el-col>
  245. <el-col :span="8">
  246. <span class="head">{{ $t('wu-liu-dan-hao') }}:</span>
  247. <span class="control-label" v-if="orderInfo.expressInfo.expressNo">
  248. {{ orderInfo.expressInfo.expressNo }}
  249. </span>
  250. <span class="control-label" v-else>--</span>
  251. </el-col>
  252. <el-col :span="8">
  253. <span class="head">{{ $t('fa-huo-shi-jian') }}:</span>
  254. <span class="control-label">{{ orderInfo.expressInfo.expressTime }}</span>
  255. </el-col>
  256. </el-row>
  257. </div>
  258. </div>
  259. </div>
  260. </el-dialog>
  261. </template>
  262. <script>
  263. import { getOrderInfo } from '@/api/order'
  264. export default {
  265. name: 'orderDetail',
  266. props: {
  267. showDialog: {
  268. type: [Boolean],
  269. default: () => false,
  270. },
  271. orderId: {
  272. type: [String],
  273. default: () => '',
  274. },
  275. },
  276. data() {
  277. return {
  278. // 遮罩层
  279. loading: false,
  280. payTypeList: [],
  281. payStatusList: [],
  282. orderInfo: { payAmount: 0, discount: 0, pointAmount: 0, userInfo: {} },
  283. }
  284. },
  285. watch: {
  286. showDialog(value) {
  287. if (value) {
  288. this.getOrderInfo(this.orderId)
  289. }
  290. },
  291. },
  292. methods: {
  293. // 查询配置
  294. getOrderInfo(orderId) {
  295. this.loading = true
  296. getOrderInfo(orderId)
  297. .then((response) => {
  298. this.loading = false
  299. this.orderInfo = response.data.orderInfo
  300. this.payTypeList = response.data.payTypeList
  301. this.payStatusList = response.data.payStatusList
  302. })
  303. .catch(() => {
  304. // empty
  305. })
  306. },
  307. // 取消按钮
  308. cancel() {
  309. this.$emit('closeDialog')
  310. },
  311. // 支付状态得class
  312. changeClassName(status) {
  313. if (status == 'B' || status == '已支付') {
  314. return 'payed-status'
  315. } else if (status == 'A' || status == '待支付') {
  316. return ' unpaid'
  317. } else {
  318. return 'normal-status'
  319. }
  320. },
  321. },
  322. }
  323. </script>
  324. <style rel="stylesheet/scss" lang="scss">
  325. .main-panel {
  326. margin: 0px;
  327. padding: 5px;
  328. max-height: 65vh;
  329. overflow-y: auto;
  330. .panel {
  331. border: solid 1px #cccccc;
  332. min-height: 100px;
  333. border-radius: 2px;
  334. margin-top: 10px;
  335. .title {
  336. font-weight: bold;
  337. margin-top: 10px;
  338. margin-left: 5px;
  339. padding-left: 5px;
  340. color: #333333;
  341. border-left: 5px solid rgb(254, 106, 0);
  342. }
  343. .content {
  344. padding: 20px;
  345. .goods-logo {
  346. width: 45px;
  347. height: 45px;
  348. border: solid 1px #cccccc;
  349. }
  350. .spec-item {
  351. color: #666666;
  352. background: #ffffff;
  353. border: #666666 solid 1px;
  354. border-radius: 20px;
  355. padding: 2px 8px 2px 8px;
  356. margin-right: 5px;
  357. }
  358. .row {
  359. min-height: 40px;
  360. verticle-align: middle;
  361. display: flex;
  362. line-height: 40px;
  363. .payed-status {
  364. color: #52c41a;
  365. background: #f6ffed;
  366. border: #b7eb8f solid 1px;
  367. border-radius: 20px;
  368. padding: 2px 8px;
  369. font-size: 90%;
  370. }
  371. .normal-status {
  372. color: #666;
  373. background: white;
  374. border: #999 solid 1px;
  375. border-radius: 20px;
  376. padding: 2px 8px;
  377. font-size: 90%;
  378. }
  379. .unpaid {
  380. color: #f67f20;
  381. background: rgba(#f67f20, 0.2);
  382. border: #f67f20 solid 1px;
  383. border-radius: 20px;
  384. padding: 2px 8px;
  385. font-size: 90%;
  386. }
  387. }
  388. .head {
  389. color: rgb(164, 164, 164);
  390. min-width: 120px;
  391. text-align: right;
  392. display: block;
  393. float: left;
  394. }
  395. .control-text {
  396. display: block;
  397. background: #f5f5f5;
  398. border-radius: 10px;
  399. margin-left: 120px;
  400. margin-top: 5px;
  401. line-height: 22px;
  402. padding: 5px 10px 5px 10px;
  403. }
  404. }
  405. }
  406. }
  407. </style>