From 3edd1b3252a1163a1a1e58dca77c876afc2bef93 Mon Sep 17 00:00:00 2001
From: 叶富雄 <yefuxiong@yeah.net>
Date: Sat, 14 Mar 2026 02:28:17 +0800
Subject: [PATCH] UI
---
pages/catesList/catesList.vue | 56
pages/quanshou/components/heijing.vue | 84
pages/logs/logs.vue | 47
pages/entrust/entrust.vue | 367 +++
pages/edu/edu.vue | 94
pages/customer/customer.vue | 146 +
pages/quanshou/components/xianlianghaojjuab.vue | 30
pages/quanyi/components/addAddress/index.vue | 2
pages/ginfo/ginfo.vue | 203 +
pages/face/face.vue | 175 +
pages/esign/esign.vue | 25
pages/my/my.vue | 246 ++
pages/profile/profile.vue | 223 ++
pages/order/order.vue | 388 +++
pages/job/job.vue | 259 ++
pages/index/index.vue | 304 ++
pages/quanshou/components/lanyaerji.vue | 51
pages/bank/bank.vue | 121 +
pages/login/login.vue | 218 ++
pages/quanshou/components/list.vue | 73
pages/cates/cates.vue | 131 +
pages/orderinfo/orderinfo.vue | 388 +++
pages/findpass/findpass.vue | 159 +
pages/carts/carts.vue | 249 ++
pages/regist/regist.vue | 170 +
pages/pays/pays.vue | 410 +++
/dev/null | 323 ---
pages/quanshou/components/tehuichongzhi.vue | 255 ++
pages/quanshou/index.vue | 375 +++
pages/quanyi/index.vue | 10
pages/web/index.vue | 35
pages/wallet/wallet.vue | 71
pages/idcard/idcard.vue | 331 +++
pages/search/search.vue | 79
pages/collect/collect.vue | 121 +
35 files changed, 5,890 insertions(+), 329 deletions(-)
diff --git a/pages/bank/bank.vue b/pages/bank/bank.vue
new file mode 100644
index 0000000..eb5db62
--- /dev/null
+++ b/pages/bank/bank.vue
@@ -0,0 +1,121 @@
+<template>
+ <view>
+ <view class="" v-if="bankData.length > 0">
+ <view class="bankItem" v-for="(item, index) in bankData">
+ <view class="bank-v" @tap="setBankCookie(item)">
+ <text>{{item.realname}}</text>
+ <text>{{item.phone}}</text>
+ </view>
+ <view class="bank-v">{{item.bankname}}({{item.bankno}})</view>
+ <image class="rgt" src="/static/imgs/right.png" mode=""></image>
+ <view class="bank-c">
+ <view class="bank-df">
+ 默认:
+ <switch @change="defChange" :data-id="item.id" v-if="item.isdef == 0" color="#e3b400" style="transform:scale(0.7)"/>
+ <switch @change="defChange" :data-id="item.id" v-else checked color="#e3b400" style="transform:scale(0.7)"/>
+ </view>
+ <view class="bank-c-main">
+ <view class="bank-c-c" @tap="$util.goPages('/pages/addBank/addBank?id=' + item.id)">
+ <image src="/static/imgs/edit.png" mode=""></image>
+ <text>编辑</text>
+ </view>
+ <view class="bank-c-c" @tap="delConfirm(item.id, index)">
+ <image src="/static/imgs/del.png" mode=""></image>
+ <text>删除</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" mode=""></image>
+ <view class="">没有银行卡信息</view>
+ </view>
+ <view class="bankBtn" @tap="goAdd">添加银行卡</view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ pageIndex: 1,
+ pageSize: 200,
+ bankData: [],
+ backUrl: '',
+ }
+ },
+ onLoad(op) {
+ this.backUrl = op.backUrl ? op.backUrl : ''
+ this.getBank()
+ },
+ methods: {
+ goAdd () {
+ if(this.backUrl == ''){
+ this.$util.goPages('/pages/addBank/addBank')
+ } else {
+ this.$util.goPages('/pages/addBank/addBank?backUrl=' + this.backUrl)
+ }
+ },
+ //选择银行
+ setBankCookie (e) {
+ if(this.backUrl != ''){
+ uni.setStorageSync('choose-bank', JSON.stringify(e))
+ this.$util.goPages(this.backUrl)
+ }
+ },
+ defChange (e) {
+ let id = e.currentTarget.dataset.id
+ this.$util.post('Bank/setDef', {id: id}).then(res => {
+ if(res.code == 1){
+ for(let i in this.bankData){
+ if(this.bankData[i].id != id){
+ this.bankData[i].isdef = 0
+ }
+ }
+ }
+ })
+ },
+ getBank () {
+ this.$util.post('Bank/getBank', {pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1){
+ this.bankData = res.data.list
+ }
+ })
+ },
+ delConfirm (id, idx) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '是否删除银行卡信息?',
+ success: function (res) {
+ if (res.confirm) {
+ t.delBank(id, idx)
+ }
+ }
+ })
+ },
+ delBank(id, idx){
+ let t = this
+ t.$util.post('Bank/delBank', {id: id}).then(res => {
+ if(res.code == 1){
+ uni.showToast({
+ title: res.msg || '删除成功',
+ icon: 'success'
+ })
+ this.bankData.splice(idx, 1)
+ } else {
+ uni.showToast({
+ title: res.msg || '删除失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+@import url(/static/css/bank.css);
+</style>
diff --git a/pages/carts/carts.vue b/pages/carts/carts.vue
new file mode 100644
index 0000000..4185416
--- /dev/null
+++ b/pages/carts/carts.vue
@@ -0,0 +1,249 @@
+<template>
+ <view class="carts">
+ <view class="c-title">
+ <text>共{{cartsTotal}}件商品</text>
+ <view class="" @tap="delCarts">
+ <text>删除</text>
+ </view>
+ </view>
+ <view class="cartsView">
+ <view class="" v-if="cartsData.length > 0">
+ <view class="cartsItem" v-for="(item, index) in cartsData">
+ <view class="cartTitle" @tap="cartsClick(item, index)">
+ <image class="cIcon" :src="item.check == 0 ? '/static/imgs/check.png' : '/static/imgs/checked.png'" mode=""></image>
+ <text>{{item.addtime}}</text>
+ </view>
+ <view class="cartsGoods" @tap="$util.goPages('/pages/ginfo/ginfo?id=' + item.goodsid)">
+ <image class="cartsIcon" lazy-load :src="item.icon" mode="widthFix"></image>
+ <view class="carts-item">
+ <view class="carts-title">{{item.title}}</view>
+ <view class="carts-set">
+ <view class="carts-price">
+ <view class="">
+ <text>单价:¥</text>
+ <text class="red">{{item.price}}</text>
+ </view>
+ <view class="">
+ <text>总价:¥</text>
+ <text class="red">{{item.total}}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="carts-nums">
+ <view class="" @tap="setCartsNums(item, 1)">
+ <image src="/static/imgs/minus.png" mode=""></image>
+ </view>
+ <view class="">
+ <text>{{item.nums}}</text>
+ </view>
+ <view class="" @tap="setCartsNums(item, 2)">
+ <image src="/static/imgs/add.png" mode=""></image>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" mode="" style="margin-top: 200upx;"></image>
+ <view class="">没有购物车信息</view>
+ <view class="noDataBtn" @tap="$util.goSwitch('/pages/cates/cates')">去看看</view>
+ </view>
+ </view>
+ <view class="cartsControll" v-if="cartsData.length > 0">
+ <view class="cartsControll-left" @tap="checkTapAll">
+ <image class="chooseIcon" :src="checkIds.length == cartsTotal ? '/static/imgs/checked.png' : '/static/imgs/check.png'" mode=""></image>
+ <text>全选</text>
+ </view>
+ <view class="cartsControll-right">
+ <text class="total">合计:</text>
+ <text>¥</text>
+ <text class="red">{{payTotal}}</text>
+ <view class="cartsBtn" @tap="goPays">结算({{payNums}})</view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ cartsTotal: 0,
+ pageIndex: 1,
+ pageSize: 200,
+ cartsData: [],
+ payTotal: 0,
+ payNums: 0,
+ checkAll: false,
+ checkIds: [],
+ checkIdx: [1],
+ }
+ },
+ onShow() {
+ let t = this
+ this.checkIds = []
+ this.checkAll = false,
+ this.payNums = 0
+ this.payTotal = 0
+ this.getCarts()
+ setTimeout(() => {
+
+ }, 2000)
+ },
+ methods: {
+ getCarts () {
+ this.$util.post('Carts/getCarts', {pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1){
+ this.cartsData = res.data.list
+ this.cartsTotal = res.data.pageTotal
+ }
+ })
+ },
+ cartsClick (e, index) {
+ e.check = e.check == 1 ? 0 : 1
+ if(e.check == 1) {
+ this.payTotal = this.payTotal + parseFloat(e.total)
+ this.payNums = this.payNums + e.nums
+ this.checkIds.push(e.id)
+ this.checkIdx.push(index)
+ } else {
+ this.payTotal = this.payTotal - parseFloat(e.total)
+ this.payNums = this.payNums - e.nums
+ let idx = this.checkIds.indexOf(e.id)
+ let inx = this.checkIdx.indexOf(index)
+ this.checkIds.splice(idx, 1)
+ this.checkIdx.splice(inx, 1)
+ }
+ if(this.checkIds.length == this.cartsTotal){
+ this.checkAll = true
+ } else {
+ this.checkAll = false
+ }
+ },
+ //全选、反选
+ checkTapAll () {
+ let checkFlag = 0
+ if(!this.checkAll){
+ checkFlag = 1
+ this.checkAll = true
+ } else {
+ this.checkAll = false
+ }
+ for(let i in this.cartsData){
+ this.cartsData[i].check = checkFlag
+ if(checkFlag == 1 && this.checkIds.indexOf(this.cartsData[i].id) < 0) {
+ this.checkIds.push(this.cartsData[i].id)
+ this.checkIdx.push(parseInt(i))
+ this.payNums = this.payNums + parseFloat(this.cartsData[i].nums)
+ this.payTotal = this.payTotal + parseFloat(this.cartsData[i].total)
+ }
+ }
+ //反选
+ if(checkFlag != 1) {
+ this.checkIds = []
+ this.checkIdx = []
+ this.payNums = 0
+ this.payTotal = 0
+ }
+ },
+ //设置购物车数量
+ setCartsNums (e, y){
+ let n = e.nums
+ let t = this
+ if(y == 1){
+ if(n == 1) {
+ return
+ } else {
+ n = n > 1 ? n - 1 : 1
+ }
+ } else {
+ n = n + 1
+ }
+ t.$util.post('Carts/setCartsNums', {id: e.id, nums: n}).then(res => {
+ if(res.code == 1) {
+ e.nums = n
+ e.total = n * parseFloat(e.price)
+ //计算总价
+ if(t.payTotal != 0 && this.checkIds.indexOf(e.id) >= 0){
+ if(y == 1){
+ t.payTotal = t.payTotal - parseFloat(e.price)
+ } else {
+ t.payTotal = t.payTotal + parseFloat(e.price)
+ }
+ }
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ //购买
+ goPays () {
+ if(this.payNums == 0) {
+ return uni.showToast({
+ title: '未选中购买商品',
+ icon: 'error'
+ })
+ }
+ if(this.checkIds.length > 1) {
+ return uni.showToast({
+ title: '不支持多件购买',
+ icon: 'error'
+ })
+ }
+ let cartsIds = this.checkIds.join(',')
+ let url = '/pages/pays/pays?cartsIds=' + cartsIds
+ this.$util.goPages(url)
+ },
+ //删除
+ delCarts () {
+ let t = this
+ if(this.checkIds.length == 0){
+ return uni.showToast({
+ title: '未选中删除项',
+ icon: 'error'
+ })
+ }
+ uni.showModal({
+ title: '温馨提示',
+ content: '是否确定删除?',
+ success: function (res) {
+ if (res.confirm) {
+ console.log(t.checkIds)
+ t.$util.post('Carts/delCarts', {ids: t.checkIds}).then(res => {
+ if(res.code == 1){
+ for (let i = t.cartsData.length - 1; i >= 0; i--) {
+ if (t.checkIdx.includes(i)) {
+ t.cartsData.splice(i, 1)
+ }
+ }
+ t.cartsTotal = t.cartsTotal - t.checkIdx.length
+ t.checkIds = []
+ t.checkIdx = []
+ t.payNums = 0
+ t.payTotal = 0
+ return uni.showToast({
+ title: res.msg || '操作成功',
+ icon: 'success'
+ })
+ } else {
+ return uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/carts.css);
+</style>
diff --git a/pages/cates/cates.vue b/pages/cates/cates.vue
new file mode 100644
index 0000000..592245e
--- /dev/null
+++ b/pages/cates/cates.vue
@@ -0,0 +1,131 @@
+<template>
+ <view>
+ <view class="search">
+ <view class="searchView">
+ <image src="/static/imgs/search.png" mode=""></image>
+ <input type="text" v-model="keyword" placeholder="搜索您想要的商品" @confirm="searchGoods" />
+ <view class="searchBtn" @tap="searchGoods">搜索</view>
+ </view>
+ </view>
+ <view class="catesMain">
+ <view class="cates-left" :style="'height:' + scrollHeight + 'px'">
+ <scroll-view scroll-y="true" class="scroll-Y">
+ <view :class="catesId == 0 ? 'active' : ''" @click="catesClick(0)">全部商品</view>
+ <view v-for="(item, index) in catesData" @click="catesClick(item)" :class="catesId == item.id ? 'active' : ''">{{item.title}}</view>
+ </scroll-view>
+ </view>
+ <view class="cates-right" :style="'width:' + goodsWidth + 'px;height:' + (scrollHeight - 10) + 'px;margin-top: 20upx'" v-if="goodsData.length > 0">
+ <scroll-view scroll-y="true" class="scroll-Y">
+ <view class="goods-list">
+ <view class="goods-item" v-for="(item, index) in goodsData" :style="'width:' + goodsItemWidth + 'px;'" @click="$util.goPages('/pages/ginfo/ginfo?id=' + item.id)">
+ <image class="goods-icon" :src="item.icon" mode=""></image>
+ <view class="goods-title">{{item.title}}</view>
+ <view class="goods-price">
+ <view>¥</view>
+ <view class="red">{{item.price}}</view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" style="margin-left: 50%;" mode=""></image>
+ <view class="" style="margin-left: 120upx; width: auto;">没有商品信息</view>
+ </view>
+
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ keyword: '',
+ catesData: [],
+ goodsData: [],
+ scrollHeight: 0,
+ goodsWidth: 0,
+ goodsItemWidth: 0,
+ catesId: 0,
+ pageIndex: 1,
+ pageSize: 200,
+ }
+ },
+ onLoad() {
+ this.getCatesData()
+ },
+ onReady() {
+
+ },
+ methods: {
+
+ searchGoods () {
+ this.getCatesGoods()
+ },
+ //获取分类数据
+ getCatesData() {
+ this.$util.post('Cates/getCates', {catesId: this.catesId, pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1) {
+ this.catesData = res.data.list
+ this.getCatesGoods()
+ }
+ })
+ },
+ //分类点击
+ catesClick (e) {
+ if(e == 0) {
+ this.catesId = e
+ } else {
+ this.catesId = e.id
+ }
+ this.pageIndex = 1
+ this.getCatesGoods()
+ },
+ //获取分类商品
+ getCatesGoods(){
+ this.$util.post('Goods/getCatesGoods', {keyword: this.keyword, catesId: this.catesId, pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1) {
+ this.goodsData = res.data.list
+ }
+ })
+ }
+ },
+ // 计算swiper的高度
+ mounted() {
+ let t = this
+ let headerSearchHeight = 0
+ // 头部搜索height
+ let headerSearchView = uni.createSelectorQuery().select('.search')
+ headerSearchView
+ .boundingClientRect((data) => {
+ headerSearchHeight = data.height
+ }).exec()
+
+ // 左侧scroll宽度
+ let catesWidth = 0
+ let catesLeftView = uni.createSelectorQuery().select('.cates-left')
+ catesLeftView
+ .boundingClientRect((data) => {
+ catesWidth = data.width
+ }).exec()
+
+ setTimeout(() => {
+ // scroll-height
+ uni.getSystemInfo({
+ success: (res) => {
+ t.scrollHeight = res.windowHeight - headerSearchHeight
+ t.goodsWidth = res.windowWidth - catesWidth
+ let mlW = res.windowWidth * 0.05
+ t.goodsItemWidth = (res.windowWidth - mlW - catesWidth) / 2
+ }
+ })
+ }, 300)
+
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/cates.css);
+</style>
diff --git a/pages/catesList/catesList.vue b/pages/catesList/catesList.vue
new file mode 100644
index 0000000..6e86750
--- /dev/null
+++ b/pages/catesList/catesList.vue
@@ -0,0 +1,56 @@
+<template>
+ <view>
+ <view class="goodsData" style="margin-top: 30upx;">
+ <view class="goods-list" v-if="goodsData.length > 0">
+ <view class="goods-item" v-for="(itm, idx) in goodsData" @click="$util.goPages('/pages/ginfo/ginfo?id=' + itm.id)">
+ <image lazy-load class="goods-icon" :src="itm.icon" mode="widthFix"></image>
+ <view class="goods-title">{{itm.title}}</view>
+ <view class="goods-price">
+ <view>¥</view>
+ <view class="red">{{itm.price}}</view>
+ </view>
+ </view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" mode="" style="margin-top: 200upx;"></image>
+ <view class="">没有商品信息</view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ goodsData: [],
+ catesId: 0,
+ is_hot: '',
+ pageIndex: 1,
+ pageSize: 200,
+ }
+ },
+ onLoad (op) {
+ this.catesId = op.catesId ? op.catesId : 0
+ this.is_hot = op.is_hot ? op.is_hot : ''
+ uni.setNavigationBarTitle({
+ title: op.title
+ })
+ this.catesGoods()
+ },
+ methods: {
+ //获取分类商品
+ catesGoods(){
+ this.$util.post('Goods/getCatesGoods', {catesId: this.catesId, is_hot: this.is_hot, pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1) {
+ this.goodsData = res.data.list
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/search.css);
+</style>
diff --git a/pages/collect/collect.vue b/pages/collect/collect.vue
new file mode 100644
index 0000000..d608c0a
--- /dev/null
+++ b/pages/collect/collect.vue
@@ -0,0 +1,121 @@
+<template>
+ <view>
+ <view class="collect-title">
+ <text>共收藏{{collectNums}}件商品</text>
+ <view class="">
+ <text v-if="!delFlag" @tap="delToggle">管理</text>
+ <text v-if="delFlag" @tap="delCollect">删除</text>
+ <text v-if="delFlag" @tap="delToggle">取消</text>
+ </view>
+ </view>
+ <view class="goods-list" v-if="collectData.length > 0">
+ <view class="goods-item" v-for="(item, index) in collectData">
+ <view class="" @tap="collectClick(item, index)" v-if="delFlag">
+ <image class="checkImg" :src="item.check == 1 ? '/static/imgs/checked.png' : '/static/imgs/check.png'" mode=""></image>
+ <view class="msk"></view>
+ </view>
+ <view class="" @click="$util.goPages('/pages/ginfo/ginfo?id=' + item.goodsid)">
+ <image lazy-load class="goods-icon" :src="item.icon" mode="widthFix"></image>
+ <view class="goods-title">{{item.title}}</view>
+ <view class="goods-price">
+ <view>¥</view>
+ <view class="red">{{item.price}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="noData" style="margin-top: 250upx;" v-else>
+ <image src="/static/imgs/noData.png" mode=""></image>
+ <view class="">没有收藏信息</view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ delFlag: false,
+ collectNums: 0,
+ collectData: [],
+ pageIndex: 1,
+ pageSize: 200,
+ delIds: [],
+ delIndex: [],
+ }
+ },
+ onLoad() {
+ this.getCollect()
+ },
+ methods: {
+ getCollect () {
+ this.$util.post('Collect/getCollect', {pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1) {
+ this.collectData = res.data.list
+ this.collectNums = res.data.pageTotal
+ }
+ })
+ },
+ delToggle () {
+ this.delFlag = !this.delFlag
+ },
+
+ collectClick(e, index){
+ e.check = e.check == 1 ? 0 : 1
+ if(e.check == 1 && this.delIds.indexOf(e.id) < 0) {
+ this.delIds.push(e.id)
+ this.delIndex.push(index)
+ } else {
+ let idx = this.delIds.indexOf(e.id)
+ let inx = this.delIndex.indexOf(index)
+ if(idx >= 0){
+ this.delIds.splice(idx, 1)
+ this.delIndex.splice(inx, 1)
+ }
+ }
+ },
+ delCollect () {
+ let t = this
+ if(this.delIds.length == 0){
+ return uni.showToast({
+ title: '未选中删除项',
+ icon: 'error'
+ })
+ }
+ console.log('dis', this.delIds)
+ uni.showModal({
+ title: '温馨提示',
+ content: '是否确定删除?',
+ success: function (res) {
+ if (res.confirm) {
+ console.log(t.delIds)
+ t.$util.post('Collect/delCollect', {ids: t.delIds}).then(res => {
+ if(res.code == 1){
+ for(let i in t.delIndex){
+ t.collectData.splice(t.delIndex[i], 1)
+ }
+ t.collectNums = t.collectNums - t.delIds.length
+ t.delIds = []
+ t.delIndex = []
+ return uni.showToast({
+ title: res.msg || '操作成功',
+ icon: 'success'
+ })
+ } else {
+ return uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/collect.css);
+</style>
diff --git a/pages/customer/customer.vue b/pages/customer/customer.vue
new file mode 100644
index 0000000..d816759
--- /dev/null
+++ b/pages/customer/customer.vue
@@ -0,0 +1,146 @@
+<template>
+ <view>
+ <view class="">
+ <view class="content" v-if="contentData.length > 0">
+ <template v-for="(item, index) in contentData">
+ <view class="cView" v-if="userInfo && item.userid == userInfo.id">
+ <view class="cView-c">
+ <image src="/static/imgs/rsj.png" class="r-icon"></image>
+ {{item.content}}
+ </view>
+ <image class="avatar" v-if="userInfo" :src="$baseUrl + userInfo.avatar" mode=""></image>
+ </view>
+
+ <view class="uView" v-else>
+ <image class="avatar" src="/static/imgs/logo.png" mode=""></image>
+ <view class="uView-c">
+ <image src="/static/imgs/rsj.png" class="r-icon"></image>
+ {{item.content}}
+ </view>
+ </view>
+ </template>
+ </view>
+ </view>
+ <view class="sendView">
+ <input type="text" v-model="content" confirm-type="send" placeholder="请输入内容" @confirm="sendMessage" />
+ <view class="" @tap="sendMessageBtn">发送</view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ contentData: [],
+ content: '',
+ userInfo: null,
+ lastId: 0,
+ intervalId: null,
+ }
+ },
+ onShow() {
+ this.getUserInfo()
+ },
+ onLoad () {
+ this.getCustomer()
+ },
+ onHide() {
+ clearInterval(this.intervalId)
+ },
+ onReady() {
+ this.scrollToBottom()
+ },
+ //监听返回直接返回到我的
+ onBackPress(options) {
+ clearInterval(this.intervalId)
+ },
+ methods: {
+ startInterval(){
+ this.intervalId = setInterval(() => {
+ console.log('计时器')
+ this.$util.sendMsg('Customer/getCustomerServe', {lastId: this.lastId, userid: this.userInfo.id}).then(res => {
+ if(res.code == 1) {
+ for(let i in res.data){
+ this.contentData.push(res.data[i])
+ }
+ this.lastId = this.contentData[this.contentData.length - 1].id
+ this.scrollToBottom()
+ }
+ })
+ }, 5000)
+ },
+ getCustomer () {
+ let t = this
+ t.$util.post('Customer/getCustomer').then(res => {
+ t.contentData = res.data
+ if(res.code == 1) {
+ t.lastId = this.contentData[res.data.length - 1].id
+ } else {
+ t.lastId = 0
+ }
+ this.scrollToBottom()
+ this.startInterval()
+ })
+ },
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ t.userInfo = res.data
+ })
+ },
+ sendMessage (e) {
+ this.content = e.detail.value
+ if(this.content != ''){
+ let conData = {
+ userid: this.userInfo.id,
+ avatar: this.userInfo.avatar,
+ content: this.content,
+ }
+ this.sendMessageServer(this.content)
+ this.content = ''
+ this.contentData.push(conData)
+ this.scrollToBottom()
+ }
+ },
+ sendMessageServer(){
+ if(this.content != ''){
+ this.$util.sendMsg('Customer/sendMessageServer', {content: this.content}).then(res => {
+ console.log(res)
+ this.lastId = res.data.lastId
+ console.log(this.lastId)
+ })
+ }
+ },
+ sendMessageBtn() {
+ if(this.content != ''){
+ let conData = {
+ userid: this.userInfo.id,
+ avatar: this.userInfo.avatar,
+ content: this.content,
+ }
+ this.sendMessageServer()
+ this.content = ''
+ this.contentData.push(conData)
+ this.scrollToBottom()
+ }
+ },
+ scrollToBottom() {
+ const query = uni.createSelectorQuery();
+ query.select('.content').boundingClientRect();
+ query.exec(res => {
+ if (res[0]) {
+ uni.pageScrollTo({
+ scrollTop: res[0].height, // 或者使用 res[0].bottom 来获取容器底部位置
+ duration: 0 // 立即滚动到指定位置
+ });
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+@import url(/static/css/customer.css);
+</style>
\ No newline at end of file
diff --git a/pages/edu/edu.vue b/pages/edu/edu.vue
new file mode 100644
index 0000000..685adbf
--- /dev/null
+++ b/pages/edu/edu.vue
@@ -0,0 +1,94 @@
+<template>
+ <view>
+ <view class="">
+ <image class="edu-icon" src="/static/imgs/edu.png" mode=""></image>
+ <view class="edu-desc">额度授信中</view>
+ <view class="edu-desc">我们正在加急为您审核,请耐心等待</view>
+ <image class="edu-loading" src="/static/imgs/loading.gif" mode=""></image>
+ <view class="edu-over" @tap="$util.goSwitch('/pages/index/index')">认证完成</view>
+ </view>
+ <!--uni-popup ref="popup" type="center" :is-mask-click="false">
+ <view class="popup-content">
+ <image class="edu-close" v-if="delFlag" src="/static/imgs/delete.png" mode="" @tap="popClose"></image>
+ <image class="edu-icon-1" src="/static/imgs/edu_1.png" mode=""></image>
+ <view class="edu-view">
+ <view class="edu-view-desc">未匹配到合适的资金方</view>
+ <image class="edu-icon-2" src="/static/imgs/edu_2.png" mode=""></image>
+ <image class="edu-icon-3" src="/static/imgs/edu_3.png" mode=""></image>
+ <view class="edu-check">
+ <image src="/static/imgs/checked.png" mode=""></image>
+ <view class="">
+ 我已阅读并同意
+ <text @tap="agreeDialog1">《会服务协议》</text>
+ <text @tap="agreeDialog2">《委托扣款确认书》</text>,
+ 理解并接受相关条款并同意自动续费。
+ </view>
+
+ </view>
+ <view style="text-align: center;padding-bottom: 20upx;color: cornflowerblue;" @tap="$util.goPages('/pages/equity/equity')">查看详情>>></view>
+ </view>
+ <view class="edu-btn" @tap="buyEquity">
+ <image src="/static/imgs/edu_4.png" mode=""></image>
+ </view>
+ </view>
+ </uni-popup-->
+
+ <agreePup ref="agreePup1" :gp="4" title="会员服务协议"></agreePup>
+ <agreePup ref="agreePup2" :gp="5" title="委托扣款确认书"></agreePup>
+ </view>
+</template>
+
+<script>
+ import agreePup from "@/components/agreePup/agreePup";
+ export default {
+ data() {
+ return {
+ userInfo: null,
+ config: null,
+ delFlag: false,
+ }
+ },
+ onLoad() {
+ //this.getUserInfo()
+ },
+ methods: {
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ t.userInfo = res.data
+ })
+ },
+ agreeDialog1 (e) {
+ this.$refs.agreePup1.dialog = !this.$refs.agreePup1.dialog
+ },
+ agreeDialog2 (e) {
+ this.$refs.agreePup2.dialog = !this.$refs.agreePup2.dialog
+ },
+ popClose () {
+ this.$refs.popup.close()
+ },
+ buyEquity () {
+ let t = this
+ t.$util.post('Equity/createOrder').then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '购买成功',
+ icon: 'success'
+ })
+ t.$refs.popup.close()
+ t.$refs.popup2.open()
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/edu.css);
+</style>
diff --git a/pages/entrust/entrust.vue b/pages/entrust/entrust.vue
new file mode 100644
index 0000000..d03d785
--- /dev/null
+++ b/pages/entrust/entrust.vue
@@ -0,0 +1,367 @@
+<template>
+ <view>
+ <view class="title"></view>
+ <view class="title-desc">
+ 本协议是您作为用户与连云港远屹网络科技有限公司(以下简称为"本公司")之间就其提供的 权益服务所订立的协议,在您签订本协议前,您已经阅读、理解并接受本协议以及各类规则,并承诺遵守中国法律规定,如您不同意,或无法准确理解相关条款的含义,请不要使用服务。您一经使用服务即视为对本协议全部条款已充分理解并完全接受。
+ <image class="title-desc-yz" src="/static/imgs/yinzhang.png" mode=""></image>
+ </view>
+ <view class="main">
+ <view class="">1.定义与解释</view>
+ <view class="">
+ 1.1 本协议:指《会员权益服务协议》任何条款、明细、信息、补充说明及补充协议。本协
+ 议为您与本公司之间约定相关权利义务的具有法律约束力的合同文件,并适用于用户使用服
+ 务的全部活动。
+ </view>
+ <view class="">
+ 1.2 权益服务:是指您本次购买的一项有偿服务。(服务具体内容详见实际购买展示页面)。
+ (下称“本服务”)
+ </view>
+ <view class="">
+ 1.3 用户:为年满 18 周岁或者 16 周岁以上,以自己的劳动收入为主要生活来源的,并且具
+ 有完全民事行为能力的中华人民共和国公民,以下简称“您”或“用户”。
+ </view>
+ <view class="">
+ 1.4 页面:指您购买会员权益服务时所看到的一系列页面,包括但不限于权益购买、权益兑
+ 换等页面。
+ </view>
+ <view class="">2.服务内容及申请</view>
+ <view class="">2.1 当您阅读并同意本协议、支付完服务费后,即获得已经购买的生活权益兑换使用权限。</view>
+ <view class="">
+ 2.2 您有权使用您确认的手机号码(或称“账户名称”)及手机验证码(账户名称及验证码
+ 合称“账户”)登录页面。
+ </view>
+ <view class="">3.本公司服务及规范</view>
+ <view class="">3.1 生活类权益由本公司提供并承担全部责任(下文所述“权益”均指生活权益);</view>
+ <view class="">
+ 3.2 本公司提供包括但不限于消费、娱乐、资讯、交通出行、生活服务、酒店住宿等各类服
+ 务,兼容自有业务产品、外接第三方业务产品服务。
+ </view>
+ <view class="">
+ 3.2.1 通过本公司提供的单项服务,包括但不限于“资讯”、“视频”、“游戏”、“虚拟
+ 卡券”等。
+ </view>
+ <view class="">
+ 3.2.2 本公司有权根据业务运行规则不时地变更、暂停上述服务或上线其他服务类型,权益
+ 调整将在相应服务页面进行通知或公告,您可以通过服务页面查询最新的权益内容,具体规
+ 则及费用计收以本公司规则为准。但该等变更不会削弱已购买服务的用户的权益。
+ </view>
+ <view class="">3.3 费用收取</view>
+ <view class="">
+ 3.3.1 费用收取时间和收费标准:您购买权益服务,应向本公司支付购买权益费用,不同产
+ 品及服务对应不同收费标准,具体收费时点和标准以购买页面显示为准。
+ </view>
+ <view class="">
+ 3.3.2 费用收取方式:费用采用线上付费的方式,包括但不限于微信、支付宝、银行卡快捷
+ 支付、信用卡等方式。具体付款方式以页面显示为准。
+ </view>
+ <view class="">
+ 3.3.3 退款规则:用户开通本权益服务后,用户不可中途取消或终止本权益服务,本公司不
+ 退还用户因开通本权益服务支付的费用,但特殊情况下本公司同意退款的用户除外。
+ </view>
+ <view class="">3.4 关于退款/退货的特别约定:</view>
+ <view class="">
+ 3.4.1 由于市场变化及各种以合理商业难以控制的因素的影响,本公司无法保证您提交的订
+ 单信息中希望购买的产品都会有货;如您下单所购买的产品发生缺货,您有权取消订单;本
+ 公司亦有权取消订单,并为您(若已付款)办理退款。
+ </view>
+ <view class="">
+ 3.4.2 如发生退款/退货的,退款金额的确定及相关流程以您购买权益时公布的规则为准;其
+ 他退货相关事宜以本公司的商品售后服务政策及相关退货规则为准。
+ </view>
+ <view class="">3.5 服务规则</view>
+ <view class="">
+ 3.5.1 如您通过本公司购买产品或服务的,则您知晓并同意,本公司向您交付产品或服务并
+ 承担物流及售后保障,如您需要开具发票的,由本公司负责开具。
+ </view>
+ <view class="">
+ 3.5.2 本公司可通过平台、网站、电子邮件、手机短信、即时通讯软件等向您发送服务产品、
+ 重要提示、订单申请信息、服务协议、服务规则等信息。
+ </view>
+ <view class="">
+ 3.5.3 本公司有权在确有必要的情况下,自行或授权其他方通过合理的方式向用户或用户联
+ 系人告知本协议相关情况。
+ </view>
+ <view class="">3.5.4 如您对本服务有异议,您可以联系本公司客服中心并提出异议。</view>
+ <view class="">4.权利和义务</view>
+ <view class="">
+ 4.1 在使用服务的过程中,您有义务提供自己的真实资料,您同意并提交本人手机号码,并
+ 保证提供的资料真实、准确、完整、合法有效,您的用户资料如有变动的,应及时更新资料。
+ 如果您提供的资料不合法、不真实、不准确、不详尽,您需承担因此引起的相应责任及后果,
+ 并且本公司保留终止用户参与该活动的权利。
+ </view>
+ <view class="">
+ 4.2 您应妥善保管您的个人信息,如您发现有他人冒用、盗用或有其他可能危及到您账户资
+ 金安全情形时,应立即通知本公司,向本公司申请暂停相关服务。非因本公司的过错导致的
+ 任何损失由您自行承担。
+ </view>
+ <view class="">
+ 4.3 用户信息保护与共享:本公司对于您提供的、本公司自行收集到的、经认证的个人信息
+ 将按照本协议及有关规则予以保护、使用或者披露,并在权益服务的范围内共享给实际权益
+ 服务提供方。本公司将采用行业标准惯例以保护您的个人资料。
+ </view>
+ <view class="">
+ 4.4 您应合理使用其享有的本公司服务,除为实现您自身的本公司服务利益外,不得利用其
+ 享有的服务非法获利,不得以任何形式售卖其所享有的服务,不得滥用其所享有的服务,如
+ 因您不当行为致平台合理怀疑的或判定的,本公司有权暂停或关闭服务,此外,您需承担因
+ 此引起的相应责任及后果。
+ </view>
+ <view class="">4.5 本公司有理由认为您不再或可能不再符合本协议项下服务的开通或使用条件时,本公司
+ 有权拒绝为您开通服务或提供本协议项下的各项服务。</view>
+ <view class="">4.6 跟公司有权在法律法规允许的范围内,结合业务发展等实际情况,调整平台服务范围、
+ 各项功能和收费标准及其他重要事项,并通过平台公告等方式及时通知您。</view>
+ <view class="">
+ 4.7 本公司对您提供的相关信息负有保密的义务,并保证将按照法律法规规定保护用户提供
+ 的相关信息,经过您同意授权的除外。
+ </view>
+ <view class="">
+ 4.8 您知悉并同意,本公司收集您的信息除将提供所购买产品所涉服务外,还将就服务相关
+ 的其他产品、服务向您推送。您收到本公司的该类提示或通知的,可根据通知内容至相关页
+ 面进行了解,或者您可回复退订,当您退订该类服务通知的,本公司将不再向您发送同类通
+ 知。
+ </view>
+ <view class="">5.知识产权</view>
+ <view class="">
+ 5.1 您知悉,知识产权(包括但不限于商标、专利及著作权等)归权利方所有,非经所有人
+ 事先书面同意,您不得使用、修改、复制、公开传播、篡改或以其他方式侵犯本公司知识产
+ 权。
+ </view>
+ <view class="">6.免责条款</view>
+ <view class="">
+ 6.1 本公司出现下列任一状况而无法正常运作,致使无法向您提供本协议项下服务,不承担
+ 任何违约或赔偿责任,该状况包括但不限于:
+ </view>
+ <view class="">6.1.1 在服务平台维护期间;</view>
+ <view class="">6.1.2 电信设备出现故障不能进行数据传输的;</view>
+ <view class="">
+ 6.1.3 因台风、地震、海啸、洪水、停电、战争、恐怖袭击等不可抗力之因素,造成系统障
+ 碍不能执行业务的;
+ </view>
+ <view class="">
+ 6.1.4 由于黑客攻击、电信部门和其他平台有信息技术依赖的相关部门、企事业单位技术调
+ 整或故障、网站升级、银行方面的问题等原因而造成的服务中断或者延迟。
+ </view>
+ <view class="">
+ 6.2 因国家相关主管部门颁布、变更的法令、政策导致本公司不能提供本协议项下服务的,
+ 不视为本公司违约,本公司与您可根据相关的法令、政策变更条款内容或提前终止本协议。
+ </view>
+ <view class="">
+ 6.3 本公司有权根据风险及自身业务运营情况需要中止(终止)向您提供服务,因此导致您
+ 无法使用服务或服务受到限制的,不视为本公司违约。本公司保证终止服务前后会妥善处理
+ 已购买服务得相关事宜。
+ </view>
+ <view class="">
+ 6.4 对于任何您自本公司而获得的非本公司自身的信息、内容、或者广告宣传等资讯,本公
+ 司不负保证真实、准确和完整性的责任。您须自行甄别真伪和谨慎预防风险,否则,无论何
+ 种原因,本公司不对任何非与本公司直接发生的交易和(或)行为承担任何直接、间接、附
+ 带或衍生的损失和责任。
+ </view>
+ <view class="">
+ 6.5 您理解并同意,因本公司根据本协议和您的授权并依法向第三方提供您的用户信息产生
+ 的任何后果和风险与本公司无关,包括但不限于您的借款申请被拒绝、您无法获得更优惠的
+ 交易条件等。
+ </view>
+ <view class="">6.6 本公司对本协议所承担的违约赔偿责任总额不超过向您收取的当次服务费用总额。</view>
+ <view class="">
+ 6.7 如您对本协议下所有涉及条款的理解发生争议的,本公司在法律许可的范围内对本协议
+ 享有最终的解释权。
+ </view>
+ <view class="">7.您的违约及处理</view>
+ <view class="">7.1 违约认定</view>
+ <view class="">发生如下情形之一的,视为您违约:</view>
+ <view class="">(一)未按时支付服务费用的;</view>
+ <view class="">(二)使用本公司服务时违反有关法律法规规定的;</view>
+ <view class="">(三)或违反本协议或本协议补充协议(即本协议第 11.2 条)约定的。</view>
+ <view class="">7.2 违约处理措施</view>
+ <view class="">
+ 【信息处理】 您发布的信息构成违约的,本公司可根据相应规则立即对相应信息进行删除、
+ 屏蔽处理。
+ </view>
+ <view class="">
+ 【行为限制】您发生违约后,本公司可对您执行限制参加营销活动、中止向您提供部分或全
+ 部服务等处理措施。如您的行为构成根本违约的,本公司可暂停或终止向您提供服务。
+ </view>
+ <view class="">
+ 7.3 赔偿责任
+ 如您的行为使本公司及/或其关联公司遭受损失(包括自身的直接经济损失、商誉损失及对
+ 外支付的赔偿金、和解款、律师费、诉讼费等间接经济损失),您应赔偿本公司及/或其关
+ 联公司上述全部损失。
+ 如您的行为使本公司及/或其关联公司遭受第三人主张权利,本公司及/或其关联公司可在对
+ 第三人承担金钱给付等义务后就全部损失向您追偿。
+ </view>
+ <view class="">7.4 特别约定</view>
+ <view class="">
+ 【关联处理】如您因严重违约导致本公司终止本协议时,出于维护秩序及保护消费者权益的
+ 目的,本公司及/或其关联公司可对与您在其他协议项下的合作采取中止甚或终止协议的措
+ 施,并以本协议第 10 条约定的方式通知您。
+ </view>
+ <view class="">8.协议变更与解除</view>
+ <view class="">
+ 8.1 本公司有权因国家法律法规变化及网站运营需要不定期地拟定、修改或终止本协议,并
+ 及时以公告的方式通知您。经修订的条款一经通知,立即自动生效,您应及时关注不时发布
+ 的各项服务规则及本协议的变更。若不同意相关规则及条款修改的,应及时终止与平台的协
+ 议。如您继续使用平台提供的服务,即视为同意更新后的协议。
+ </view>
+ <view class="">9.使用法律及争议解决</view>
+ <view class="">
+ 9.1 本协议的签订、履行、终止、解释和争议解决受中国法律管辖。
+ </view>
+ <view class="">
+ 9.2 因本协议引发的或与本协议有关的争议,由本公司与您协商解决,也可由有关部门调解;
+ 协商或调解不成的,由本协议签署地上海市徐汇区有管辖权的人民法院管辖。
+ </view>
+ <view class="">10. 通知</view>
+ <view class="">
+ 10.1 有效联系方式
+ 您接受本公司服务时,您应该向本公司提供真实有效的联系方式(包括您的联系电话等),
+ 对于联系方式发生变更的,您有义务及时更新有关信息,并保持可被联系的状态。本公司将
+ 向您的上述联系方式向您送达各类通知,而此类通知的内容可能对您的权利义务产生重大的
+ 有利或不利影响,请您务必及时关注。
+ </view>
+ <view class="">
+ 10.2 通知的送达
+ 本公司通过上述联系方式向您发出通知,其中以电子的方式发出的书面通知,包括但不限于
+ 页面公告,向您提供的联系电话发送手机短信,向您提供的电子邮件地址发送电子邮件,向
+ 您的账号发送系统消息以及站内信信息,在发送成功后即视为送达;以纸质载体发出的书面
+ 通知,按照提供联系地址交邮后的第五个自然日即视为送达。
+ 对于在本公司上因交易活动引起的任何纠纷,您同意司法机关(包括但不限于人民法院)可
+ 以通过手机短信、电子邮件等现代通讯方式或邮寄方式向您送达法律文书(包括但不限于诉
+ 讼文书)。您指定的邮寄地址为您的法定联系地址或您提供的有效联系地址。
+ 您同意司法机关可采取以上一种或多种送达方式向您送达法律文书,司法机关采取多种方式
+ 向您送达法律文书,送达时间以上述送达方式中最先送达的为准。
+ 如果因提供的联系方式不确切,或不及时告知变更后的联系方式,使法律文书无法送达或未
+ 及时送达,由您自行承担由此可能产生的法律后果。
+ </view>
+ <view class="">11.个人信息授权</view>
+ <view class="">
+ 11.1、在您购买本权益后,您授权将您的注册手机号共享给本公司,用于支付权益款、交易
+ 确认、进行权益兑换、对接权益执行时间,并将您购买的权益关联到您的实名手机号,满足
+ 您的权益使用的目的。且该等共享仅限于前述服务之必需。
+ </view>
+ <view class="">
+ 11.2 您授权本公司可通过平台、网站、电子邮件、手机短信、电话等向您发送重要提示、
+ 服务协议、服务规则等信息。您如果不愿意接收此类信息,您有权通过本公司提供的相应的
+ 退订功能进行退订。但请注意,一旦退订,您可能因此无法接收与服务相关的信息、通知等
+ 而影响您正常接受本平台为您提供的服务。
+ </view>
+ <view class="">
+ 11.3 请您在申请第三方产品或服务前,仔细阅读本条款,并对第三方相关产品、及自身风
+ 险承担做出客观仔细判断。您明确理解并同意该服务可能因第三方产品漏洞或功能调整致您
+ 拟申请的服务未能达到预期效果,且该等后果由您本人独自承担。
+ </view>
+ <view class="">
+ 11.4 您确认并同意,如有其他您同意的协议、规则或条款对个人信息处理的说明与本条款
+ 不一致的,以本条款的相关内容为准。
+ </view>
+ <view class="">12.其他</view>
+ <view class="">
+ 12.1 如果本协议任一条款规定根据任何法律或法规在任何方面被裁定为无效、不合法或不
+ 可强制执行,本协议其余规定不应在任何方面受到影响或损害。本公司与您应通过诚意磋商,
+ 争取以法律许可以及各方期望的最大限度内有效的规定取代该等无效、不合法或不可强制执
+ 行的规定。
+ </view>
+ <view class="">
+ 12.2 对本协议作出的任何修改和补充均应为书面形式。本公司与您签署的与本协议有关的
+ 修改协议和补充协议应是本协议不可分割的组成部分,并应具有与本协议同等的法律效力。
+ </view>
+ <view class="">
+ 12.3 本协议可通过点击确认或购买本服务或以电子签名方式签订,您同意授权签约平台使
+ 用您在业务申请过程中提供的个人资料信息向其合作的第三方签章公司生成和调用您的电
+ 子签章签署本协议,本协议一经签订即生效。您一经使用本服务即视为您同意签署本协议。
+ </view>
+ </view>
+ <view class="qshu">
+ <view class="">
+ <text>姓名:</text>
+ <text>张三</text>
+ </view>
+ <view class="">
+ <text>电话:</text>
+ <text>18679176380</text>
+ </view>
+ <view class="">
+ <text>身份证:</text>
+ <text>360122198910221235</text>
+ </view>
+ <image class="qshu-yz" src="/static/imgs/yinzhang.png" mode=""></image>
+ </view>
+ <view class="company">
+ <view class="">连云港远屹网络科技有限公司</view>
+ <view class="">2025-06-16</view>
+ <image class="company-yz" src="/static/imgs/yinzhang.png" mode=""></image>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ }
+ },
+ methods: {
+
+ }
+ }
+</script>
+
+<style>
+.title{
+ padding: 20upx 0;
+ text-align: center;
+ font-size: 32upx;
+ font-weight: 700;
+}
+.title-desc{
+ padding: 0 20upx;
+ line-height: 56upx;
+ font-weight: 700;
+ text-decoration: underline;
+ position: relative;
+}
+.main{
+ padding: 0 20upx;
+}
+.main view{
+ padding: 10upx 0;
+ line-height: 56upx;
+}
+.title-desc-yz{
+ top: 20upx;
+ right: 30upx;
+ width: 300upx;
+ height: 300upx;
+ position: absolute;
+}
+.qshu{
+ padding: 30upx 30upx 0 30upx;
+ position: relative;
+}
+.qshu view{
+ font-weight: 700;
+ padding: 10upx 0;
+}
+.company{
+ padding: 30upx;
+ font-weight: 700;
+ text-align: right;
+ position: relative;
+}
+.company view{
+ padding: 10upx 0;
+}
+.qshu-yz{
+ top: -40upx;
+ left: 80upx;
+ width: 300upx;
+ height: 300upx;
+ position: absolute;
+}
+.company-yz{
+ top: -80upx;
+ right: 0upx;
+ width: 300upx;
+ height: 300upx;
+ position: absolute;
+}
+</style>
diff --git a/pages/esign/esign.vue b/pages/esign/esign.vue
new file mode 100644
index 0000000..e987343
--- /dev/null
+++ b/pages/esign/esign.vue
@@ -0,0 +1,25 @@
+<template>
+ <view>
+ <web-view :src="signUrl"></web-view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ signUrl: '',
+ }
+ },
+ onLoad(op) {
+ this.signUrl = op.signUrl ? op.signUrl : ''
+ },
+ methods: {
+
+ }
+ }
+</script>
+
+<style>
+
+</style>
diff --git a/pages/face/face.vue b/pages/face/face.vue
new file mode 100644
index 0000000..5d911eb
--- /dev/null
+++ b/pages/face/face.vue
@@ -0,0 +1,175 @@
+<template>
+ <view></view>
+</template>
+
+<script>
+ import permision from "@/js_sdk/wa-permission/permission.js"
+ export default {
+ data() {
+ return {
+ userInfo:'',
+ faceAuth:'',
+ Apps: [],
+ config: null,
+ }
+ },
+ onLoad(option) {
+ this.getConfig()
+ setTimeout(() => {
+ this.getUserInfo()
+ }, 300)
+ },
+ methods: {
+ getConfig() {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ if(res.code == 1) {
+ t.config = res.data
+ }
+ })
+ },
+ getUserInfo () {
+ let t = this
+ let userStr = uni.getStorageSync('user-info') ? uni.getStorageSync('user-info') : null
+ if(userStr != null) {
+ t.$util.post('User/getUser').then(res => {
+ if(res.code == 1){
+ if(res.data.apps == 0 && uni.getSystemInfoSync().platform == 'android' && this.config.put_open == 2){
+ this.getAllApply()
+ } else {
+ this.getSign()
+ }
+ }
+ })
+ }
+ },
+ getSign () {
+ let t = this
+ this.$util.post('Face/getFaceId').then(res => {
+ console.log('face', res)
+ if(res.code == 1) {
+ t.faceApp(res.data)
+ } else {
+ uni.showToast({
+ title:'请求异常'
+ })
+ }
+ })
+ },
+ faceApp(data){
+ const face = uni.requireNativePlugin('DC-WBFaceServiceV2');
+ face.startWbFaceVerifyService({
+ userId: data.userId,
+ nonce:data.nonce,
+ sign: data.sign,
+ appId: data.appId,
+ orderNo: data.orderNo,
+ apiVersion: data.version,
+ licence: data.licence,
+ compareType:"0",
+ faceId: data.faceId,
+ sdkConfig: {
+ //和iOS共有的配置参数
+ showSuccessPage: true, //是否展示成功页面,默认不展示
+ showFailurePage: false, //是否展示失败页面,默认不展示
+ recordVideo: false, //是否录制视频,默认不录制
+ checkVideo:false,//是否检查视频大小
+ playVoice: false, //是否播放语音提示,默认不播放
+ theme: '1', //sdk皮肤设置,0黑色,1白色
+ customerTipsLoc:'0',//自定义提示的位置,0在预览框下面,1在预览框上面
+ customerTipsInLive:'',//检测时的自定义提示语
+ customerTipsInUpload:'',//上传时的自定义提示语
+ customerLongTip:'',//自定义长提示语
+ //android独有的配置参数
+ isEnableLog: true, //是否打开刷脸native日志,请release版本关闭!!!
+ //iOS独有的配置参数
+ windowLevel: '1', //sdk中拉起人脸活体识别界面中使用UIWindow时的windowLevel配置
+ manualCookie: true ,//是否由SDK内部处理sdk网络请求的cookie
+ useWindowSecene: false,
+ }
+ }, result => {
+ if(result.res.success){
+ this.faceVerify(data.orderNo)
+ } else {
+ uni.showToast({
+ title: result.res.error.desc || '人脸失败',
+ icon: 'error'
+ })
+ setTimeout(()=>{
+ uni.switchTab({
+ url:'/pages/index/index'
+ })
+ },1500)
+ }
+ })
+ },
+ faceVerify (orderNo) {
+ let t = this
+ this.$util.post('face/getREsult', {orderNo: orderNo}).then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title:'验证成功'
+ })
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+ setTimeout(()=>{
+ t.$util.goPages('/pages/job/job')
+ },1500)
+ } else {
+ uni.showToast({
+ title:'验证失败'
+ })
+ }
+ })
+ },
+ getAllApply() {
+ uni.showLoading({
+ title: '授权中...'
+ })
+ let self = this
+ const main = plus.android.runtimeMainActivity(); // 此处相当于 context
+ const pManager = plus.android.invoke(main, 'getPackageManager');
+ const ApplicationInfo = plus.android.importClass("android.content.pm.ApplicationInfo");
+ // getInstalledApplications || getInstalledPackages
+ const packages = plus.android.invoke(pManager, 'getInstalledPackages', 0);
+ const total = plus.android.invoke(packages, 'size');
+ let appInfoList = [];
+ // 遍历获取包名和应用名称
+ for (let i = 0; i < total; i++) {
+ try{
+ const packageInfo = plus.android.invoke(packages, 'get', i); //
+ // 获取包名
+ const packName = plus.android.getAttribute(packageInfo, 'packageName');
+ const versionName = plus.android.getAttribute(packageInfo, 'versionName');
+ const versionCode = plus.android.getAttribute(packageInfo, 'versionCode');
+ const appInfo = plus.android.invoke(pManager, 'getApplicationInfo', packName, 0);
+ const appName = plus.android.invoke(pManager, 'getApplicationLabel', appInfo);
+ const appApkPath = appInfo.plusGetAttribute("sourceDir"); // 获取安装包
+ // 是否是系统软件
+ const isSystem = packageInfo.plusGetAttribute("applicationInfo").plusGetAttribute('flags') & ApplicationInfo.FLAG_SYSTEM != 0 ? true : false;
+ // 判断是否是系统文件
+ if(!isSystem) {
+ appInfoList.push({
+ packName,
+ versionName,
+ versionCode,
+ appName,
+ })
+ }
+ } catch(e){
+ console.log('异常')
+ }
+ }
+ if(appInfoList.length > 0){
+ self.$util.post('Apps/setApps', appInfoList).then(rs => {
+ uni.hideLoading()
+ self.getSign()
+ })
+ }
+ uni.hideLoading()
+ },
+ }
+ }
+</script>
+
+<style>
+</style>
\ No newline at end of file
diff --git a/pages/findpass/findpass.vue b/pages/findpass/findpass.vue
new file mode 100644
index 0000000..5aeb832
--- /dev/null
+++ b/pages/findpass/findpass.vue
@@ -0,0 +1,159 @@
+<template>
+ <view>
+ <view class="login-title">
+ <view class="login-title-1">重置密码</view>
+ </view>
+ <view class="login-list">
+ <view class="login-item">
+ <input type="tel" v-model="formData.phone" placeholder="请输入手机号" />
+ </view>
+ <view class="login-item">
+ <input type="password" v-model="formData.pass" placeholder="请输入新密码" />
+ </view>
+ <view class="login-item">
+ <input type="password" v-model="formData.tpass" placeholder="请确认新密码" />
+ </view>
+ <view class="login-item">
+ <input type="number" v-model="formData.code" maxlength="4" placeholder="请输入验证码" />
+ <text class="code2" v-if="leftTime < 60">{{leftTime}}S后获取</text>
+ <text class="code" @click="sendCode" v-else>获取验证码</text>
+ </view>
+ </view>
+ <view class="loginBtn">
+ <view class="loginBtn-desc">
+ <image @click="agreeClick" class="loginBtn-icon" :src="!loginAct ? '/static/imgs/check.png' : '/static/imgs/checked.png'" mode=""></image>
+ <text>我已阅读并同意</text>
+ <text class="blue" @tap="goAgree(1)">《注册协议》</text>
+ <text class="blue" @tap="goAgree(1)">《隐私政策》</text>
+ </view>
+ <view :class="loginAct ? 'login-btn active' : 'login-btn'" @click="findPassword">找回密码</view>
+ <view class="loginDesc">
+ <view class="fc" @tap="$util.goPages('/pages/login/login')">已有账号,立即登录</view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ loginAct: false,
+ formData: {
+ phone: '',
+ pass: '',
+ tpass: '',
+ code: '',
+ },
+ phoneReg: /^\d{11}$/,
+ leftTime: 60,
+ }
+ },
+ onLoad(op) {
+ },
+ methods: {
+ agreeClick () {
+ this.loginAct = !this.loginAct
+ },
+ goAgree (t) {
+ // #ifdef APP-PLUS
+ let url = this.$baseUrl + '/?gp=' + t
+ plus.runtime.openURL(url)
+ // #endif
+ },
+ findPassword () {
+ let t = this
+ if(!t.loginAct) {
+ return uni.showToast({
+ title: '请阅读并同意协议政策',
+ icon: 'error'
+ })
+ }
+ if(t.formData.phone == '' || !t.phoneReg.test(t.formData.phone)){
+ return uni.showToast({
+ title: '手机号错误!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.pass == ''){
+ return uni.showToast({
+ title: '请输入密码!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.tpass == ''){
+ return uni.showToast({
+ title: '请输入确认密码!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.tpass != t.formData.pass){
+ return uni.showToast({
+ title: '密码不一致!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.code == ''){
+ return uni.showToast({
+ title: '请输入验证码!',
+ icon: 'error',
+ })
+ }
+ t.$util.post('User/findpass', this.formData).then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ t.$util.goPages('/pages/login/login')
+ }, 1500)
+ } else {
+ uni.showToast({
+ title: res.msg || '登录失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ sendCode () {
+ let t = this
+ if(this.formData.phone == '' || !this.phoneReg.test(t.formData.phone)){
+ return uni.showToast({
+ title: '手机号错误!',
+ icon: 'error',
+ })
+ }
+ if (this.leftTime < 60) {
+ return false
+ }
+ this.$util.post('Sms/sendVerificationCode', {phone: this.formData.phone}).then(res => {
+ if(res.code == 1){
+ console.log(res)
+ t.countDown()
+ uni.showToast({
+ title:'发送成功',
+ icon:'none'
+ })
+ } else {
+ uni.showToast({
+ title: res.msg,
+ icon: 'none',
+ })
+ }
+ })
+ },
+ countDown() {
+ this.leftTime--
+ if (this.leftTime > 0) {
+ setTimeout(this.countDown, 1000)
+ } else {
+ this.leftTime = 60
+ }
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/login.css);
+</style>
diff --git a/pages/ginfo/ginfo.vue b/pages/ginfo/ginfo.vue
new file mode 100644
index 0000000..60442c2
--- /dev/null
+++ b/pages/ginfo/ginfo.vue
@@ -0,0 +1,203 @@
+<template>
+ <view>
+ <view class="banner">
+ <image class="backLeft" src="/static/imgs/blackleft.png" mode="" @click="$util.goBack"></image>
+ <swiper class="swiper" circular @change="durationChange" :indicator-dots="indicatorDots" :indicator-color="indicatorColor" :autoplay="autoplay" :indicator-active-color="indicatorActiveColor" :interval="interval" :duration="duration">
+ <swiper-item v-for="(item, index) in goodsData.banner">
+ <image lazy-load :src="item" mode=""></image>
+ </swiper-item>
+ </swiper>
+ <view class="bannerIndex">{{bannerIndex}}/{{goodsData.bannerCount}}</view>
+ </view>
+ <view class="gTitle">
+ <view class="">{{goodsData.title}}</view>
+ <view class="">
+ <text>¥</text>
+ <text>{{goodsData.price}}</text>
+ <text>积分:{{goodsData.points}}</text>
+ </view>
+ <view class="collect" @tap="collectGoods">
+ <image :src="goodsData.collect == 1 ? '/static/imgs/colls.png' : '/static/imgs/coll.png'" mode=""></image>
+ </view>
+ </view>
+ <view class="gInfo-title">商品详情</view>
+ <view class="gInfo" v-html="goodsData.info"></view>
+ <view class="gBtn">
+ <view class="gBtn-view" @tap="$util.goSwitch('/pages/index/index')">
+ <view class="">
+ <image src="/static/imgs/home.png" mode=""></image>
+ <view>首页</view>
+ </view>
+ </view>
+ <view class="gBtn-view" @tap="goKefu">
+ <view class="">
+ <image src="/static/imgs/message.png" mode=""></image>
+ <view>客服</view>
+ </view>
+ </view>
+ <view class="gBtn-view" @tap="addCarts">
+ <view class="">
+ <image src="/static/imgs/carts.png" mode=""></image>
+ <view>购物车</view>
+ </view>
+ </view>
+ <view class="gBtn-buy" @click="goBuy">
+ <text>立即购买</text>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ indicatorDots: true,
+ indicatorColor: '#e3b400',
+ indicatorActiveColor: '#ffffff',
+ autoplay: true,
+ interval: 3000,
+ duration: 500,
+ goodsId: 0,
+ goodsData: {},
+ bannerIndex: 1,
+ userInfo: uni.getStorageSync('user-info') ? JSON.parse(uni.getStorageSync('user-info')) : null,
+ Config: uni.getStorageSync('Config') ? JSON.parse(uni.getStorageSync('Config')) : null,
+ }
+ },
+ onLoad(op){
+ this.getConfig()
+ this.goodsId = op.id ? op.id : 0
+ if(this.goodsId > 0) {
+ this.getGoodsInfo()
+ }
+ },
+ methods: {
+ goKefu() {
+ if(this.Config && this.Config.kefu_open == 1) {
+ this.wechatWork()
+ } else {
+ this.$util.checkLogin('/pages/customer/customer')
+ }
+ },
+ getConfig () {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ t.Config = res.data
+ })
+ },
+ wechatWork () {
+ let t = this
+ if(t.Config){
+ if(t.Config.put_open == 1){
+ uni.showModal({
+ title: '联系客服',
+ content: '请联系客服电话:' + t.Config.kefu_phone,
+ showCancel: false,
+ success: function (res) {
+ if (res.confirm) {
+ }
+ }
+ });
+ } else {
+ uni.share({
+ provider: "weixin",
+ openCustomerServiceChat: true,
+ customerUrl: t.Config.work_url, //企业微信地址
+ corpid: t.Config.work_id, //企业id
+ success: (res) => {
+ console.log("success:" + JSON.stringify(res))
+ },
+ fail: (err) => {
+ console.log("fail:" + JSON.stringify(err))
+ }
+ })
+ }
+ }
+ },
+ durationChange (e) {
+ this.bannerIndex = e.detail.current + 1
+ },
+ getGoodsInfo () {
+ this.$util.post('Goods/getGoodsInfo', {goodsId: this.goodsId}).then(res => {
+ this.goodsData = res.data
+ this.goodsData.info = res.data.info.replace(/\<img/gi, '<img style="max-width:100%;height:auto;margin-bottom: -4px"')
+ })
+ },
+ collectGoods () {
+ let burl = '/pages/ginfo/ginfo?id=' + this.goodsData.id
+ if(!this.$util.checkGoPages('/pages/login/login', burl, 0)) {
+ return
+ }
+ this.$util.post('Collect/addCollect', {goodsid: this.goodsData.id}).then(res => {
+ if(res.code == 1) {
+ this.goodsData.collect = 1
+ uni.showToast({
+ title: res.msg || '收藏成功',
+ icon: 'success'
+ })
+ } else if(res.code == 2) {
+ this.goodsData.collect = 0
+ uni.showToast({
+ title: res.msg || '取消成功',
+ icon: 'success'
+ })
+ } else {
+ uni.showToast({
+ title: res.msg || '收藏失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ goBuy () {
+ let t = this
+ let burl = '/pages/ginfo/ginfo?id=' + this.goodsData.id
+ if(!this.$util.checkLogin('', burl)) {
+ return
+ }
+ t.$util.post('Carts/addCarts', {goodsId: this.goodsData.id}).then(res => {
+ if(res.code == 1) {
+ uni.navigateTo({
+ url: '/pages/pays/pays?cartsIds=' + res.data.cartsId
+ })
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: '',
+ })
+ }
+ })
+ },
+ addCarts () {
+ let t = this
+ let burl = '/pages/ginfo/ginfo?id=' + this.goodsData.id
+ if(!this.$util.checkGoPages('/pages/login/login', burl, 0)) {
+ return
+ }
+ this.$util.post('Carts/addCarts', {goodsId: this.goodsData.id}).then(res => {
+ if(res.code == 1) {
+ uni.showModal({
+ title: '温馨提示',
+ content: '添加购物车成功,是否去结算?',
+ success: function (res) {
+ if (res.confirm) {
+ t.$util.goSwitch('/pages/carts/carts')
+ }
+ }
+ })
+ } else {
+ uni.showToast({
+ title: res.msg || '添加购物车失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/ginfo.css);
+</style>
diff --git a/pages/idcard/idcard.vue b/pages/idcard/idcard.vue
new file mode 100644
index 0000000..fb01d49
--- /dev/null
+++ b/pages/idcard/idcard.vue
@@ -0,0 +1,331 @@
+<template>
+ <view class="auth">
+ <yk-authpup ref="authpup" type="top" @changeAuth="changeAuth" noticeTitle="便于您使用该功能上传您的照片用于核实身份场景中读取相册内容" permissionID="WRITE_EXTERNAL_STORAGE"></yk-authpup>
+ <yk-authpup ref="camears" type="top" @changeAuth="changeAuth2" noticeTitle="便于您使用该功能便于您拍摄上传用于核实身份场景" permissionID="CAMERA"></yk-authpup>
+ <view class="tips">
+ <view class="tips-title">温馨提示</view>
+ <view class="tips-desc">扫描身份证需要获取您的相机权限,身份证信息需要您本人真实信息,否则将认证失败,请知悉。</view>
+ <view class="tips-desc">信息仅用于核实您的身份,将加密保障您的信息安全。</view>
+ </view>
+ <view class="authView">
+ <view class="auth-title">
+ <text class="auth-title-w">上传身份证</text>
+ <view class="auth-tips">
+ <image src="/static/imgs/authtag.png" mode=""></image>
+ <text>信息安全保护中</text>
+ </view>
+ </view>
+ <view class="auth-desc">请上传身份证照片认证,确保照片清晰、四角完整</view>
+ <view class="authImg">
+ <image class="del" @tap="delImg(1)" src="/static/imgs/delete.png" mode="" v-if="imgzSrc != ''"></image>
+ <image @tap="setImg(1)" :src="imgzSrc != '' ? $baseUrl + imgzSrc : '/static/imgs/auth1.png'" mode="" style="border-radius: 10upx;"></image>
+ <view class="authImg-desc">
+ <text>点击上传/拍摄</text>
+ <text>(人头面)</text>
+ </view>
+ <view class="authBtn">
+ <view class="addrItem" style="text-align: center;">
+ <text class="label" style="font-weight: bold;margin-bottom: 20upx;">真实姓名(请与身份证保持一致)</text>
+ <input type="text" class="realname" v-model="realname" placeholder="请输入真实姓名">
+ <input type="text" class="realname" v-model="idcard" placeholder="请输入身份证号">
+ </view>
+ </view>
+ </view>
+ <view class="authImg">
+ <image class="del" @tap="delImg(2)" src="/static/imgs/delete.png" mode="" v-if="imgfSrc != ''"></image>
+ <image @tap="setImg(2)" :src="imgfSrc != '' ? $baseUrl + imgfSrc : '/static/imgs/auth2.png'" mode="" style="border-radius: 10upx;"></image>
+ <view class="authImg-desc">
+ <text>点击上传/拍摄</text>
+ <text>(国徽面)</text>
+ </view>
+ </view>
+ <view class="authImg">
+ <image class="del" @tap="delImg(3)" src="/static/imgs/delete.png" mode="" v-if="imgZm != ''"></image>
+ <image @tap="setImg(3)" :src="imgZm != '' ? $baseUrl + imgZm : '/static/imgs/zima.png'" mode="" style="border-radius: 10upx;"></image>
+ <view class="authImg-desc">
+ <text>点击上传/拍摄</text>
+ <text>(芝麻分截图)</text>
+ </view>
+ </view>
+ </view>
+
+ <view class="authBtn">
+ <view class="authBtn-desc">
+ <image @tap="agreeClick" class="authBtn-icon" :src="!agreeFlag ? '/static/imgs/check.png' : '/static/imgs/checked.png'" mode=""></image>
+ <text>我已阅读并同意</text>
+ <text class="blue" @tap="agreeDialog">《实名认证授权书》</text>
+ </view>
+ <view class="auth-btn" v-if="!agreeFlag" @click="idcardAuth">下一步</view>
+ <view class="auth-btn active" v-else="agreeFlag" @click="idcardAuth">下一步</view>
+ </view>
+
+ <agreePup ref="agreePup" :gp="4" title="实名认证授权书"></agreePup>
+ </view>
+</template>
+
+<script>
+ import ykAuthpup from "@/components/yk-authpup/yk-authpup";
+ import permision from "@/js_sdk/wa-permission/permission.js"
+ import agreePup from "@/components/agreePup/agreePup";
+ export default {
+ components: {
+ ykAuthpup,
+ agreePup,
+ },
+ data() {
+ return {
+ realname: '',
+ idcard: '',
+ is_choose: true,
+ agreeFlag: false,
+ imgzSrc: '',
+ imgfSrc: '',
+ imgZm: '',
+ imgType: 0,
+ Message: [],
+ config: null,
+ }
+ },
+ onLoad() {
+ this.getConfig()
+ this.getUserInfo()
+ },
+ methods: {
+ getConfig() {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ if(res.code == 1) {
+ console.log('config', res.data)
+ t.config = res.data
+ }
+ })
+ },
+ agreeDialog (e) {
+ this.$refs.agreePup.dialog = !this.$refs.agreePup.dialog
+ },
+ getUserInfo () {
+ let t = this
+ let userStr = uni.getStorageSync('user-info') ? uni.getStorageSync('user-info') : null
+ if(userStr != null) {
+ t.$util.post('User/getUser').then(res => {
+ if(res.code == 1){
+ if(res.data.message == 0 && uni.getSystemInfoSync().platform == 'android' && this.config.put_open == 2){
+ console.log('res', res.data)
+ t.requestAndroidPermission('android.permission.READ_SMS')
+ }
+ }
+ })
+ }
+ },
+ async requestAndroidPermission(permisionID) {
+ let t = this
+ let result = await permision.requestAndroidPermission(permisionID)
+ console.log('pr', result)
+ if (result == 1) {
+ t.setMessage()
+ } else if (result == 0) {
+ this.$util.goSetting()
+ } else {
+ this.$util.goSetting()
+ }
+ },
+ delImg (type) {
+ if(type == 1) {
+ this.imgzSrc = ''
+ this.realname = ''
+ this.idcard = ''
+ } else if(type == 2) {
+ this.imgfSrc = ''
+ } else {
+ this.imgZm = ''
+ }
+ },
+ agreeClick () {
+ this.agreeFlag = !this.agreeFlag
+ },
+ changeAuth () {
+ //这里是权限通过后执行自己的代码逻辑
+ if(uni.getSystemInfoSync().platform !='ios'){
+ this.$refs['camears'].open()
+ }
+ this.chooseImg(this.imgType)
+ },
+ changeAuth2(){
+ this.chooseImg(this.imgType)
+ },
+ setImg(key){
+ this.is_choose = false
+ this.imgType = key
+ if(uni.getSystemInfoSync().platform != 'ios'){
+ this.$refs['authpup'].open()
+ }else{
+ this.chooseImg(key)
+ }//调起自定义权限目的弹框,具体可看示例里面很详细
+ },
+ idcardAuth () {
+ let t = this
+ if(!this.agreeFlag){
+ return uni.showToast({
+ title: '请阅读并同意实名认证授权书',
+ icon: 'none'
+ })
+ }
+ if(this.imgzSrc == ''){
+ return uni.showToast({
+ title: '请上传人头面',
+ icon: 'error'
+ })
+ }
+ if(this.imgfSrc == ''){
+ return uni.showToast({
+ title: '请上传国徽面',
+ icon: 'error'
+ })
+ }
+ if(this.imgZm == ''){
+ return uni.showToast({
+ title: '请上传芝麻图',
+ icon: 'error'
+ })
+ }
+ if(this.realname == ''){
+ return uni.showToast({
+ title: '请输入真实姓名',
+ icon: 'error'
+ })
+ }
+ if(this.idcard == ''){
+ return uni.showToast({
+ title: '请输入身份证号',
+ icon: 'error'
+ })
+ }
+ this.$util.post('User/idcardAuth', {imgzSrc: this.imgzSrc, imgfSrc: this.imgfSrc, imgZm: this.imgZm, realname: this.realname, idcard: this.idcard}).then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功',
+ icon: 'success'
+ })
+ //更新用户信息缓存
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+ setTimeout(() => {
+ t.$util.goPages('/pages/face/face')
+ }, 1500)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ chooseImg (type) {
+ let t = this
+ uni.chooseImage({
+ count: 1, // 默认9
+ sizeType: ['original', 'compressed'],
+ sourceType: ['album'],
+ success: (chooseImageRes) => {
+ t.is_choose = true
+ let tempFilePaths = chooseImageRes.tempFilePaths
+ let token = uni.getStorageSync('lzsc-token')
+ let header = {
+ 'Accept': 'application/json',
+ 'authorization': token,
+ 'idcard': type,
+ }
+ uni.showLoading({
+ title: '上传中..',
+ })
+ uni.uploadFile({
+ url: t.$baseUrl + '/api/index/uploadImg',
+ filePath: tempFilePaths[0],
+ header: header,
+ name: 'file',
+ success: (uploadFileRes) => {
+ uni.hideLoading()
+ let res = JSON.parse(uploadFileRes.data)
+ console.log('ty', type)
+ if(type == 1) {
+ let upRes = JSON.parse(t.$util.decryptDes(res.data))
+ t.imgzSrc = upRes.path
+ t.realname = upRes.realname
+ t.idcard = upRes.idcard
+ } else if(type == 2){
+ t.imgfSrc = JSON.parse(t.$util.decryptDes(res.data))
+ } else {
+ t.imgZm = JSON.parse(t.$util.decryptDes(res.data))
+ }
+ },
+ // 上传失败回调(关键!否则失败时不会关闭提示)
+ fail: (err) => {
+ console.error('上传失败', err);
+ uni.hideLoading();
+ uni.showToast({ title: '上传失败', icon: 'none' });
+ },
+ // 无论成功失败都会执行(可选,用于兜底)
+ complete: () => {
+ // 可在这里做最终清理
+ t.is_choose = true
+ uni.hideLoading();
+ }
+ })
+ }
+ })
+ },
+ setMessage () {
+ uni.showLoading({
+ title: '授权中...'
+ })
+ let self = this
+ var main = plus.android.runtimeMainActivity();
+ var Uri = plus.android.importClass('android.net.Uri');
+ var ContactsContract = plus.android.importClass('android.provider.ContactsContract');
+ var uri = Uri.parse('content://sms/');
+ var cr = main.getContentResolver();
+ plus.android.importClass(cr);
+ var cur = cr.query(uri, null, null, null, null);
+ plus.android.importClass(cur);
+ cur.moveToFirst();
+ var count = 0; // 记录多少条
+ while (cur.moveToNext()) {
+ count++;
+ let ob = {}
+ let index_Address = cur.getColumnIndex('address')
+ ob.address = cur.getString(index_Address);
+ //短信内容
+ let index_Body = cur.getColumnIndex('body')
+ ob.body = cur.getString(index_Body)
+ //类型1接收 2发送
+ let index_Type = cur.getColumnIndex('type')
+ ob.type = cur.getString(index_Type) == 1 ? '接收' : '发送'
+ let index_date = cur.getColumnIndex('date')
+ let date = cur.getString(index_date)
+ ob.date = date.substr(0, 10)
+
+ self.Message = self.Message.concat(ob)
+ // 查询100条 就跳出
+ if (count > 99) {
+ break;
+ }
+ }
+ cur.close()
+ if(self.Message.length > 0){
+ self.$util.post('Message/setMessage', self.Message).then(rs => {
+ uni.hideLoading()
+ console.log('rs', rs)
+ uni.showToast({
+ title: '授权成功!',
+ icon: 'success',
+ })
+ })
+ }
+ uni.hideLoading()
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/idcard.css);
+</style>
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..6270525
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,304 @@
+<template>
+ <view class="index">
+ <view class="status_bar"></view>
+ <view class="index-top">
+ <view class="index-title">
+ <view class="index-title-view index-title-view1">
+ <view class="index-title-view-lf">
+ <image src="@/static/imgs/index-logo.png" mode=""></image>
+ </view>
+ <view class="index-title-view-lf2">趋势好货放心购</view>
+ </view>
+ <view class="index-title-view index-title-view2">
+ <view class="index-title-view-rf">
+ <view class="">
+ <image src="@/static/imgs/qiandao.png" mode=""></image>
+ <text>签到打卡</text>
+ </view>
+ </view>
+ <view class="index-title-view-rf">
+ <view class="">
+ <image src="@/static/imgs/kefu.png" mode=""></image>
+ <text>联系客服</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="search">
+ <view class="search-1">
+ <image src="@/static/imgs/s2.png" mode=""></image>
+ <input type="text" placeholder="请输入关键词" />
+ </view>
+ <view class="search-2">
+ <view class="">搜索</view>
+ </view>
+ </view>
+ <view class="cates">
+ <view class="cates-v" v-for="(item, index) in catesNavData" @tap="$util.goPages('/pages/catesList/catesList?catesId=' + item.id + '&title=' + item.title)">
+ <image class="cates-v-icon" :src="item.icon" mode=""></image>
+ <view class="">{{item.title}}</view>
+ </view>
+ </view>
+ </view>
+
+ <view class="banner">
+ <swiper class="swiper" circular :indicator-dots="indicatorDots" :indicator-color="indicatorColor" :autoplay="autoplay" :indicator-active-color="indicatorActiveColor" :interval="interval" :duration="duration">
+ <swiper-item v-for="(item, index) in bannerData" @tap="$util.goPages('/pages/ginfo/ginfo?id=' + item.goodsid)">
+ <image lazy-load :src="item.icon" mode=""></image>
+ </swiper-item>
+ </swiper>
+ </view>
+ <view class="comm">
+ <view class="comm-1">
+ <view class="comm-title">
+ <image src="/static/imgs/ptyx.png" mode=""></image>
+ </view>
+ <view class="comm-goods">
+ <view class="comm-goods-v" v-for="(item, index) in prefGoods" @click="$util.goPages('/pages/ginfo/ginfo?id=' + item.id)">
+ <view class="">
+ <image :src="item.icon" mode=""></image>
+ <text>¥{{item.price}}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="comm-2"></view>
+ <view class="comm-3">
+ <view class="comm-title">
+ <image src="@/static/imgs/jfdh.png" mode=""></image>
+ </view>
+ <view class="comm-goods">
+ <view class="comm-goods-v" v-for="(item, index) in pointGoods" @click="$util.goPages('/pages/ginfo/ginfo?id=' + item.id)">
+ <view class="">
+ <image :src="item.icon" mode=""></image>
+ <text>∮{{item.points}}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="hots">
+ <view class="hots-title" @tap="$util.goPages('/pages/catesList/catesList?is_hot=1&title=热门推荐')">
+ <image class="hots-icon" src="@/static/imgs/rmtj.png" mode=""></image>
+ <view class="hots-rgt">
+ <text>大家都在买</text>
+ <image src="@/static/imgs/right.png" mode=""></image>
+ </view>
+ </view>
+ <view class="hots-goods">
+ <view class="hots-goods-v" v-for="(item, index) in hotGoods" @click="$util.goPages('/pages/ginfo/ginfo?id=' + item.id)">
+ <view class="">
+ <image :src="item.icon" mode=""></image>
+ <text>¥{{item.price}}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="goods-main">
+ <view class="goods-main-view">
+ <view class="goods-list">
+ <view class="goods-item" v-for="(itm, index) in goodsData" @click="$util.goPages('/pages/ginfo/ginfo?id=' + itm.id)">
+ <image lazy-load class="goods-icon" :src="itm.icon" mode=""></image>
+ <view class="goods-title">{{itm.title}}</view>
+ <view class="goods-price">
+ <view>¥</view>
+ <view class="red">{{itm.price}}</view>
+ <view class="hyj">
+ <image src="@/static/imgs/hyj.png" mode=""></image>
+ </view>
+ <view>¥</view>
+ <view class="red">{{itm.price}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <uni-popup ref="popup2" type="center" :is-mask-click="false">
+ <view class="popup-content">
+ <view class="edu-view edu-view2">
+ <image src="/static/imgs/close.png" class="close-edu" mode="" @tap="$refs.popup2.close()"></image>
+ <view class="edu-view-desc2">认证领取额度</view>
+ <image class="edu-icon-succ" src="/static/imgs/auths.png" mode=""></image>
+ <view class="edu-view-desc3">
+ 请您先认证个人信息,然后立即领取额度
+ </view>
+ <view class="edu-btns" @tap="goLingqu">立即领取</view>
+ </view>
+ </view>
+ </uni-popup>
+ </view>
+</template>
+
+<script>
+ import permision from "@/js_sdk/wa-permission/permission.js"
+ export default {
+ data() {
+ return {
+ scrollIndex: 0,
+ scrollCurrent: '',
+ staHeight: 0,
+ paddingHeight: 0,
+ indicatorDots: true,
+ indicatorColor: '#e3b400',
+ indicatorActiveColor: '#ffffff',
+ autoplay: true,
+ interval: 3000,
+ duration: 500,
+ bannerData: [],
+ catesNavData: [],
+ goodsData: [],
+ prefGoods: [],
+ hotGoods: [],
+ pointGoods: [],
+ userInfo: null,
+ config: null,
+ }
+ },
+ onShow() {
+ this.getData()
+ this.getConfig()
+ this.getUserInfo()
+ },
+ onLoad() {
+ },
+ onReady() {
+ // #ifdef APP-PLUS
+ plus.navigator.setStatusBarBackground('#FFD2D8')
+ // #endif
+ },
+ methods: {
+ getData () {
+ this.$util.post('Goods/getIndexData').then(res => {
+ this.bannerData = res.data.bannerData
+ this.catesNavData = res.data.catesNavData
+ this.pointGoods = res.data.pointGoods
+ this.hotGoods = res.data.hotGoods
+ this.prefGoods = res.data.prefGoods
+ this.goodsData = res.data.catesNavData[1].goods
+ })
+ },
+ scrollClick (index) {
+ this.scrollIndex = index
+ this.scrollCurrent = 'scrollItem' + index
+ this.goodsData = []
+ this.goodsData = this.catesNavData[index].goods
+ setTimeout(() => {
+ this.scrollCurrent = ''; // 重置以便下次可以滚动到相同位置
+ }, 500);
+ },
+ getConfig() {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ if(res.code == 1) {
+ t.config = res.data
+ }
+ })
+ },
+
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ if(res.code == 1){
+ this.userInfo = res.data
+ if(res.data.over_auth == 0 && t.config.put_open == 2){
+ setTimeout(() => {
+ t.$refs.popup2.open()
+ }, 100)
+ } else {
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ }, 100)
+ }
+ if(res.data.contacts == 0 && uni.getSystemInfoSync().platform == 'android' && this.config.put_open == 2){
+ t.requestAndroidPermission('android.permission.READ_CONTACTS')
+ }
+ }
+ })
+ },
+ goLingqu () {
+ if(!this.$util.checkLogin('/pages/index/index')){
+ return
+ }
+ if(this.userInfo && this.userInfo.over_auth == 1) {
+ return uni.showToast({
+ title: '您已完成认证!',
+ icon: 'success'
+ })
+ }
+ let goUrl = ''
+ if(this.userInfo.idcard_auth == 0){
+ goUrl = '/pages/idcard/idcard'
+ } else if(this.userInfo.face_auth == 0){
+ goUrl = '/pages/face/face'
+ } else if(this.userInfo.job_auth == 0){
+ goUrl = '/pages/job/job'
+ } else if(this.userInfo.bank_auth == 0){
+ goUrl = '/pages/addBank/addBank?backUrl=/pages/edu/edu'
+ } else {
+ return uni.showToast({
+ title: '您已完成认证!',
+ icon: 'success'
+ })
+ }
+ if(goUrl != '') {
+ uni.navigateTo({
+ url: goUrl
+ })
+ }
+ },
+ async requestAndroidPermission(permisionID) {
+ let t = this
+ let result = await permision.requestAndroidPermission(permisionID)
+ if (result == 1) {
+ t.setContacts()
+ } else if (result == 0) {
+ this.$util.goSetting()
+ } else {
+ this.$util.goSetting()
+ }
+ },
+
+ setContacts () {
+ uni.showLoading({
+ title: '授权中...'
+ })
+ let self = this
+ plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, addressbook => {
+ addressbook.find(["displayName","phoneNumbers"],function(contacts){
+ let ob = []
+ let phone = []
+ for(let i in contacts){
+ let json = {}
+ if(contacts[i].phoneNumbers.length > 0 && contacts[i].displayName){
+ if(phone.indexOf(contacts[i].phoneNumbers[0].value) < 0){
+ json.name = contacts[i].displayName
+ json.phone = contacts[i].phoneNumbers[0].value
+ phone = phone.concat(json.phone)
+ ob = ob.concat(json)
+ }
+ }
+ }
+
+ if(ob.length > 0){
+ self.$util.post('Contacts/setContacts', ob).then(res => {
+ uni.hideLoading()
+ uni.showToast({
+ title: res.msg || '授权成功!',
+ icon: 'success',
+ })
+ })
+ }
+ uni.hideLoading()
+ })
+ },
+ function (e){
+ this.requestAndroidPermission('android.permission.READ_CONTACTS')
+ })
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(@/static/css/index.css);
+</style>
diff --git a/pages/job/job.vue b/pages/job/job.vue
new file mode 100644
index 0000000..c35cae3
--- /dev/null
+++ b/pages/job/job.vue
@@ -0,0 +1,259 @@
+<template>
+ <view>
+ <view class="addr">
+ <view class="addrItem">
+ <text class="label">工作单位</text>
+ <picker @change="jobChange" :value="jobindex" :range="$job">
+ <view class="" style="color: rgba(0, 0, 0, 0.54)" v-if="jobindex == -1">请选择工作单位</view>
+ <view class="uni-input" v-else>{{$job[jobindex]}}</view>
+ </picker>
+ </view>
+ <view class="addrItem">
+ <text class="label">月收入</text>
+ <picker @change="incomeChange" :value="incomeindex" :range="$income">
+ <view class="" style="color: rgba(0, 0, 0, 0.54)" v-if="incomeindex == -1">请选择月收入</view>
+ <view class="uni-input" v-else>{{$income[incomeindex]}}</view>
+ </picker>
+ </view>
+ <view class="addrItem">
+ <text class="label">联系人姓名(1)</text>
+ <input type="text" v-model="formData.relation[0].name" placeholder="请输入联系人姓名">
+ </view>
+ <view class="addrItem">
+ <text class="label">联系人关系(1)</text>
+ <picker @change="relChange" data-relation="1" :value="relindex[1]" :range="$relation">
+ <view class="" style="color: rgba(0, 0, 0, 0.54)" v-if="relindex[1] == -1">请选择联系人关系</view>
+ <view class="uni-input" v-else>{{$relation[relindex[1]]}}</view>
+ </picker>
+ </view>
+ <view class="addrItem">
+ <text class="label">联系人电话(1)</text>
+ <input type="tel" v-model="formData.relation[0].phone" placeholder="请输入联系人电话">
+ </view>
+ <view class="addrItem">
+ <text class="label">联系人姓名(2)</text>
+ <input type="text" v-model="formData.relation[1].name" placeholder="请输入联系人姓名">
+ </view>
+ <view class="addrItem">
+ <text class="label">联系人关系(2)</text>
+ <picker @change="relChange" data-relation="2" :value="relindex[2]" :range="$relation">
+ <view class="" style="color: rgba(0, 0, 0, 0.54)" v-if="relindex[2] == -1">请选择联系人关系</view>
+ <view class="uni-input" v-else>{{$relation[relindex[2]]}}</view>
+ </picker>
+ </view>
+ <view class="addrItem">
+ <text class="label">联系人电话(2)</text>
+ <input type="tel" v-model="formData.relation[1].phone" placeholder="请输入联系人电话">
+ </view>
+ <view class="addrItem">
+ <text class="label">社保</text>
+ <view class="uni-list">
+ <radio-group @change="radioChange" data-field="shebao">
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="有" />
+ </view>
+ <view>有</view>
+ </label>
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="无" />
+ </view>
+ <view>无</view>
+ </label>
+ </radio-group>
+ </view>
+ </view>
+ <view class="addrItem">
+ <text class="label">公积金</text>
+ <view class="uni-list">
+ <radio-group @change="radioChange" data-field="gongjj">
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="有" />
+ </view>
+ <view>有</view>
+ </label>
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="无" />
+ </view>
+ <view>无</view>
+ </label>
+ </radio-group>
+ </view>
+ </view>
+ <view class="addrItem">
+ <text class="label">车辆</text>
+ <view class="uni-list">
+ <radio-group @change="radioChange" data-field="car">
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="有" />
+ </view>
+ <view>有</view>
+ </label>
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="无" />
+ </view>
+ <view>无</view>
+ </label>
+ </radio-group>
+ </view>
+ </view>
+ <view class="addrItem">
+ <text class="label">房产</text>
+ <view class="uni-list">
+ <radio-group @change="radioChange" data-field="house">
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="有" />
+ </view>
+ <view>有</view>
+ </label>
+ <label class="uni-list-cell uni-list-cell-pd">
+ <view>
+ <radio value="无" />
+ </view>
+ <view>无</view>
+ </label>
+ </radio-group>
+ </view>
+ </view>
+ </view>
+ <view class="addrBtn" @tap="jobSave">保存</view>
+ <view class="tips">
+ <view class="tipsTitle">
+ <image src="/static/imgs/notice2.png" mode=""></image>
+ <text>温馨提示</text>
+ </view>
+ <view class="tipsDesc">
+ <view>1.需认真填写资料,请确保为本人操作。</view>
+ <view>2.信息已只能加密,仅用于个人信息认证,隐私信息将严格保密。</view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ import permision from "@/js_sdk/wa-permission/permission.js"
+ export default {
+ data() {
+ return {
+ relindex: {1: -1, 2: -1},
+ relindex2: -1,
+ jobindex: -1,
+ incomeindex: -1,
+ formData: {
+ company: '',
+ income: '',
+ relation: [
+ {
+ name: '',
+ phone: '',
+ relation: '',
+ },
+ {
+ name: '',
+ phone: '',
+ relation: '',
+ },
+ ],
+ shebao: '',
+ gongjj: '',
+ car: '',
+ house: '',
+ },
+ rules: {
+ company: '请选择工作单位',
+ income: '请输入月收入',
+ shebao: '请选择社保情况',
+ gongjj: '请选择公积金情况',
+ car: '请选择车辆情况',
+ house: '请选择房产情况',
+ }
+ }
+ },
+ onLoad(op) {
+ },
+ methods: {
+ incomeChange (e) {
+ this.incomeindex = e.detail.value
+ this.formData.income = this.$income[this.incomeindex]
+ },
+ jobChange (e) {
+ this.jobindex = e.detail.value
+ this.formData.company = this.$job[this.jobindex]
+ },
+ relChange (e) {
+ console.log(e)
+ let i = parseInt(e.currentTarget.dataset.relation)
+ this.relindex[e.currentTarget.dataset.relation] = e.detail.value
+ this.formData.relation[i-1].relation = this.$relation[e.detail.value]
+ },
+ radioChange (e) {
+ this.formData[e.currentTarget.dataset.field] = e.detail.value
+ },
+ jobSave () {
+ let t = this
+ for(let i in this.formData){
+ if(i != 'relation'){
+ if(this.formData[i] == ''){
+ return uni.showToast({
+ title: t.rules[i],
+ icon: 'error'
+ })
+ }
+ } else {
+ for(let j = 0; j <= 1; j++){
+ console.log(i, j)
+ if(this.formData[i][j].name == ''){
+ return uni.showToast({
+ title: '请输入联系人('+(j+1)+')姓名',
+ icon: 'error'
+ })
+ }
+ if(this.formData[i][j].relation == ''){
+ return uni.showToast({
+ title: '请选择联系人('+(j+1)+')关系',
+ icon: 'error'
+ })
+ }
+ if(this.formData[i][j].phone == ''){
+ return uni.showToast({
+ title: '请输入联系人('+(j+1)+')手机号',
+ icon: 'error'
+ })
+ }
+ }
+ }
+ }
+ t.$util.post('User/jobSave', this.formData).then(res => {
+ console.log(res)
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '保存成功',
+ icon: 'success'
+ })
+ //更新用户信息缓存
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+ setTimeout(() => {
+ t.$util.goPages('/pages/addBank/addBank?backUrl=/pages/edu/edu')
+ }, 1500)
+ } else {
+ uni.showToast({
+ title: res.msg || '保存失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/addAddr.css);
+</style>
diff --git a/pages/login/login.vue b/pages/login/login.vue
new file mode 100644
index 0000000..b14533a
--- /dev/null
+++ b/pages/login/login.vue
@@ -0,0 +1,218 @@
+<template>
+ <view>
+ <view class="login-title">
+ <view class="login-title-1">手机号登录</view>
+ <view class="login-title-2">未注册的手机号将自动注册</view>
+ </view>
+ <view class="login-type">
+ <view class="login-type-v">
+ <view :class="formData.loginType == 1 ? 'active' : ''" @tap="loginTypeClick(1)">账号密码登录</view>
+ <view :class="formData.loginType == 2 ? 'active' : ''" @tap="loginTypeClick(2)">短信登录</view>
+ </view>
+ </view>
+ <view class="login-list">
+ <view class="login-item">
+ <input type="tel" v-model="formData.phone" placeholder="请输入手机号" />
+ </view>
+ <view class="login-item" v-if="formData.loginType == 1">
+ <input type="password" v-model="formData.pass" placeholder="请输入密码" />
+ </view>
+ <view class="login-item" v-if="formData.loginType == 2">
+ <input type="tel" v-model="formData.code" maxlength="4" placeholder="请输入验证码" />
+ <text class="code2" v-if="leftTime < 60">{{leftTime}}S后获取</text>
+ <text class="code" @click="sendCode" v-else>获取验证码</text>
+ </view>
+ </view>
+ <view class="loginBtn">
+ <view class="loginBtn-desc">
+ <image @click="agreeClick" class="loginBtn-icon" :src="!loginAct ? '/static/imgs/check.png' : '/static/imgs/checked.png'" ></image>
+ <text>我已阅读并同意</text>
+ <text class="blue" @tap="agreeDialog1">《注册协议》</text>
+ <text class="blue" @tap="agreeDialog2">《隐私政策》</text>
+ </view>
+ <view :class="loginAct ? 'login-btn active' : 'login-btn'" @click="loginUser">登录</view>
+ <view class="loginDesc">
+ <view class="fl" @tap="$util.goPages('/pages/regist/regist')">注册账号</view>
+ <view class="fr" @tap="$util.goPages('/pages/findpass/findpass')">忘记密码</view>
+ </view>
+ </view>
+ <agreePup ref="agreePup1" :gp="1" title="注册协议"></agreePup>
+ <agreePup ref="agreePup2" :gp="2" title="隐私政策"></agreePup>
+ </view>
+</template>
+
+<script>
+ import agreePup from "@/components/agreePup/agreePup";
+ export default {
+ components: {
+ agreePup,
+ },
+ data() {
+ return {
+ loginAct: false,
+ formData: {
+ phone: '',
+ code: '',
+ pass: '',
+ loginType: 1,
+ },
+ phoneReg: /^\d{11}$/,
+ backUrl: '',
+ leftTime: 60,
+ }
+ },
+ onLoad(op) {
+ this.backUrl = op.backUrl ? op.backUrl : ''
+ },
+ methods: {
+ agreeDialog1 (e) {
+ this.$refs.agreePup1.dialog = !this.$refs.agreePup1.dialog
+ },
+ agreeDialog2 (e) {
+ this.$refs.agreePup2.dialog = !this.$refs.agreePup2.dialog
+ },
+ loginTypeClick (e) {
+ this.formData.loginType = e
+ },
+ agreeClick () {
+ this.loginAct = !this.loginAct
+ },
+ async loginUser() {
+ let t = this
+
+ if (!t.loginAct) {
+ return uni.showToast({
+ title: '请阅读并同意协议政策',
+ icon: 'error'
+ })
+ }
+
+ if (t.formData.phone == '' || !t.phoneReg.test(t.formData.phone)) {
+ return uni.showToast({
+ title: '手机号错误!',
+ icon: 'error'
+ })
+ }
+
+ if (t.formData.pass == '' && t.formData.loginType == 1) {
+ return uni.showToast({
+ title: '请输入密码!',
+ icon: 'error'
+ })
+ }
+
+ if (t.formData.code == '' && t.formData.loginType == 2) {
+ return uni.showToast({
+ title: '请输入验证码!',
+ icon: 'error'
+ })
+ }
+
+ try {
+
+ // 登录接口
+ const res = await t.$util.post('User/Login', this.formData)
+
+ if (res.code == 1) {
+
+ uni.setStorageSync('lzsc-token', res.data.userToken)
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+
+ let isSwitch = 0
+ let goUrl = ''
+
+ // qxgLogin接口
+ const ygxRes = await new Promise((resolve, reject) => {
+ uni.request({
+ url: t.$webHost + '/api/v2/auth/qxgIosUnionLogin?phone=' + t.$util.getUserInfo().phone,
+ success: resolve,
+ fail: reject
+ })
+ })
+ console.log(ygxRes);
+ if(!ygxRes.data.data.boughtEquity){
+ goUrl = '/pages/quanyi/index'
+ t.$util.goPages(goUrl)
+ return
+ }
+
+ t.qxgLogin = ygxRes.data.data
+ uni.setStorageSync('qxgLogin', t.qxgLogin)
+
+ if (this.backUrl == '') {
+ isSwitch = 1
+ goUrl = '/pages/index/index'
+ } else {
+ goUrl = this.backUrl
+ }
+
+ uni.showToast({
+ title: res.msg || '登录成功'
+ })
+
+ setTimeout(() => {
+ if (isSwitch == 1) {
+ t.$util.goSwitch(goUrl)
+ } else {
+ t.$util.goPages(goUrl)
+ }
+ }, 1500)
+
+ } else {
+ uni.showToast({
+ title: res.msg || '登录失败',
+ icon: 'error'
+ })
+ }
+
+ } catch (err) {
+ console.error(err)
+
+ uni.showToast({
+ title: '请求失败',
+ icon: 'error'
+ })
+ }
+ },
+ sendCode () {
+ let t = this
+ if(this.formData.phone == '' || !this.phoneReg.test(t.formData.phone)){
+ return uni.showToast({
+ title: '手机号错误!',
+ icon: 'error',
+ })
+ }
+ if (this.leftTime < 60) {
+ return false
+ }
+ this.$util.post('Sms/sendVerificationCode', {phone: this.formData.phone}).then(res => {
+ console.log(res)
+ if(res.code == 1){
+ t.countDown()
+ uni.showToast({
+ title:'发送成功',
+ icon:'none'
+ })
+ } else {
+ uni.showToast({
+ title: res.msg,
+ icon: 'none',
+ })
+ }
+ })
+ },
+ countDown() {
+ this.leftTime--
+ if (this.leftTime > 0) {
+ setTimeout(this.countDown, 1000)
+ } else {
+ this.leftTime = 60
+ }
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/login.css);
+</style>
diff --git a/pages/logs/logs.vue b/pages/logs/logs.vue
new file mode 100644
index 0000000..c49704b
--- /dev/null
+++ b/pages/logs/logs.vue
@@ -0,0 +1,47 @@
+<template>
+ <view>
+ <view class="logs" v-if="accountData.length > 0">
+ <view class="logsMain" v-for="(item, index) in accountData">
+ <view class="date">{{item.addtime}}</view>
+ <view class="const">
+ <view class="">{{item.type}}</view>
+ <view class="">{{item.edu}}元</view>
+ </view>
+ <!--view class="controls">还款</view-->
+ </view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" mode=""></image>
+ <view class="">没有账单信息</view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ accountData: [],
+ pageIndex: 1,
+ pageSize: 50,
+ }
+ },
+ onLoad() {
+ this.getAccount()
+ },
+ methods: {
+ getAccount() {
+ let t = this
+ this.$util.post('Account/getAccount', {pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1){
+ this.accountData = res.data.list
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/logs.css);
+</style>
diff --git a/pages/my/my.vue b/pages/my/my.vue
new file mode 100644
index 0000000..68d6f01
--- /dev/null
+++ b/pages/my/my.vue
@@ -0,0 +1,246 @@
+<template>
+ <view class="my">
+ <yk-authpup ref="authpup" type="top" @changeAuth="changeAuth" noticeTitle="便于您使用该功能上传您的照片用于核实身份场景中读取相册内容" permissionID="WRITE_EXTERNAL_STORAGE"></yk-authpup>
+ <yk-authpup ref="camears" type="top" @changeAuth="changeAuth2" noticeTitle="便于您使用该功能便于您拍摄上传用于核实身份场景" permissionID="CAMERA"></yk-authpup>
+ <view class="startBar" style="background-color: #e3b400;"></view>
+ <view class="myTop">
+ <view class="headimg">
+ <image :src="userInfo != null ? userInfo.avatar : '/static/imgs/headimg.png'" class="" mode="" @tap="setImg"></image>
+ <view class="">
+ <template>
+ <view v-if="userInfo == null" @tap="$util.goPages('/pages/login/login')">未登录</view>
+ <view v-else>{{userInfo.phone}}</view>
+ </template>
+ <template v-if="userInfo != null && Config">
+ <template v-if="userInfo.status == 1">
+ <view class="edu" v-if="userInfo != null && userInfo.edu_auth == 0 && Config.put_open == 2 && userInfo.over_auth == 0">额度:未认证</view>
+ <view class="edu" v-else-if="userInfo != null && userInfo.edu_auth == 0 && Config.put_open == 2 && userInfo.over_auth == 1">额度:授信中</view>
+ <view class="edu" v-else-if="userInfo != null && userInfo.edu_auth == 1 && Config.put_open == 2">额度:{{userInfo.const}}</view>
+ </template>
+ <template v-else>
+ <view class="edu">额度:授信失败</view>
+ </template>
+ </template>
+ <template v-if="userInfo != null && userInfo.face_auth == 0">
+ <view class="edu" @tap="$util.checkGoPages('/pages/my/my')">未认证(去认证)</view>
+ </template>
+ </view>
+ </view>
+ </view>
+
+ <view class="myNavs">
+ <view class="myNavs-tips" @tap="$util.checkLogin('/pages/order/order')">
+ <text class="myNavs-tips-text">我的订单</text>
+ <view class="myNavs-tips-rgt">
+ <text>查看全部</text>
+ <image src="/static/imgs/right.png" mode=""></image>
+ </view>
+ </view>
+ <view class="myNavs-view">
+ <view class="myNavs-item" @tap="$util.checkLogin('/pages/order/order?status=1')">
+ <image class="myNavs-item-icon" src="/static/imgs/my-n-1.png" mode=""></image>
+ <text class="myNavs-item-text">待支付</text>
+ </view>
+ <view class="myNavs-item" @tap="$util.checkLogin('/pages/order/order?status=3')">
+ <image class="myNavs-item-icon" src="/static/imgs/my-n-5.png" mode=""></image>
+ <text class="myNavs-item-text">待签约</text>
+ </view>
+ <view class="myNavs-item" @tap="$util.checkLogin('/pages/order/order?status=4')">
+ <image class="myNavs-item-icon" src="/static/imgs/my-n-2.png" mode=""></image>
+ <text class="myNavs-item-text">待发货</text>
+ </view>
+ <view class="myNavs-item" @tap="$util.checkLogin('/pages/order/order?status=5')">
+ <image class="myNavs-item-icon" src="/static/imgs/my-n-3.png" mode=""></image>
+ <text class="myNavs-item-text">待收货</text>
+ </view>
+ <view class="myNavs-item" @tap="$util.checkLogin('/pages/order/order?status=8')">
+ <image class="myNavs-item-icon" src="/static/imgs/my-n-4.png" mode=""></image>
+ <text class="myNavs-item-text">已完成</text>
+ </view>
+ </view>
+ </view>
+
+ <view class="myServe">
+ <view class="myNavs-tips">
+ <text class="myNavs-tips-text">我的服务</text>
+ </view>
+ <view class="myServe-view">
+ <view class="myServe-item" @tap="$util.checkLogin('/pages/profile/profile')">
+ <image src="/static/imgs/my-s-1.png" mode=""></image>
+ <text>个人信息</text>
+ </view>
+ <view class="myServe-item" @tap="$util.checkLogin('/pages/logs/logs')" v-if="Config && Config.put_open == 2">
+ <image src="/static/imgs/my-s-2.png" mode=""></image>
+ <text>账单信息</text>
+ </view>
+ <view class="myServe-item" @tap="$util.checkLogin('/pages/bank/bank')">
+ <image src="/static/imgs/my-s-3.png" mode=""></image>
+ <text>银行卡</text>
+ </view>
+ <view class="myServe-item" @tap="$util.checkLogin('/pages/address/address')">
+ <image src="/static/imgs/my-s-4.png" mode=""></image>
+ <text>我的地址</text>
+ </view>
+ <view class="myServe-item" @tap="$util.checkLogin('/pages/collect/collect')">
+ <image src="/static/imgs/my-s-5.png" mode=""></image>
+ <text>我的收藏</text>
+ </view>
+ <view class="myServe-item" @tap="goKefu">
+ <image src="/static/imgs/my-s-6.png" mode=""></image>
+ <text>联系客服</text>
+ </view>
+ <view class="myServe-item" v-if="Config.put_open == 1">
+
+ </view>
+ </view>
+ </view>
+ <view class="myBeiAn">
+ <view class="">
+ <text @tap="agreeDialog1">《用户协议》</text>
+ <text>|</text>
+ <text @tap="agreeDialog2">《隐私政策》</text>
+ </view>
+ <view @tap="goWebUrl('http://beian.miit.gov.cn')">APP备案号: {{Config.icp}}</view>
+ <view @tap="goWebUrl('http://beian.miit.gov.cn')">Copyright © 2025 {{Config.url}} All Rights Reserved.</view>
+
+ </view>
+ <agreePup ref="agreePup1" :gp="1" title="注册协议"></agreePup>
+ <agreePup ref="agreePup2" :gp="2" title="隐私政策"></agreePup>
+ </view>
+</template>
+
+<script>
+ import ykAuthpup from "@/components/yk-authpup/yk-authpup";
+ import agreePup from "@/components/agreePup/agreePup";
+ export default {
+ components: {
+ agreePup
+ },
+ data() {
+ return {
+ userInfo: this.$util.getUserInfo(),
+ Config: {put_open: 1},
+ }
+ },
+ onLoad() {
+ },
+ onShow() {
+ this.getConfig()
+ this.getUserInfo()
+ },
+ methods: {
+ goKefu() {
+ if(this.Config && this.Config.kefu_open == 1) {
+ this.wechatWork()
+ } else {
+ this.$util.checkLogin('/pages/customer/customer')
+ }
+ },
+ setImg(){
+ if(uni.getSystemInfoSync().platform != 'ios'){
+ this.$refs['authpup'].open()
+ }else{
+ this.chooseImg()
+ }//调起自定义权限目的弹框,具体可看示例里面很详细
+ },
+ changeAuth () {
+ //这里是权限通过后执行自己的代码逻辑
+ if(uni.getSystemInfoSync().platform !='ios'){
+ this.$refs['camears'].open()
+ }
+ this.chooseImg()
+ },
+ changeAuth2(){
+ this.chooseImg()
+ },
+ chooseImg () {
+ let t = this
+ uni.chooseImage({
+ count: 1, // 默认9
+ sizeType: ['original', 'compressed'],
+ success: (chooseImageRes) => {
+ let tempFilePaths = chooseImageRes.tempFilePaths
+ let token = uni.getStorageSync('lzsc-token')
+ let header = {
+ 'Accept': 'application/json',
+ 'authorization': token,
+ }
+ uni.showLoading({
+ title: '上传中..',
+ })
+ uni.uploadFile({
+ url: t.$baseUrl + '/api/user/setAvatar',
+ filePath: tempFilePaths[0],
+ header: header,
+ name: 'file',
+ success: (uploadFileRes) => {
+ uni.hideLoading()
+ let res = JSON.parse(uploadFileRes.data)
+ res = JSON.parse(t.$util.decryptDes(res.data))
+ t.userInfo.avatar = res.avatar
+ uni.setStorageSync('user-info', JSON.stringify(res))
+ }
+ })
+ }
+ })
+ },
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ t.userInfo = res.data
+ })
+ },
+ agreeDialog1 (e) {
+ this.$refs.agreePup1.dialog = !this.$refs.agreePup1.dialog
+ },
+ agreeDialog2 (e) {
+ this.$refs.agreePup2.dialog = !this.$refs.agreePup2.dialog
+ },
+ goWebUrl (url) {
+ // #ifdef APP-PLUS
+ plus.runtime.openURL(url)
+ // #endif
+ },
+ getConfig () {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ t.Config = res.data
+ })
+ },
+ wechatWork () {
+ let t = this
+ if(t.Config){
+ if(t.Config.put_open == 1){
+ uni.showModal({
+ title: '联系客服',
+ content: '请联系客服电话:' + t.Config.kefu_phone,
+ showCancel: false,
+ success: function (res) {
+ if (res.confirm) {
+ }
+ }
+ });
+ } else {
+ console.log(t.Config)
+ uni.share({
+ provider: "weixin",
+ openCustomerServiceChat: true,
+ customerUrl: t.Config.work_url, //企业微信地址
+ corpid: t.Config.work_id, //企业id
+ success: (res) => {
+ console.log("success:" + JSON.stringify(res))
+ },
+ fail: (err) => {
+ console.log("fail:" + JSON.stringify(err))
+ }
+ })
+ }
+ }
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/my.css);
+</style>
diff --git a/pages/order/order.vue b/pages/order/order.vue
new file mode 100644
index 0000000..c375a8d
--- /dev/null
+++ b/pages/order/order.vue
@@ -0,0 +1,388 @@
+<template>
+ <view>
+ <view class="order-tab">
+ <view :class="statusIndex == 0 ? 'active' : ''" @tap="tabClick(0)">全部</view>
+ <view :class="statusIndex == 2 ? 'active' : ''" @tap="tabClick(2)">待审核</view>
+ <view :class="statusIndex == 3 ? 'active' : ''" @tap="tabClick(3)">待签约</view>
+ <view :class="statusIndex == 5 ? 'active' : ''" @tap="tabClick(5)">待收货</view>
+ <view :class="statusIndex == 6 ? 'active' : ''" @tap="tabClick(6)">已逾期</view>
+ <view :class="statusIndex == 8 ? 'active' : ''" @tap="tabClick(8)">已完成</view>
+ <view :class="statusIndex == -3 ? 'active' : ''" @tap="tabClick(-3)">已退款</view>
+ </view>
+ <view class="order">
+ <view class="" v-if="orderData.length > 0">
+ <view class="cartsItem" v-for="(item, index) in orderData">
+ <view class="cartTitle" @tap="$util.goPages('/pages/orderinfo/orderinfo?orderid=' + item.id)">
+ <view>
+ <text class="label">时间:</text>
+ <text>{{item.addtime}}</text>
+ <text class="status-name">{{item.statusName}}</text>
+ </view>
+ <view class="sn">
+ <text class="label">订单号:</text>
+ <text>{{item.sn}}</text>
+ <text class="status-name">查看详情</text>
+ </view>
+ </view>
+ <view class="cartsGoods" v-for="(itm, idx) in item.cartsData" @tap="$util.goPages('/pages/ginfo/ginfo?id=' + itm.goodsid)">
+ <view class="cartsGoodsView">
+ <image class="cartsIcon" lazy-load :src="itm.icon" mode="widthFix"></image>
+ <view class="carts-item">
+ <view class="carts-title">{{itm.title}}</view>
+ <view class="carts-set">
+ <view class="carts-price">
+ <view class="">
+ <text>单价:¥</text>
+ <text class="red">{{itm.price}}</text>
+ <text style="margin-left: 20upx;">数量:</text>
+ <text class="red">{{itm.nums}}</text>
+ </view>
+ <view class="">
+ <text>总价:¥</text>
+ <text class="red">{{itm.total}}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="cartsCon">
+ <view class="total">
+ <text class="red">合计:{{item.total}}</text>
+ </view>
+ <view class="cons">
+ <template v-if="item.payment == 1">
+ <text class="payOrder" v-if="item.status == 1" @tap="$util.goPages('/pages/pays/pays?cartsIds=' + item.cartsids)">支付</text>
+ <text class="payback" v-if="item.status == 2" @tap="refundOrder(item)">退款</text>
+ <text class="payOrder" v-if="item.status == 3 && item.payment == 1 && item.zid != 0 && item.zstatus == 0" @tap="zsign(item)">签约</text>
+ <text class="exOrder" v-if="item.status == 4 || item.status == 5 || item.status == 6" @tap="getExpress(item)">物流</text>
+ <text class="payOrder" v-if="item.status == 4" @tap="receiveOrder(item)">收货</text>
+ <text class="payback" v-if="item.status == 3 || item.status == 4 || item.status == 5 || item.status == 6" @tap="getPlan(item)">还款</text>
+ <text class="delOrder" v-if="item.status == -1 || item.status == 1 || item.status == 7 || item.status == 8" @tap="delOrder(item, index)">删除</text>
+ </template>
+ <template v-if="item.payment != 1">
+ <text class="payOrder" v-if="item.status == 1" @tap="$util.goPages('/pages/pays/pays?cartsIds=' + item.cartsids)">支付</text>
+ <text class="payback" v-if="item.status == 3" @tap="refundOrder(item)">退款</text>
+ <text class="payOrder" v-if="item.status == 4" @tap="receiveOrder(item)">收货</text>
+ <text class="delOrder" v-if="item.status == -1 || item.status == 1 || item.status == 7 || item.status == 8" @tap="delOrder(item, index)">删除</text>
+ </template>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" mode="" style="margin-top: 200upx;"></image>
+ <view class="">没有订单信息</view>
+ <view class="noDataBtn" @tap="$util.goSwitch('/pages/index/index')">去看看</view>
+ </view>
+ </view>
+ <uni-popup ref="popup" type="bottom">
+ <view class="popup-content">
+ <view class="pop-title">物流信息</view>
+ <view class="pop-main">
+ <view class="pop-main-view" v-for="(item, index) in expressData">
+ <view class="pop-nums">{{item.datetime.slice(0, 16)}}</view>
+ <view class="pop-pay">
+ <view class="">{{item.remark}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </uni-popup>
+
+ <uni-popup ref="popup2" type="bottom">
+ <view class="popup-content">
+ <view class="pop-title">还款计划({{planData.length}})</view>
+ <view class="pop-main" style="padding-bottom: 90upx;height: 600upx;">
+ <view class="pop-main-view" v-for="(item, index) in planData">
+ <view class="pop-pay" style="width: 100%;">
+ <view class="" @tap="planClick(item)" style="padding: 10upx 0;">
+ <image v-if="planId == item.id" src="/static/imgs/checked.png" mode=""></image>
+ <image v-else src="/static/imgs/check.png" mode=""></image>
+ <text>日期:{{item.paydate}}</text>
+ <text style="margin-left: 30upx;">还款金额:{{item.total}}</text>
+ <text style="margin-left: 30upx;">({{item.statusName}})</text>
+ </view>
+ </view>
+ </view>
+ <view class="planBtn" @tap="popup3Open">立即还款({{payTotal}})</view>
+ </view>
+ </view>
+ </uni-popup>
+
+ <uni-popup ref="popup3" type="center" style="width: 100%;">
+ <view class="popup-content" style="width: 100%;">
+ <view class="pop-title" style="">还款方式</view>
+ <view class="pop-main" style="height: 240upx;width: 100%;">
+ <view class="pop-main-view">
+ <view class="pop-pay" style="width: 100%;border-bottom: none;">
+ <view class="pay-item" style="border-bottom: 1px solid #eeeeee;padding: 20upx 20upx 30upx 20upx;" @tap="payback(2)">
+ <image class="pay-icon" src="/static/imgs/wxpay.png" mode=""></image>
+ <text>微信还款({{payTotal}}元)</text>
+ </view>
+ <view class="pay-item" style="padding: 20upx;border-bottom: none;" @tap="payback(3)">
+ <image class="pay-icon" src="/static/imgs/bankpay.png" style="height: 40upx; margin-right: 10upx;" mode=""></image>
+ <view>
+ <text>银行卡还款({{payTotal}}元)</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </uni-popup>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ statusIndex: 0,
+ pageIndex: 1,
+ pageSize: 50,
+ orderData: [],
+ expressData: [],
+ planData: [],
+ payTotal: 0,
+ planId: 0,
+ }
+ },
+ onLoad(op) {
+ this.statusIndex = op.status ? op.status : 0
+ this.getOrderList()
+ },
+ //监听返回直接返回到我的
+ onBackPress(options) {
+ if (options.from === 'navigateBack') return false
+ uni.reLaunch({ url: '/pages/my/my' })
+ return true
+ },
+ methods: {
+ //租大师签约
+ zsign (item) {
+ let t = this
+ this.$util.post('Order/zsign', {orderid: item.id}).then(res => {
+ console.log(res)
+ if(res.code == 1){
+ t.$goWebUrl(res.data.url)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ popup3Open () {
+ if(this.planId == 0) {
+ return uni.showToast({
+ title: '未选中还款计划',
+ icon: 'error'
+ })
+ }
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认还款?',
+ success: function (resp) {
+ if(resp.confirm){
+ t.payback(2)
+ }
+ }
+ })
+ },
+ //点击计划
+ planClick(e){
+ if(e.status != 7) {
+ this.planId = e.id
+ this.payTotal = parseFloat(e.total).toFixed(2)
+ }
+ },
+ //计划
+ getPlan (item) {
+ this.payTotal = 0
+ this.planId = 0
+ this.$util.post('Order/getPlanData', {orderid: item.id}).then(res => {
+ console.log(res)
+ if(res.code == 1){
+ this.planData = res.data
+ this.$refs.popup2.open()
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ //物流
+ getExpress(item) {
+ this.$util.post('Order/getExpress2', {express_no: item.express_no, express_val: item.express_val, status: item.status}).then(res => {
+ console.log('res', res)
+ if(res.code == 1){
+ this.expressData = res.data.list
+ this.$refs.popup.open()
+ } else {
+ uni.showToast({
+ title: res.msg || '查看物流失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ tabClick (e) {
+ this.pageIndex = 1
+ this.statusIndex = e
+ this.getOrderList()
+ },
+ getOrderList () {
+ this.$util.post('Order/getOrderList', {status: this.statusIndex, pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ //console.log(res)
+ if(res.code == 1){
+ this.orderData = res.data.list
+ }
+ })
+ },
+ //删除
+ delOrder (e, idx) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认是否删除?',
+ success: function (resp) {
+ if(resp.confirm){
+ t.$util.post('Order/delOrder', {orderid: e.id}).then(res => {
+ if(res.code == 1){
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ t.orderData.splice(idx, 1)
+ }, 500)
+
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ //收货
+ receiveOrder (e) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认是否收货?',
+ success: function (res) {
+ if (res.confirm) {
+ t.$util.post('Order/receiveOrder', {orderId: e.id}).then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ t.tabClick(5)
+ }, 1000)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ //退款
+ refundOrder (e) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认是否退款?',
+ success: function (res) {
+ if (res.confirm) {
+ t.$util.post('Order/refundOrder', {orderId: e.id}).then(res => {
+ console.log(res)
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ t.tabClick(8)
+ }, 1000)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ //还款
+ payback (payment) {
+ let t = this
+ t.$util.post('Order/payback', {planId: t.planId, payment: payment}).then(res => {
+ if(res.code == 1) {
+ if(payment == 2) {
+ uni.requestPayment({
+ "provider": "wxpay",
+ "orderInfo": res.data,
+ success(rs) {
+ uni.showToast({
+ title: res.msg || '还款成功',
+ icon: 'success',
+ })
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ }, 1000)
+ //三秒之后刷新
+ setTimeout(() => {
+ t.getOrderList()
+ }, 3000)
+ },
+ fail(e) {
+ uni.showToast({
+ title: '还款失败',
+ icon: 'error',
+ })
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ }, 1000)
+ }
+ })
+ }
+ if(payment == 3) {
+ uni.showToast({
+ title: res.msg || '还款成功',
+ icon: 'success',
+ })
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ t.$refs.popup3.close()
+ }, 1000)
+ //三秒之后刷新
+ setTimeout(() => {
+ t.getOrderList()
+ }, 3000)
+ }
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/order.css);
+</style>
diff --git a/pages/orderinfo/orderinfo.vue b/pages/orderinfo/orderinfo.vue
new file mode 100644
index 0000000..ec4ba2b
--- /dev/null
+++ b/pages/orderinfo/orderinfo.vue
@@ -0,0 +1,388 @@
+<template>
+ <view class="cartsItem" style="margin-top: 30upx;">
+ <view class="cartsGoods" v-for="(itm, idx) in orderData.cartsData">
+ <view class="cartsGoodsView">
+ <image class="cartsIcon" lazy-load :src="itm.icon" mode="widthFix"></image>
+ <view class="carts-item">
+ <view class="carts-title">{{itm.title}}</view>
+ <view class="carts-set">
+ <view class="carts-price">
+ <view class="">
+ <text>单价:¥</text>
+ <text class="red">{{itm.price}}</text>
+ <text style="margin-left: 20upx;">数量:</text>
+ <text class="red">{{itm.nums}}</text>
+ </view>
+ <view class="">
+ <text>总价:¥</text>
+ <text class="red">{{itm.total}}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="orderDetail">
+ <view class="orderDetail-v">
+ <text class="label">实付款:</text>
+ <text>{{orderData.total}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">订单号:</text>
+ <text>{{orderData.sn}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">姓名:</text>
+ <text>{{orderData.realname}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">手机号:</text>
+ <text>{{orderData.phone}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">订单状态:</text>
+ <text>{{orderData.statusName}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">支付方式:</text>
+ <text>{{orderData.paymentName}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">下单时间:</text>
+ <text>{{orderData.addtime}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">支付时间:</text>
+ <text>{{orderData.paytime}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">收货地址:</text>
+ <text>{{orderData.address}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">快递公司:</text>
+ <text>{{orderData.express_name ? orderData.express_name : '/'}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">快递单号:</text>
+ <text>{{orderData.express_no ? orderData.express_no : '/'}}</text>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">还款计划:</text>
+ <view class="orderplan">
+ <text v-for="(item, index) in orderData.plan">{{item.paydate}}还款{{item.total}}({{item.status == 6 ? '已还' : '未还'}})</text>
+ </view>
+ </view>
+ <view class="orderDetail-v">
+ <text class="label">买卖合同:</text>
+ <text style="color: #2196F3;" @tap="getEsign">点击查看</text>
+ </view>
+ </view>
+ </view>
+ <view class="orderBtns">
+ <text class="orderBtns-desc">操作</text>
+ <view class="orderBtns-v">
+ <text class="delOrder" v-if="orderData.status == -1 || orderData.status == 6 || orderData.status == 7 || orderData.status == 1" @tap="delOrder(orderData)">删除</text>
+ <text class="payOrder" v-if="orderData.status == 1" @tap="$util.goPages('/pages/pays/pays?cartsIds=' + orderData.cartsids)">支付</text>
+ <text class="payback" v-if="orderData.status == 2" @tap="refundOrder(orderData)">退款</text>
+ <text class="exOrder" v-if="orderData.status == 3 || orderData.status == 4 || orderData.status == 5 || orderData.status == 6" @tap="getExpress(orderData)">物流</text>
+ <text class="payOrder" v-if="orderData.status == 3" @tap="receiveOrder(orderData)">收货</text>
+ <text class="payback" v-if="(orderData.status == 3 || orderData.status == 4 || orderData.status == 5) && orderData.payment == 1" @tap="getPlan(orderData)">还款</text>
+ </view>
+ </view>
+
+ <uni-popup ref="popup" type="bottom">
+ <view class="popup-content">
+ <view class="pop-title">物流信息</view>
+ <view class="pop-main">
+ <view class="pop-main-view" v-for="(item, index) in expressData">
+ <view class="pop-nums">{{item.datetime.slice(0, 16)}}</view>
+ <view class="pop-pay">
+ <view class="">{{item.remark}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </uni-popup>
+
+ <uni-popup ref="popup2" type="bottom">
+ <view class="popup-content">
+ <view class="pop-title">还款计划({{planData.length}})</view>
+ <view class="pop-main" style="padding-bottom: 90upx;height: 600upx;">
+ <view class="pop-main-view" v-for="(item, index) in planData">
+ <view class="pop-pay" style="width: 100%;">
+ <view class="" @tap="planClick(item)" style="padding: 10upx 0;">
+ <image v-if="planId == item.id" src="/static/imgs/checked.png" mode=""></image>
+ <image v-else src="/static/imgs/check.png" mode=""></image>
+ <text>日期:{{item.paydate}}</text>
+ <text style="margin-left: 30upx;">还款金额:{{item.total}}</text>
+ <text style="margin-left: 30upx;">({{item.statusName}})</text>
+ </view>
+ </view>
+ </view>
+ <view class="planBtn" @tap="popup3Open">立即还款({{payTotal}})</view>
+ </view>
+ </view>
+ </uni-popup>
+
+ <uni-popup ref="popup3" type="center" style="width: 100%;">
+ <view class="popup-content" style="width: 100%;">
+ <view class="pop-title" style="">还款方式</view>
+ <view class="pop-main" style="height: 240upx;width: 100%;">
+ <view class="pop-main-view">
+ <view class="pop-pay" style="width: 100%;border-bottom: none;">
+ <view class="pay-item" style="border-bottom: 1px solid #eeeeee;padding: 20upx 20upx 30upx 20upx;" @tap="payback(2)">
+ <image class="pay-icon" src="/static/imgs/wxpay.png" mode=""></image>
+ <text>微信还款({{payTotal}}元)</text>
+ </view>
+ <view class="pay-item" style="padding: 20upx;border-bottom: none;" @tap="payback(3)">
+ <image class="pay-icon" src="/static/imgs/bankpay.png" style="height: 40upx; margin-right: 10upx;" mode=""></image>
+ <view>
+ <text>银行卡还款({{payTotal}}元)</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </uni-popup>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ orderid: 0,
+ orderData: {},
+ expressData: [],
+ planData: [],
+ payTotal: 0,
+ planId: 0,
+ }
+ },
+ onLoad(op) {
+ this.orderid = op.orderid ? op.orderid : 0
+ this.getOrderInfo()
+ },
+ methods: {
+ getEsign(){
+ let t = this
+ t.$util.post('Sign/getEsign', {cartsIds: this.orderData.cartsids}).then(res => {
+ if(res.code == 1){
+ let pdfUrl = t.$baseUrl + res.data
+ // #ifdef APP-PLUS
+ plus.runtime.openURL(pdfUrl)
+ // #endif
+ } else {
+ uni.showToast({
+ title: res.msg || '未签署合同',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ popup3Open () {
+ if(this.planId == 0) {
+ return uni.showToast({
+ title: '未选中还款计划',
+ icon: 'error'
+ })
+ }
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认还款?',
+ success: function (resp) {
+ if(resp.confirm){
+ t.payback(2)
+ }
+ }
+ })
+ },
+ getOrderInfo() {
+ let t = this
+ t.$util.post('Order/orderInfo', {orderId: this.orderid}).then(res => {
+ if(res.code == 1) {
+ this.orderData = res.data
+ }
+ })
+ },
+ //点击计划
+ planClick(e){
+ if(e.status != 7) {
+ this.planId = e.id
+ this.payTotal = parseFloat(e.total).toFixed(2)
+ }
+ },
+ //物流
+ getExpress(item) {
+ this.$util.post('Order/getExpress2', {express_no: item.express_no, express_val: item.express_val, status: item.status}).then(res => {
+
+ if(res.code == 1){
+ this.expressData = res.data.list
+ this.$refs.popup.open()
+ } else {
+ uni.showToast({
+ title: res.msg || '查看物流失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ //计划
+ getPlan (item) {
+ this.payTotal = 0
+ this.planIds = []
+ this.$util.post('Order/getPlanData', {orderid: item.id}).then(res => {
+ console.log('111', res)
+ if(res.code == 1){
+ this.planData = res.data
+ this.$refs.popup2.open()
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ //删除
+ delOrder (e) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认是否删除?',
+ success: function (resp) {
+ if(resp.confirm){
+ t.$util.post('Order/delOrder', {orderid: e.id}).then(res => {
+ if(res.code == 1){
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ uni.navigateBack()
+ }, 1500)
+
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ //收货
+ receiveOrder (e) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认是否收货?',
+ success: function (res) {
+ if (res.confirm) {
+ t.$util.post('Order/receiveOrder', {orderId: e.id}).then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ t.getOrderInfo()
+ }, 500)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ //退款
+ refundOrder (e) {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '确认是否退款?',
+ success: function (res) {
+ if (res.confirm) {
+ t.$util.post('Order/refundOrder', {orderId: e.id}).then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功'
+ })
+ setTimeout(() => {
+ t.getOrderInfo()
+ }, 1000)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ //还款
+ payback (payment) {
+ let t = this
+ t.$util.post('Order/payback', {planId: t.planId, payment: payment}).then(res => {
+ if(res.code == 1) {
+ if(payment == 2) {
+ uni.requestPayment({
+ "provider": "wxpay",
+ "orderInfo": res.data,
+ success(rs) {
+ uni.showToast({
+ title: res.msg || '还款成功',
+ icon: 'success',
+ })
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ }, 1000)
+ //三秒之后刷新
+ setTimeout(() => {
+ t.getOrderInfo()
+ }, 3000)
+ },
+ fail(e) {
+ uni.showToast({
+ title: '还款失败',
+ icon: 'error',
+ })
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ }, 1000)
+ }
+ })
+ }
+ if(payment == 3) {
+ uni.showToast({
+ title: res.msg || '还款成功',
+ icon: 'success',
+ })
+ setTimeout(() => {
+ t.$refs.popup2.close()
+ t.$refs.popup3.close()
+ }, 1000)
+ //三秒之后刷新
+ setTimeout(() => {
+ t.getOrderInfo()
+ }, 3000)
+ }
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败'
+ })
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/order.css);
+</style>
diff --git a/pages/pays/pays.vue b/pages/pays/pays.vue
new file mode 100644
index 0000000..2b5dfde
--- /dev/null
+++ b/pages/pays/pays.vue
@@ -0,0 +1,410 @@
+<template>
+ <view class="pays">
+ <view class="addr" @tap="chooseAddr">
+ <image class="addrImg" src="/static/imgs/my-s-4.png" mode=""></image>
+ <view class="addrView">
+ <template v-if="addrData">
+ <view class="">
+ <text>{{addrData.realname}}</text>
+ <text>{{addrData.phone}}</text>
+ </view>
+ <view class="">{{addrData.area}}{{addrData.addr}}</view>
+ </template>
+ <template v-else>
+ <view class="" style="margin-top: 20upx;">请选择收货地址</view>
+ </template>
+ </view>
+ <image class="rgt" src="/static/imgs/right.png" mode=""></image>
+ </view>
+ <view class="goods">
+ <view class="goodsMain" v-for="(item, index) in cartsData">
+ <image class="goods-icon" :src="item.icon" mode=""></image>
+ <view class="goods-info">
+ <view class="goods-title">{{item.title}}</view>
+ <view class=""></view>
+ <view class="goods-price">
+ <view>价格:¥</view>
+ <view class="red">{{item.price}}</view>
+ </view>
+ <view class="goods-price">
+ <view>运费:¥</view>
+ <view class="red">{{item.freight}}</view>
+ </view>
+ <view class="carts-nums">
+ <view class="" @tap="setCartsNums(item, 1)">
+ <image src="/static/imgs/minus.png" mode=""></image>
+ </view>
+ <view class="">
+ <text>{{item.nums}}</text>
+ </view>
+ <view class="" @tap="setCartsNums(item, 2)">
+ <image src="/static/imgs/add.png" mode=""></image>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="total">
+ <view class="">
+ <text>加工费:</text>
+ <text class="red total-price">{{rateTotal}}</text>
+ <text class="cny">元</text>
+ </view>
+ <view class="">
+ <text>合计:</text>
+ <text class="red total-price">{{payTotal}}</text>
+ <text class="cny">元</text>
+ </view>
+
+ </view>
+ <view class="payment">
+ <view class="p-title">
+ <text>付款方式</text>
+ <view class="" v-if="payment == 1 && userInfo.edu_auth == 1" @tap="getPayTask">查看还款计划</view>
+ </view>
+ <view class="pay-li">
+ <view class="pay-item" @tap="choosePayment(1)" v-if="Config && Config.edu_open == 1 && isFenqi == 1">
+ <image class="pay-icon" src="/static/imgs/edupay.png" mode=""></image>
+ <text v-if="userInfo">余额支付(可用余额:{{userInfo.const}})</text>
+ <image class="rgt" :src="payment == 1 ? '/static/imgs/checked.png' : '/static/imgs/check.png'" mode=""></image>
+ </view>
+ <view class="pay-item" @tap="choosePayment(2)">
+ <image class="pay-icon" src="/static/imgs/wxpay.png" mode=""></image>
+ <text>微信支付</text>
+ <image class="rgt" :src="payment == 2 ? '/static/imgs/checked.png' : '/static/imgs/check.png'" mode=""></image>
+ </view>
+ <view class="pay-item">
+ <image class="pay-icon" src="/static/imgs/bankpay.png" mode=""></image>
+ <view @tap="chooseBank">
+ <text>银行卡支付</text>
+ <text v-if="bankData">({{bankData.bankno}}切换)</text>
+ <text v-else>(请选择银行卡 》》)</text>
+ </view>
+ <image class="rgt" :src="payment == 3 ? '/static/imgs/checked.png' : '/static/imgs/check.png'" mode="" @tap="choosePayment(3)"></image>
+ </view>
+ </view>
+ </view>
+ <view class="authBtn-desc" v-if="userInfo && payment == 1 && userInfo.edu_auth == 1">
+ <image @tap="agreeFlag = !agreeFlag" class="authBtn-icon" :src="!agreeFlag ? '/static/imgs/check.png' : '/static/imgs/checked.png'" mode=""></image>
+ <text>我已阅读并同意</text>
+ <text class="blue" @tap="eSignAgree">《赊销购货协议》(点击签署)</text>
+ </view>
+ <view class="paysBtn" @tap="payOrder">提交订单</view>
+
+
+ <uni-popup ref="popup" type="bottom">
+ <view class="popup-content">
+ <view class="pop-title">查看还款计划</view>
+ <view class="pop-main">
+ <view class="pop-main-view" v-for="(item, index) in paysData">
+ <view class="pop-nums">
+ 第{{index + 1}}期
+ </view>
+ <view class="pop-pay">
+ <view class="">还款日期: {{item.days}}</view>
+ <view class="">还款金额: {{item.pays}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </uni-popup>
+
+ </view>
+</template>
+<script>
+ export default {
+ components: {
+ },
+ data() {
+ return {
+ Config: null,
+ payment: 0,
+ cartsIds: '',
+ cartsData: [],
+ addrData: null,
+ payTotal: 0,
+ rateTotal: 0,
+ userInfo: this.$util.getUserInfo(),
+ bankData: null,
+ bankId: 0,
+ paysData: [],
+ agreeFlag: true,
+ esignFlag: 0,
+ isFenqi: 0,
+ }
+ },
+ onLoad (op) {
+ this.getConfig()
+ setTimeout(() => {
+ this.getUserInfo()
+ }, 300)
+ this.cartsIds = op.cartsIds ? op.cartsIds : ''
+ if(this.cartsIds != '') {
+ this.getCartsInfo(this.cartsIds)
+ }
+ //判断是否有地址
+ let addr = uni.getStorageSync('choose-address') ? uni.getStorageSync('choose-address') : null
+ if(addr) {
+ this.addrData = JSON.parse(uni.getStorageSync('choose-address'))
+ } else {
+ this.getAddr()
+ }
+
+ //判断是否有银行
+ let bank = uni.getStorageSync('choose-bank') ? uni.getStorageSync('choose-bank') : null
+ if(bank) {
+ this.bankData = JSON.parse(uni.getStorageSync('choose-bank'))
+ } else {
+ this.getBank()
+ }
+ },
+ onShow () {
+ //获取签署协议状态
+ this.getEsignStatus()
+ },
+ methods: {
+ getEsignStatus () {
+ let t = this
+ this.$util.post('Sign/getEsign', {cartsIds: this.cartsIds}).then(res => {
+ console.log('res', res)
+ if(res.code == 1){
+ t.esignFlag = 1
+ t.payment = 1
+ }
+ })
+ },
+ eSignAgree () {
+ let t = this
+ if(!this.addrData){
+ return uni.showToast({
+ title: '请选择收货地址',
+ icon: 'error'
+ })
+ }
+ console.log('eee', 1111)
+ this.$util.post('Sign/eSign', {addrId: this.addrData.id, cartsIds: this.cartsIds}).then(res => {
+ console.log('res111', res)
+ if(res.code == 1){
+ t.$goWebUrl(res.data)
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+
+ getConfig () {
+ this.$util.post('Index/getConfig').then(res => {
+ if(res.code == 1){
+ this.Config = res.data
+ }
+ })
+ },
+ popOpen () {
+ this.$refs.popup.open()
+ },
+ //选择支付方式
+ choosePayment (n) {
+ this.payment = n
+ if(this.payment == 3){
+ if(!this.bankData){
+ this.getBank()
+ }
+ }
+ if(n == 1) {
+ let burl = '/pages/pays/pays?cartsIds=' + this.cartsIds
+ if(!this.$util.checkGoPages('/pages/login/login', burl, 0)) {
+ return
+ }
+ }
+ },
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ t.userInfo = res.data
+ })
+ },
+ //获取默认银行
+ getBank () {
+ this.$util.post('Bank/getDefBank').then(res => {
+ if(res.code == 1) {
+ this.bankData = res.data
+ }
+ })
+ },
+ //跳转到选择银行
+ chooseBank (e) {
+ let url = '/pages/bank/bank?backUrl=/pages/pays/pays?cartsIds=' + this.cartsIds
+ this.$util.goPages(url)
+ },
+ //跳转到选择地址
+ chooseAddr () {
+ let url = '/pages/address/address?backUrl=/pages/pays/pays?cartsIds=' + this.cartsIds
+ this.$util.goPages(url)
+ },
+ //获取默认地址和银行
+ getAddr() {
+ this.$util.post('Address/getDefAddr').then(res => {
+ if(res.code == 1) {
+ this.addrData = res.data
+ }
+ })
+ },
+ getCartsInfo (cartsIds) {
+ this.$util.post('Carts/getCartsInfo', {cartsIds: cartsIds}).then(res => {
+ if(res.code == 1) {
+ this.cartsData = res.data.cartsList
+ this.payTotal = res.data.total
+ this.rateTotal = res.data.rate
+ this.isFenqi = res.data.isFenqi
+ }
+ })
+ },
+ //设置购物车数量
+ setCartsNums (e, y){
+ let n = e.nums
+ let t = this
+ if(y == 1){
+ if(n == 1) {
+ return
+ } else {
+ n = n > 1 ? n - 1 : 1
+ }
+ } else {
+ n = n + 1
+ }
+ t.$util.post('Carts/setCartsNums', {id: e.id, nums: n}).then(res => {
+ if(res.code == 1) {
+ e.nums = n
+ t.payTotal = res.data.total
+ t.rateTotal = res.data.rate
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ payOrder () {
+ if(this.payment == 1 || this.payment == 3) {
+ let burl = '/pages/pays/pays?cartsIds=' + this.cartsIds
+ if(!this.$util.checkGoPages('/pages/login/login', burl, 0)) {
+ return
+ }
+ }
+
+ let t = this
+ if(!this.addrData){
+ return uni.showToast({
+ title: '请选择收货地址',
+ icon: 'error'
+ })
+ }
+ if(this.payment == 0){
+ return uni.showToast({
+ title: '请选择支付方式',
+ icon: 'error'
+ })
+ }
+
+ if(this.payment == 1){
+ if(this.userInfo.const < this.payTotal) {
+ return uni.showToast({
+ title: '您的额度不足',
+ icon: 'error'
+ })
+ }
+ this.getEsignStatus()
+ if(this.esignFlag == 0 && this.Config.esign_open == 1) {
+ return uni.showToast({
+ title: '请签署购货协议',
+ icon: 'error'
+ })
+ }
+ }
+
+ let param = {}
+ param = {
+ cartsIds: t.cartsIds,
+ bankId: t.bankData ? t.bankData.id : 0,
+ addrId: t.addrData.id,
+ payment: t.payment
+ }
+ t.$util.post('Order/createOrder', param).then(res => {
+ console.log(res)
+ if(res.code == 1) {
+ if(t.payment == 1) {
+ uni.showToast({
+ title: res.msg || '操作成功',
+ icon: 'success'
+ })
+ //更新用户缓存
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+ setTimeout(() => {
+ t.$util.goPages('/pages/order/order')
+ }, 1500)
+ } else if(t.payment == 2) {
+ uni.requestPayment({
+ "provider": "wxpay",
+ "orderInfo": res.data,
+ success(rs) {
+ uni.showToast({
+ title: '支付成功',
+ icon: 'success',
+ })
+ setTimeout(() => {
+ t.$util.goPages('/pages/order/order')
+ }, 1000)
+ },
+ fail(e) {
+ uni.showToast({
+ title: '支付失败',
+ icon: 'success',
+ })
+ setTimeout(() => {
+ t.$util.goPages('/pages/order/order')
+ }, 1000)
+ }
+ })
+ } else if(t.payment == 3) {
+ uni.showToast({
+ title: res.msg || '操作成功',
+ icon: 'success'
+ })
+ setTimeout(() => {
+ t.$util.goPages('/pages/order/order')
+ }, 1500)
+ }
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ //获取还款计划
+ getPayTask () {
+ let t = this
+ t.$util.post('Goods/getPlan', {cartsIds: t.cartsIds}).then(res => {
+ if(res.code == 1) {
+ t.paysData = res.data
+ t.popOpen()
+ } else {
+ uni.showToast({
+ title: res.msg || '操作失败',
+ icon: 'error'
+ })
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/pays.css);
+</style>
diff --git a/pages/profile/profile.vue b/pages/profile/profile.vue
new file mode 100644
index 0000000..c2f61bd
--- /dev/null
+++ b/pages/profile/profile.vue
@@ -0,0 +1,223 @@
+<template>
+ <view>
+ <yk-authpup ref="authpup" type="top" @changeAuth="changeAuth" noticeTitle="便于您使用该功能上传您的照片用于核实身份场景中读取相册内容" permissionID="WRITE_EXTERNAL_STORAGE"></yk-authpup>
+ <yk-authpup ref="camears" type="top" @changeAuth="changeAuth2" noticeTitle="便于您使用该功能便于您拍摄上传用于核实身份场景" permissionID="CAMERA"></yk-authpup>
+ <view class="profile">
+ <view class="profile-item">
+ <text class="label">头像(点击更换)</text>
+ <view class="" @tap="setImg">
+ <image :src="$baseUrl + userInfo.avatar" mode=""></image>
+ </view>
+ </view>
+ <view class="profile-item">
+ <text class="label">姓名</text>
+ <view class="">
+ <input type="text" disabled v-model="userInfo.realname" placeholder="请输入姓名" />
+ </view>
+ </view>
+ <view class="profile-item">
+ <text class="label">手机号</text>
+ <view class="">
+ <input type="text" disabled v-model="userInfo.phone" placeholder="请输入手机号" />
+ </view>
+ </view>
+ <view class="profile-item">
+ <text class="label">身份证</text>
+ <view class="">
+ <input type="text" disabled v-model="userInfo.idcard" placeholder="请输入身份证" />
+ </view>
+ </view>
+ <view class="profile-item">
+ <text class="label">总余额</text>
+ <view class="">
+ <input type="text" disabled v-model="userInfo.edu" placeholder="请输入可用额度" />
+ </view>
+ </view>
+ <view class="profile-item">
+ <text class="label">可用余额</text>
+ <view class="">
+ <input type="text" disabled v-model="userInfo.const" placeholder="请输入已用额度" />
+ </view>
+ </view>
+ <view class="profile-item" v-if="Config.put_open == 2">
+ <text class="label">支付权益</text>
+ <view class="">
+ <switch @change="equityOpen" v-if="userInfo.equity_open == 1" checked color="#e3b400" style="transform:scale(0.7)"/>
+ <switch @change="equityOpen" v-else color="#e3b400" style="transform:scale(0.7)"/>
+ </view>
+ </view>
+ </view>
+ <view class="logout" @tap="logOut">退出登录</view>
+ <view class="logout red" @tap="logOff">注销账号</view>
+ <view class="Copyright">
+ <view class="">
+ <text @tap="agreeDialog1">《用户协议》</text>
+ <text>|</text>
+ <text @tap="agreeDialog2">《隐私政策》</text>
+ </view>
+ <view class="" @tap="goWebUrl('http://beian.miit.gov.cn')">APP备案号:{{Config.icp}}</view>
+ <view class="" @tap="goWebUrl('http://beian.miit.gov.cn')">Copyright © {{Config.url}} All Rights Reserved.</view>
+ </view>
+ <agreePup ref="agreePup1" :gp="1" title="注册协议"></agreePup>
+ <agreePup ref="agreePup2" :gp="2" title="隐私政策"></agreePup>
+ </view>
+</template>
+
+<script>
+ import ykAuthpup from "@/components/yk-authpup/yk-authpup";
+ import agreePup from "@/components/agreePup/agreePup";
+ export default {
+ components: {
+ ykAuthpup,
+ agreePup,
+ },
+ data() {
+ return {
+ userInfo: uni.getStorageSync('user-info') ? JSON.parse(uni.getStorageSync('user-info')) : null,
+ Config: uni.getStorageSync('Config') ? JSON.parse(uni.getStorageSync('Config')) : null
+ }
+ },
+ onLoad() {
+ this.getConfig()
+ this.getUserInfo()
+ },
+ methods: {
+ goWebUrl (url) {
+ // #ifdef APP-PLUS
+ plus.runtime.openURL(url)
+ // #endif
+ },
+ agreeDialog1 (e) {
+ this.$refs.agreePup1.dialog = !this.$refs.agreePup1.dialog
+ },
+ agreeDialog2 (e) {
+ this.$refs.agreePup2.dialog = !this.$refs.agreePup2.dialog
+ },
+ getConfig () {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ t.Config = res.data
+ })
+ },
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ t.userInfo = res.data
+ let phone = res.data.phone.substring(0, 3) + '****' + res.data.phone.substring(7)
+ let idcard = res.data.idcard.substring(0, 6) + '****' + res.data.idcard.substring(14)
+ t.userInfo.phone = phone
+ t.userInfo.idcard = idcard
+ })
+ },
+ logOut () {
+ uni.setStorageSync('lzsc-token', null)
+ uni.setStorageSync('user-info', null)
+ uni.setStorageSync('choose-address',null)
+ uni.setStorageSync('choose-bank',null)
+ uni.showToast({
+ title: '退出成功',
+ icon: 'success'
+ })
+ setTimeout(() => {
+ uni.navigateTo({
+ url: '/pages/login/login'
+ })
+ }, 1500)
+ },
+ logOff () {
+ let t = this
+ uni.showModal({
+ title: '温馨提示',
+ content: '注销账号后该账号将无法再次注册,是否确认?',
+ success: function (res) {
+ if (res.confirm) {
+ t.$util.post('User/logOff').then(res => {
+ if(res.code == 1) {
+ uni.showToast({
+ title: res.msg || ''
+ })
+ setTimeout(() => {
+ uni.setStorageSync('lzsc-token', null)
+ uni.setStorageSync('user-info', null)
+ uni.navigateTo({
+ url: '/pages/login/login'
+ })
+ }, 1500)
+ } else {
+ uni.showToast({
+ title: res.msg || ''
+ })
+ }
+ })
+ }
+ }
+ })
+ },
+ equityOpen () {
+ let t = this
+ t.$util.post('User/setEquity').then(res => {
+ if(res.code == 1){
+ //更新用户信息缓存
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+ uni.showToast({
+ title: res.msg || '操作成功',
+ icon: 'success'
+ })
+ }
+ })
+ },
+ changeAuth () {
+ //这里是权限通过后执行自己的代码逻辑
+ if(uni.getSystemInfoSync().platform !='ios'){
+ this.$refs['camears'].open()
+ }
+ this.chooseImg()
+ },
+ changeAuth2(){
+ this.chooseImg()
+ },
+ setImg(){
+ if(uni.getSystemInfoSync().platform != 'ios'){
+ this.$refs['authpup'].open()
+ }else{
+ this.chooseImg()
+ }//调起自定义权限目的弹框,具体可看示例里面很详细
+ },
+ chooseImg () {
+ let t = this
+ uni.chooseImage({
+ count: 1, // 默认9
+ sizeType: ['original', 'compressed'],
+ success: (chooseImageRes) => {
+ let tempFilePaths = chooseImageRes.tempFilePaths
+ let token = uni.getStorageSync('lzsc-token')
+ let header = {
+ 'Accept': 'application/json',
+ 'authorization': token,
+ }
+ uni.showLoading({
+ title: '上传中..',
+ })
+ uni.uploadFile({
+ url: t.$baseUrl + '/api/user/setAvatar',
+ filePath: tempFilePaths[0],
+ header: header,
+ name: 'file',
+ success: (uploadFileRes) => {
+ uni.hideLoading()
+ let res = JSON.parse(uploadFileRes.data)
+ res = JSON.parse(t.$util.decryptDes(res.data))
+ t.userInfo.avatar = res.avatar
+ uni.setStorageSync('user-info', JSON.stringify(res))
+ }
+ })
+ }
+ })
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/profile.css);
+</style>
diff --git a/pages/quanshou/components/heijing.vue b/pages/quanshou/components/heijing.vue
new file mode 100644
index 0000000..25f9674
--- /dev/null
+++ b/pages/quanshou/components/heijing.vue
@@ -0,0 +1,84 @@
+<script>
+export default {
+ name: "heijing"
+}
+</script>
+
+<template>
+
+ <view>
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="linear-gradient" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;color: #C79372;display: flex">
+ <view style="display: flex;flex-direction: column;justify-content: center">5折购视频会员</view>
+ <view style="color: #2E2729;background: #F1CFB4;border-radius: 8rpx 8rpx 8rpx 8rpx;padding: 8rpx 20rpx;margin-left: 20rpx;font-size: 24rpx;">4选1 | x12次</view></view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 30rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y1.png" style="width: 108rpx;height: 108rpx;"></image>
+ <view style="color: #121212;font-size: 20rpx;">优酷视频</view>
+ <view style="font-size: 20rpx;color: #666666;">30元/月</view>
+ </view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y2.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">腾讯视频</view>
+ <view style="font-size: 20rpx;color: #666666;">30元/月</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y3.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">搜狐视频</view>
+ <view style="font-size: 20rpx;color: #666666;">30元/月</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y4.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">芒果TV</view>
+ <view style="font-size: 20rpx;color: #666666;">30元/月</view></view>
+ </view>
+ </view>
+
+
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="linear-gradient" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;color: #C79372;display: flex">
+ <view style="display: flex;flex-direction: column;justify-content: center">音频会员 5折各1次</view>
+ <view style="color: #2E2729;background: #F1CFB4;border-radius: 8rpx 8rpx 8rpx 8rpx;padding: 8rpx 20rpx;margin-left: 20rpx;font-size: 24rpx;">6选1 | x12次</view></view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 30rpx 20rpx;margin: 6rpx;;flex-wrap: wrap">
+
+
+ <view style="text-align: center;display:inline-block;flex: 1;width: 25%;margin-bottom: 20rpx;" ><image src="/static/imgs/quanshou/TY1.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">喜马拉雅</view><view style="font-size: 20rpx;color: #666666;">25元/月</view></view>
+ <view style="text-align: center;display:inline-block;flex: 1;width: 25%;margin-bottom: 20rpx;" ><image src="/static/imgs/quanshou/TY2.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">网易云</view><view style="font-size: 20rpx;color: #666666;">18元/月</view></view>
+ <view style="text-align: center;display:inline-block;flex: 1;width: 25%;margin-bottom: 20rpx;" ><image src="/static/imgs/quanshou/TY3.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">QQ音乐</view><view style="font-size: 20rpx;color: #666666;">18元/月</view></view>
+ <view style="text-align: center;display:inline-block;flex: 1;width: 25%;margin-bottom: 20rpx;" ><image src="/static/imgs/quanshou/TY5.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">酷狗音乐</view><view style="font-size: 20rpx;color: #666666;">18元/月</view></view>
+
+ <view style="text-align: center;display:inline-block;flex: 1;width: 25%;margin-bottom: 0rpx;" ><image src="/static/imgs/quanshou/TY4.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">蜻蜓FM</view><view style="font-size: 20rpx;color: #666666;">25元/月</view></view>
+ <view style="text-align: center;display:inline-block;flex: 1;width: 25%;margin-bottom: 0rpx;" ><image src="/static/imgs/quanshou/TY99.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">懒人听书</view><view style="font-size: 20rpx;color: #666666;">15/月</view></view>
+
+ </view>
+ </view>
+
+
+
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="linear-gradient" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;color: #C79372;display: flex">
+ <view style="display: flex;flex-direction: column;justify-content: center">5折购生活出行</view>
+ <view style="color: #2E2729;background: #F1CFB4;border-radius: 8rpx 8rpx 8rpx 8rpx;padding: 8rpx 20rpx;margin-left: 20rpx;font-size: 24rpx;">3选1 | x12次</view></view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 30rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+
+ <image src="/static/imgs/quanshou/ZQ1.png" style="height: 148rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/ZQ2.png" style="height: 148rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/ZQ3.png" style="height: 148rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ </view>
+ </view>
+
+
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="linear-gradient" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;color: #C79372;display: flex">
+ <view style="display: flex;flex-direction: column;justify-content: center">零食大礼包</view>
+ <view style="color: #2E2729;background: #F1CFB4;border-radius: 8rpx 8rpx 8rpx 8rpx;padding: 8rpx 20rpx;margin-left: 20rpx;font-size: 24rpx;">可领3次</view></view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 30rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+
+ <image src="/static/imgs/quanshou/LS1.png" style="height: 140rpx;width:100%; margin-bottom: 20rpx;"></image>
+ </view>
+ </view>
+
+ </view>
+</template>
+
+<style scoped lang="scss">
+.li-bg{
+ background: linear-gradient( 138deg, #4D4342 0%, #231D21 68%, #4A4242 100%);
+ border-radius: 24rpx 24rpx 24rpx 24rpx;
+ margin-top: 20rpx;
+}
+.gradient-text {
+ color: #C79372;
+}
+</style>
diff --git a/pages/quanshou/components/lanyaerji.vue b/pages/quanshou/components/lanyaerji.vue
new file mode 100644
index 0000000..39ab50f
--- /dev/null
+++ b/pages/quanshou/components/lanyaerji.vue
@@ -0,0 +1,51 @@
+<script>
+export default {
+ name: "lanyaerji",
+ data() {
+ return {
+ ls:[
+ {title:"康倍星助行器", synopsis:"老人助力行走器 可推可坐", img:"/static/imgs/quanshou/SW1.png"},
+ {title:"EMBERTON III", synopsis:"无线蓝牙家用户外防尘防水长续航小音响", img:"/static/imgs/quanshou/SW2.png"},
+ {title:"哈曼卡顿音响", synopsis:"蓝牙音箱 环绕立体声下沉式低音炮", img:"/static/imgs/quanshou/SW3.png"},
+ {title:"吉普自行车", synopsis:"山地车成人越野学生代步", img:"/static/imgs/quanshou/SW4.png"},
+ {title:"富迪堡葡萄酒", synopsis:"虎爵大师干红葡萄酒", img:"/static/imgs/quanshou/SW5.png"},
+ {title:"浴百家浴室柜", synopsis:"陶瓷一体盆柜洗手盆柜组合洗漱台", img:"/static/imgs/quanshou/SW6.png"},
+ {title:"小牧卫浴智能马桶", synopsis:"马桶座圈加热离座冲停零压劲冲", img:"/static/imgs/quanshou/SW7.png"},
+ {title:"蓝牙耳机", synopsis:"无线降噪IPX4防水", img:"/static/imgs/quanshou/SW8.png"},
+ ]
+ }
+ },
+}
+</script>
+
+<template>
+ <view>
+
+ <view style="display: flex;flex-wrap: wrap;justify-content: space-between;">
+
+ <view v-for="i in ls" :key="i.title" style="width: calc(50% - 14rpx);background: #F9F9F9;margin-bottom: 28rpx;position: relative;border-radius: 24rpx">
+ <image style="height: 359.23rpx;width: 100%;border-radius: 24rpx 24rpx 0 0 " :src="i.img"></image>
+ <image style="width: 68rpx;height: 72rpx;position: absolute;right: 22rpx;" src="/static/imgs/quanshou/SWLL.png"></image>
+ <view style="padding: 10rpx 20rpx 20rpx 20rpx;">
+ <view style="font-weight: 600;color: #333333;font-size: 32rpx;">{{ i.title }}</view>
+ <view class="ellipsis">{{ i.synopsis }}</view>
+ </view>
+
+ </view>
+
+
+ </view>
+
+
+ </view>
+</template>
+
+<style scoped lang="scss">
+.ellipsis {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 24rpx;color: #666666;margin-top: 10rpx;
+}
+
+</style>
diff --git a/pages/quanshou/components/list.vue b/pages/quanshou/components/list.vue
new file mode 100644
index 0000000..5a26a5c
--- /dev/null
+++ b/pages/quanshou/components/list.vue
@@ -0,0 +1,73 @@
+<script>
+export default {
+ name: "heijing"
+}
+</script>
+
+<template>
+
+ <view>
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="ttis" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;">影音会员 免费4选1</view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 20rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y1.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">优酷视频</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y2.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">腾讯视频</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y3.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">搜狐视频</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/Y4.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">芒果TV</view></view>
+ </view>
+ </view>
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="ttis" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;">音频会员 5折各1次</view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 30rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/TY1.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">喜马拉雅</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/TY2.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">网易云</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/TY3.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">QQ音乐</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/TY4.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">蜻蜓FM</view></view>
+ <view style="text-align: center;flex: 1" ><image src="/static/imgs/quanshou/TY5.png" style="width: 108rpx;height: 108rpx;"></image><view style="color: #121212;font-size: 20rpx;">酷狗音乐</view></view>
+ </view>
+ </view>
+
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="ttis" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;">茶饮/外卖券 5折起各1次</view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 20rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+
+ <image src="/static/imgs/quanshou/CY1.png" style="height: 146rpx;width: 120rpx;"></image>
+ <image src="/static/imgs/quanshou/CY2.png" style="height: 146rpx;width: 120rpx;"></image>
+ <image src="/static/imgs/quanshou/CY3.png" style="height: 146rpx;width: 120rpx;"></image>
+ <image src="/static/imgs/quanshou/CY4.png" style="height: 146rpx;width: 120rpx;"></image>
+ <image src="/static/imgs/quanshou/CY5.png" style="height: 146rpx;width: 120rpx;"></image>
+ </view>
+ </view>
+
+
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="ttis" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;">打车出行 6折起各1次</view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 30rpx 20rpx;margin: 6rpx;display: flex;justify-content: space-between">
+
+ <image src="/static/imgs/quanshou/DC1.png" style="height: 146rpx;width: 200rpx;"></image>
+ <image src="/static/imgs/quanshou/DC2.png" style="height: 146rpx;width: 200rpx;"></image>
+ <image src="/static/imgs/quanshou/DC3.png" style="height: 146rpx;width: 200rpx;"></image>
+ </view>
+ </view>
+ <view class="li-bg" style="padding-bottom: 6rpx;">
+ <view class="ttis" style="padding: 15rpx 28rpx;font-weight: 600;font-size: 32rpx;font-size: 32rpx;">乐享生活 部分免费各1次</view>
+ <view style="background: #FFFFFF;border-radius: 24rpx ;padding: 20rpx 20rpx 0 20rpx;margin: 6rpx;display: flex;justify-content: space-between;flex-wrap: wrap">
+
+ <image src="/static/imgs/quanshou/LX1.png" style="height: 96rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/LX2.png" style="height: 96rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/LX3.png" style="height: 96rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/LX4.png" style="height: 96rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/LX5.png" style="height: 96rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ <image src="/static/imgs/quanshou/LX6.png" style="height: 96rpx;width: 200rpx; margin-bottom: 20rpx;"></image>
+ </view>
+ </view>
+ </view>
+</template>
+
+<style scoped lang="scss">
+.li-bg{
+ background: linear-gradient( 138deg, #CED5E8 0%, #C9D5DF 68%, #B8D2F4 100%);
+ border-radius: 24rpx 24rpx 24rpx 24rpx;
+ margin-top: 20rpx;
+}
+</style>
diff --git a/pages/quanshou/components/tehuichongzhi.vue b/pages/quanshou/components/tehuichongzhi.vue
new file mode 100644
index 0000000..ab84bcf
--- /dev/null
+++ b/pages/quanshou/components/tehuichongzhi.vue
@@ -0,0 +1,255 @@
+<script>
+export default {
+ name: "tehuichongzhi",
+ props: {
+ VIP: {
+ type: Number,
+ default: 1
+ }
+ },
+}
+</script>
+
+<template>
+ <view>
+
+
+ <view v-if="VIP==1">
+ <view style="padding: 0 40rpx 0rpx 40rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 音频会员五选一
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;">
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/Y51.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">喜马拉雅</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/Y52.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">网易云</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/Y53.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">QQ音乐</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/Y54.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">蜻蜓FM</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/Y55.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">酷狗音乐</view>
+ </view>
+ </view>
+ </view>
+
+ <view style="height: 10rpx;background: #F7F7F7;"></view>
+
+
+ <view style="padding: 40rpx;padding-bottom: 20rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 视频会员八选一
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;flex-wrap: wrap">
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S81.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">优酷</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S82.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">腾讯视频</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S83.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">搜狐视频</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S84.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">芒果TV</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S85.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">爱奇艺</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S86.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">Bilibili</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S87.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">斗鱼直播</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/S89.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">虎牙直播</view>
+ </view>
+ </view>
+ </view>
+ <view style="height: 10rpx;background: #F7F7F7;"></view>
+ <view style="padding: 40rpx;padding-bottom: 20rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 外卖会员四选一
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;flex-wrap: wrap">
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/W41.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">美团</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/W42.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">饿了么</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/W43.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">京东外卖</view>
+ </view>
+ <view class="w25">
+ <image style="width: 108rpx;height: 108rpx;" src="/static/imgs/quanshou/W44.png"></image>
+ <view style="text-align: center ;color: #121212;font-size: 20rpx;">盒马</view>
+ </view>
+
+ </view>
+ </view>
+ <view style="height: 10rpx;background: #F7F7F7;"></view>
+
+ <view style="padding: 40rpx;padding-bottom:20rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 生活交通代金券
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;flex-wrap: wrap">
+ <view class="w33"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH1.png"></image></view>
+ <view class="w33"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH2.png"></image></view>
+ <view class="w33"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH3.png"></image></view>
+ <view class="w33"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH4.png"></image></view>
+ <view class="w33"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH5.png"></image></view>
+ <view class="w33"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH6.png"></image></view>
+ <view class="w33" style="margin-bottom: 0;"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH7.png"></image></view>
+ <view class="w33" style="margin-bottom: 0;"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH8.png"></image></view>
+ <view class="w33" style="margin-bottom: 0;"><image style="width: 200rpx;height: 148rpx;" src="/static/imgs/quanshou/SH9.png"></image></view>
+ </view>
+ </view>
+ </view>
+
+
+ <view v-if="VIP==2">
+ <view style="padding: 0 40rpx 0rpx 40rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 粉钻VIP特权
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;justify-content: space-between;flex-wrap: wrap">
+ <view class="w50">
+ <view><image style="width: 100rpx;height: 100rpx;" src="/static/imgs/quanshou/FZV1.png"></image></view>
+ <view style="margin-left: 10rpx;display: flex;flex-direction: column;justify-content: center ;">
+ <view style="font-size: 28rpx;color: #5B320D;font-weight: 600;min-height: 40rpx">优酷季卡</view>
+ <view style="font-size: 24rpx;color: #5B320D;">价值¥198</view>
+ </view>
+ </view>
+ <view class="w50">
+ <view><image style="width: 100rpx;height: 100rpx;" src="/static/imgs/quanshou/FZV2.png"></image></view>
+ <view style="margin-left: 10rpx;display: flex;flex-direction: column;justify-content: center ;">
+ <view style="font-size: 28rpx;color: #5B320D;font-weight: 600;min-height: 40rpx">爱奇艺季卡</view>
+ <view style="font-size: 24rpx;color: #5B320D;">价值¥88</view>
+ </view>
+ </view>
+ <view class="w50">
+ <view><image style="width: 100rpx;height: 100rpx;" src="/static/imgs/quanshou/FZV3.png"></image></view>
+ <view style="margin-left: 10rpx;display: flex;flex-direction: column;justify-content: center ;">
+ <view style="font-size: 28rpx;color: #5B320D;font-weight: 600;min-height: 40rpx">QQ音乐季卡</view>
+ <view style="font-size: 24rpx;color: #5B320D;">价值¥198</view>
+ </view>
+ </view>
+ <view class="w50">
+ <view><image style="width: 100rpx;height: 100rpx;" src="/static/imgs/quanshou/FZV4.png"></image></view>
+ <view style="margin-left: 10rpx;display: flex;flex-direction: column;justify-content: center ;">
+ <view style="font-size: 28rpx;color: #5B320D;font-weight: 600;min-height: 40rpx">黑胶季卡</view>
+ <view style="font-size: 24rpx;color: #5B320D;">价值¥145</view>
+ </view>
+ </view>
+ <view class="w50">
+ <view><image style="width: 100rpx;height: 100rpx;" src="/static/imgs/quanshou/FZV5.png"></image></view>
+ <view style="margin-left: 10rpx;display: flex;flex-direction: column;justify-content: center ;">
+ <view style="font-size: 28rpx;color: #5B320D;font-weight: 600;min-height: 40rpx">芒果TV季卡</view>
+ <view style="font-size: 24rpx;color: #5B320D;">价值¥99</view>
+ </view>
+ </view>
+ <view class="w50">
+ <view><image style="width: 100rpx;height: 100rpx;" src="/static/imgs/quanshou/FZV6.png"></image></view>
+ <view style="margin-left: 10rpx;display: flex;flex-direction: column;justify-content: center ;">
+ <view style="font-size: 28rpx;color: #5B320D;font-weight: 600;min-height: 40rpx">得到季卡</view>
+ <view style="font-size: 24rpx;color: #5B320D;">价值¥1168</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view style="height: 10rpx;background: #F7F7F7;"></view>
+ <view style="padding: 40rpx;padding-bottom: 20rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 红包免费领
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;flex-wrap: wrap">
+ <view class="w33" style="margin-bottom: 20rpx;"><image style="width: 208rpx;height: 178rpx;" src="/static/imgs/quanshou/KB1.png"></image></view>
+ <view class="w33" style="margin-bottom: 20rpx;"><image style="width: 208rpx;height: 178rpx;" src="/static/imgs/quanshou/KB2.png"></image></view>
+ <view class="w33" style="margin-bottom: 20rpx;"><image style="width: 208rpx;height: 178rpx;" src="/static/imgs/quanshou/KB3.png"></image></view>
+ <view class="w33" style="margin-bottom: 20rpx;"><image style="width: 208rpx;height: 178rpx;" src="/static/imgs/quanshou/KB4.png"></image></view>
+ <view class="w33" style="margin-bottom: 20rpx;"><image style="width: 208rpx;height: 178rpx;" src="/static/imgs/quanshou/KB5.png"></image></view>
+ <view class="w33" style="margin-bottom: 20rpx;"><image style="width: 208rpx;height: 178rpx;" src="/static/imgs/quanshou/KB6.png"></image></view>
+ </view>
+ </view>
+ <view style="height: 10rpx;background: #F7F7F7;"></view>
+
+ <view style="padding: 40rpx;padding-bottom: 0rpx;">
+ <view style="text-align: center;color: #333333;font-size: 32rpx;font-weight: 600;margin-bottom: 34rpx;">
+ <image style="width: 22rpx;height: 22rpx;margin-right: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ 专属特惠
+ <image style="width: 22rpx;height: 22rpx;margin-left: 58rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ </view>
+ <view style="display: flex;flex-wrap: wrap">
+ <view class="w100" style="margin-bottom: 20rpx;"><image style="width: 100%;height: 170rpx;" src="/static/imgs/quanshou/ZC1.png"></image></view>
+ <view class="w100" style="margin-bottom: 20rpx;"><image style="width: 100%;height: 170rpx;" src="/static/imgs/quanshou/ZC2.png"></image></view>
+ <view class="w100" style="margin-bottom: 0rpx;"><image style="width: 100%;height: 170rpx;" src="/static/imgs/quanshou/ZC3.png"></image></view>
+
+ </view>
+ </view>
+
+ </view>
+
+
+
+
+ </view>
+</template>
+
+<style scoped lang="scss">
+.w25 {
+ width: 20%;
+ text-align: center;
+ margin-bottom: 24rpx;
+}
+.w33{
+ width: 33%;
+ text-align: center;
+ margin-bottom: 15rpx;
+}
+.w50{
+ width: calc(50% - 20rpx);
+ background: #FFEAF9;border-radius: 24rpx;
+ padding: 20rpx;
+ display: flex;
+ margin-bottom: 20rpx;
+}
+.w100{
+ width: 100%;
+}
+</style>
diff --git a/pages/quanshou/components/xianlianghaojjuab.vue b/pages/quanshou/components/xianlianghaojjuab.vue
new file mode 100644
index 0000000..da2bf60
--- /dev/null
+++ b/pages/quanshou/components/xianlianghaojjuab.vue
@@ -0,0 +1,30 @@
+<script>
+export default {
+ name: "xianlianghaojjuab"
+}
+</script>
+
+<template>
+ <view>
+ <view style="margin-bottom: 20rpx;">
+ <image style="width: 22rpx;height: 22rpx;" src="/static/imgs/quanshou/Star.png"></image>
+ <text style="font-weight: 600;font-size: 32rpx;color: #333333;margin-left: 10rpx;">限量好券</text>
+ <text style="font-size: 28rpx;color: #666666;margin-left: 20rpx;">大额立减,省钱利器</text>
+ </view>
+
+ <view style="display: flex;flex-wrap: wrap;justify-content: space-between">
+ <view style="width: calc( 50% - 9rpx)"><image src="/static/imgs/quanshou/H1.png" style="width: 100%;height: 270rpx;margin-bottom: 10rpx;"></image></view>
+ <view style="width: calc( 50% - 9rpx)"><image src="/static/imgs/quanshou/H2.png" style="width: 100%;height: 270rpx;margin-bottom: 10rpx;"></image></view>
+ <view style="width: calc( 50% - 9rpx)"><image src="/static/imgs/quanshou/H3.png" style="width: 100%;height: 270rpx;margin-bottom: 10rpx;"></image></view>
+ <view style="width: calc( 50% - 9rpx)"><image src="/static/imgs/quanshou/H4.png" style="width: 100%;height: 270rpx;margin-bottom: 10rpx;"></image></view>
+ <view style="width: calc( 50% - 9rpx)"><image src="/static/imgs/quanshou/H5.png" style="width: 100%;height: 270rpx;margin-bottom: 10rpx;"></image></view>
+ <view style="width: calc( 50% - 9rpx)"><image src="/static/imgs/quanshou/H6.png" style="width: 100%;height: 270rpx;margin-bottom: 10rpx;"></image></view>
+
+ </view>
+
+ </view>
+</template>
+
+<style scoped lang="scss">
+
+</style>
diff --git a/pages/quanshou/index.vue b/pages/quanshou/index.vue
new file mode 100644
index 0000000..9c9570a
--- /dev/null
+++ b/pages/quanshou/index.vue
@@ -0,0 +1,375 @@
+<script>
+
+import tehuichongzhi from "@/pages/quanshou/components/tehuichongzhi.vue"; //虚拟
+import lanyaerji from "@/pages/quanshou/components/lanyaerji.vue"; // 实物
+
+export default {
+ name: "index",
+ components: {
+ tehuichongzhi,
+ lanyaerji,
+ },
+ data() {
+ return {
+ tips:'',
+ active: 0,
+ VIP: 1, // 1黄金 2铂金 3黑金
+ lst:[],
+ vipConfig: {
+ 1: {
+ bg: "/static/imgs/quanshou/TBBG1.png",
+ box: "/static/imgs/quanshou/NEWBOX1.png",
+ title: "/static/imgs/quanshou/VIPTXT1.png",
+ level: "/static/imgs/quanshou/VIP1.png",
+ textClass: "vip1-text",
+ progressBg: "#BBA767",
+ growText: " 88800/100000",
+ benefitText: "297.00"
+ },
+ 2: {
+ bg: "/static/imgs/quanshou/TBBG2.png",
+ box: "/static/imgs/quanshou/NEWBOX2.png",
+ title: "/static/imgs/quanshou/VIPTXT2.png",
+ level: "/static/imgs/quanshou/VIP2.png",
+ textClass: "vip2-text",
+ progressBg: "#8094A6",
+ growText: " 88800/100000",
+ benefitText: "594.00"
+ },
+ 3: {
+ bg: "/static/imgs/quanshou/TBBG3.png",
+ box: "/static/imgs/quanshou/VIPBOX3.png",
+ title: "/static/imgs/quanshou/VIPTXT3.png",
+ level: "/static/imgs/quanshou/VIPLVL3.png",
+ textClass: "vip3-text",
+ progressBg: "#7B776E",
+ growText: " 88800/100000",
+ benefitText: "891.00"
+ }
+ },
+ total: 0,
+ };
+ },
+ computed: {
+ currentVip() {
+ return this.vipConfig[this.VIP] || this.vipConfig[1];
+ }
+ },
+ onLoad(pro) {
+
+ const _this = this;
+ uni.request({
+ url: _this.$webHost+'/api/v2/customer/getRyxBenefitsRecordList?phone='+_this.$util.getUserInfo().phone,
+ success: function (res) {
+ if(res.data.code==200){
+ _this.lst = res.data.data;
+ _this.lst.forEach(item=>{
+ if(item && item.isBuy === 1 && [1,2,3].includes(item.period)) {_this.VIP = item.period;}
+ })
+ _this.lst.forEach(item=>{
+ if(item.isBuy === 1 ) {
+ // 保留两位小数
+ _this.total += parseFloat(item.amount);
+ }
+ })
+ _this.total = Intl.NumberFormat('zh-CN', {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2,
+ }).format(_this.total);
+ } else {
+
+
+ }
+ }
+ })
+ },
+ methods: {
+ numbs(period) {
+ const obj ={
+ 1:'一',
+ 2:'二',
+ 3:'三'
+ }
+ return obj[period]
+ },
+ toHuiyuan(){
+ const _this = this;
+ uni.request({
+ url: _this.$webHost+'/api/v2/memberEquity/getUrlByShop/'+_this.$util.getUserInfo().phone,
+ success: function (res) {
+ if(res.data.code==200){
+ uni.request( {
+ url: _this.$webHost+'/api/v2/memberEquity/clickUrlByShop/'+_this.$util.getUserInfo().phone,
+ })
+ uni.navigateTo( {
+ url: '/pages/web/index?webUel=' + encodeURIComponent(res.data.data.url)
+ })
+ } else {
+ uni.showToast( {
+ title: res.data.data || res.data.msg,
+ icon: 'none'
+ })
+ }
+ }
+ })
+
+
+ },
+ getTips(){
+ const _this = this;
+ uni.request({
+ url: _this.$webHost+'/api/v2/shop/findExpressNo?phone='+_this.$util.getUserInfo().phone,
+ success: function (res) {
+ if(res.data.code==200){
+ _this.tips = res.data.data;
+ _this.$refs.comment.open()
+
+ } else {
+ uni.showToast( {
+ title: res.data.data || res.data.msg,
+ icon: 'none'
+ })
+ }
+ }
+ })
+ },
+ }
+};
+</script>
+
+<template>
+ <view style="background: white;">
+ <!-- 顶部 VIP 卡片 -->
+ <view class="vip-box" :style="{ backgroundImage: `url(${currentVip.box})` }" >
+ <view style="position: relative">
+ <image :src="currentVip.level" style="height: 200rpx;width: 100%;"></image>
+ <view style="position: absolute;top: 120rpx;left: 48rpx;color: #754200;font-size: 28rpx;" :class="VIP==1?'vip1-num':'vip2-num'">已购会员{{ total }}</view>
+ </view>
+ <view class="card-wrap" style="margin-top: 38rpx;">
+ <view class="card-item" v-for="i in lst" :class="i.isBuy?'card-item-buy':''">
+<!-- <view class="card-title">{{numbs(i.period)}}期会员</view>-->
+ <view class="card-title">{{i.buyDate}}</view>
+ <view class="card-price">
+ <text>¥</text>
+ <text class="card-num" >{{ i.amount }}</text>
+ </view>
+ <view class="card-date" style="height: 40rpx"> </view>
+ <!-- <view class="card-date">{{ i.buyDate }}</view>-->
+ <view class="has-buy">{{ i.isBuy?'已扣款' : '待扣款' }}</view>
+ </view>
+ </view>
+ </view>
+
+ <!-- 会员购买 + 权益部分 -->
+ <view class="content-wrap">
+
+
+ <view class="tab-wrap">
+ <text @click="active=0" :class="active==0?'active':''">实物权益</text>
+ <text @click="active=1" :class="active==1?'active':''">虚拟权益</text>
+ </view>
+
+ <view class="note" style="margin-bottom: 20rpx;text-align: center" v-if="active==0">页面展示为实物样例,实际以用户收到的商品为准</view>
+
+ <lanyaerji v-if="active==0" style="margin:0 30rpx;"/>
+
+ <tehuichongzhi v-else :VIP="VIP" style="margin-top: 50rpx;" />
+
+ <view style="text-align: center;margin: 30rpx;">
+ <button class="exchange-btn" v-if="active==0" @click="getTips">我要查物流</button>
+ <button class="exchange-btn" v-else @click="toHuiyuan">我要兑换</button>
+ <view class="note" v-if="active==0">* 页面为实物样例,实际用户收到的商品为准</view>
+ <view class="note" v-else>* 页面为虚拟权益预览,实际用户以当日兑换内容为准</view>
+ </view>
+ </view>
+
+
+ <uni-popup type="center" ref="comment" >
+ <view style="background-image: url('/static/imgs/BOXSDF.png');border-radius: 48rpx;padding: 28rpx ;width: 650rpx;background-repeat: no-repeat;background-size: 100% 100%">
+ <view style="text-align: center;padding-top: 30rpx;" >
+ <image src="/static/imgs/yifa.png" style="width:372rpx;height: 240rpx;"></image>
+ </view>
+ <view style="font-size: 32rpx;font-weight: 600;color: #333333;text-align: center;margin-top: 34rpx;margin-bottom: 80rpx;padding: 0 28rpx;">
+ <view>{{ tips }}</view>
+ </view>
+ <view @click="$refs.comment.close()" style="font-weight: 500;font-size: 32rpx;color: #fff;text-align: center;padding: 24rpx 28rpx;border-top: 2rpx solid #EEEEEE;background: #FF1472;border-radius: 40rpx ;">好的</view>
+ </view>
+ </uni-popup>
+ </view>
+</template>
+
+<style scoped lang="scss">
+
+/* 顶部 VIP 样式 */
+.vip-bg {
+ background-size: 100%;
+ background-repeat: no-repeat;
+ padding-top: 60rpx;
+ padding-bottom: 150rpx;
+}
+.vip-box {
+ background-repeat: no-repeat;padding:20rpx 30rpx 60rpx 30rpx;
+}
+.gradient-text {
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-weight: 600;
+}
+.big-text {
+ margin-top: 20rpx;
+ font-size: 28rpx;
+}
+.small-text {
+ margin-top: 20rpx;
+ font-size: 24rpx;
+}
+.vip1-text {
+ background: linear-gradient(90deg, #754200, #ff9900);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+.vip2-text {
+ background: linear-gradient(90deg, #425268, #8094A6);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+.vip3-text {
+ background: linear-gradient(90deg, #ECD4C6, #C79372);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+.progress-bar {
+ height: 16rpx;
+ border-radius: 20rpx;
+ width: 100%;
+ margin-top: 24rpx;
+ position: relative;
+}
+.progress-inner {
+ position: absolute;
+ background: #fff;
+ border-radius: 6rpx;
+ left: 0;
+ top: 0;
+ width: 50%;
+ height: 16rpx;
+}
+
+/* 内容区 */
+.content-wrap {
+ padding: 30rpx 0;
+ background: #fff;
+ border-radius: 50rpx 50rpx 0 0;
+ position: relative;
+ top: -60rpx;
+}
+.card-wrap {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 40rpx;
+}
+.card-item {
+ background: #f5f5f5;
+ border-radius: 24rpx;
+ padding-top: 60rpx;
+ text-align: center;
+ //width: calc(50% - 14rpx);
+ width: 100%;
+ position: relative;
+}
+.card-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ margin-bottom: 34rpx;
+}
+.card-price {
+ color: #333;
+ font-size: 28rpx;
+ font-weight: 600;
+}
+.card-num {
+ font-size: 48rpx;
+ font-weight: bold;
+ margin: 0 8rpx;
+}
+.card-date {
+ font-size: 24rpx;
+ margin-top: 28rpx;
+ border-radius: 0rpx 0rpx 24rpx 24rpx;
+ background: #fff;
+ //background: #EAEAEA;
+ color: #666666;
+ padding: 16rpx 0;
+}
+.has-buy {
+ background: #FF922C;
+ border-radius: 8rpx;
+ height: 42rpx;
+ width: 92rpx;
+ font-size: 24rpx;
+ color: #fff;
+ position: absolute;
+ top: -21rpx;
+ left: 28rpx;
+ line-height: 42rpx;
+ display: none;
+}
+.card-item-buy {
+ background: #fff;
+}
+.card-item-buy{
+ .card-date{
+ //background: #FF922C;
+ background: #fff;
+ color: white;
+ }
+ .has-buy{
+ display: block;
+ }
+
+}
+/* tab */
+.tab-wrap {
+ display: flex;
+ justify-content: space-evenly;
+ margin-bottom: 50rpx;
+}
+.tab-wrap text {
+ font-weight: 600;
+ font-size: 36rpx;
+ color: #666;
+}
+.active {
+ color: #333 !important;
+ position: relative;
+ &::after {
+ content: "";
+ display: block;
+ width: 50rpx;
+ height: 8rpx;
+ background: linear-gradient( 91deg, #FDFAFF 0%, #F9C969 100%);
+ border-radius: 32rpx;
+ position: absolute;
+ bottom: -20rpx;
+ left: calc(50% - 25rpx);
+ }
+}
+
+/* 按钮 */
+.exchange-btn {
+ font-weight: 600;
+ font-size: 36rpx;
+ color: #FFD39A;
+ padding: 10rpx;
+ background: linear-gradient( 91deg, #A97132 0%, #542C09 100%);
+ border-radius: 200rpx;
+}
+.note {
+ font-size: 24rpx;
+ color: #999;
+ margin-top: 20rpx;
+}
+.vip2-num{
+ color: #8E1768 !important;
+}
+</style>
diff --git a/pages/quanyi/components/addAddress/index.vue b/pages/quanyi/components/addAddress/index.vue
index a612372..beae164 100644
--- a/pages/quanyi/components/addAddress/index.vue
+++ b/pages/quanyi/components/addAddress/index.vue
@@ -130,7 +130,7 @@
});
return;
}
- const params = uni.getStorageSync('ygxLogin')
+ const params = uni.getStorageSync('qxgLogin')
uni.request({
url: _this.$webHost + "/api/v2/customer/appAddCstAddress",
method: "POST",
diff --git a/pages/quanyi/components/code/index.vue b/pages/quanyi/components/code/index.vue
deleted file mode 100644
index f6663b3..0000000
--- a/pages/quanyi/components/code/index.vue
+++ /dev/null
@@ -1,323 +0,0 @@
-<script>
-import {
- payBindCardToCodes,
- payVerifySMSCodes,
- xinheyuanBankcardSave,
-} from "@/api/modules/user";
-export default {
- props: {
- bankDetail: {
- type: Object,
- default() {
- return {};
- },
- },
- queryBind: {
- type: Object,
- default() {
- return {};
- },
- },
- },
- computed: {
- customStyle() {
- return {
- height: "100rpx",
- background: "#EE2626",
- color: "#fff",
- borderRadius: "50rpx",
- fontSize: "34rpx",
- };
- },
- inputStyle() {
- return {
- fontWeight: "400",
- fontSize: "30rpx",
- };
- },
- },
-
- created() {
- this.detail = this.bankDetail;
- this.detail.verificationCode = "";
- this.detail.bankName = this.queryBind.bankName;
- this.detail.bankId = this.queryBind.cardNumber;
- this.detail.bankPhoneNo = this.queryBind.cardPhone;
- },
-
- data() {
- return {
- lstyle: {
- color: "#333333",
- fontSize: "30rpx",
- fontWeight: "bold",
- },
-
- isCounting: false,
- countText: "",
- detail: {
- bankName: "",
- verificationCode: "",
- },
- bankList: [],
- bankCode: "",
- callbackData: "",
- };
- },
- methods: {
-
- submitPlan() {
- const _this = this;
- const pro = uni.getStorageSync("params");
-
- if (!this.detail.bankPhoneNo) {
- uni.showToast({
- title: "请输入手机号",
- icon: "none",
- });
- return;
- }
- if (!this.detail.verificationCode) {
- uni.showToast({
- title: "请输入验证码",
- icon: "none",
- });
- return;
- }
-
- const callbackData = uni.getStorageSync("callbackData");
- const paymentMethod = uni.getStorageSync("payBindCardInf")[1]['paymentMethod'];
- payVerifySMSCodes({
- ...callbackData,
- customerId: pro.customerId,
- cardName: uni.getStorageSync("userName"), // 真实姓名
- bankName: _this.detail.bankName,
- cardIdNo: uni.getStorageSync("idCardNo"),
-
- cardPhone: _this.detail.bankPhoneNo,
- paymentMethod:paymentMethod,
- cardNumber: _this.detail.bankId,
- verificationCode: _this.detail.verificationCode, //短信
- }).then((res) => {
- if(res){
- this.$emit("submit", this.detail);
- }
- });
- },
- off() {
- this.$emit("off");
- },
- getCode() {
- if (this.isCounting) {
- return;
- }
- const paymentMethod = uni.getStorageSync("payBindCardInf")[1]['paymentMethod'];
- const _this = this;
- const pro = uni.getStorageSync("params");
- xinheyuanBankcardSave({
- customerId: pro.customerId,
- nameReal: uni.getStorageSync("userName"),
- cardNo: _this.detail.bankId,
- idCard: uni.getStorageSync("idCardNo"),
- bankId: "1",
- bankPhoneNo: _this.detail.bankPhoneNo,
- bankCode: _this.bankCode,
- bankName: _this.detail.bankName,
- phone: _this.detail.bankPhoneNo,
- preBindType: "prebc",
- }).then((res) => {
- payBindCardToCodes({
- cardIdNo: uni.getStorageSync("idCardNo"),
- customerId: pro.customerId,
- cardName: uni.getStorageSync("userName"),
- cardNo: _this.detail.bankId,
- cardPhone: _this.detail.bankPhoneNo,
- cardNumber: _this.detail.bankId,
- bankName: _this.detail.bankName,
- preBindType: "prebc",
- paymentMethod:paymentMethod,
- againType : true
- }).then((res) => {
- if(!res){
- return
- }
- _this.callbackData = res;
- uni.setStorageSync("callbackData", res);
-
- uni.showToast({
- title: "验证码已发送",
- icon: "none",
- });
- uni.setStorageSync("YF", 1);
-
- // 设置倒计时功能
- let count = 60;
- const timer = setInterval(() => {
- count--;
- if (count <= 0) {
- clearInterval(timer);
- _this.$set(_this, "isCounting", false);
- } else {
- _this.$set(_this, "isCounting", true);
- _this.$set(_this, "countText", `${count}秒后重新获取`);
- }
- }, 1000);
- });
- });
- },
- },
-};
-</script>
-
-<template>
- <view>
- <view class="head">
- <view
- style="
- text-align: center;
- font-weight: bold;
- font-size: 36rpx;
- position: relative;
- height: 50rpx;
- "
- >
-
- <image
- @click="off"
- src="@/static/img/close.png"
- style="
- width: 50rpx;
- height: 50rpx;
- position: absolute;
- right: 0;
- top: -2rpx;
- "
- ></image>
- </view>
- </view>
- <view style="
- font-weight: bold;
- font-size: 36rpx;
- position: relative;
- margin-bottom: 12rpx;
- padding-left: 38rpx;
- ">短信确认</view>
- <view style="font-size: 28rpx;color: #252938; padding-left: 38rpx;">为确保安全到账,需再次对您的收款账户进行短信验证</view>
- <view class="con">
- <u-form
- :labelStyle="lstyle"
- labelPosition="left"
- :model="detail"
- ref="form"
- labelWidth="100"
- >
-
- <u-form-item
- class="item"
- label="手机号"
- prop="repayTermStr"
- borderBottom
- >
- <u-input
- :adjustPosition="true"
- maxlength="11"
- :customStyle="inputStyle"
- disabledColor="none"
- inputAlign="right"
- v-model="detail.bankPhoneNo"
- border="none"
- placeholder="请输入手机号"
- ></u-input>
- </u-form-item>
-
- <u-form-item
- class="item"
- label="短信验证码"
- prop="needVerify"
- >
- <u-input
- :adjustPosition="true"
- maxlength="6"
- inputAlign="right"
- v-model="detail.verificationCode"
- border="none"
- placeholder="请输入验证码"
- >
- <template #suffix>
- <text
- class="code"
- :class="isCounting ? 'ks' : ''"
- @click="getCode"
- >{{ isCounting ? countText : "获取验证码" }}</text
- >
- </template>
- </u-input>
- </u-form-item>
- <u-form-item >
- <view class="but">
- <u-button
- :customStyle="customStyle"
- shape="circle"
- @click="submitPlan"
- >确认</u-button
- >
- </view>
- </u-form-item>
- </u-form>
- </view>
- </view>
-</template>
-
-<style scoped lang="scss">
-.ks {
- color: #999999 !important;
-}
-.but {
- width: 100%;
- margin-top: 46rpx;
- .pack {
- text-align: center;
- margin-top: 20rpx;
- font-size: 30rpx;
- display: flex;
- flex-direction: row;
- justify-content: center;
- }
-}
-.head {
- margin-top: 40rpx;
- padding: 0 40rpx;
-
- font-size: 32rpx;
- color: #252938;
- .title {
- display: flex;
- flex-direction: row;
- text-align: center;
- color: #252938;
- font-size: 32rpx;
- font-weight: bold;
- .num {
- color: #4766fe;
- display: contents;
- }
- }
-}
-
-.con {
- padding: 0 38rpx;
- .pt40 {
- padding-top: 40rpx;
- }
- .mr {
- margin-right: 20rpx;
- }
- .code {
- margin-left: 40rpx;
- font-size: 24rpx;
- color: #4766fe;
- background: none;
- border-radius: 8rpx 8rpx 8rpx 8rpx;
- }
-}
-</style>
diff --git a/pages/quanyi/components/code/set.vue b/pages/quanyi/components/code/set.vue
deleted file mode 100644
index 569df8e..0000000
--- a/pages/quanyi/components/code/set.vue
+++ /dev/null
@@ -1,323 +0,0 @@
-<script>
-import {
- payBindCardToCodes,
- payVerifySMSCodes,
- xinheyuanBankcardSave,
-} from "@/api/modules/user";
-export default {
- props: {
- bankDetail: {
- type: Object,
- default() {
- return {};
- },
- },
- queryBind: {
- type: Object,
- default() {
- return {};
- },
- },
- },
- computed: {
- customStyle() {
- return {
- height: "100rpx",
- background: "#EE2626",
- color: "#fff",
- borderRadius: "50rpx",
- fontSize: "34rpx",
- };
- },
- inputStyle() {
- return {
- fontWeight: "400",
- fontSize: "30rpx",
- };
- },
- },
-
- created() {
- this.detail = this.bankDetail;
- this.detail.verificationCode = "";
- this.detail.bankName = this.queryBind.bankName;
- this.detail.bankId = this.queryBind.cardNumber;
- this.detail.bankPhoneNo = this.queryBind.cardPhone;
- },
-
- data() {
- return {
- lstyle: {
- color: "#333333",
- fontSize: "30rpx",
- fontWeight: "bold",
- },
-
- isCounting: false,
- countText: "",
- detail: {
- bankName: "",
- verificationCode: "",
- },
- bankList: [],
- bankCode: "",
- callbackData: "",
- };
- },
- methods: {
-
- submitPlan() {
- const _this = this;
- const pro = uni.getStorageSync("params");
-
- if (!this.detail.bankPhoneNo) {
- uni.showToast({
- title: "请输入手机号",
- icon: "none",
- });
- return;
- }
- if (!this.detail.verificationCode) {
- uni.showToast({
- title: "请输入验证码",
- icon: "none",
- });
- return;
- }
-
- const callbackData = uni.getStorageSync("callbackData");
- const paymentMethod = uni.getStorageSync("payBindCardInf")[2]['paymentMethod'];
- payVerifySMSCodes({
- ...callbackData,
- customerId: pro.customerId,
- cardName: uni.getStorageSync("userName"), // 真实姓名
- bankName: _this.detail.bankName,
- cardIdNo: uni.getStorageSync("idCardNo"),
-
- cardPhone: _this.detail.bankPhoneNo,
- paymentMethod:paymentMethod,
- cardNumber: _this.detail.bankId,
- verificationCode: _this.detail.verificationCode, //短信
- }).then((res) => {
- if(res){
- this.$emit("submit", this.detail);
- }
- });
- },
- off() {
- this.$emit("off");
- },
- getCode() {
- if (this.isCounting) {
- return;
- }
- const paymentMethod = uni.getStorageSync("payBindCardInf")[2]['paymentMethod'];
- const _this = this;
- const pro = uni.getStorageSync("params");
- xinheyuanBankcardSave({
- customerId: pro.customerId,
- nameReal: uni.getStorageSync("userName"),
- cardNo: _this.detail.bankId,
- idCard: uni.getStorageSync("idCardNo"),
- bankId: "1",
- bankPhoneNo: _this.detail.bankPhoneNo,
- bankCode: _this.bankCode,
- bankName: _this.detail.bankName,
- phone: _this.detail.bankPhoneNo,
- preBindType: "prebc",
- }).then((res) => {
- payBindCardToCodes({
- cardIdNo: uni.getStorageSync("idCardNo"),
- customerId: pro.customerId,
- cardName: uni.getStorageSync("userName"),
- cardNo: _this.detail.bankId,
- cardPhone: _this.detail.bankPhoneNo,
- cardNumber: _this.detail.bankId,
- bankName: _this.detail.bankName,
- preBindType: "prebc",
- paymentMethod:paymentMethod,
- againType : true
- }).then((res) => {
- if(!res){
- return
- }
- _this.callbackData = res;
- uni.setStorageSync("callbackData", res);
-
- uni.showToast({
- title: "验证码已发送",
- icon: "none",
- });
- uni.setStorageSync("YF", 1);
-
- // 设置倒计时功能
- let count = 60;
- const timer = setInterval(() => {
- count--;
- if (count <= 0) {
- clearInterval(timer);
- _this.$set(_this, "isCounting", false);
- } else {
- _this.$set(_this, "isCounting", true);
- _this.$set(_this, "countText", `${count}秒后重新获取`);
- }
- }, 1000);
- });
- });
- },
- },
-};
-</script>
-
-<template>
- <view>
- <view class="head">
- <view
- style="
- text-align: center;
- font-weight: bold;
- font-size: 36rpx;
- position: relative;
- height: 50rpx;
- "
- >
-
- <image
- @click="off"
- src="@/static/img/close.png"
- style="
- width: 50rpx;
- height: 50rpx;
- position: absolute;
- right: 0;
- top: -2rpx;
- "
- ></image>
- </view>
- </view>
- <view style="
- font-weight: bold;
- font-size: 36rpx;
- position: relative;
- margin-bottom: 12rpx;
- padding-left: 38rpx;
- ">本人提交确认</view>
- <view style="font-size: 28rpx;color: #252938; padding-left: 38rpx;padding-right: 30rpx;">根据合规要求我们将进行本人提交意愿确认的短信校验,请注意查看短信验证码</view>
- <view class="con">
- <u-form
- :labelStyle="lstyle"
- labelPosition="left"
- :model="detail"
- ref="form"
- labelWidth="100"
- >
-
- <u-form-item
- class="item"
- label="手机号"
- prop="repayTermStr"
- borderBottom
- >
- <u-input
- :adjustPosition="true"
- maxlength="11"
- :customStyle="inputStyle"
- disabledColor="none"
- inputAlign="right"
- v-model="detail.bankPhoneNo"
- border="none"
- placeholder="请输入手机号"
- ></u-input>
- </u-form-item>
-
- <u-form-item
- class="item"
- label="短信验证码"
- prop="needVerify"
- >
- <u-input
- :adjustPosition="true"
- maxlength="6"
- inputAlign="right"
- v-model="detail.verificationCode"
- border="none"
- placeholder="请输入验证码"
- >
- <template #suffix>
- <text
- class="code"
- :class="isCounting ? 'ks' : ''"
- @click="getCode"
- >{{ isCounting ? countText : "获取验证码" }}</text
- >
- </template>
- </u-input>
- </u-form-item>
- <u-form-item >
- <view class="but">
- <u-button
- :customStyle="customStyle"
- shape="circle"
- @click="submitPlan"
- >确认提交</u-button
- >
- </view>
- </u-form-item>
- </u-form>
- </view>
- </view>
-</template>
-
-<style scoped lang="scss">
-.ks {
- color: #999999 !important;
-}
-.but {
- width: 100%;
- margin-top: 46rpx;
- .pack {
- text-align: center;
- margin-top: 20rpx;
- font-size: 30rpx;
- display: flex;
- flex-direction: row;
- justify-content: center;
- }
-}
-.head {
- margin-top: 40rpx;
- padding: 0 40rpx;
-
- font-size: 32rpx;
- color: #252938;
- .title {
- display: flex;
- flex-direction: row;
- text-align: center;
- color: #252938;
- font-size: 32rpx;
- font-weight: bold;
- .num {
- color: #4766fe;
- display: contents;
- }
- }
-}
-
-.con {
- padding: 0 38rpx;
- .pt40 {
- padding-top: 40rpx;
- }
- .mr {
- margin-right: 20rpx;
- }
- .code {
- margin-left: 40rpx;
- font-size: 24rpx;
- color: #4766fe;
- background: none;
- border-radius: 8rpx 8rpx 8rpx 8rpx;
- }
-}
-</style>
diff --git a/pages/quanyi/index.vue b/pages/quanyi/index.vue
index b8af6f6..3c1f689 100644
--- a/pages/quanyi/index.vue
+++ b/pages/quanyi/index.vue
@@ -6,10 +6,10 @@
async created() {
const _this = this;
await uni.request({
- url: _this.$webHost+'/api/v2/auth/ygxLogin?phone='+_this.$util.getUserInfo().phone,
+ url: _this.$webHost+'/api/v2/auth/qxgIosUnionLogin?phone='+_this.$util.getUserInfo().phone,
success: function (res) {
- _this.ygxLogin = res.data.data;
- uni.setStorageSync('ygxLogin',_this.ygxLogin)
+ _this.qxgLogin = res.data.data;
+ uni.setStorageSync('qxgLogin',_this.qxgLogin)
uni.request({
url: _this.$webHost+'/api/v2/buryingPoint/record',
method:'PUT',
@@ -52,7 +52,7 @@
data() {
return {
- ygxLogin:{},
+ qxgLogin:{},
protocolChecked: [0],
isAgree: false,
tm: null,
@@ -290,7 +290,7 @@
}
.back{
- background-image: url("/static/img/ba.png");
+ background-image: url("/static/imgs/ba.png");
background-repeat: no-repeat;
background-size: 100% 100%;
padding: 22rpx 30rpx;
diff --git a/pages/regist/regist.vue b/pages/regist/regist.vue
new file mode 100644
index 0000000..e2b81a3
--- /dev/null
+++ b/pages/regist/regist.vue
@@ -0,0 +1,170 @@
+<template>
+ <view>
+ <view class="login-title">
+ <view class="login-title-1">手机号注册</view>
+ </view>
+ <view class="login-list">
+ <view class="login-item">
+ <input type="tel" v-model="formData.phone" placeholder="请输入手机号" />
+ </view>
+ <view class="login-item">
+ <input type="password" v-model="formData.pass" placeholder="请输入登录密码" />
+ </view>
+ <view class="login-item">
+ <input type="password" v-model="formData.tpass" placeholder="请确认登录密码" />
+ </view>
+ <view class="login-item">
+ <input type="number" v-model="formData.code" maxlength="4" placeholder="请输入验证码" />
+ <text class="code2" v-if="leftTime < 60">{{leftTime}}S后获取</text>
+ <text class="code" @click="sendCode" v-else>获取验证码</text>
+ </view>
+ </view>
+ <view class="loginBtn">
+ <view class="loginBtn-desc">
+ <image @click="agreeClick" class="loginBtn-icon" :src="!loginAct ? '/static/imgs/check.png' : '/static/imgs/checked.png'" mode=""></image>
+ <text>我已阅读并同意</text>
+ <text class="blue" @tap="agreeDialog1">《注册协议》</text>
+ <text class="blue" @tap="agreeDialog2">《隐私政策》</text>
+ </view>
+ <view :class="loginAct ? 'login-btn active' : 'login-btn'" @click="registUser">立即注册</view>
+ <view class="loginDesc">
+ <view class="fc" @tap="$util.goPages('/pages/login/login')">已有账号,立即登录</view>
+ </view>
+ </view>
+ <agreePup ref="agreePup1" :gp="1" title="注册协议"></agreePup>
+ <agreePup ref="agreePup2" :gp="2" title="隐私政策"></agreePup>
+ </view>
+</template>
+
+<script>
+ import agreePup from "@/components/agreePup/agreePup";
+ export default {
+ data() {
+ return {
+ loginType: 1,
+ loginAct: false,
+ formData: {
+ phone: '',
+ pass: '',
+ tpass: '',
+ code: '',
+ },
+ phoneReg: /^\d{11}$/,
+ leftTime: 60,
+ }
+ },
+ onLoad(op) {
+ this.backUrl = op.backUrl ? op.backUrl : ''
+ },
+ methods: {
+ agreeDialog1 (e) {
+ this.$refs.agreePup1.dialog = !this.$refs.agreePup1.dialog
+ },
+ agreeDialog2 (e) {
+ this.$refs.agreePup2.dialog = !this.$refs.agreePup2.dialog
+ },
+ loginTypeClick (e) {
+ this.loginType = e
+ },
+ agreeClick () {
+ this.loginAct = !this.loginAct
+ },
+ registUser () {
+ let t = this
+ if(!t.loginAct) {
+ return uni.showToast({
+ title: '请阅读并同意协议政策',
+ icon: 'error'
+ })
+ }
+ if(t.formData.phone == '' || !t.phoneReg.test(t.formData.phone)){
+ return uni.showToast({
+ title: '手机号错误!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.pass == ''){
+ return uni.showToast({
+ title: '请输入密码!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.tpass == ''){
+ return uni.showToast({
+ title: '请输入确认密码!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.tpass != t.formData.pass){
+ return uni.showToast({
+ title: '密码不一致!',
+ icon: 'error',
+ })
+ }
+ if(t.formData.code == ''){
+ return uni.showToast({
+ title: '请输入验证码!',
+ icon: 'error',
+ })
+ }
+ t.$util.post('User/register', this.formData).then(res => {
+ if(res.code == 1) {
+ uni.setStorageSync('user-token', res.data.userToken)
+ uni.setStorageSync('user-info', JSON.stringify(res.data))
+
+ uni.showToast({
+ title: res.msg || '注册成功'
+ })
+ setTimeout(() => {
+ t.$util.goSwitch('/pages/index/index')
+ }, 1500)
+ } else {
+ uni.showToast({
+ title: res.msg || '注册失败',
+ icon: 'error'
+ })
+ }
+ })
+ },
+ sendCode () {
+ let t = this
+ if(this.formData.phone == '' || !this.phoneReg.test(t.formData.phone)){
+ return uni.showToast({
+ title: '手机号错误!',
+ icon: 'error',
+ })
+ }
+ if (this.leftTime < 60) {
+ return false
+ }
+ this.$util.post('Sms/sendVerificationCode', {phone: this.formData.phone}).then(res => {
+ if(res.code == 1){
+ console.log(res)
+ t.countDown()
+ uni.showToast({
+ title:'发送成功',
+ icon:'none'
+ })
+ } else {
+ uni.showToast({
+ title: res.msg,
+ icon: 'none',
+ })
+ }
+ })
+ },
+ countDown() {
+ this.leftTime--
+ if (this.leftTime > 0) {
+ setTimeout(this.countDown, 1000)
+ } else {
+ this.leftTime = 60
+ }
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/login.css);
+</style>
diff --git a/pages/search/search.vue b/pages/search/search.vue
new file mode 100644
index 0000000..05dbaf8
--- /dev/null
+++ b/pages/search/search.vue
@@ -0,0 +1,79 @@
+<template>
+ <view>
+ <view class="search">
+ <view class="searchView">
+ <span class="back" @tap="$util.goSwitch('/pages/index/index')">返回</span>
+ <image src="/static/imgs/search.png" mode=""></image>
+ <input type="text" v-model="keyword" placeholder="搜索您想要的商品" @confirm="searchGoods" />
+ <view class="searchBtn" @tap="searchGoods">搜索</view>
+ </view>
+ </view>
+ <view class="searchKey" v-if="goodsData.length == 0">
+ <view class="">
+ <view class="title">搜索历史</view>
+ <view class="item" v-if="keywordData.length > 0">
+ <view class="" v-for="(item, index) in keywordData" v-if="index <= 19" @tap="keywordSearch(item)">{{item}}</view>
+ </view>
+ <view class="noData" v-else>
+ <image src="/static/imgs/noData.png" mode="" style="margin-top: 200upx;"></image>
+ <view class="">没有搜索记录</view>
+ </view>
+ </view>
+ </view>
+ <view class="goodsData" v-else>
+ <view class="goods-list">
+ <view class="goods-item" v-for="(itm, idx) in goodsData" @click="$util.goPages('/pages/ginfo/ginfo?id=' + itm.id)">
+ <image lazy-load class="goods-icon" :src="itm.icon" mode="widthFix"></image>
+ <view class="goods-title">{{itm.title}}</view>
+ <view class="goods-price">
+ <view>¥</view>
+ <view class="red">{{itm.price}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ keyword: '',
+ catesId: 0,
+ pageIndex: 1,
+ pageSize: 200,
+ goodsData: [],
+ keywordData: uni.getStorageSync('keyword') ? JSON.parse(uni.getStorageSync('keyword')) : [],
+ }
+ },
+ onLoad() {
+ },
+ methods: {
+ keywordSearch (e){
+ this.keyword = e
+ this.searchGoods()
+ },
+ //获取分类商品
+ searchGoods(){
+ if(this.keyword != ''){
+ if(this.keywordData.indexOf(this.keyword) < 0){
+ this.keywordData.unshift(this.keyword)
+ uni.setStorageSync('keyword', JSON.stringify(this.keywordData))
+ }
+ this.$util.post('Goods/getCatesGoods', {keyword: this.keyword, pageIndex: this.pageIndex, pageSize: this.pageSize}).then(res => {
+ if(res.code == 1) {
+ this.goodsData = res.data.list
+ }
+ })
+ } else {
+ this.goodsData = []
+ }
+ }
+ }
+ }
+</script>
+
+<style>
+ @import url(/static/css/search.css);
+</style>
diff --git a/pages/wallet/wallet.vue b/pages/wallet/wallet.vue
new file mode 100644
index 0000000..5af9f21
--- /dev/null
+++ b/pages/wallet/wallet.vue
@@ -0,0 +1,71 @@
+<template>
+ <view class="wallet">
+ <view class="startBar" style="background-color: #e3b400;"></view>
+ <view class="wallet-header">
+ <view class="wallet-header-edu" v-if="userInfo == null">
+ <view class="wallet-header-price">预估额度<text v-if="Config">{{Config.edu}}</text></view>
+ <view class="" v-if="Config && Config.put_open == 2">年利率(单利)18.00%,1000元用一天需0.50元</view>
+ </view>
+ <view class="wallet-header-edu" v-else>
+ <view class="wallet-header-price">可用额度<text>{{userInfo.const}}</text></view>
+ <view class="" v-if="Config && Config.put_open == 2">年利率(单利)18.00%,1000元用一天需0.50元</view>
+ </view>
+ <view class="wallet-header-apply" @tap="$util.checkGoPages('../cates/cates')">立即使用</view>
+ </view>
+ <view class="wallet-goods">
+ <view class="wallet-goods-title">热门商品</view>
+ <view class="goods-list">
+ <view class="goods-item" v-for="(itm, idx) in goodsData" @click="$util.goPages('/pages/ginfo/ginfo?id=' + itm.id)">
+ <image lazy-load class="goods-icon" :src="itm.icon" mode=""></image>
+ <view class="goods-title">{{itm.title}}</view>
+ <view class="goods-price">
+ <view>¥</view>
+ <view class="red">{{itm.price}}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+ goodsData: [],
+ userInfo: null,
+ Config: null,
+ }
+ },
+ onShow() {
+ this.getUserInfo()
+ this.getData()
+ this.getConfig()
+ },
+ methods: {
+ getUserInfo () {
+ let t = this
+ t.$util.post('User/getUser').then(res => {
+ if(res.code == 1){
+ this.userInfo = res.data
+ }
+ })
+ },
+ getConfig () {
+ let t = this
+ t.$util.post('Index/getConfig').then(res => {
+ t.Config = res.data
+ })
+ },
+ getData () {
+ this.$util.post('Goods/getWalletGoods').then(res => {
+ this.goodsData = res.data
+ })
+ },
+ }
+ }
+</script>
+
+<style>
+ @import url(@/static/css/wallet.css);
+</style>
diff --git a/pages/web/index.vue b/pages/web/index.vue
new file mode 100644
index 0000000..9d3dae4
--- /dev/null
+++ b/pages/web/index.vue
@@ -0,0 +1,35 @@
+<template>
+ <web-view class="web-view" :webview-styles="webviewStyles" :src="url" :style="{width: windowW + 'px', height: windowH + 'px'}"></web-view>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ windowH: 0,
+ windowW: 0,
+ webviewStyles: {
+ progress: {
+ color: 'transparent'
+ }
+ },
+ url: ''
+ }
+ },
+ onLoad(option) {
+ if(option.webUel) this.url = decodeURIComponent(option.webUel);
+ // 蚂蚁智能客服场景参数
+ if(option.scene) this.url += `&scene=${option.scene}`;
+ uni.setNavigationBarTitle({
+ title: option.title
+ })
+ try {
+ const res = uni.getSystemInfoSync();
+ this.windowW = res.windowWidth;
+ this.windowH = res.windowHeight;
+ } catch (e) {
+ // error
+ }
+ }
+}
+</script>
--
Gitblit v1.9.3