GoodsOrderDetail.vue 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. <template>
  2. <div class="goodsOrder">
  3. <m-header :backUrl="backUrl" />
  4. <van-cell-group
  5. v-if="goodsDetail"
  6. class="order-section"
  7. style="margin-top: 0.1rem"
  8. >
  9. <!-- @click="getGoodsDetail(item)" is-link= -->
  10. <van-cell
  11. v-for="(item, index) in goodsDetail.goodsJson"
  12. :key="index"
  13. class="input-cell"
  14. :center="true"
  15. >
  16. <template #icon>
  17. <van-image :src="item.productPic" class="logo">
  18. <template v-slot:loading>
  19. <van-loading type="spinner" size="20" />
  20. </template>
  21. </van-image>
  22. </template>
  23. <template #title>
  24. {{ item.productName }}
  25. <p class="money">¥{{ item.productPrice | moneyFormat }}</p>
  26. </template>
  27. <template #default>
  28. <span> x {{ item.productQuantity }}</span>
  29. </template>
  30. </van-cell>
  31. </van-cell-group>
  32. <van-cell-group v-if="goodsDetail" class="order-section order-info">
  33. <p class="order-item">
  34. <span>订单总金额</span><span>¥{{ allPrice | moneyFormat }}</span>
  35. </p>
  36. <p class="order-item">
  37. <span>应付金额</span
  38. ><span style="color: #ff3535"
  39. >¥{{ goodsDetail.totalAmount | moneyFormat }}</span
  40. >
  41. </p>
  42. <p class="order-item">
  43. <span>乐器减免</span
  44. ><span>¥{{ -goodsDetail.marketAmount | moneyFormat }}</span>
  45. </p>
  46. <p class="order-item">
  47. <span>优惠券</span
  48. ><span>¥{{ -goodsDetail.couponRemitFee | moneyFormat }}</span>
  49. </p>
  50. <p class="order-item">
  51. <span>余额支付</span
  52. ><span>¥{{ -goodsDetail.balancePaymentAmount | moneyFormat }}</span>
  53. </p>
  54. <p class="order-item">
  55. <span>现金支付</span
  56. ><span>¥{{ goodsDetail.actualAmount | moneyFormat }}</span>
  57. </p>
  58. <p class="order-item">
  59. <span>订单状态</span>
  60. <span v-if="goodsDetail.status == 'SUCCESS'" style="color: #01c1b5"
  61. >支付成功</span
  62. >
  63. <span v-else style="color: #ff3535">待支付</span>
  64. </p>
  65. <p class="order-item">
  66. <span>学员姓名</span><span>{{ goodsDetail.userName }}</span>
  67. </p>
  68. <p class="order-item">
  69. <span>收货状态</span>
  70. <span
  71. v-if="goodsDetail.receiveStatus == 'NO_RECEIVE'"
  72. style="color: #ff802c"
  73. >未确认收货</span
  74. >
  75. <span v-if="goodsDetail.receiveStatus == 'AUTO_RECEIVE'"
  76. >自动确认收货</span
  77. >
  78. <span v-if="goodsDetail.receiveStatus == 'MANUAL_RECEIVE'"
  79. >手动确认收货</span
  80. >
  81. </p>
  82. <p class="order-item">
  83. <span>订单号</span><span>{{ goodsDetail.orderNo }}</span>
  84. </p>
  85. <p class="order-item">
  86. <span>交易流水号</span
  87. ><span
  88. style="max-width: 60%; word-break: break-all; line-height: 1.5"
  89. >{{ goodsDetail.transNo }}</span
  90. >
  91. </p>
  92. <p class="order-item">
  93. <span>创建时间</span><span>{{ goodsDetail.createTime }}</span>
  94. </p>
  95. <p class="order-item">
  96. <span>付款时间</span><span>{{ goodsDetail.payTime }}</span>
  97. </p>
  98. </van-cell-group>
  99. <!-- 商品详情 -->
  100. <van-popup
  101. v-model="goodsStatus"
  102. class="goodsDetail"
  103. :lock-scroll="true"
  104. position="bottom"
  105. :style="{ height: '100%' }"
  106. >
  107. <m-header :backUrl="backUrl2" name="商品详情" />
  108. <van-cell-group>
  109. <van-cell class="input-cell" :center="true">
  110. <template slot="icon">
  111. <van-image
  112. :src="popupGoodsDetail.image"
  113. class="logo"
  114. style="width: 1rem; height: 1rem"
  115. >
  116. <template v-slot:loading>
  117. <van-loading type="spinner" size="20" />
  118. </template>
  119. </van-image>
  120. </template>
  121. <template slot="title">
  122. <div>{{ popupGoodsDetail.name }}</div>
  123. <van-tag plain color="#C2A076" style="margin: 0.04rem 0"
  124. >品牌:{{ popupGoodsDetail.brand }}</van-tag
  125. >
  126. <div class="price-section">
  127. <span class="money"
  128. ><i>现价:¥</i
  129. >{{ popupGoodsDetail.discountPrice | moneyFormat }}</span
  130. >
  131. <del
  132. >原价:¥{{ popupGoodsDetail.marketPrice | moneyFormat }}</del
  133. >
  134. </div>
  135. </template>
  136. </van-cell>
  137. </van-cell-group>
  138. <van-cell-group>
  139. <van-cell
  140. title="品牌"
  141. value-class="valueStyle"
  142. :value="popupGoodsDetail.brand"
  143. :center="true"
  144. ></van-cell>
  145. <van-cell title="商品类型" value-class="valueStyle" :center="true">
  146. {{ popupGoodsDetail.type | shopType }}
  147. </van-cell>
  148. <van-cell
  149. title="商品分类"
  150. value-class="valueStyle"
  151. :value="popupGoodsDetail.goodsCategoryName"
  152. :center="true"
  153. ></van-cell>
  154. <van-cell
  155. title="具体型号"
  156. value-class="valueStyle"
  157. :value="popupGoodsDetail.specification"
  158. :center="true"
  159. ></van-cell>
  160. </van-cell-group>
  161. <van-cell-group style="margin-bottom: 0.75rem">
  162. <van-cell
  163. title="商品详情"
  164. style="flex-direction: column"
  165. title-class="title-detail"
  166. value-class="value-detail"
  167. :value="popupGoodsDetail.desc"
  168. ></van-cell>
  169. </van-cell-group>
  170. <van-row gutter="10" type="flex" justify="center" class="btn-group">
  171. <van-col span="22">
  172. <van-button
  173. @click="goodsStatus = false"
  174. type="primary"
  175. color="#01C1B5"
  176. plain
  177. round
  178. block
  179. >关闭</van-button
  180. >
  181. </van-col>
  182. </van-row>
  183. </van-popup>
  184. </div>
  185. </template>
  186. <script>
  187. /* eslint-disable */
  188. import { browser } from "@/common/util";
  189. import MHeader from "@/components/MHeader";
  190. import MEmpty from "@/components/MEmpty";
  191. import setLoading from "@/common/loading";
  192. import { goodsGet } from "./api";
  193. export default {
  194. name: "goodsOrder",
  195. components: { MHeader, MEmpty },
  196. data() {
  197. let query = this.$route.query;
  198. let that = this;
  199. return {
  200. headerStatus: false,
  201. goodsDetail: null,
  202. backUrl: {
  203. status: true,
  204. path: "/shopGoodsOrder?activeTab=" + query.activeTab,
  205. },
  206. backUrl2: {
  207. callBack() {
  208. that.goodsStatus = false;
  209. },
  210. },
  211. goodsStatus: false,
  212. popupGoodsDetail: {},
  213. };
  214. },
  215. mounted() {
  216. // 判断是否在app里面
  217. document.title = "订单详情";
  218. this.__init();
  219. },
  220. methods: {
  221. __init() {
  222. let goodsDetail = localStorage.getItem("shopOrderGoodsDetail");
  223. goodsDetail = goodsDetail ? JSON.parse(goodsDetail) : null;
  224. this.goodsDetail = goodsDetail;
  225. },
  226. async getGoodsDetail(item) {
  227. // 判断是否请求同一个商品信息
  228. if (
  229. this.popupGoodsDetail.id &&
  230. this.popupGoodsDetail.id == item.goodsId
  231. ) {
  232. this.goodsStatus = true;
  233. return;
  234. }
  235. setLoading(true);
  236. await goodsGet(item.goodsId)
  237. .then((res) => {
  238. setLoading(false);
  239. let result = res.data;
  240. if (result.code == 200) {
  241. this.popupGoodsDetail = result.data;
  242. this.goodsStatus = true;
  243. }
  244. })
  245. .catch(() => {
  246. setLoading(false);
  247. });
  248. },
  249. },
  250. destroyed() {
  251. localStorage.removeItem("shopOrderGoodsDetail");
  252. },
  253. computed: {
  254. allPrice() {
  255. let money = 0;
  256. if (Array.isArray(this.goodsDetail.goodsJson)) {
  257. this.goodsDetail.goodsJson.forEach((goods) => {
  258. money += goods.goodsPrice * goods.goodsNum;
  259. });
  260. }
  261. return money;
  262. },
  263. },
  264. };
  265. </script>
  266. <style lang="less" scoped>
  267. .goodsOrder {
  268. min-height: 100vh;
  269. overflow: hidden;
  270. }
  271. /deep/.van-tab__pane {
  272. padding-top: 0.2rem;
  273. }
  274. /deep/.van-tab {
  275. color: #333;
  276. font-size: 0.17rem;
  277. }
  278. /deep/.van-tab--active {
  279. color: #01c1b5;
  280. }
  281. .order-section {
  282. margin: 0 0.12rem 0.16rem;
  283. border-radius: 0.05rem;
  284. overflow: hidden;
  285. &.order-info {
  286. padding: 0.15rem 0.16rem;
  287. }
  288. .order-item {
  289. font-size: 0.14rem;
  290. color: #333;
  291. line-height: 2;
  292. display: flex;
  293. justify-content: space-between;
  294. }
  295. }
  296. .order-title {
  297. color: #808080;
  298. font-size: 0.14rem;
  299. flex: auto 1;
  300. }
  301. .order-status {
  302. font-size: 0.14rem;
  303. color: #f5222d;
  304. &.success {
  305. color: #01c1b5;
  306. }
  307. }
  308. .order-money {
  309. color: #000;
  310. font-size: 0.16rem;
  311. span {
  312. color: #ff3535;
  313. }
  314. }
  315. .input-cell {
  316. padding: 0.12rem 0.16rem;
  317. .logo {
  318. width: 1rem;
  319. height: 1rem;
  320. margin-right: 0.15rem;
  321. border-radius: 0.05rem;
  322. overflow: hidden;
  323. }
  324. .price-section {
  325. del {
  326. font-size: 0.12rem;
  327. color: #666666;
  328. padding-left: 0.1rem;
  329. }
  330. }
  331. .money {
  332. color: #ff3535;
  333. font-weight: 600;
  334. font-size: 0.16rem;
  335. i {
  336. font-style: normal;
  337. font-size: 0.14rem;
  338. }
  339. }
  340. /deep/.van-cell__title {
  341. font-size: 0.16rem;
  342. color: #000000;
  343. flex: 1 auto;
  344. flex-basis: 47%;
  345. }
  346. /deep/.van-cell__value {
  347. height: 0.2rem;
  348. display: flex;
  349. align-items: center;
  350. justify-content: flex-end;
  351. }
  352. }
  353. .goodsDetail {
  354. background: #f3f4f8;
  355. /deep/.van-cell-group {
  356. margin-bottom: 0.15rem;
  357. }
  358. /deep/.van-cell {
  359. padding: 0.1rem 0.16rem;
  360. line-height: 1.5;
  361. font-size: 0.14rem;
  362. color: #808080;
  363. }
  364. .valueStyle {
  365. color: #000000;
  366. }
  367. .title-detail {
  368. font-size: 0.16rem;
  369. color: #000;
  370. padding-bottom: 0.1rem;
  371. }
  372. .value-detail {
  373. font-size: 0.14rem;
  374. color: #808080;
  375. text-align: left;
  376. }
  377. .btn-group {
  378. background: #fff;
  379. position: fixed;
  380. bottom: 0;
  381. left: 0;
  382. width: 100%;
  383. padding: 0.1rem 0;
  384. padding-bottom: calc(env(safe-area-inset-bottom) / 2);
  385. .van-button {
  386. font-size: 0.16rem;
  387. height: 0.44rem;
  388. line-height: 0.42rem;
  389. }
  390. }
  391. }
  392. </style>