You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

install-activation-order.vue 9.3KB

11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
1 rok temu
1 rok temu
11 miesięcy temu
11 miesięcy temu
1 rok temu
1 rok temu
11 miesięcy temu
1 rok temu
11 miesięcy temu
11 miesięcy temu
1 rok temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
11 miesięcy temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. <!-- 安装激活-选择订单 -->
  2. <template>
  3. <empty-view :mode="config.emptyHint.mode" :content="config.emptyHint.hint" v-if="params.ordersList.length === 0" />
  4. <view class="list" v-else>
  5. <view class="item" v-for="(item,index) in params.ordersList" :key="index" :item="item">
  6. <view class="head">
  7. <view class="name">
  8. <image :src="`${$imgUrl}order/icon-star-green.png`" class="icon"></image>
  9. <text class="title">{{item.productName ?item.productName: ''}}</text>
  10. </view>
  11. <view class="status text-orange">{{getOrderStatusName(item.orderStep)}}</view>
  12. </view>
  13. <view class="detail">
  14. <view class="orders">
  15. <view class="order-text">
  16. <text class="type">新办单号:</text>
  17. <text class="value">{{item.orderId}}</text>
  18. </view>
  19. <view class="order-text odd">
  20. <text class="type">业务类型:</text>
  21. <text class="value">{{getOrderTypeName(item.orderType)}}</text>
  22. </view>
  23. <view class="order-text odd">
  24. <text class="type">订单车牌号:</text>
  25. <text class="value">{{item.vehiclePlate}}</text>
  26. </view>
  27. <view class="order-text ">
  28. <text class="type">订单金额:</text>
  29. <text class="value">¥ {{item.amount / 100 ?item.amount / 100: '0.00'}}</text>
  30. </view>
  31. </view>
  32. </view>
  33. <view class="btns">
  34. <view class="btn btn-primary as-gravity-center" @click="gotoConfirmReceipt(item)"
  35. v-if="item.orderStep==9 && item.orderStatus=='0'">确认收货</view>
  36. <view class="btn btn-primary as-gravity-center" @click="gotoActiveOrder(item)"
  37. v-if="item.orderStep==10 && item.orderStatus=='0'">去激活</view>
  38. <view class="btn btn-primary as-gravity-center" @click="gotoOnceActivate(item)"
  39. v-if="item.orderStep==11 && item.orderStatus=='1'">OBU重新激活</view>
  40. </view>
  41. </view>
  42. <uni-load-more :status="params.status" iconType="snow" :icon-size="16" :content-text="config.contentTxt"
  43. v-if="params.ordersList.length > 0" />
  44. </view>
  45. </template>
  46. <script setup lang="ts">
  47. import { reactive, ref, watch } from "vue";
  48. import { request } from "@/utils/network/request.js";
  49. import { stringToJson } from "@/utils/network/encryption";
  50. import { onLoad, onUnload, onReachBottom, onPullDownRefresh } from "@dcloudio/uni-app";
  51. import { getItem, StorageKeys,setItem } from "@/utils/storage";
  52. import { hasLogin, msg, getOrderStatusName, getOrderTypeName, navTo,interceptND } from "@/utils/utils";
  53. import { noActivationOrder,ndActivateVerification,silentLoginApi} from "@/utils/network/api";
  54. import { PageData } from "@/datas/enum";
  55. import useOrderSkip from "@/composables/order/useOrderSkip";
  56. import { deviceType } from "@/utils/network/difference";
  57. import { jump } from "@/datas/9901Jump.js";
  58. //跳转
  59. const { gotoActiveOrder, gotoConfirmReceipt } = useOrderSkip();
  60. const gotoOnceActivate = (item) => {
  61. if (item.deviceType == deviceType) {
  62. const params = encodeURIComponent(JSON.stringify(item))
  63. jump("1", params)
  64. } else {
  65. interceptND(item.vehicleId).then(()=>{
  66. // #ifdef MP-WEIXIN
  67. navTo(
  68. `/subpackage/after-sale/activation-once-again/activation-once-again?id=${item.id}`
  69. );
  70. // #endif
  71. // #ifdef MP-ALIPAY
  72. navTo(
  73. `/subpackage/after-sale/activation-once-again/activation-once-again-ali?id=${item.id}`
  74. );
  75. // #endif
  76. })
  77. }
  78. }
  79. const config = {
  80. emptyHint: {
  81. hint: '~ 暂无待激活订单 ~',
  82. icon: '',
  83. mode: 'order'
  84. },
  85. contentTxt: {
  86. contentdown: '~上拉加载更多~',
  87. contentrefresh: '努力加载中...',
  88. contentnomore: '-- 我是有底线的 --'
  89. }
  90. }
  91. //请求参数
  92. const params = reactive({
  93. pageNo: 1,
  94. pageSize: 10,
  95. total: 0,
  96. status: 'more',
  97. reload: false,
  98. ordersList: [],
  99. vehicleId:"",
  100. tel:"",
  101. qdOrderNo:""
  102. })
  103. /* 刷新列表 */
  104. const refreshList = () => {
  105. params.pageNo = 1;
  106. params.total = 0;
  107. params.ordersList = [];
  108. params.status = 'more';
  109. params.reload = false;
  110. getList();
  111. }
  112. /* 加载更多 */
  113. const loadMore = () => {
  114. if (params.ordersList.length<params.pageNo*10) {
  115. params.status = 'noMore';
  116. } else {
  117. params.status = 'loading';
  118. params.pageNo++;
  119. getList();
  120. }
  121. }
  122. /* 获取列表数据 */
  123. const getList = async () => {
  124. if (!hasLogin()) {
  125. uni.stopPullDownRefresh();
  126. return;
  127. }
  128. let source = ""
  129. // #ifdef MP-ALIPAY
  130. source = "ALI"
  131. // #endif
  132. // #ifdef MP-WEIXIN
  133. source = "WECHAT"
  134. // #endif
  135. let res : any = null;
  136. const options = {
  137. type: 2,
  138. data: {
  139. "opId": getItem(StorageKeys.OpenId),
  140. "pageNo": params.pageNo,
  141. "pageSize": params.pageSize,
  142. },
  143. method: 'POST',
  144. showLoading: params.pageNo === 1 ? true : false,
  145. }
  146. try {
  147. res = await request(noActivationOrder, options);
  148. const data = stringToJson(res.bizContent);
  149. params.total = data.data;
  150. console.log("res====", params.total)
  151. if (params.total.length > 0) {
  152. const curList = data.data || [];
  153. params.ordersList = params.reload ? curList : params.ordersList.concat(curList);
  154. params.reload = false;
  155. }
  156. if (params.total === params.ordersList.length) {
  157. params.reload = false;
  158. params.status = 'noMore';
  159. }
  160. if (params.pageNo === 1) {
  161. uni.stopPullDownRefresh();
  162. }
  163. console.log("params.ordersList", params.ordersList)
  164. } catch (e) {
  165. console.log('输出内容', e)
  166. uni.stopPullDownRefresh();
  167. }
  168. }
  169. onLoad((option) => {
  170. console.log("诺德激活",option)
  171. // 诺德数据过来 验证+无感登录
  172. if(option.qdOrderNo){
  173. params.qdOrderNo=option.qdOrderNo
  174. params.tel=option.tel
  175. params.vehicleId=option.vehicleId
  176. ndActivateVerificationQuery().then((data) => {
  177. if(data.pass=='on'){
  178. console.log("验证")
  179. silentLogin(data).then(() => {
  180. //监听订单刷新信息
  181. uni.$on('refreshOrder', (data) => {
  182. refreshList();
  183. });
  184. console.log("guoliale")
  185. refreshList();
  186. })
  187. }else{
  188. msg("不属于该渠道")
  189. }
  190. })
  191. }else{
  192. //监听订单刷新信息
  193. uni.$on('refreshOrder', (data) => {
  194. refreshList();
  195. });
  196. console.log("guoliale")
  197. refreshList();
  198. }
  199. });
  200. // 诺德激活验证接口
  201. const ndActivateVerificationQuery = () => {
  202. const options = {
  203. type: 2,
  204. data: {
  205. "code": "1", //诺德
  206. "qdOrderNo": params.qdOrderNo, //渠道订单号
  207. "tel": params.tel,
  208. "vehicleId": params.vehicleId,
  209. },
  210. method: "POST",
  211. showLoading: true,
  212. };
  213. return new Promise(async (resolve, reject) => {
  214. const res = await request(ndActivateVerification, options);
  215. const data = stringToJson(res.bizContent);
  216. console.log("data==", data)
  217. resolve(data);
  218. }).catch((error) => {
  219. reject(error);
  220. });
  221. }
  222. const silentLogin = (data) => {
  223. if (data.userType == "1") {
  224. var datas = {
  225. userType: data.userType,
  226. account: data.mobile,
  227. loginSource: getItem("loginSource"),
  228. };
  229. } else {
  230. var datas = {
  231. userType: data.userType,
  232. account: data.idNum,
  233. loginSource: getItem("loginSource"),
  234. };
  235. }
  236. console.log("datas",datas)
  237. const options = {
  238. type: 2,
  239. data: datas,
  240. method: "POST",
  241. showLoading: true,
  242. };
  243. return new Promise(async (resolve, reject) => {
  244. const res = await request(silentLoginApi, options);
  245. const data = stringToJson(res.bizContent);
  246. console.log("data===",data)
  247. setItem("openId", data.openId);
  248. setItem("token", data.accessToken);
  249. resolve(data);
  250. }).catch((error) => {
  251. reject(error);
  252. });
  253. }
  254. onUnload(() => {
  255. uni.$off('refreshOrder');
  256. });
  257. onPullDownRefresh(() => {
  258. refreshList();
  259. });
  260. onReachBottom(() => {
  261. loadMore();
  262. });
  263. </script>
  264. <style>
  265. page {
  266. background-color: #EEF7F7;
  267. }
  268. </style>
  269. <style lang="scss" scoped>
  270. .list {
  271. padding: 30rpx 30rpx 0rpx;
  272. display: flex;
  273. flex-direction: column;
  274. }
  275. .list .item {
  276. background: #ffffff;
  277. box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
  278. border-radius: 20rpx;
  279. box-sizing: border-box;
  280. display: flex;
  281. flex-direction: column;
  282. margin-bottom: 30rpx;
  283. }
  284. .list .item .head {
  285. display: flex;
  286. justify-content: space-between;
  287. align-items: center;
  288. padding: 20rpx 28rpx;
  289. border-bottom: 1px solid #dcdcdc;
  290. }
  291. .list .item .head .icon {
  292. width: 48rpx;
  293. height: 48rpx;
  294. }
  295. .list .item .head .name {
  296. display: flex;
  297. align-items: center;
  298. }
  299. .list .text-green {
  300. font-size: 26rpx;
  301. color: #00b38b;
  302. }
  303. .list .text-orange {
  304. font-size: 26rpx;
  305. color: #ff8000;
  306. }
  307. .list .title {
  308. font-size: 30rpx;
  309. color: #333;
  310. }
  311. .list .detail {
  312. display: flex;
  313. justify-content: space-between;
  314. align-items: center;
  315. padding: 30rpx 32rpx;
  316. }
  317. .list .detail .type {
  318. font-size: 26rpx;
  319. color: #999;
  320. }
  321. .list .detail .value {
  322. font-size: 26rpx;
  323. color: #333;
  324. }
  325. .list .finished .detail .value {
  326. color: #999;
  327. }
  328. .list .detail .odd {
  329. margin: 20rpx 0;
  330. }
  331. .list .cny {
  332. font-size: 26rpx;
  333. color: #333;
  334. }
  335. .list .finished .cny {
  336. color: #999;
  337. }
  338. .list .amount {
  339. font-size: 40rpx;
  340. font-weight: bold;
  341. }
  342. .list .finished .amount {
  343. color: #999;
  344. }
  345. .list .btns {
  346. display: flex;
  347. align-items: center;
  348. justify-content: flex-end;
  349. border-top: 1px solid #dcdcdc;
  350. margin: 0 30rpx;
  351. padding: 20rpx 0;
  352. }
  353. .list .btn {
  354. height: 60rpx;
  355. // line-height: 60rpx;
  356. border-radius: 30rpx;
  357. padding: 0 24rpx;
  358. font-size: 26rpx;
  359. box-sizing: border-box;
  360. margin-right: 20rpx;
  361. }
  362. .list .btns .btn:last-child {
  363. margin: 0;
  364. }
  365. .list .btn-primary {
  366. border: 1px solid #00b38b;
  367. color: #00b38b;
  368. }
  369. .list .btn-normal {
  370. border: 1px solid #dcdcdc;
  371. color: #333;
  372. }
  373. </style>