auth-step.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <template>
  2. <view class="shop_auth">
  3. <u-steps :list="stepList" :current="current" mode="number" active-color="#f76454"></u-steps>
  4. <view class="flexCC auth_hint">
  5. <!-- 未认证 -->
  6. <view v-if="current == 0">
  7. <view class="title">用户协议概要</view>
  8. <view class="intr">
  9. 感谢您信任并使用大卫博士微店店长服务。为了更好地维护您的利益,我们对
  10. <text @click="skipProtocol">《大卫博士微店店长服务协议》</text>
  11. 进行了更新,特向您推送本消息提示,请仔细阅读并充分理解相关条款。
  12. </view>
  13. <view class="deal" @click="isDeal = !isDeal">
  14. <text class="iconfont iconxuanzhong" v-if="isDeal"></text>
  15. <text class="iconfont iconweixuanzhong" v-else></text>
  16. <text>我已阅读并接受《大卫博士微店店长服务协议》</text>
  17. </view>
  18. <view class="sub_btn" @click="skipAuth(0)">同意协议并认证</view>
  19. </view>
  20. <!-- 待审核 -->
  21. <view v-if="current == 1">
  22. <view class="title">{{ state.applyment_state_desc }}</view>
  23. <!-- 待审核 -->
  24. <view v-if="state.applyment_state == 'AUDITING'">
  25. <view class="auth_intr">大概一分钟内审核成功,自动出现签约二维码。</view>
  26. </view>
  27. <!-- 已驳回 || 已冻结 -->
  28. <view v-if="state.applyment_state == 'REJECTED' || state.applyment_state == 'FROZEN'">
  29. <view class="reason" v-for="(item, index) in state.audit_detail" :key="index">
  30. <view>{{ item.reject_reason }}</view>
  31. </view>
  32. </view>
  33. <!-- 待账户验证 -->
  34. <view v-if="state.applyment_state == 'ACCOUNT_NEED_VERIFY'" class="wait_auth">
  35. <view>
  36. <view>付款户名</view>
  37. <view>{{ remit.account_name }}</view>
  38. </view>
  39. <view>
  40. <view>付款卡号</view>
  41. <view>{{ remit.account_no }}</view>
  42. </view>
  43. <view>
  44. <view>汇款金额</view>
  45. <view>{{ remit.pay_amount }}</view>
  46. </view>
  47. <view>
  48. <view>收款卡号</view>
  49. <view>{{ remit.destination_account_number }}</view>
  50. </view>
  51. <view>
  52. <view>收款户名</view>
  53. <view>{{ remit.destination_account_name }}</view>
  54. </view>
  55. <view>
  56. <view>开户银行</view>
  57. <view>{{ remit.destination_account_bank }}</view>
  58. </view>
  59. <view>
  60. <view>省市信息</view>
  61. <view>{{ remit.city }}</view>
  62. </view>
  63. <view>
  64. <view>备注信息</view>
  65. <view>{{ remit.remark }}</view>
  66. </view>
  67. <view>
  68. <view>汇款截止时间</view>
  69. <view>{{ remit.deadline }}</view>
  70. </view>
  71. </view>
  72. <view class="sub_btn" style="margin-top:50rpx;" v-if="state.applyment_state == 'REJECTED'"
  73. @click="skipAuth(1)">重新认证</view>
  74. <view class="refresh_hint" v-if="state.applyment_state == 'AUDITING'">审核状态每5秒更新一次,请耐心等待...</view>
  75. </view>
  76. <!-- 待签约 -->
  77. <view v-if="current == 2" class="sign">
  78. <view class="sign_hint">长按保存二维码-微信扫码签约</view>
  79. <image :src="signCode" @click="preview" @longpress="saveImg()"></image>
  80. <view class="sub_btn newbtn" @click="getstate()">已扫码,刷新</view>
  81. </view>
  82. </view>
  83. </view>
  84. </template>
  85. <script>
  86. import {
  87. getStoreInfo,
  88. getState,
  89. } from '@/apis/shop.js';
  90. import QR from '../../common/util/wxqrcode.js'; // 二维码生成器
  91. export default {
  92. data() {
  93. return {
  94. current: 0, //待认证 审核中 待签约显示
  95. stepList: [{
  96. name: '待认证'
  97. },
  98. {
  99. name: '审核中'
  100. },
  101. {
  102. name: '待签约'
  103. }
  104. ],
  105. isApply: '',
  106. isDeal: false, //是否选中已阅读协议
  107. signCode: '', //签约的二维码
  108. imgUrl: '', //二维码本地路径
  109. state:''
  110. }
  111. },
  112. onShow() {
  113. this.getShop();
  114. },
  115. watch: {
  116. isApply: {
  117. handler(newVal) {
  118. if (newVal == 1) { //只有待审核的时候定时请求
  119. this.timer = setInterval(() => {
  120. this.getstate();
  121. }, 5000);
  122. } else {
  123. clearInterval(this.timer);
  124. uni.hideLoading();
  125. }
  126. },
  127. deep: true
  128. }
  129. },
  130. methods: {
  131. //跳转到认证协议
  132. skipProtocol() {
  133. uni.navigateTo({
  134. url: '../../pagesA/pages/protocol/protocol'
  135. })
  136. },
  137. preview() {
  138. uni.previewImage({
  139. current: this.signCode,
  140. urls: [this.signCode]
  141. });
  142. },
  143. //保存签约二维码到相册
  144. saveImg() {
  145. let base64 = this.signCode.replace(/^data:image\/\w+;base64,/, ""); //去掉data:image/png;base64,
  146. let filePath = wx.env.USER_DATA_PATH + '/hym_pay_qrcode.png';
  147. uni.getFileSystemManager().writeFile({
  148. filePath: filePath, //创建一个临时文件名
  149. data: base64, //写入的文本或二进制数据
  150. encoding: 'base64', //写入当前文件的字符编码
  151. success: img => {
  152. uni.getSetting({
  153. success: res => {
  154. // 如果没有则获取授权
  155. if (!res.authSetting['scope.writePhotosAlbum']) {
  156. uni.authorize({
  157. scope: 'scope.writePhotosAlbum',
  158. success: res => {
  159. uni.saveImageToPhotosAlbum({
  160. filePath,
  161. success: res => {
  162. uni.showModal({
  163. content: '图片已保存到相册,赶快识别签约吧~',
  164. showCancel: false
  165. })
  166. },
  167. fail: err => {
  168. uni.showToast({
  169. title: '保存失败',
  170. icon: 'none'
  171. })
  172. }
  173. })
  174. },
  175. fail: err => {
  176. uni.showModal({
  177. title: '提示',
  178. content: '需要获取相册访问权限,请到小程序设置页面打开授权',
  179. cancelText: '取消',
  180. cancelColor: '#999',
  181. confirmText: '确定',
  182. confirmColor: '#f94218',
  183. success: res => {
  184. if (res.confirm) {
  185. uni.openSetting({
  186. success: res => {
  187. console
  188. .log(
  189. res
  190. .authSetting
  191. )
  192. },
  193. fail: err => {
  194. uni.showModal({
  195. content: '调起设置失败,请手动设置相册权限',
  196. showCancel: false
  197. })
  198. }
  199. })
  200. } else if (res
  201. .cancel) {
  202. uni.showModal({
  203. content: '您取消了设置相册权限,不能保存图片到相册',
  204. showCancel: false
  205. })
  206. }
  207. }
  208. })
  209. }
  210. })
  211. } else {
  212. uni.showLoading({
  213. title: '保存中...'
  214. })
  215. // 有则直接保存不知道哦
  216. uni.saveImageToPhotosAlbum({
  217. filePath,
  218. success: res => {
  219. uni.showModal({
  220. content: '图片已保存到相册,赶快识别签约吧~',
  221. showCancel: false
  222. })
  223. uni.hideLoading()
  224. },
  225. fail: err => {
  226. uni.hideLoading()
  227. uni.showToast({
  228. title: '保存失败',
  229. icon: 'none'
  230. })
  231. }
  232. })
  233. }
  234. }
  235. })
  236. },
  237. fail: err => {
  238. //console.log(err)
  239. }
  240. })
  241. return false;
  242. },
  243. /*
  244. * 获取认证的状态【字段applyment_state】
  245. *CHECKING:资料校验中
  246. *ACCOUNT_NEED_VERIFY:待账户验证
  247. *AUDITING:审核中
  248. *REJECTED:已驳回
  249. *NEED_SIGN:待签约
  250. *FINISH:完成
  251. *FROZEN:已冻结
  252. *参考资料:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/applyments/chapter3_2.shtml
  253. */
  254. getstate() {
  255. uni.showLoading({
  256. title: '加载中..'
  257. });
  258. getState().then(res => {
  259. if (res.code == 200) {
  260. this.state = res.data;
  261. //已完成
  262. if (res.data.applyment_state == 'FINISH') {
  263. clearInterval(this.timer);
  264. uni.redirectTo({
  265. url: '../index/index'
  266. })
  267. return false;
  268. }
  269. //待签约
  270. if (res.data.applyment_state === 'NEED_SIGN' || res.data.sign_state === "UNSIGNED") {
  271. let val = res.data.sign_url;
  272. this.imgUrl = val;
  273. this.signCode = QR.createQrCodeImg(val, {
  274. size: parseInt(300) //二维码大小
  275. });
  276. clearInterval(this.timer);
  277. this.current = this.isApply = 2;
  278. return false;
  279. }
  280. //已驳回
  281. if (res.data.applyment_state == 'REJECTED') {
  282. this.isApply = 4
  283. clearInterval(this.timer);
  284. return false;
  285. }
  286. //其他状态
  287. this.isApply = this.current = 1;
  288. //显示待账户验证信息
  289. if (res.data.account_validation) {
  290. this.remit = res.data.account_validation;
  291. }
  292. } else {
  293. uni.showModal({
  294. content: res.data || '获取认证状态失败',
  295. showCancel: false
  296. });
  297. }
  298. uni.hideLoading();
  299. });
  300. },
  301. /*去认证*/
  302. skipAuth(type) {
  303. if (!this.isDeal && type == 0) {
  304. uni.showModal({
  305. content: '请确认已阅读协议',
  306. showCancel: false
  307. });
  308. return false;
  309. }
  310. uni.navigateTo({
  311. url:'../../pagesA/pages/shop-auth/shop-auth'
  312. });
  313. },
  314. /*获取店铺信息*/
  315. getShop() {
  316. uni.showLoading({
  317. title: '加载中...',
  318. mask: true
  319. });
  320. //进入店铺根据is_apply判断认证的状态,提交认证之后,返回首页显示审核中,审核通过之后显示签约二维码,
  321. /*
  322. is_apply 0 未认证 2 待签约 3 认证完成 其余显示待审核状态
  323. */
  324. getStoreInfo()
  325. .then(res => {
  326. if (res.code == 200) {
  327. const {
  328. is_apply
  329. } = res.data.store;
  330. this.isApply = is_apply;
  331. //未认证状态
  332. if (is_apply == 0) {
  333. this.current = 0;
  334. return false;
  335. }
  336. //如果是已完成
  337. if (is_apply == 3) {
  338. clearInterval(this.timer);
  339. uni.redirectTo({
  340. url: '../index/index'
  341. })
  342. return false;
  343. }
  344. if (is_apply == 1 || is_apply == 2) {
  345. this.current = is_apply;
  346. }
  347. this.getstate();
  348. } else {
  349. uni.showModal({
  350. content: res.data,
  351. showCancel: false
  352. });
  353. }
  354. uni.hideLoading();
  355. })
  356. .catch(err => {
  357. uni.hideLoading();
  358. });
  359. },
  360. }
  361. }
  362. </script>
  363. <style lang="scss">
  364. .shop_auth {
  365. width: 690rpx;
  366. margin: 40rpx auto 0;
  367. .auth_hint {
  368. .title {
  369. font-size: 36rpx;
  370. font-weight: bold;
  371. text-align: center;
  372. padding: 50rpx 0 30rpx;
  373. }
  374. .auth_intr {
  375. font-size: 30rpx;
  376. font-weight: bold;
  377. text-align: center;
  378. margin: 10rpx 0;
  379. }
  380. .intr {
  381. padding: 0 30rpx;
  382. font-size: 28rpx;
  383. line-height: 2;
  384. text {
  385. color: $base-color;
  386. }
  387. }
  388. .deal {
  389. margin-top: 160rpx;
  390. padding-left: 30rpx;
  391. .iconfont {
  392. margin-right: 15rpx;
  393. vertical-align: middle;
  394. }
  395. }
  396. .sub_btn {
  397. margin-top: 30rpx;
  398. }
  399. .refresh_hint {
  400. width: 100%;
  401. text-align: center;
  402. color: $base-color;
  403. font-size: 30rpx;
  404. font-weight: bold;
  405. margin-top: 15rpx;
  406. }
  407. }
  408. .wait_auth {
  409. >view {
  410. view:first-child {
  411. font-size: 32rpx;
  412. font-weight: 700;
  413. }
  414. view:last-child {
  415. font-size: 28rpx;
  416. color: #999;
  417. margin-top: 20rpx;
  418. }
  419. }
  420. }
  421. .hint {
  422. padding: 15rpx 0;
  423. }
  424. .sign {
  425. width: 690rpx;
  426. margin: 40rpx auto 0;
  427. text-align: center;
  428. .sign_hint {
  429. font-size: 40rpx;
  430. font-weight: bold;
  431. color: #FB231F;
  432. margin-bottom: 80rpx;
  433. }
  434. .sub_btn {
  435. margin-top: 30rpx;
  436. }
  437. image {
  438. width: 300rpx;
  439. height: 300rpx;
  440. }
  441. }
  442. .newbtn {
  443. width: 630rpx;
  444. height: 88rpx;
  445. background: #FFFFFF;
  446. border-radius: 48rpx 48rpx 48rpx 48rpx;
  447. border: 2rpx solid #999999;
  448. color: #333333;
  449. font-weight: bold;
  450. }
  451. }
  452. </style>