特易招,招聘小程序
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.

352 lines
6.9 KiB

4 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 weeks ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
4 months ago
2 months ago
4 months ago
4 months ago
2 months ago
2 months ago
2 months ago
2 months ago
4 months ago
2 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
4 months ago
2 months ago
2 months ago
2 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
2 months ago
2 months ago
4 months ago
2 months ago
4 months ago
2 months ago
  1. <template>
  2. <!-- 会员充值 -->
  3. <view class="page">
  4. <navbar title="会员充值" bgColor="#3796F8" leftClick color="#fff" @leftClick="$utils.navigateBack" />
  5. <view class="head">
  6. <view class="headImage">
  7. <image :src="userInfo.headImage" mode="aspectFill"></image>
  8. </view>
  9. <view class="info">
  10. <view class="name">
  11. {{userInfo.nickName}}
  12. <view>
  13. <uv-icon name="edit-pen" size="40rpx" color="#fff"></uv-icon>
  14. 修改资料
  15. </view>
  16. </view>
  17. <view class="tips">
  18. 手机号{{userInfo.phone}}
  19. </view>
  20. <!-- <view>
  21. {{UserExtensionInfo.vipType}}
  22. </view> -->
  23. </view>
  24. </view>
  25. <view class="openvip">{{UserExtensionInfo.vipType || ''}}</view>
  26. <view class="options">
  27. <view @click="vipId = item.id"
  28. :class="{option : true, act : vipId == item.id}"
  29. v-for="(item,index) in list"
  30. :key="index">
  31. <view style="font-weight: 600;">{{ item.name }}</view>
  32. <view style="color: #FF2E2E;">
  33. <text style="font-size: 20rpx;"></text>
  34. <text style="font-size: 36rpx;">{{ item.price }}</text>
  35. </view>
  36. <view>{{ item.remark }}</view>
  37. </view>
  38. </view>
  39. <view class="block" v-if="vip.id">
  40. <view class="privilege">{{ vip.name }}</view>
  41. <view class="cells">
  42. <view class="cell"
  43. :key="item.id"
  44. v-for="(item, index) in vip.keys">
  45. <image src="../static/mine/characteristic.png" mode="aspectFill" />
  46. <view class="text">
  47. <view>{{ item[0] }}</view>
  48. <view style="font-size: 24rpx;">{{ item[1] }}</view>
  49. </view>
  50. </view>
  51. <!-- <view class="cell">
  52. <image src="../static/mine/integral.png" mode="aspectFill" />
  53. <view class="text">
  54. <view>特权二</view>
  55. <view style="font-size: 24rpx;">快速发布优先审核</view>
  56. </view>
  57. </view> -->
  58. </view>
  59. <view class="tail">
  60. <view>
  61. <uv-checkbox-group v-model="checkboxValue">
  62. <uv-checkbox
  63. size="40rpx"
  64. icon-size="30rpx"
  65. activeColor="#3796F8"
  66. :name="1"
  67. ></uv-checkbox>
  68. </uv-checkbox-group>
  69. </view>
  70. <!-- 缺失会员服务协议 -->
  71. <view>开通前请阅读<text
  72. style="color: #3796F8;"
  73. @click="$refs.configPopup.open('config_vip_service')"
  74. >会员服务协议</text></view>
  75. </view>
  76. </view>
  77. <view class="confirm">
  78. <view class="box">
  79. <view>
  80. 总计金额{{ vip.price }}
  81. </view>
  82. <view @click="submit(vipId)">
  83. 确认协议并支付
  84. </view>
  85. </view>
  86. </view>
  87. <configPopup ref="configPopup"/>
  88. </view>
  89. </template>
  90. <script>
  91. import mixinList from '@/mixins/list.js'
  92. import {
  93. mapState
  94. } from 'vuex'
  95. export default {
  96. mixins: [mixinList],
  97. data() {
  98. return {
  99. checkboxValue : [],
  100. mixinsListApi: 'commonQueryVipType',
  101. vipId: '',
  102. }
  103. },
  104. onShow() {
  105. this.$store.commit('getUserInfo')
  106. //判断如果是登录状态则获取信息
  107. this.$store.commit('getUserExtensionInfo')
  108. },
  109. computed: {
  110. ...mapState(['UserExtensionInfo']),
  111. headImage() {
  112. return '/static/image/center/headImage.png'
  113. },
  114. vip() {
  115. let vip = {}
  116. this.list.forEach(n => {
  117. if (n.id == this.vipId) {
  118. let keys = n.perquisite.split('##')
  119. keys.forEach((s, i) => {
  120. keys[i] = s.split('$$')
  121. })
  122. n.keys = keys
  123. vip = n
  124. }
  125. })
  126. return vip
  127. },
  128. },
  129. methods: {
  130. submit(vipTypeId) {
  131. if(!this.checkboxValue.length){
  132. return uni.showToast({
  133. title: '请先同意会员服务协议',
  134. icon:'none'
  135. })
  136. }
  137. console.log("当前标识:" + vipTypeId)
  138. this.$api('addVIP', {
  139. vipTypeId
  140. }, res => {
  141. if(res.code == 200){
  142. uni.requestPayment({
  143. provider: 'wxpay', // 服务提提供商
  144. timeStamp: res.result.timeStamp, // 时间戳
  145. nonceStr: res.result.nonceStr, // 随机字符串
  146. package: res.result.packageValue,
  147. signType: res.result.signType, // 签名算法
  148. paySign: res.result.paySign, // 签名
  149. success: function(res) {
  150. console.log('支付成功', res);
  151. self.$refs.confirmationPopupUpload.open()
  152. // self.$refs.confirmationPopup.close()
  153. },
  154. fail: function(err) {
  155. console.log('支付失败', err);
  156. self.$refs.confirmationPopup.close()
  157. uni.showToast({
  158. icon: 'none',
  159. title: "支付失败"
  160. })
  161. }
  162. });
  163. }
  164. })
  165. },
  166. getDataThen(list) {
  167. this.vipId = list[0] && list[0].id
  168. },
  169. },
  170. }
  171. </script>
  172. <style scoped lang="scss">
  173. .page {
  174. background-color: #fff;
  175. height: 100vh;
  176. .head {
  177. display: flex;
  178. background-color: $uni-color;
  179. padding: 40rpx 20rpx;
  180. align-items: center;
  181. position: relative;
  182. color: #fff;
  183. padding-bottom: 70rpx;
  184. .headImage {
  185. width: 120rpx;
  186. height: 120rpx;
  187. background-size: 100% 100%;
  188. overflow: hidden;
  189. border-radius: 50%;
  190. margin-right: 40rpx;
  191. image {
  192. height: 100%;
  193. width: 100%;
  194. }
  195. }
  196. .info {
  197. font-size: 28rpx;
  198. .name {
  199. font-size: 32rpx;
  200. display: flex;
  201. padding-bottom: 10rpx;
  202. view {
  203. display: flex;
  204. font-size: 20rpx;
  205. align-items: center;
  206. padding-left: 20rpx;
  207. }
  208. }
  209. .tips {
  210. font-size: 26rpx;
  211. color: #fff;
  212. }
  213. }
  214. }
  215. .openvip {
  216. width: 100%;
  217. text-align: center;
  218. padding: 40rpx 0;
  219. font-size: 36rpx;
  220. font-weight: 500;
  221. }
  222. .options {
  223. display: flex;
  224. flex-wrap: wrap;
  225. .option {
  226. display: flex;
  227. justify-content: center;
  228. align-items: center;
  229. flex-direction: column;
  230. border: 2rpx solid #3796F8;
  231. width: 220rpx;
  232. height: 240rpx;
  233. border-radius: 16rpx;
  234. box-sizing: border-box;
  235. margin: 12rpx;
  236. view {
  237. margin-top: 15rpx;
  238. font-size: 26rpx;
  239. }
  240. }
  241. .act {
  242. border: 2rpx solid $uni-color;
  243. box-shadow: 0 0 10rpx 10rpx rgba($uni-color, 0.2);
  244. }
  245. }
  246. .block {
  247. width: 90%;
  248. margin-left: 5%;
  249. .privilege {
  250. font-size: 30rpx;
  251. padding: 60rpx 0rpx 40rpx;
  252. }
  253. .cells {
  254. display: flex;
  255. flex-direction: column;
  256. .cell {
  257. display: flex;
  258. align-items: center;
  259. margin: 20rpx 0;
  260. .text {
  261. margin-left: 20rpx;
  262. color: #707070;
  263. font-size: 26rpx;
  264. }
  265. image {
  266. height: 70rpx;
  267. width: 70rpx;
  268. }
  269. }
  270. }
  271. .tail {
  272. display: flex;
  273. align-items: center;
  274. margin-top: 30rpx;
  275. view:nth-child(2) {
  276. margin-left: 10rpx;
  277. color: #707070;
  278. font-size: 24rpx;
  279. }
  280. }
  281. }
  282. .confirm {
  283. display: flex;
  284. position: fixed;
  285. bottom: 0px;
  286. width: 100%;
  287. justify-content: center;
  288. align-items: center;
  289. padding: 8rpx 0;
  290. box-shadow: 0 -2rpx 6rpx 0 #d9d9d9;
  291. .box {
  292. display: flex;
  293. align-items: center;
  294. justify-content: space-between;
  295. width: 92%;
  296. font-size: 28rpx;
  297. view:nth-child(1) {
  298. color: #999999;
  299. }
  300. view:nth-child(2) {
  301. padding: 25rpx 60rpx;
  302. color: #FFFFFF;
  303. background-color: #3796F8;
  304. border-radius: 12rpx;
  305. }
  306. view:nth-child(1) {
  307. color: #999999;
  308. }
  309. }
  310. }
  311. }
  312. </style>