orderDetails.html 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. {extend name="base" /}
  2. {block name="title"}Home{/block}
  3. {block name="styles"}
  4. <link rel="stylesheet" href="/assets/index/css/orderDetails.css?t=12">
  5. {/block}
  6. {block name="mainArea"}
  7. <section class="pageContainer">
  8. <div class="pageMain">
  9. <!-- 页面菜单 -->
  10. <div class="navContainer" id="userNavContainer">
  11. <a href="/index/index/index.html">
  12. <nav class="navItem">
  13. <div class="navItemFlex">
  14. <img src="/assets/index/asstes/icon/hm.png" alt="">
  15. <h2 class="navTitle">Home</h2>
  16. </div>
  17. </nav>
  18. </a>
  19. <nav class="navItem">
  20. <div class="navItemFlex">
  21. <img src="/assets/index/asstes/icon/order.png" alt="">
  22. <h2 class="navTitle">My orders</h2>
  23. </div>
  24. <div class="sunNavBox">
  25. <a href="#">
  26. <nav class="sunNavItem orderNavItem" id="unpaid" data-type="payment">
  27. <h3 class="sunNavTitle">Unpaid</h3>
  28. </nav>
  29. </a>
  30. <a href="#">
  31. <nav class="sunNavItem orderNavItem" id="treat" data-type="treat">
  32. <h3 class="sunNavTitle">To be shipped</h3>
  33. </nav>
  34. </a>
  35. <a href="#">
  36. <nav class="sunNavItem orderNavItem" data-type="shipped">
  37. <h3 class="sunNavTitle">Shipped</h3>
  38. </nav>
  39. </a>
  40. <a href="#">
  41. <nav class="sunNavItem orderNavItem" data-type="take">
  42. <h3 class="sunNavTitle">Received</h3>
  43. </nav>
  44. </a>
  45. </div>
  46. </nav>
  47. <a href="/index/user/myScores.html">
  48. <nav class="navItem">
  49. <div class="navItemFlex">
  50. <img src="/assets/index/asstes/icon/jf.png" alt="">
  51. <h2 class="navTitle">My points</h2>
  52. </div>
  53. </nav>
  54. </a>
  55. </div>
  56. <!-- 页面内容 -->
  57. <div class="pageConten">
  58. <div class="odTitleBox">
  59. <img src="/assets/index/asstes/icon/fjt.png" alt="">
  60. <h4 class="odTitle">Order Information</h4>
  61. </div>
  62. <!-- <div class="odMenuBox">
  63. <div class="odMenuItem">
  64. <img src="/assets/index/asstes/icon/dy.png" alt="">
  65. <p>打印订单</p>
  66. </div>
  67. <div class="odMenuItem">
  68. <img src="/assets/index/asstes/icon/th.png" alt="">
  69. <p>退货退款</p>
  70. </div>
  71. </div>-->
  72. <div class="orderInfoBox">
  73. <!-- 左边内容 -->
  74. <div class="leftInfoBox">
  75. <!-- 订单名字 -->
  76. <div class="orderNameBox eleBox">
  77. <div class="orNameFlex">
  78. <h5 class="orName">#Order Information</h5>
  79. <p class="orTime">Created At:{$order['create_time']}</p>
  80. </div>
  81. <div class="orStList">
  82. <div class="orStItem paid">
  83. <span></span>
  84. <p>Paid</p>
  85. </div>
  86. <div class="orStItem shipped">
  87. <span></span>
  88. <p>To be shipped</p>
  89. </div>
  90. </div>
  91. </div>
  92. <!-- 订单商品 -->
  93. <div class="orderGoodsBox eleBox">
  94. <div class="ogTeFlex">
  95. <p class="ogTitle">Listing</p>
  96. <div class="ogMarkButton">Pay With PayPal</div>
  97. </div>
  98. <p class="ogTips">
  99. Your goods will be shipped in 2 3days
  100. </p>
  101. {foreach $order['goods'] as $goods}
  102. <div class="ogGoodsInfo" data-id="{$goods['goods_id']}"
  103. order-goods-id="{$goods['order_goods_id']}">
  104. <div class="ogImgBox">
  105. <img src="{$goods['goods_image']}"
  106. alt="">
  107. </div>
  108. <div class="ogTitleBox">
  109. <p class="ogTitle">{$goods['goods_name']}</p>
  110. <p class="ogSpecs"></p>
  111. </div>
  112. <p class="ogPr">${$goods['goods_price']}x{$goods['total_num']}</p>
  113. <p class="ogToPr">${$goods['total_price']}</p>
  114. <!-- 评价 -->
  115. {eq name="order['receipt_status']" value="20"}
  116. <div class="evaluate">Evaluate</div>
  117. {/eq}
  118. </div>
  119. {/foreach}
  120. </div>
  121. <!-- 支付状态 -->
  122. <div class="paymentInfoBox eleBox">
  123. <div class="opTeFlex">
  124. <p class="opTitle">Bill</p>
  125. <!-- <div class="opMarkButton">标记为已付款</div>-->
  126. </div>
  127. <div class="opInfoBox">
  128. <div class="opInfoItem">
  129. <p class="opIKey">Express</p>
  130. <p class="opIValue">$0.00</p>
  131. </div>
  132. <div class="opInfoItem">
  133. <p class="opIKey">Tax</p>
  134. <p class="opIValue">$0.00</p>
  135. </div>
  136. <div class="opInfoItem">
  137. <p class="opIKey">Total</p>
  138. <p class="opIValue">${$order['total_price']}</p>
  139. </div>
  140. <div class="opInfoItem">
  141. <p class="opIKey">Paid</p>
  142. <p class="opIValue">${$order['pay_price']}</p>
  143. </div>
  144. </div>
  145. </div>
  146. <!-- 物流信息 -->
  147. <div class="logisticsBox eleBox">
  148. <div class="logsTeFlex">
  149. <p class="logsTitle">物流信息</p>
  150. <div class="openButton">
  151. <img src="/assets/index/asstes/icon/slt.png" alt="">
  152. </div>
  153. </div>
  154. <div class="logsInfo openBox">
  155. <div class="logList">
  156. <div class="logsLink"></div>
  157. <!-- 物流天数据 -->
  158. <div class="logItem">
  159. <p class="logTime">2024.03.11</p>
  160. <!-- 物流当天信息 -->
  161. <div class="logSunItem">
  162. <p class="dic"></p>
  163. <p class="logSunText">
  164. <span class="sunTime">2024-03-11 12:24</span>
  165. <span class="sunStTe">订单已完成</span>
  166. <span class="sunStTips">自动完成订单,交易关闭</span>
  167. </p>
  168. </div>
  169. <div class="logSunItem">
  170. <p class="dic"></p>
  171. <p class="logSunText">
  172. <span class="sunTime">2024-03-11 12:24</span>
  173. <span class="sunStTe">订单已完成</span>
  174. <span class="sunStTips">自动完成订单,交易关闭</span>
  175. </p>
  176. </div>
  177. </div>
  178. <div class="logItem">
  179. <p class="logTime">2024.03.11</p>
  180. <!-- 物流当天信息 -->
  181. <div class="logSunItem">
  182. <p class="dic"></p>
  183. <p class="logSunText">
  184. <span class="sunTime">2024-03-11 12:24</span>
  185. <span class="sunStTe">订单已完成</span>
  186. <span class="sunStTips">自动完成订单,交易关闭</span>
  187. </p>
  188. </div>
  189. <div class="logSunItem">
  190. <p class="dic"></p>
  191. <p class="logSunText">
  192. <span class="sunTime">2024-03-11 12:24</span>
  193. <span class="sunStTe">订单已完成</span>
  194. <span class="sunStTips">自动完成订单,交易关闭</span>
  195. </p>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. </div>
  201. </div>
  202. <!-- 右边内容 -->
  203. <div class="rightInfoBox">
  204. <!-- 客户信息 -->
  205. <div class="customInfo eleBox">
  206. <div class="cusTeFlex">
  207. <p class="cusTeTitle">客户信息</p>
  208. <div class="openButton">
  209. <img src="/assets/index/asstes/icon/slt.png" alt="">
  210. </div>
  211. </div>
  212. <div class="cusInfoBox openBox">
  213. <div class="cusItem">
  214. <p class="cusKey">Name</p>
  215. <p class="cusValue">{$order['address']['name']} {$order['address']['last_name']}</p>
  216. </div>
  217. <!-- <div class="cusItem">
  218. <p class="cusKey">电子邮件地址</p>
  219. <p class="cusValue">124345213@163.com</p>
  220. </div>-->
  221. <div class="cusItem">
  222. <p class="cusKey">Phone Number</p>
  223. <p class="cusValue">{$order['address']['phone']}</p>
  224. </div>
  225. </div>
  226. </div>
  227. <!-- 送货地址 -->
  228. <div class="addressBox eleBox">
  229. <div class="addTeFlex">
  230. <p class="addTeTitle">送货地址</p>
  231. <div class="openButton">
  232. <img src="/assets/index/asstes/icon/slt.png" alt="">
  233. </div>
  234. </div>
  235. <div class="addressInfo openBox">
  236. <div class="addInfoItem">
  237. <p class="aiKey">First Name</p>
  238. <p class="aiValue">{$orderAddress['name']}</p>
  239. </div>
  240. <div class="addInfoItem">
  241. <p class="aiKey">Last Name</p>
  242. <p class="aiValue">{$orderAddress['last_name']}</p>
  243. </div>
  244. <!-- <div class="addInfoItem">-->
  245. <!-- <p class="aiKey">公司</p>-->
  246. <!-- <p class="aiValue">亚马逊</p>-->
  247. <!-- </div>-->
  248. <div class="addInfoItem">
  249. <p class="aiKey">Phone Number</p>
  250. <p class="aiValue">{$orderAddress['phone']}</p>
  251. </div>
  252. <div class="addInfoItem">
  253. <p class="aiKey">Street</p>
  254. <p class="aiValue">{$orderAddress['detail']}</p>
  255. </div>
  256. <!-- <div class="addInfoItem">-->
  257. <!-- <p class="aiKey">公寓,别至</p>-->
  258. <!-- <p class="aiValue">XXXXXXXXXX</p>-->
  259. <!-- </div>-->
  260. <div class="addInfoItem">
  261. <p class="aiKey">State</p>
  262. <p class="aiValue">{$orderAddress['region']['region']}</p>
  263. </div>
  264. <div class="addInfoItem">
  265. <p class="aiKey">Country</p>
  266. <p class="aiValue">US</p>
  267. </div>
  268. <!-- <div class="addInfoItem">-->
  269. <!-- <p class="aiKey">区域</p>-->
  270. <!-- <p class="aiValue">XXXXXXXXXX</p>-->
  271. <!-- </div>-->
  272. <div class="addInfoItem">
  273. <p class="aiKey">Zip Code</p>
  274. <p class="aiValue">{$orderAddress['zip_code']}</p>
  275. </div>
  276. </div>
  277. </div>
  278. </div>
  279. </div>
  280. </div>
  281. </div>
  282. </section>
  283. {/block}
  284. {block name="components"}
  285. <div id="loadingModel">
  286. <div class="loadingBox">
  287. <img src="/assets/index/asstes/icon/loading.gif" alt="Jumping to paypal.">
  288. </div>
  289. </div>
  290. <!-- 评价弹窗 -->
  291. <div id="evaluateModal">
  292. <div class="evaluateBox">
  293. <div class="evaluateItem">
  294. <p class="evaluateTitle">Score:</p>
  295. <div class="starContainer">
  296. <div class="starItem">
  297. <img class="star" src="/assets/index/asstes/icon/star.png" alt="">
  298. <img class="selStar" src="/assets/index/asstes/icon/selStar.png" alt="">
  299. </div>
  300. <div class="starItem">
  301. <img class="star" src="/assets/index/asstes/icon/star.png" alt="">
  302. <img class="selStar" src="/assets/index/asstes/icon/selStar.png" alt="">
  303. </div>
  304. <div class="starItem">
  305. <img class="star" src="/assets/index/asstes/icon/star.png" alt="">
  306. <img class="selStar" src="/assets/index/asstes/icon/selStar.png" alt="">
  307. </div>
  308. <div class="starItem">
  309. <img class="star" src="/assets/index/asstes/icon/star.png" alt="">
  310. <img class="selStar" src="/assets/index/asstes/icon/selStar.png" alt="">
  311. </div>
  312. <div class="starItem">
  313. <img class="star" src="/assets/index/asstes/icon/star.png" alt="">
  314. <img class="selStar" src="/assets/index/asstes/icon/selStar.png" alt="">
  315. </div>
  316. </div>
  317. </div>
  318. <div class="evaluateItem">
  319. <div class="textareaBox">
  320. <textarea id="evaluateTextarea" placeholder="评价一下吧"></textarea>
  321. </div>
  322. </div>
  323. <div class="evaluateBotBox">
  324. <div id="evaluateBot">submit</div>
  325. </div>
  326. </div>
  327. <div id="closeEvaluateModal"></div>
  328. </div>
  329. {/block}
  330. {block name="scriptSrc"}
  331. <script src="/assets/index/js/jquery-1.12.0.js"></script>
  332. <script src="/assets/index/js/flexible.js"></script>
  333. <script src="/assets/index/js/public.js?t=11"></script>
  334. <script src="/assets/index/js/swiper.js?t=6"></script>
  335. <script src="/assets/index/js/jquery.lazyload.js"></script>
  336. <script>
  337. $(document).ready(function () {
  338. var orderId = "{$order['order_id']}";
  339. console.log('orderId::', orderId)
  340. var payStatus = "{$order['pay_status']}";
  341. console.log('payStatus::', payStatus)
  342. $('#ogMarkButton').hide(0)
  343. if (payStatus === "10") {
  344. $('#ogMarkButton').show(0)
  345. }
  346. //触屏事件 || 点击事件
  347. const tap = "ontouchstart" in window ? "touchstart" : "click";
  348. //返回
  349. $(".odTitleBox").on(tap, function () {
  350. if (window.history.length > 1) {
  351. // 返回上一页
  352. window.history.back();
  353. } else {
  354. //跳转首页
  355. window.location.replace('/index/index/index.html');
  356. }
  357. });
  358. $(".openButton").on(tap, function () {
  359. const parentEle = $(this).closest('.eleBox')
  360. console.log(parentEle)
  361. const openBoxEle = parentEle.find(".openBox")
  362. console.log(openBoxEle)
  363. openBoxEle.stop().slideToggle(80);
  364. });
  365. //初始化菜单选中状态
  366. function initNavState() {
  367. const url = window.location.href;
  368. const searchParams = new URLSearchParams(new URL(url).search);
  369. const orderType = searchParams.get("orderType");
  370. //订单中心菜单列表
  371. const orderNavItemList = $(".orderNavItem")
  372. //是否存在匹配项
  373. let exist = false
  374. if (orderNavItemList) {
  375. orderNavItemList.each(function (index, element) {
  376. const type = $(this).attr('data-type');
  377. if (type === orderType) {
  378. $(this).addClass("active")
  379. exist = true
  380. }
  381. })
  382. }
  383. //如果未匹配中默认选中待发货
  384. if (!exist) {
  385. $('#treat').addClass("active")
  386. }
  387. }
  388. //支付方法
  389. const orderPayment = (params) => {
  390. return new Promise(function (resolve, reject) {
  391. $.ajax({
  392. url: "/index/order/pay?payType=30&orderId=" + orderId,
  393. method: "POST",
  394. data: JSON.stringify(params),
  395. headers: {
  396. "Content-Type": "application/json",
  397. "storeId": "10001",
  398. "platform": "H5",
  399. // "Access-Token": vapesToken
  400. },
  401. dataType: "json",
  402. success: function (response) {
  403. resolve(response);
  404. },
  405. error: function (xhr, status, error) {
  406. reject(error);
  407. }
  408. });
  409. });
  410. }
  411. //支付按钮点击
  412. $(".ogMarkButton").on(tap, async function () {
  413. console.log("paypaing")
  414. $("#loadingModel").show(0)
  415. const params = {}
  416. const res = await orderPayment(params)
  417. const {status, message, data} = res || {}
  418. if (status === 200 || status === "200") {
  419. window.open(data.payment.approval_link, "_blank");
  420. var interId = setInterval(function () {
  421. fetchOrder(interId);
  422. }, 3000)
  423. } else if (status === 401 || status === "401") {
  424. window.location.replace('../passport/logIn.html')
  425. } else {
  426. showToast(message)
  427. }
  428. });
  429. function fetchOrder(interId) {
  430. $.get('/index/order/detail?orderId=' + orderId, function (res) {
  431. console.log(res.data.order.pay_status);
  432. if (res.status == 200 && res.data.order.pay_status == 20) {
  433. clearInterval(interId);
  434. $("#loadingModel").hide(0);
  435. window.location.replace('/index/user/orderDetails.html?orderId=' + orderId)
  436. }
  437. })
  438. }
  439. $(".orderNavItem").on(tap, function () {
  440. const type = $(this).attr('data-type');
  441. window.location.replace(`/index/user/order.html?orderType=${type}`)
  442. });
  443. initNavState()
  444. //商品id(评价记录)
  445. let goodsId
  446. let orderGoodsId
  447. //商品评分
  448. let score = 0
  449. //商品评价点击
  450. $(".evaluate").on(tap, function (event) {
  451. event.preventDefault();
  452. const parentEle = $(this).closest('.ogGoodsInfo')
  453. goodsId = parentEle.attr("data-id")
  454. orderGoodsId = parentEle.attr("order-goods-id")
  455. $('#evaluateTextarea').val("")
  456. $(".starItem").removeClass('active');
  457. $("#evaluateModal").show(0)
  458. });
  459. $(".starItem").on(tap, function (event) {
  460. event.preventDefault();
  461. const _this = $(this)
  462. score = _this.index() + 1;
  463. _this.addClass('active');
  464. _this.prevAll().addClass('active');
  465. _this.nextAll().removeClass('active');
  466. });
  467. //输入框聚焦
  468. $('#evaluateTextarea').focus(function () {
  469. $(this).addClass('active');
  470. });
  471. //输入框失焦
  472. $('#evaluateTextarea').blur(function () {
  473. $(this).removeClass('active');
  474. });
  475. //关闭评价
  476. $('#closeEvaluateModal').on(tap, function () {
  477. $("#evaluateModal").hide(0)
  478. });
  479. //提交评价
  480. $('#evaluateBot').on(tap, function () {
  481. const evaluateTextareaEle = $('#evaluateTextarea')
  482. const textareaValue = evaluateTextareaEle.val()
  483. if (!textareaValue || textareaValue == "") {
  484. evaluateTextareaEle.focus()
  485. return
  486. }
  487. console.log("评价内容", textareaValue)
  488. console.log("商品id", goodsId)
  489. console.log("商品orderGoodsId", orderGoodsId)
  490. console.log("score", score)
  491. var dp = {
  492. orderId: orderId,
  493. form: [{
  494. order_goods_id: orderGoodsId,
  495. goods_id: goodsId,
  496. score: score * 10,
  497. content: textareaValue,
  498. }]
  499. }
  500. $.ajax({
  501. url: "/index/comment/submit",
  502. headers: {platform: 'H5'},
  503. dataType: 'json',
  504. data: JSON.stringify(dp),
  505. type: "POST",
  506. contentType: 'application/json',
  507. success: function (obj) {
  508. //注册成功后进入
  509. if (obj.status === 200 || obj.status === '200') {
  510. showToast("Successful")
  511. $("#evaluateModal").hide(0)
  512. goodsId = null
  513. } else if (obj.status === 401 || obj.status === '401') {
  514. window.location.replace('../passport/logIn.html')
  515. } else {
  516. showToast('Something wrong,please try again later')
  517. }
  518. }
  519. })
  520. });
  521. /**
  522. * 吐司提示
  523. * @param message 消息
  524. * @returns
  525. */
  526. function showToast(message) {
  527. var toastElement = $('#toastContainer');
  528. toastElement.text(message);
  529. toastElement.stop(true, true).fadeIn(200).delay(2000).fadeOut(200);
  530. }
  531. })
  532. </script>
  533. {/block}