Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. <template>
  2. <view class="content">
  3. <image class='bg-image' mode="widthFix"
  4. src="https://qtzl.etcjz.cn/default-bucket/20240324/3eba2095f5204798a1f8101b_beijing.jpg"></image>
  5. <view class="content-re">
  6. <custom-header title="订单详情" :back="config.hasReturn === 'true'"></custom-header>
  7. <view style="padding: 20rpx" v-if='isShow'>
  8. <view class="title">
  9. 订单详情
  10. </view>
  11. <view class="container">
  12. <template v-for='(item,index) in formData'>
  13. <view class="detail-item" :key='index'
  14. v-if='item.value !== "" && item.value !== undefined && !item.isHide'>
  15. <text>{{item.label}}</text>
  16. <text class="amount">{{item.key === 'amount'? '¥'+ item.value:item.value}}</text>
  17. </view>
  18. </template>
  19. <template v-for='(item,index) in amountList'>
  20. <view class="detail-item" :key='index'
  21. v-if='item.value !== "" && item.value !== undefined && parseFloat(item.value) !== 0'>
  22. <text>{{item.label}}</text>
  23. <view>
  24. <text class="amount">{{'¥'+ item.value}} </text>
  25. <text class="status" :class="{amount:item.status==='SUCCESS'}">{{item.statusName}}
  26. </text>
  27. </view>
  28. </view>
  29. </template>
  30. <view class="detail-item" v-if='amountData.totalFee && parseFloat(amountData.totalFee) !== 0'>
  31. <text>合计金额</text>
  32. <text class="amount">¥{{amountData.totalFee}} </text>
  33. </view>
  34. </view>
  35. <!-- <view class="payment-total"
  36. v-if='amountData.actualPayment && parseFloat(amountData.actualPayment) !== 0'>
  37. <text>待付款</text>
  38. <text class="amount">¥{{handleAmount(amountData.actualPayment)}}</text>
  39. </view> -->
  40. <view class="over-txt">
  41. <button type="success" class="btn-txt btn" :class='{disabledBtn:!qdOrderVal.h5ReturnQdUrl}'
  42. :disabled="!qdOrderVal.h5ReturnQdUrl" @click="toNav">用户车辆信息上传完成</button>
  43. <!-- <wx-open-launch-weapp id="launch-btn" appid="wxbd70e25d388d9f46" path="pages/index/index" env-version="trial"
  44. @error="handleErrorFn" @launch="handleLaunchFn" v-else>
  45. <div v-is="'script'" type='text/wxtag-template' style="display: block;">
  46. <div class="btn">跳转小程序</div>
  47. </div>
  48. </wx-open-launch-weapp> -->
  49. </view>
  50. <!-- <Hetong v-model="checked" :link='linkObj.url' v-if='linkObj.url' :name='linkObj.name' /> -->
  51. <!-- <button type="success" class="btn-txt btn" @click="submit">确认办理</button> -->
  52. </view>
  53. <u-toast ref="uToastRef" />
  54. </view>
  55. </view>
  56. </template>
  57. <script setup lang='ts'>
  58. import {
  59. unifyTemplate
  60. } from '@/hooks/unifyTemplate'
  61. import {
  62. reactive,
  63. ref
  64. } from 'vue'
  65. import {
  66. onLoad
  67. } from '@dcloudio/uni-app'
  68. import Hetong from '@/components/Hetong/Hetong.vue'
  69. import {
  70. request,
  71. requestNew,
  72. myJsonp,
  73. toWeixin
  74. } from '@/utils/network/request'
  75. import {
  76. payType,
  77. payMentStatus
  78. } from './common.js'
  79. import {
  80. setToken,
  81. getToken,
  82. setItem,
  83. StorageKeys
  84. } from '@/utils/storage'
  85. import handleAmount from '@/utils/handleAmount.js';
  86. import {
  87. handleToTypes,
  88. isWeb,
  89. handleToZhifubao,
  90. handleTonei,
  91. isWxDuan
  92. } from '@/utils/utils';
  93. const {
  94. CustomHeader, //头部组件
  95. initData, //初始化数据
  96. isShow, //是否展示formBuilderVue组件
  97. qdOrderVal //qdOrder中数据 ref
  98. } = unifyTemplate() //初始化数据
  99. // import {
  100. // request
  101. // } from '../../static/js/network/request'
  102. function handleErrorFn(e) {
  103. console.log('fail', e.detail);
  104. }
  105. function handleLaunchFn(e) {
  106. console.log('success');
  107. }
  108. let orderObj = {}
  109. let formData = reactive < any > ([{
  110. label: '产品名',
  111. value: '',
  112. key: "equityName",
  113. key1: 'promoteName',
  114. }, {
  115. label: '订单步骤',
  116. value: '',
  117. key: "orderStepName",
  118. }, {
  119. label: '车牌号',
  120. key: "vehiclePlate",
  121. value: '贵'
  122. }, {
  123. label: '车牌颜色',
  124. key: "vehiclePlateColorStr",
  125. value: '贵'
  126. }, {
  127. label: '车主姓名',
  128. key: "customerName",
  129. value: ''
  130. }, {
  131. label: '收费车型',
  132. key: "vehicleClassStr",
  133. value: ''
  134. }, {
  135. label: '邮寄地址',
  136. key: "orderInfoExt",
  137. key1: 'region,address',
  138. default: "不邮寄",
  139. isHide: false,
  140. value: ''
  141. }])
  142. const amountList = ref < any > ([])
  143. const checked = ref(false)
  144. // 实付款
  145. const amountData = ref({
  146. totalFee: '',
  147. actualPayment: 0
  148. })
  149. let config = ref < any > ({
  150. submitName: '提交',
  151. titleWidth: 160
  152. })
  153. onLoad((opin) => {
  154. // 初始化数据
  155. initData(opin, 4).then(async data => {
  156. console.log(data, 'data');
  157. orderObj = data.order
  158. amountData.value.totalFee = handleAmount(data.order.amount)
  159. await login(data)
  160. // getLink(data.order.orderNo)
  161. getOrderInfo(data.order.orderNo)
  162. delete data.config.tableConfig
  163. config.value = Object.assign(data.config, config.value)
  164. })
  165. })
  166. const linkObj = reactive({
  167. url: "",
  168. name: ""
  169. })
  170. // 获取协议链接
  171. async function getLink(orderId) {
  172. await requestNew('/iaw/issue/order/agreementInSertOrder', {
  173. data: {
  174. orderId
  175. }
  176. }).then((res) => {
  177. if (res.code === 0) {
  178. let data = res.data.data[0]
  179. console.log(data, '协议');
  180. linkObj.url = data.address[0].url
  181. linkObj.name = data.name
  182. }
  183. // contractTesting(qdOrderVal.value.qdOrderNo, jumpPage)
  184. })
  185. }
  186. // 无感登录,如果没有登录调用登录
  187. async function login(orderData) {
  188. let data = {
  189. userType: '',
  190. accountNumber: '',
  191. loginSource: '431bfdc8b9c645e0b293b85d6ce1948n',
  192. }
  193. if (orderData.order.userType === "PERSONAL_USER") {
  194. // 个人办理
  195. data.userType = 'PERSONAL'
  196. data.accountNumber = orderData.order.customerTel
  197. } else {
  198. // 单位办理
  199. console.log('单位办理');
  200. data.userType = 'ENTERPRISE'
  201. data.accountNumber = orderData.order.customerIdNum
  202. }
  203. console.log('login请求参数', data);
  204. await requestNew('/iaw/portal/loginByNoPassword', {
  205. data,
  206. }).then((res) => {
  207. if (res.code === 0) {
  208. let data = res.data
  209. // 保存token
  210. setToken(data.accessToken)
  211. setItem(StorageKeys.OpenId, data.openId)
  212. console.log(data, '登录获取的数据')
  213. }
  214. // contractTesting(qdOrderVal.value.qdOrderNo, jumpPage)
  215. })
  216. }
  217. const stepOptions = [{
  218. value: 1,
  219. label: "完成填写基本信息"
  220. },
  221. {
  222. value: 2,
  223. label: "完成个人/单位信息上传"
  224. },
  225. {
  226. value: 3,
  227. label: "已支付,待签约"
  228. },
  229. {
  230. value: 4,
  231. label: "完成车辆信息上传,待支付"
  232. },
  233. {
  234. value: 5,
  235. label: "完成签约"
  236. },
  237. {
  238. value: 6,
  239. label: "待审核"
  240. },
  241. {
  242. value: 7,
  243. label: "审核不通过"
  244. },
  245. {
  246. value: 8,
  247. label: "待发货"
  248. },
  249. {
  250. value: 9,
  251. label: "待收货"
  252. },
  253. {
  254. value: 10,
  255. label: "待激活"
  256. },
  257. {
  258. value: 11,
  259. label: "已完成"
  260. },
  261. {
  262. value: 12,
  263. label: "已申请-换货"
  264. },
  265. {
  266. value: 13,
  267. label: "已申请-退货"
  268. },
  269. {
  270. value: 14,
  271. label: "已结束"
  272. },
  273. {
  274. value: 15,
  275. label: "退款中"
  276. },
  277. {
  278. value: 16,
  279. label: "退款成功"
  280. },
  281. {
  282. value: 17,
  283. label: "退货成功"
  284. },
  285. ]
  286. function getOrderInfo(orderId) {
  287. let options = {
  288. type: 2,
  289. data: {
  290. orderId
  291. },
  292. method: 'POST',
  293. showLoading: true
  294. }
  295. requestNew('/iaw/issue/order/orderDetailQuery', options).then((res) => {
  296. if (res.code === 0) {
  297. let data = res.data.data
  298. console.log(data, '订单数据'); //data.releaseProduct.isPay
  299. data.orderStepName = stepOptions.find(item => item.value === data.orderStep)?.label || data
  300. .orderStep
  301. formData.forEach(item => {
  302. let itemData = data[item.key]
  303. if (typeof itemData === 'object' && itemData) {
  304. console.log(itemData, item.key1);
  305. if (item.key1 && item.key1.includes(',')) {
  306. let str = ''
  307. item.key1.split(',').forEach(listItem => {
  308. str += itemData[listItem] || ''
  309. })
  310. itemData = str
  311. } else {
  312. console.log(itemData, 'item.key1');
  313. itemData = itemData[item.key1]
  314. }
  315. }
  316. if (item.format) {
  317. itemData = item.format(itemData)
  318. }
  319. if (!itemData && itemData !== 0 && item.isHide === false) {
  320. item.isHide = true
  321. }
  322. item.value = itemData || item.default
  323. })
  324. amountData.value.actualPayment = 0
  325. amountList.value = data.feeList?.map(item => {
  326. if (item.payStatus === 'UNPAY') {
  327. amountData.value.actualPayment += parseInt(item.fee)
  328. }
  329. return {
  330. status: item.payStatus,
  331. statusName: data.releaseProduct.isPay == 1 ? '' : `(${payMentStatus[item
  332. .payStatus]})`,
  333. label: payType[item.payType],
  334. value: handleAmount(item.fee)
  335. }
  336. }) || []
  337. console.log(amountList.value, 'amountList.value');
  338. if (data.releaseProduct.isPay == 1) {
  339. amountData.value.totalFee = ''
  340. amountList.value = []
  341. }
  342. isShow.value = true;
  343. }
  344. console.log(res, '请求订单获取的数据');
  345. })
  346. }
  347. // 数据处理
  348. // function getOrderInfo(orderId) {
  349. // request('8', {
  350. // data: {
  351. // orderId
  352. // }
  353. // }).then((res) => {
  354. // let data = JSON.parse(res.bizContent)
  355. // console.log(data, '订单数据');
  356. // formData.forEach(item => {
  357. // let itemData = data[item.key]
  358. // if (typeof itemData === 'object') {
  359. // if (item.key1.includes(',')) {
  360. // let str = ''
  361. // item.key1.split(',').forEach(listItem => {
  362. // str += itemData[listItem] || ''
  363. // })
  364. // itemData = str
  365. // } else {
  366. // itemData = itemData[item.key1]
  367. // }
  368. // }
  369. // if (item.format) {
  370. // itemData = item.format(itemData)
  371. // }
  372. // if (!itemData && itemData !== 0 && item.isHide === false) {
  373. // item.isHide = true
  374. // }
  375. // item.value = itemData || item.default
  376. // })
  377. // amountData.value.totalFee = handleAmount(data.sumFee)
  378. // amountData.value.actualPayment = 0
  379. // amountList.value = [] || data.datas.map(item => {
  380. // if (item.payStatus === 'UNPAY') {
  381. // amountData.value.actualPayment += parseInt(item.fee)
  382. // }
  383. // return {
  384. // status: item.payStatus,
  385. // statusName: payMentStatus[item.payStatus],
  386. // label: payType[item.payType],
  387. // value: handleAmount(item.fee)
  388. // }
  389. // })
  390. // isShow.value = true;
  391. // })
  392. // }
  393. const uToastRef = ref(null)
  394. //确认办理
  395. function submit() {
  396. if (checked.value || !linkObj.url) {
  397. uni.navigateTo({
  398. url: '/pages/payment/orderPayment',
  399. animationType: 'pop-in',
  400. animationDuration: 500
  401. })
  402. } else {
  403. uToastRef.value.show({
  404. title: '请先勾选协议',
  405. type: 'warning',
  406. })
  407. }
  408. }
  409. const toNav = () => {
  410. handleFinish()
  411. }
  412. const handleOther = (returnUrl) => {
  413. const type = handleToTypes();
  414. if (type === 'alipaymini') {
  415. handleToZhifubao(returnUrl);
  416. } else if (type === 'wechatmini') {
  417. let returnUrls = returnUrl.split('?')
  418. if (returnUrls.length === 1) {
  419. returnUrls = returnUrl +
  420. `?orderId=${orderObj.orderNo}&ownerName=${orderObj.ownerName}&productName=${orderObj.productName}&tel=${orderObj.customerTel || orderObj.agentTel}&vehicleId=${orderObj.vehicleId}&qdOrderNo=${orderObj.orderNo}`
  421. } else {
  422. returnUrls = returnUrl
  423. }
  424. console.log('returnUrls', returnUrls);
  425. handleTonei(returnUrls);
  426. }
  427. };
  428. const handleFinish = () => {
  429. console.log(qdOrderVal.value, '获取的qdorder');
  430. const h5ReturnQdUrl = qdOrderVal.value.h5ReturnQdUrl || '';
  431. if (!h5ReturnQdUrl) {
  432. return;
  433. }
  434. if (isWeb(h5ReturnQdUrl) || isWxDuan(h5ReturnQdUrl)) {
  435. window.open(h5ReturnQdUrl, '_self');
  436. } else {
  437. handleOther(h5ReturnQdUrl);
  438. }
  439. };
  440. </script>
  441. <style lang='scss' scoped>
  442. .title {
  443. font-size: 30rpx;
  444. margin-left: 30rpx;
  445. }
  446. .container {
  447. padding: 10px;
  448. font-size: 14px;
  449. .detail-item {
  450. display: flex;
  451. align-items: center;
  452. justify-content: space-between;
  453. padding: 5px;
  454. margin-bottom: 8px;
  455. border-bottom: 1px solid #ccc;
  456. }
  457. }
  458. .payment-total {
  459. text-align: right;
  460. padding: 0 10px 20px;
  461. }
  462. text {
  463. margin-left: 10px;
  464. }
  465. .status {
  466. margin: 0;
  467. }
  468. .amount {
  469. color: #1AAC1B;
  470. max-width: 450rpx;
  471. }
  472. .over-txt {
  473. text-align: center;
  474. font-size: 32rpx;
  475. padding-top: 30rpx;
  476. }
  477. .over-txt .disabledBtn {
  478. background-color: #ccc !important;
  479. color: #666;
  480. }
  481. </style>