選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

choice-product.vue 9.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <template>
  2. <navBar title="选择产品" :scrollTop="scrollTop"></navBar>
  3. <navBgCar></navBgCar>
  4. <view class="content-value">
  5. <view
  6. @click="savaHandle(item)"
  7. class="ul-item"
  8. v-for="(item, index) in state.dataArray"
  9. :key="index"
  10. >
  11. <image
  12. style="width: 100%; height: 170rpx; border-radius: 20rpx"
  13. :src="`${$imgUrl}applyCard/product-bg.png`"
  14. ></image>
  15. <view class="item-value">
  16. <image class="icon-tip" :src="`${$imgUrl}applyCard/wechat.png`"></image>
  17. <view class="content">
  18. <view class="title">
  19. {{ item.promoteName }}
  20. </view>
  21. <!-- 1记账卡2储值卡3记存卡 -->
  22. <!-- <view style="margin-top: 15rpx" class="tip" v-if="item.cardType=='1'">
  23. 记账卡
  24. </view> -->
  25. <view style="margin-top: 15rpx" class="tip">
  26. {{ item.cardTypeArr }}
  27. </view>
  28. </view>
  29. <view class="money">
  30. ¥:{{ item.fee * 0.01 }}
  31. </view>
  32. </view>
  33. </view>
  34. <view class="bottomTip"> 到底啦!敬请期待其他产品! </view>
  35. </view>
  36. <u-popup mode="center" v-model="state.choiceCardShow" closeable>
  37. <view class="squire">
  38. <!-- <view class="mask-close">
  39. <image :src="fileURL + 'image/index/icon-close.png'" class="icon-closed" @click="closeMask"></image>
  40. </view> -->
  41. <!-- <view class="mask-title" :style="{ '--color': color }">选择卡的类型</view> -->
  42. <u-radio-group wrap>
  43. <u-radio :customStyle="{marginBottom: '8px'}" activeColor="#2CE242"
  44. v-for="(item, index) in state.radiolist1" :key="index" :label="item.disabled" :name="item.name"
  45. @change="radioChange">
  46. <view style="width: 100%;display: flex;align-items: center;margin-bottom: 30rpx;">
  47. <image
  48. style="width: 200rpx; height: 100rpx; border-radius: 20rpx;margin-right: 20rpx;"
  49. :src="`${$imgUrl}card2.png`"
  50. mode="aspectFill"
  51. ></image>
  52. <!-- <image :src="`${$imgUrl}card2.png`" mode=""></image> -->
  53. {{item.name}}
  54. </view>
  55. </u-radio>
  56. </u-radio-group>
  57. </view>
  58. </u-popup>
  59. </template>
  60. <script setup lang="ts">
  61. import { onLoad, onPageScroll } from "@dcloudio/uni-app";
  62. import { reactive, ref } from "vue";
  63. import { etcQueryProduct, productReCode } from "@/utils/network/api.js";
  64. import { request } from "@/utils/network/request.js";
  65. import { stringToJson} from "@/utils/network/encryption";
  66. import { fileURL } from "@/datas/fileURL.js";
  67. import navBgCar from "./components/nav-bg-car1";
  68. import navBar from "@/components/nav-bar/nav-bar2.vue";
  69. import { getItem, StorageKeys,setItem} from "@/utils/storage.ts";
  70. import { msg } from "@/utils/utils";
  71. const imgURL = `${fileURL}image/`;
  72. // import { setItem } from "@/utils/storage";
  73. const scrollTop = ref(0); //滚动距离
  74. // 单选默认数据
  75. // let flag = ref(true)
  76. // 单选
  77. const radioChange = (n) => {
  78. console.log('radioChange', n);
  79. if (n == '记账卡') {
  80. state.isValueCard=1
  81. } else if(n == '储值卡'){
  82. state.isValueCard=2
  83. }else{
  84. state.isValueCard=3
  85. }
  86. uni.redirectTo({
  87. url: `/subpackage/orders/essential-information?promoteId=${getItem("promoteId")}&userType=${state.userType}&type=${state.type}&isSign=${state.isSign}&isValueCard=${state.isValueCard}`,
  88. });
  89. }
  90. const savaHandle = (val) => {
  91. state.choiceCardShow=true;
  92. console.log("vAL",val)
  93. setItem("clientFee", val.clientFee);
  94. setItem("promoteId", val.promoteId);
  95. setItem("isValueCard", val.isValueCard);
  96. state.isSign=val.isSign;
  97. // 判断是几张卡
  98. if(val.cardTypeArr.split(",").length==1){
  99. if(val.cardTypeArr.split(",")[0]=="记账卡"){
  100. state.isValueCard=1
  101. } else if(val.cardTypeArr.split(",")[0] == '储值卡'){
  102. state.isValueCard=2
  103. }else{
  104. state.isValueCard=3
  105. }
  106. uni.redirectTo({
  107. url: `/subpackage/orders/essential-information?promoteId=${getItem("promoteId")}&userType=${state.userType}&type=${state.type}&isValueCard=${state.isValueCard}`,
  108. });
  109. }else{
  110. state.radiolist1=[];
  111. // 处理卡的数据
  112. for(var i=0;i<val.cardTypeArr.split(",").length;i++){
  113. const obj={};
  114. obj["name"]=val.cardTypeArr.split(",")[i];
  115. obj["disabled"]=false;
  116. state.radiolist1.push(obj)
  117. }
  118. console.log("state.radiolist1",state.radiolist1)
  119. }
  120. };
  121. onLoad((option: any) => {
  122. // state.orderId = option.orderId;
  123. // state.userType = option.userType;
  124. // state.vehiclePlateColor = option.vehiclePlateColor;
  125. state.userType = option.userType;
  126. state.type = option.type;
  127. var data = {
  128. type: state.type,
  129. source:'WECHAT' //请求方来源
  130. };
  131. const options = {
  132. type: 2,
  133. data: data,
  134. method: "POST",
  135. showLoading: true,
  136. };
  137. console.log("输出内容", options);
  138. request(etcQueryProduct, options).then((res) => {
  139. // console.log(res.bizContent);
  140. const data = stringToJson(res.bizContent);
  141. console.log(data);
  142. // console.log(typeof(data));
  143. state.dataArray = data.csmsnPromoteDistPro ?data.csmsnPromoteDistPro: [];
  144. for(var i=0;i<state.dataArray.length;i++){
  145. const cardTypeArr=[]
  146. for(var j=0;j<state.dataArray[i].cardType.length;j++){
  147. if(state.dataArray[i].cardType[j]=='1'){
  148. cardTypeArr.push('记账卡')
  149. }else if(state.dataArray[i].cardType[j]=='2'){
  150. cardTypeArr.push('储值卡')
  151. }else if(state.dataArray[i].cardType[j]=='3'){
  152. cardTypeArr.push('预存卡')
  153. }
  154. }
  155. state.dataArray[i].cardTypeArr=cardTypeArr.toString()
  156. }
  157. console.log("state.dataArray",state.dataArray)
  158. });
  159. });
  160. //监听页面滚动
  161. onPageScroll((e) => {
  162. scrollTop.value = e.scrollTop;
  163. });
  164. const productReCodeAction = (id) => {
  165. var data = {
  166. productId: id,
  167. orderId: state.orderId,
  168. };
  169. const options = {
  170. type: 2,
  171. data: data,
  172. method: "POST",
  173. showLoading: true,
  174. };
  175. return new Promise(async (resolve, reject) => {
  176. const res = await request(productReCode, options);
  177. const data = stringToJson(res.bizContent);
  178. resolve(data);
  179. }).catch((error) => {
  180. reject(error);
  181. });
  182. };
  183. const state = reactive({
  184. isValueCard:1, //卡的类型
  185. radiolist1:[], //选择卡的数据列表
  186. choiceCardShow:false, //选择卡的弹出框
  187. isSign:'',
  188. orderId: "",
  189. userType: 1, //1 个人 2单位
  190. type: 0, //0 客车 1货车
  191. vehiclePlateColor: "",
  192. data: {
  193. show: false,
  194. src: imgURL + "applyCard/edit.png",
  195. },
  196. dataArray: [],
  197. list: [
  198. {
  199. bg: imgURL + "applyCard/product-bg.png",
  200. icon: imgURL + "applyCard/wechat.png",
  201. title: "【货车】微信车主服务",
  202. tip: "绑定微信支付,无需绑定银行卡",
  203. },
  204. ],
  205. });
  206. </script>
  207. <style lang="scss" scoped>
  208. ::v-deep .u-radio{
  209. display: flex !important;
  210. align-items: center !important;
  211. float: none !important;
  212. }
  213. ::v-deep .u-icon__icon{
  214. top: -4px !important;
  215. }
  216. .bottomTip {
  217. margin-top: 100rpx;
  218. text-align: center;
  219. font-size: 28rpx;
  220. font-family: Microsoft YaHei;
  221. font-weight: 400;
  222. color: #b3b3b3;
  223. }
  224. .content-value {
  225. position: relative;
  226. // margin-top: -50rpx;
  227. padding: 0rpx 30rpx;
  228. position: relative;
  229. .img-pos {
  230. position: absolute;
  231. left: 500rpx;
  232. top: -38rpx;
  233. right: 50rpx;
  234. .img-flex {
  235. display: flex;
  236. justify-content: space-between;
  237. align-items: center;
  238. .car-img {
  239. width: 86rpx;
  240. height: 42rpx;
  241. }
  242. .flag-img {
  243. width: 30rpx;
  244. height: 35rpx;
  245. }
  246. }
  247. }
  248. }
  249. .flex {
  250. display: flex;
  251. align-items: center;
  252. }
  253. .action {
  254. margin-top: 30rpx;
  255. padding-left: 20rpx;
  256. padding-right: 20rpx;
  257. padding-bottom: 30rpx;
  258. .button {
  259. height: 80rpx;
  260. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  261. border-radius: 40rpx;
  262. font-size: 32rpx;
  263. font-weight: 400;
  264. color: #ffffff;
  265. line-height: 80rpx;
  266. }
  267. }
  268. .action-btn {
  269. margin-left: 45rpx;
  270. width: 121rpx;
  271. height: 61rpx;
  272. border: 1px solid rgba(255, 255, 255, 1);
  273. border-radius: 30rpx;
  274. background: rgba(255, 255, 255, 0.2);
  275. text-align: center;
  276. font-size: 30rpx;
  277. font-family: Microsoft YaHei;
  278. font-weight: 400;
  279. color: #ffffff;
  280. line-height: 61rpx;
  281. }
  282. .tag1 {
  283. padding: 5rpx;
  284. background: rgba(0, 179, 139, 0.5);
  285. border-radius: 6rpx;
  286. font-size: 22rpx;
  287. font-family: Microsoft YaHei;
  288. font-weight: 400;
  289. color: #ffffff;
  290. }
  291. .tag3 {
  292. padding: 5rpx;
  293. background: rgba(139, 112, 228, 0.5);
  294. border-radius: 6rpx;
  295. font-size: 22rpx;
  296. font-family: Microsoft YaHei;
  297. font-weight: 400;
  298. color: #ffffff;
  299. }
  300. .tag2 {
  301. padding: 5rpx;
  302. background: rgba(249, 97, 60, 0.5);
  303. border-radius: 6rpx;
  304. font-size: 22rpx;
  305. font-family: Microsoft YaHei;
  306. font-weight: 400;
  307. color: #ffffff;
  308. }
  309. .ul-item {
  310. padding: 5px 20rpx;
  311. display: flex;
  312. align-items: center;
  313. .item-value {
  314. padding: 20rpx;
  315. position: absolute;
  316. display: flex;
  317. align-items: center;
  318. // justify-content: space-around;
  319. width: 80%;
  320. .content {
  321. width: 51%;
  322. .title {
  323. font-size: 32rpx;
  324. font-family: Microsoft YaHei;
  325. font-weight: 400;
  326. color: #ffffff;
  327. }
  328. .tip {
  329. font-size: 24rpx;
  330. font-family: Microsoft YaHei;
  331. font-weight: 400;
  332. color: #ffffff;
  333. }
  334. }
  335. }
  336. .icon-tip {
  337. width: 100rpx;
  338. height: 100rpx;
  339. }
  340. .content {
  341. margin-left: 40rpx;
  342. }
  343. }
  344. .money{
  345. color: white;
  346. // float: right;
  347. }
  348. ::v-deep .u-mode-center-box{
  349. border-radius: 10rpx;
  350. }
  351. .squire{
  352. padding: 30rpx 30rpx 30rpx 50rpx;
  353. }
  354. .mask-close {
  355. text-align: right;
  356. }
  357. .icon-closed {
  358. width: 48rpx;
  359. height: 48rpx;
  360. }
  361. .mask-title {
  362. text-align: center;
  363. font-size: 32rpx;
  364. color: $uni-text-color-black;
  365. margin-bottom: 50rpx;
  366. margin-top: 50rpx;
  367. }
  368. </style>