您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

install-activation-order.vue 9.0KB

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