hmp 4 年 前
コミット
102107b529
48 ファイル変更2557 行追加0 行削除
  1. 23 0
      assets/http/global.js
  2. 44 0
      components/back.vue
  3. 231 0
      components/u-city-select.vue
  4. 243 0
      pages/agent/agent.vue
  5. 37 0
      pages/agent/agentDetail.vue
  6. 62 0
      pages/agent/myIncome/detail.vue
  7. 80 0
      pages/agent/myIncome/myIncome.vue
  8. 78 0
      pages/agent/myIncome/todayIncome.vue
  9. 53 0
      pages/agent/myPromote.vue
  10. 117 0
      pages/agent/pay.vue
  11. 22 0
      pages/agent/promote.vue
  12. 174 0
      pages/consume/comps/card1.vue
  13. 105 0
      pages/consume/comps/card2.vue
  14. 217 0
      pages/consume/comps/tabsSwiper.vue
  15. 94 0
      pages/gain/comps/card1.vue
  16. 253 0
      pages/gain/comps/card2.vue
  17. 155 0
      pages/mine/myInfo.vue
  18. 150 0
      pages/search/search.vue
  19. 117 0
      pages/test/test.vue
  20. 161 0
      pages/userBank/add.vue
  21. 116 0
      pages/userBank/userBank.vue
  22. 25 0
      pages/webview/webview.vue
  23. BIN
      static/agent/empty.png
  24. BIN
      static/agent/icon-withdraw.png
  25. BIN
      static/agent/icon_weixin.png
  26. BIN
      static/agent/icon_yhk.png
  27. BIN
      static/agent/icon_zfb.png
  28. BIN
      static/agent/pic_agent.png
  29. BIN
      static/bank/ABC.png
  30. BIN
      static/bank/BOC.png
  31. BIN
      static/bank/CCB.png
  32. BIN
      static/bank/CGB.png
  33. BIN
      static/bank/CMBCHINA.png
  34. BIN
      static/bank/ECITIC.png
  35. BIN
      static/bank/HXB.png
  36. BIN
      static/bank/ICBC.png
  37. BIN
      static/del/activitys.png
  38. BIN
      static/del/del4.png
  39. BIN
      static/del/diancan.png
  40. BIN
      static/del/map1.png
  41. BIN
      static/icon/avatar.png
  42. BIN
      static/icon/bg-yin.png
  43. BIN
      static/icon/bg.png
  44. BIN
      static/icon/finish.png
  45. BIN
      static/icon/ing.png
  46. BIN
      static/icon/setting.png
  47. BIN
      static/icon/zhaoshang.png
  48. BIN
      static/icon/zhongguo.png

+ 23 - 0
assets/http/global.js

@@ -0,0 +1,23 @@
+let global = {}
+
+// global.baseUrl='http://localhost:2539/'
+global.baseUrl='https://ldt.guosen-fumao.cn/api/'
+
+global.tokenUrl=global.baseUrl+ 'blade-auth/oauth/token?tenantId=000000&password=f67e0b29283bb804f96e28f43ddce79f&username=admin'
+
+global.agenterTypeId='1423464045809364994'
+
+global.orderType={
+	USER_PAY:'USER_PAY',
+	AGENT_CHARGE:'AGENT_CHARGE',
+	MALL_CHARGE:'MALL_CHARGE'
+}
+
+global.payStatus={
+	IS_WAIT:'0',
+	IS_PAY:'1',
+	IS_CANCEL:'2'
+}
+
+
+export default global

+ 44 - 0
components/back.vue

@@ -0,0 +1,44 @@
+<template>
+	<view>
+		<view class="back" @click="back()">
+			<text class="cuIcon-back" style="color: #FFFFFF;"></text>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name:"back",
+		data() {
+			return {
+				
+			};
+		},
+		methods:{
+			back(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.back{
+		position: fixed;
+		width: 100%;
+		top: calc(var(--status-bar-height) + 16rpx);
+		left: 20rpx;
+		z-index: 99999;
+		transition: top .25s;
+		
+		width: 60rpx;
+		height: 60rpx;
+		border-radius: 50%;
+		background-color: rgba(0,0,0,.2);
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+</style>

+ 231 - 0
components/u-city-select.vue

@@ -0,0 +1,231 @@
+<template>
+	<u-popup v-model="value" mode="bottom" :popup="false" :mask="true" :closeable="true" :safe-area-inset-bottom="true"
+	 close-icon-color="#ffffff" :z-index="uZIndex" :maskCloseAble="maskCloseAble" @close="close">
+		<u-tabs v-if="value" :list="genTabsList" :is-scroll="true" :current="tabsIndex" @change="tabsChange" ref="tabs"></u-tabs>
+		<view class="area-box">
+			<view class="u-flex" :class="{ 'change':isChange }">
+				<view class="area-item">
+					<view class="u-padding-10 u-bg-gray" style="height: 100%;">
+						<scroll-view :scroll-y="true" style="height: 100%">
+							<u-cell-group>
+								<u-cell-item v-for="(item,index) in provinces" :title="item.label" :arrow="false" :index="index" :key="index"
+								 @click="provinceChange">
+									<u-icon v-if="isChooseP&&province===index" slot="right-icon" size="34" name="checkbox-mark"></u-icon>
+								</u-cell-item>
+							</u-cell-group>
+						</scroll-view>
+					</view>
+				</view>
+				<view class="area-item">
+					<view class="u-padding-10 u-bg-gray" style="height: 100%;">
+						<scroll-view :scroll-y="true" style="height: 100%">
+							<u-cell-group v-if="isChooseP">
+								<u-cell-item v-for="(item,index) in citys" :title="item.label" :arrow="false" :index="index" :key="index"
+								 @click="cityChange">
+									<u-icon v-if="isChooseC&&city===index" slot="right-icon" size="34" name="checkbox-mark"></u-icon>
+								</u-cell-item>
+							</u-cell-group>
+						</scroll-view>
+					</view>
+				</view>
+
+				<view class="area-item">
+					<view class="u-padding-10 u-bg-gray" style="height: 100%;">
+						<scroll-view :scroll-y="true" style="height: 100%">
+							<u-cell-group v-if="isChooseC">
+								<u-cell-item v-for="(item,index) in areas" :title="item.label" :arrow="false" :index="index" :key="index"
+								 @click="areaChange">
+									<u-icon v-if="isChooseA&&area===index" slot="right-icon" size="34" name="checkbox-mark"></u-icon>
+								</u-cell-item>
+							</u-cell-group>
+						</scroll-view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</u-popup>
+</template>
+
+<script>
+	import provinces from "uview-ui/libs/util/province.js";
+	import citys from "uview-ui/libs/util/city.js";
+	import areas from "uview-ui/libs/util/area.js";
+	/**
+	 * city-select 省市区级联选择器
+	 * @property {String Number} z-index 弹出时的z-index值(默认1075)
+	 * @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭Picker(默认true)
+	 * @property {String} default-region 默认选中的地区,中文形式
+	 * @property {String} default-code 默认选中的地区,编号形式
+	 */
+	export default {
+		name: 'u-city-select',
+		props: {
+			// 通过双向绑定控制组件的弹出与收起
+			value: {
+				type: Boolean,
+				default: false
+			},
+			// 默认显示的地区,可传类似["河北省", "秦皇岛市", "北戴河区"]
+			defaultRegion: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			// 默认显示地区的编码,defaultRegion和areaCode同时存在,areaCode优先,可传类似["13", "1303", "130304"]
+			areaCode: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			// 是否允许通过点击遮罩关闭Picker
+			maskCloseAble: {
+				type: Boolean,
+				default: true
+			},
+			// 弹出的z-index值
+			zIndex: {
+				type: [String, Number],
+				default: 0
+			}
+		},
+		data() {
+			return {
+				cityValue: "",
+				isChooseP: false, //是否已经选择了省
+				province: 0, //省级下标
+				provinces: provinces,
+				isChooseC: false, //是否已经选择了市
+				city: 0, //市级下标
+				citys: citys[0],
+				isChooseA: false, //是否已经选择了区
+				area: 0, //区级下标
+				areas: areas[0][0],
+				tabsIndex: 0,
+			}
+		},
+		mounted() {
+			this.init();
+		},
+		computed: {
+			isChange() {
+				return this.tabsIndex > 1;
+			},
+			genTabsList() {
+				let tabsList = [{
+					name: "请选择"
+				}];
+				if (this.isChooseP) {
+					tabsList[0]['name'] = this.provinces[this.province]['label'];
+					tabsList[1] = {
+						name: "请选择"
+					};
+				}
+				if (this.isChooseC) {
+					tabsList[1]['name'] = this.citys[this.city]['label'];
+					tabsList[2] = {
+						name: "请选择"
+					};
+				}
+				if (this.isChooseA) {
+					tabsList[2]['name'] = this.areas[this.area]['label'];
+				}
+				return tabsList;
+			},
+			uZIndex() {
+				// 如果用户有传递z-index值,优先使用
+				return this.zIndex ? this.zIndex : this.$u.zIndex.popup;
+			}
+		},
+		methods: {
+			init() {
+				if (this.areaCode.length == 3) {
+					this.setProvince("", this.areaCode[0]);
+					this.setCity("", this.areaCode[1]);
+					this.setArea("", this.areaCode[2]);
+				} else if (this.defaultRegion.length == 3) {
+					this.setProvince(this.defaultRegion[0], "");
+					this.setCity(this.defaultRegion[1], "");
+					this.setArea(this.defaultRegion[2], "");
+				};
+			},
+			setProvince(label = "", value = "") {
+				this.provinces.map((v, k) => {
+					if (value ? v.value == value : v.label == label) {
+						this.provinceChange(k);
+					}
+				})
+			},
+			setCity(label = "", value = "") {
+				this.citys.map((v, k) => {
+					if (value ? v.value == value : v.label == label) {
+						this.cityChange(k);
+					}
+				})
+			},
+			setArea(label = "", value = "") {
+				this.areas.map((v, k) => {
+					if (value ? v.value == value : v.label == label) {
+						this.isChooseA = true;
+						this.area = k;
+					}
+				})
+			},
+			close() {
+				this.$emit('input', false);
+			},
+			tabsChange(index) {
+				this.tabsIndex = index;
+			},
+			provinceChange(index) {
+				this.isChooseP = true;
+				this.isChooseC = false;
+				this.isChooseA = false;
+				this.province = index;
+				this.citys = citys[index];
+				this.tabsIndex = 1;
+			},
+			cityChange(index) {
+				this.isChooseC = true;
+				this.isChooseA = false;
+				this.city = index;
+				this.areas = areas[this.province][index];
+				this.tabsIndex = 2;
+			},
+			areaChange(index) {
+				this.isChooseA = true;
+				this.area = index;
+				let result = {};
+				result.province = this.provinces[this.province];
+				result.city = this.citys[this.city];
+				result.area = this.areas[this.area];
+				this.$emit('city-change', result);
+				this.close();
+			}
+		}
+
+	}
+</script>
+<style lang="scss">
+	.area-box {
+		width: 100%;
+		overflow: hidden;
+		height: 800rpx;
+
+		>view {
+			width: 150%;
+			transition: transform 0.3s ease-in-out 0s;
+			transform: translateX(0);
+
+			&.change {
+				transform: translateX(-33.3333333%);
+			}
+		}
+
+		.area-item {
+			width: 33.3333333%;
+			height: 800rpx;
+		}
+	}
+</style>

+ 243 - 0
pages/agent/agent.vue

@@ -0,0 +1,243 @@
+<template>
+	<view>
+		<view class="container">
+			<view class="title" style="padding: 50upx 0 30upx 30upx;">代理方式</view>
+			<view style="padding:0 10rpx 36rpx;">
+				<text class="cuIcon-title btn-color text-bold margin-left-10" style="font-size: 36rpx;"></text>
+				<text>渠道合伙人</text>
+			</view>
+			<view class="title padding">所在城市</view>
+			<u-picker mode="region" v-model="regionShow" :params="params" @confirm="getRegion"></u-picker>
+			<view class="flex align-center justify-between" >
+				<view class="padding-left padding-right" style="width: 100%;">
+					<u-input type="select" v-model="region" placeholder="请选择代理所在城市" @click="regionShow = true"/>
+				</view>
+			</view>
+			<view class="padding-lr"><u-line color="#eaeaea"></u-line></view>
+			<view class="title padding">联系方式</view>
+			<view class="padding-left">
+				<u-input v-model="model.userPhone" placeholder="请输入手机号码" :clearable="false"/>
+			</view>
+			<view class="padding-lr"><u-line color="#eaeaea"></u-line></view>
+			
+			<view class="title padding">选择银行类型</view>
+			<view class="flex align-center justify-between padding-bottom-sm" >
+				<view class="padding-left padding-right" style="width: 100%;">
+					<u-input type="select" placeholder="请选择银行类型" v-model="bankModel.bankTypeLabel" @click="bankTypeShow = true"/>
+				</view>
+			</view>
+			
+			<view class="title padding">选择账户类型</view>
+			<view class="flex align-center justify-between padding-bottom-sm" >
+				<view class="padding-left padding-right" style="width: 100%;">
+					<u-input type="select" placeholder="请选择账户类型" v-model="bankModel.bankAccountTypeLabel" @click="bankAccountTypeShow = true"/>
+				</view>
+			</view>
+			
+			<view class="padding-lr"><u-line color="#eaeaea"></u-line></view>
+			<view class="title padding">开户姓名</view>
+			<view class="padding-left">
+				<u-input v-model="bankModel.realName" placeholder="请输入开户姓名" :clearable="false" />
+			</view>
+			
+			<view class="title padding" >银行卡号</view>
+			<view class="padding-left padding-bottom-20">
+				<u-input v-model="bankModel.cardNo" placeholder="请输入银行卡号" :clearable="false" />
+			</view>
+		</view>
+		<view class="bottom-bar safe-area-inset-bottom margin-top-50 margin-bottom-20">
+			<view @click="confirm" class="bg-gradual-base cu-btn round" style="width: 100%;padding: 46rpx;">
+				下一步
+			</view>
+		</view>
+		
+		<u-select v-model="bankTypeShow" :default-value="bankTypeDefaultValue" :list="bankTypeList" @confirm="bankTypeConfirm"></u-select>
+		<u-select v-model="bankAccountTypeShow" :default-value="bankAccountTypeDefaultValue" :list="bankAccountTypeList" @confirm="bankAccountTypeConfirm"></u-select>
+	</view>
+</template>
+
+<script>
+	import citySelect from '@/components/u-city-select.vue';
+	export default {
+		components: {
+			citySelect
+		},
+		data() {
+			return {
+				//代理城市
+				regionShow: false,
+				region: '',
+				params: {
+					province: true,
+					city: true,
+					area: false
+				},
+				//银行类型
+				bankTypeShow:false,
+				bankTypeList:[],
+				//账户类型
+				bankAccountTypeShow:false,
+				bankAccountTypeList:[],
+				//原始对象
+				originalModel:{},
+				originalBankModel:{},
+				model:{
+					userId:'',
+					userPhone:'',
+					agenterTypeId:this.$global.agenterTypeId,
+					enabled:-1,
+					province:'',
+					city:'',
+				},
+				//银行对象
+				bankModel:{
+					userId:'',
+					userType:2,
+					cardNo:'',
+					realName:'',
+					phone:'',
+					bankType:'',
+					bankTypeLabel:'',
+					bankAccountType:'',
+					bankAccountTypeLabel:''
+				},
+			}
+		},
+		onLoad() {
+			this.init()
+		},
+		methods: {
+			async init(){
+				this.model.userId=this.vuex_userId
+				this.model.userPhone=this.vuex_phone
+				
+				this.bankModel.userId=this.vuex_userId
+				this.bankModel.phone=this.vuex_phone
+				
+				await this.getBankType()
+				await this.getBankAccountType()
+				
+				this.fetchUserBank()
+				this.fetchAgenter()
+			},
+			//回显 begin
+			fetchUserBank(){
+				let params={
+					userId:this.vuex_userId
+				}
+				this.$api.userBank.list(params).then(res=>{
+					if (!this.$isEmpty(res.data.records)) {
+						this.originalBankModel=res.data.records[0]
+						this.bankModel=res.data.records[0]
+					}
+				})
+			},
+			fetchAgenter(){
+				let params={
+					userId:this.vuex_userId
+				}
+				this.$api.agenter.list(params).then(res=>{
+					if (!this.$isEmpty(res.data.records)) {
+						this.originalModel=res.data.records[0]
+						this.model=res.data.records[0]
+						this.region=this.model.province + '-' + this.model.city
+					}
+				})
+			},
+			//字典 begin
+			async getBankType() {
+				let res = await this.$api.dict({code: 'bank_type'})
+				res.data.forEach(item=>{
+					let obj={
+						label:item.dictValue,
+						value:item.dictKey
+					}
+					this.bankTypeList.push(obj)
+				})
+			},
+			async getBankAccountType() {
+				let res = await this.$api.dict({code: 'bank_account_type'})
+				res.data.forEach(item=>{
+					let obj={
+						label:item.dictValue,
+						value:item.dictKey
+					}
+					this.bankAccountTypeList.push(obj)
+				})
+			},
+			//字典 end
+			bankTypeConfirm(e){
+				this.bankModel.bankTypeLabel=e[0].label
+				this.bankModel.bankType=e[0].value
+			},
+			bankAccountTypeConfirm(e){
+				this.bankModel.bankAccountTypeLabel=e[0].label
+				this.bankModel.bankAccountType=e[0].value
+			},
+			getRegion(data) {
+				this.model.province=data.province.label
+				this.model.city=data.city.label
+				this.region = data.province.label + '-' + data.city.label;
+			},
+			confirm() {
+				if (this.$isEmpty(this.model.userPhone)) {
+					this.$u.toast('请输入联系方式')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.bankType)) {
+					this.$u.toast('请选择银行类型')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.bankAccountType)) {
+					this.$u.toast('请选择账户类型')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.realName)) {
+					this.$u.toast('请输入开户姓名')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.cardNo)) {
+					this.$u.toast('请输入银行卡号')
+					return
+				}
+				if (JSON.stringify(this.model)!=JSON.stringify(this.originalModel) &&
+					JSON.stringify(this.bankModel)!=JSON.stringify(this.originalBankModel)) {
+					//修改过,提交再跳转
+					this.$api.userBank.submit(this.bankModel)
+					this.$api.agenter.submit(this.model).then(res=>{
+						if (res.success) {
+							uni.navigateTo({
+								url: '/pages/agent/pay'
+							})
+						}
+					})
+				}else{
+					//没修改,直接跳转
+					uni.navigateTo({
+						url: '/pages/agent/pay'
+					})
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		background-color: #ffffff;
+		border-radius: 16upx;
+		margin: 30upx;
+		.title {
+			font-size: 32upx;
+			font-weight: bold;
+		}
+	}
+	.eg {
+		color: #d1d1d1;
+	}
+	.custom-style {
+		background-color: #5b3ee7;
+		width: 400upx;
+		color: #ffffff;
+	}
+</style>

+ 37 - 0
pages/agent/agentDetail.vue

@@ -0,0 +1,37 @@
+<template>
+	<view>
+		<back></back>
+		<u-image @load="load" src="https://music.nanyue6688.com/obsfile/720d776848ac43b9a128c7068a460603-detail.png" mode="widthFix"></u-image>
+		<view v-if="show" class="bottom-bar" style="background-color: #5034c5;margin-top: -30rpx;">
+			<button class="cu-btn round text-bold" style="width: 100%;height: 100upx;font-size: 36upx;background-color: #f9b12b;color: #5034C6;" @click="nav">加入代理</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import back from "@/components/back.vue"
+	export default {
+		components:{
+			back
+		},
+		data() {
+			return {
+				show:false
+			}
+		},
+		methods: {
+			nav() {
+				uni.navigateTo({
+					url: "agent"
+				})
+			},
+			load(){
+				this.show=true
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	
+</style>

+ 62 - 0
pages/agent/myIncome/detail.vue

@@ -0,0 +1,62 @@
+<template>
+	<view>
+		<view class="text-center" style="margin: 80upx;">
+			<image src="/static/agent/icon-withdraw.png" style="width: 120upx;height: 120upx;"></image>
+			<view class="text-lg text-black text-bold padding">代理收益</view>
+			<view class="text-black text-bold" style="font-size: 60upx;">+2666.00</view>
+		</view>
+		<view class="margin-lg">
+			<u-line :hair-line="false" color="#eeeeee"></u-line>
+		</view>
+		<view class="flex align-center" style="padding: 20upx 40upx;">
+			<view class="text-gray padding-right">当前状态</view>
+			<view class="text-black">{{detail.status}}</view>
+		</view>
+		<view class="flex align-center" style="padding: 20upx 40upx;">
+			<view class="text-gray padding-right">收益详情</view>
+			<view class="theme-color">{{detail.type}}</view>
+		</view>
+		<view class="flex align-center" style="padding: 20upx 40upx;">
+			<view class="text-gray padding-right">到账时间</view>
+			<view class="text-black">{{detail.time}}</view>
+		</view>
+		<view class="flex align-center" style="padding: 20upx 40upx;">
+			<view class="text-gray padding-right">支付方式</view>
+			<view class="text-black">{{detail.ways}}</view>
+		</view>
+		<view class="flex align-center" style="padding: 20upx 40upx;">
+			<view class="text-gray padding-right">交易单号</view>
+			<view class="text-black">{{detail.transactionNum}}</view>
+		</view>
+		<view class="flex align-center" style="padding: 20upx 40upx;">
+			<view class="text-gray padding-right">商户单号</view>
+			<view class="text-black">{{detail.storeNum}}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				detail: {
+					status: '未到账',
+					type: '代理',
+					time: '2021-6-28 17:43:23',
+					ways: '信用卡',
+					transactionNum: '100003980121061400077148917986778',
+					storeNum: '100003980120210647601930343',
+				}
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+	page {
+		background-color: #FFFFFF;
+	}
+</style>

+ 80 - 0
pages/agent/myIncome/myIncome.vue

@@ -0,0 +1,80 @@
+<template>
+	<view>
+		<view class="flex justify-center align-center bg-white" style="padding-top: 80upx;">
+			<view class="flex justify-center align-center" style="width: 320upx;height: 80upx;background-color: #f6f6f6;border-radius: 12upx;" @click="changeTime">
+				<view class="text-lg text-bold text-black">{{time}}</view>
+				<view class="text-gray padding-lr">|</view>
+				<view class="cuIcon-calendar" style="font-size: 40upx;"></view>
+			</view>
+		</view>
+		<u-picker mode="selector" v-model="timeShow"  :default-selector="[0]" :range="selector" @confirm="confirm"></u-picker>
+		<view class="text-center bg-white">
+			<view class="theme-color text-bold padding-top padding-bottom-xs" style="font-size: 34upx;">推广总收益</view>
+			<view class="theme-color text-bold" style="font-size: 60upx;">88947.01</view>
+			<view class="text-gray padding-sm" style="font-size: 34upx;">未到账2671.49</view>
+		</view>
+		<view class="flex justify-center align-center bg-white padding-bottom" @click="todayIncome">
+			<view class="flex justify-center theme-color text-bold" style="width: 220upx;line-height: 60upx;background-color: #f6f6f6;border-radius: 12upx;">
+				<text>今日收益</text><text class="cuIcon-right"></text>
+			</view>
+		</view>
+		<view class="margin-top bg-white">
+			<view class="padding">{{time}}收益记录</view>
+			<block v-for="(item, index) in incomeList" :key="index">
+				<view class="flex justify-between align-center padding" @click="detail(item.id)">
+					<view class="flex align-center">
+						<view class="text-center" style="width: 30upx;">{{index + 1}}</view>
+						<image class="margin-lr" src="/static/agent/icon-withdraw.png" style="width: 70upx;height: 70upx;"></image>
+						<view>{{item.type}}</view>
+					</view>
+					<view>
+						<view class="text-bold text-lg margin-bottom-xs text-black flex justify-end">+{{item.income}}</view>
+						<view class="text-gray text-sm flex justify-end">{{item.time}}</view>
+					</view>
+				</view>
+			</block>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				timeShow: false,
+				time: '2021年6月',
+				selector: ['2021年6月', '2021年5月', '2021年4月', '2021年3月', '2021年2月', '2021年1月'],
+				incomeList: [
+					{type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{type: '代理收益', time: '6月11日 10:42', income: '5700.00'}
+				],
+			}
+		},
+		methods: {
+			changeTime() {
+				this.timeShow = true;
+			},
+			confirm(index) {
+				this.time = this.selector[index];
+			},
+			todayIncome() {
+				uni.navigateTo({
+					url: "/pages/activityList/mine/agent/myIncome/todayIncome"
+				})
+			},
+			detail(id) {
+				uni.navigateTo({
+					url: "/pages/activityList/mine/agent/myIncome/detail?id=" + id
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 78 - 0
pages/agent/myIncome/todayIncome.vue

@@ -0,0 +1,78 @@
+<template>
+	<view>
+		<u-calendar v-model="timeShow" mode="date" @change="change"></u-calendar>
+		<view class="bg-img" style="background-image: url('https://upload-file-data.obs.cn-south-1.myhuaweicloud.com/e997d05cc3514ad7b1bdfd71e3798a7d-bg-img1.png');width: 100%;height: 530upx;">
+			<view class="flex justify-center align-center" style="padding-top: 80upx;">
+				<view class="flex justify-center text-bold" style="width: 200upx;font-size: 34upx;" @click="current = 0">
+					<view :class="current == 0 ? 'text-white' : 'text-gray'">已到账</view>
+				</view>
+				<view class="flex justify-center text-bold" style="width: 200upx;font-size: 34upx;" @click="current = 1">
+					<view :class="current == 1 ? 'text-white' : 'text-gray'">未到账</view>
+				</view>
+			</view>
+			<view class="text-white text-lg" style="padding: 70upx 40upx;" @click="timeShow = true">
+				<text>{{time}}</text>
+				<text class="padding-left-xs cuIcon-unfold"></text>
+			</view>
+			<view class="text-gray padding-left-lg">收益未到账合计:</view>
+			<view class="text-white text-bold padding-left-lg" style="font-size: 80upx;margin: 30upx 0;">{{total}}</view>
+		</view>
+		<view class="margin-top bg-white">
+			<view class="padding">{{current == 0 ? '到账收益记录' : '未到账记录'}}</view>
+			<block v-for="(item, index) in incomeList" :key="index">
+				<view class="flex justify-between align-center padding" @click="detail(item.id)">
+					<view class="flex align-center">
+						<image class="margin-right" src="/static/agent/icon-withdraw.png" style="width: 70upx;height: 70upx;"></image>
+						<view class="text-bold text-black">{{item.type}}</view>
+					</view>
+					<view>
+						<view class="text-bold text-lg margin-bottom-xs text-black flex justify-end">+{{item.income}}</view>
+						<view class="text-gray text-sm flex justify-end">{{item.time}}</view>
+					</view>
+				</view>
+			</block>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				timeShow: false,
+				current: 0,
+				time: '2021年6月25日',
+				total: 2666.01,
+				incomeList: [
+					{id:'1', type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{id:'2', type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{id:'3', type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{id:'4', type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{id:'5', type: '代理收益', time: '6月11日 10:42', income: '5700.00'},
+					{id:'6', type: '代理收益', time: '6月11日 10:42', income: '5700.00'}
+				],
+			}
+		},
+		onLoad() {
+			this.getLocalDate();
+		},
+		methods: {
+			getLocalDate() {
+				let time = new Date().toLocaleDateString().split('/');
+				this.time = time[0] + '年' + time[1] + '月' + time[2] + '日';
+			},
+			detail(id) {
+				uni.navigateTo({
+					url: '/pages/activityList/mine/agent/myIncome/detail?id=' + id
+				})
+			},
+			change(e) {
+				this.time = e.year + '年' + e.month + '月' + e.day + '日'
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 53 - 0
pages/agent/myPromote.vue

@@ -0,0 +1,53 @@
+<template>
+	<view>
+		<view class="cu-bar search bg-white">
+			<view class="search-form round">
+				<text class="cuIcon-search"></text>
+				<input v-model="keyword" :adjust-position="false" type="text" placeholder="输入用户/商家/商场名称"
+					confirm-type="search"></input>
+			</view>
+			<view class="action">
+				搜索
+			</view>
+		</view>
+		<view class="tag">
+			<view @click="selectedIndex=index" class="cu-tag round sm margin-right-40" :class="selectedIndex==index?'selected':'in_selected'"
+				v-for="(item,index) in keywordList" :key="index">
+				{{item}}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				keyword: '',
+				keywordList: ['全部', '推广用户', '推广商家', '推广商场'],
+				selectedIndex: 0,
+
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.tag {
+		background-color: #FFFFFF;
+		padding: 0 30rpx 20rpx;
+
+		.selected {
+			background-color: #FCE7D2;
+			color: #F39248
+		}
+		
+		.in_selected{
+			background-color: #f0f0f0;
+			color: #999999;
+		}
+	}
+</style>

+ 117 - 0
pages/agent/pay.vue

@@ -0,0 +1,117 @@
+<template>
+	<view>
+		<view class="text-center" style="margin-top: 120upx;">
+			<view class="text-gray  text-df padding">待支付</view>
+			<view class="theme-color ">
+				<text style="font-size: 48upx;">¥</text>
+				<text style="font-size: 72upx;">{{detail.cost}}</text>
+			</view>
+			<view class="text-black text-lg margin-top">渠道合伙人-保证金</view>
+		</view>
+		<view class="container">
+			<view style="padding: 40upx 0 30upx 30upx;font-size: 30upx;font-weight: bold;">支付方式</view>
+			<block v-for="(item, index) in ways" :key="index">
+				<view class="flex align-center justify-between padding" @click="change(index)">
+					<view class="flex align-center">
+						<image class="margin-right" :src="item.icon" style="width: 50upx;height: 50upx;"></image>
+						<view>{{item.name}}</view>
+					</view>
+					<view :class="current == index ? 'theme-color cuIcon-roundcheckfill' : 'cuIcon-round'" style="font-size: 40upx;"></view>
+				</view>
+			</block>
+		</view>
+		
+		<view class="bottom-bar safe-area-inset-bottom " style="margin-top: 120rpx;">
+			<view @click="pay" class="bg-gradual-base cu-btn round" style="width: 100%;padding: 46rpx;">
+				确认支付
+			</view>
+		</view>
+	
+		<u-popup v-model="successShow" mode="center" :mask-close-able="false" width="550" height="500" border-radius="30">		
+			<view class="text-center padding">
+				<image src="/static/agent/pic_agent.png" style="width: 109upx;height: 122upx;"></image>
+				<view style="font-size: 34upx;color: #FF9447;font-weight: bold;padding: 30upx 0 10upx 0;">恭喜您成为代理</view>
+				<view style="font-size: 28upx;color: #999999;padding-bottom: 60upx;">专享代理专属权益</view>
+				<view @click="confirm" class="cu-btn bg-gradual-base round" style="width: 90%;padding: 40rpx;">
+					确认
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				successShow: false,
+				ways: [
+					{name: '微信支付', icon: '/static/agent/icon_weixin.png'}
+				],
+				current: 0,
+				
+				detail:{}
+			}
+		},
+		onLoad() {
+			this.fetchDetail()
+		},
+		methods: {
+			fetchDetail(){
+				this.$api.agenterType.detail({id:this.$global.agenterTypeId}).then(res=>{
+					this.detail=res.data
+				})
+			},
+			change(index) {
+				this.current = index;
+			},
+			async pay() {
+				let now=new Date()
+				let min=now.getMinutes()
+				now.setMinutes(min + 30)
+				let expireTime=this.$dateTime.format(now)
+				
+				let billRecord={
+					userId:this.vuex_userId,
+					price:this.detail.cost,
+					type:this.$global.orderType.AGENT_CHARGE,
+					payAmount:this.detail.cost,
+					billsTitle:'渠道合伙人充值',
+					expireTime
+				}
+				let resp=await this.$api.billRecord.submit(billRecord)
+				if (this.$isEmpty(resp.data)) {
+					return
+				}
+				let params={
+					orderType:this.$global.orderType.AGENT_CHARGE,
+					orderId:resp.data,
+					payStatus:this.$global.payStatus.IS_WAIT
+				}
+				this.$api.pay.payOrder(params).then(res=>{
+					if (res.success) {
+						uni.navigateTo({
+							url:"../webview/webview?url="+res.data.qrCodeUrl
+						})
+					}
+				})
+				// this.successShow = true;
+			},
+			confirm() {
+				this.successShow = false
+				this.$u.vuex('vuex_agenter_type',1)
+				uni.reLaunch({
+					url:"../gain/gain?current=1",
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		background-color: #ffffff;
+		margin: 30upx;
+		border-radius: 20upx;
+	}
+</style>

+ 22 - 0
pages/agent/promote.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		<u-image :src="src" mode="widthFix"></u-image>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				src: 'https://music.nanyue6688.com/obsfile/a5725b251f404b189e3e833ed0619532-promote.png',
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 174 - 0
pages/consume/comps/card1.vue

@@ -0,0 +1,174 @@
+<template>
+	<view class="filter">
+		<view class="flex justify-around">
+			<view :class="{active:activeIndex==index}" class="con" :key="index"
+				v-for="(item,index) in tagsList" @click="activeIndex=index">
+				<text class="title">{{item.title}}</text>
+				<view class="tag">
+					<text>{{item.desc}}</text>
+				</view>
+			</view>
+		</view>
+		<view class="item">
+			<view class="card" v-for="(item,index) in list" :key="index">
+				<view class="left">
+					<image :src="item.cover" mode=""></image>
+				</view>
+				<view class="right">
+					<view class="title text-cut-1">
+						<text class="">{{item.name}}</text>
+					</view>
+					<view class="data">
+						<view class="">
+							<block>
+								<u-icon name="star-fill" color="#ff7001" size="30"></u-icon>
+								<text
+									style="margin-left: 4rpx;margin-right: 20rpx;color: #ff7001;font-size: 26rpx;">4.9</text>
+							</block>
+							<block>
+								<text>月售</text>
+								<text>{{item.sales}}</text>
+							</block>
+						</view>
+						<view>
+							<text>珠江新城</text>
+							<text class="margin-left-10">3.5km</text>
+						</view>
+					</view>
+					<view class="text-cut-2" style="width: 100%;height: 32rpx;margin-top: 14rpx;">
+						<view v-for="(item1,index1) in item.labelNames.split(',')" :key="index1" class="cu-tag sm "
+							style="background-color: #fff0d9;color: #ffa353;">
+							{{item1}}
+						</view>
+					</view>
+					<view v-if="false" class="flex justify-start text-cut-2"
+						style="margin-top: 12rpx;width: 100%;height: 34rpx;">
+						<view class="line-red sm cu-tag" v-for="(item,index) in 5" :key="index">
+							首次光临减2元
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			list:Array
+		},
+		data(){
+			return {
+				activeIndex: 0,
+				tagsList: [{
+					title: '智能筛选',
+					desc: '大数据优选'
+				}, {
+					title: '距离最近',
+					desc: '由近到远'
+				}, {
+					title: '评论最高',
+					desc: '好评如潮'
+				}, {
+					title: '全部筛选',
+					desc: '全部分类'
+				}]
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.filter {
+		padding: 10rpx;
+		display: flex;
+		flex-direction: column;
+	
+		.con {
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+	
+			.title {
+				font-size: 28rpx;
+				font-weight: 800;
+			}
+	
+			.tag {
+				color: #888888;
+				padding: 4rpx;
+				margin-top: 10rpx;
+				font-size: 22rpx;
+			}
+		}
+	
+		.active {
+			color: #fd5d4a;
+	
+			.title {
+				color: fd5d4a;
+			}
+	
+			.tag {
+				border-radius: 20rpx 0 20rpx 0;
+				background-color: #ffddd5;
+				color: #fd5d4a;
+			}
+		}
+	}
+	
+	.item {
+		display: flex;
+		flex-direction: column;
+		margin-top: 50rpx;
+	
+		.card {
+			margin-bottom: 20rpx;
+			display: flex;
+			border-bottom: 1rpx solid #ececec;
+			padding-bottom: 20rpx;
+	
+			.left {
+				width: 30%;
+	
+				image {
+					width: 100%;
+					border-radius: 12rpx;
+					height: 180rpx;
+				}
+			}
+	
+			.right {
+				margin-left: 20rpx;
+				display: flex;
+				width: 70%;
+				flex-direction: column;
+	
+				.title {
+					font-size: 30rpx;
+					font-weight: 800;
+				}
+	
+				.data {
+					margin-top: 20rpx;
+					display: flex;
+					justify-content: space-between;
+					font-size: 24rpx;
+					color: #666666;
+				}
+	
+				.label {
+					margin-top: 10rpx;
+				}
+			}
+		}
+	
+		.card:last-child {
+			border: none;
+			margin-bottom: 0;
+			padding-bottom: 0;
+		}
+	}
+</style>

+ 105 - 0
pages/consume/comps/card2.vue

@@ -0,0 +1,105 @@
+<template>
+	<view class="">
+		<view class="cu-card case card" v-for="(item,index) in list" :key="index">
+			<view class="cu-item shadow">
+				<view class="image">
+					<image :src="item.pic"
+					 mode="widthFix"></image>
+				</view>
+				<view class="content">
+					<view class="top">
+						<text class="title">{{item.name}}</text>
+						<view v-if="item.introduce" class="desc text-cut-2">
+							{{item.introduce}}
+						</view>
+					</view>
+					<view class="bottom">
+						<view class="">
+							<image src="../../../static/del/map1.png" mode=""></image>
+							<text>距此3.5km</text>
+						</view>
+						<view class="">
+							<image src="../../../static/del/activitys.png" mode=""></image>
+							<text>18个活动</text>
+						</view>
+						<view class="">
+							<image src="../../../static/del/diancan.png" mode=""></image>
+							<text>去点餐</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			list:Array
+		},
+		data(){
+			return {
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.card{
+		background-color: #FFFFFF;
+		border-bottom: 1rpx solid #ececec;
+	}
+	
+	.card:last-child{
+		border: none;
+	}
+	
+	.content{
+		display: flex;
+		flex-direction: column;
+		.top{
+			.title{
+				font-weight: 800;
+				font-size: 28rpx;
+			}
+			.desc{
+				margin-top: 10rpx;
+				color: #919191;
+				font-size: 24rpx;
+			}
+		}
+		
+		.bottom{
+			margin-top: 20rpx;
+			display: flex;
+			width: 100%;
+			
+			view{
+				width: calc(100% / 3);
+				display: flex;
+				align-items: center;
+				image{
+					width: 30rpx;
+					height: 30rpx;
+				}
+				
+				text{
+					font-size: 28rpx;
+					margin-left: 6rpx;
+				}
+			}
+			
+			view:nth-child(1){
+				justify-content: flex-start;
+			}
+			view:nth-child(2){
+				justify-content: center;
+			}
+			view:nth-child(3){
+				justify-content: flex-end;
+			}
+		}
+	}
+</style>

+ 217 - 0
pages/consume/comps/tabsSwiper.vue

@@ -0,0 +1,217 @@
+<template>
+
+	<!-- 选项卡列表 swiper高度自适应 -->
+	<view class="">
+		<view class="ads">
+			<image src="https://music.nanyue6688.com/obsfile/e47815d1738640a09655b12efa4f59a9-%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210705182001.png"></image>
+		</view>
+		<view class="tabsSwiper" style="position: relative;top: -150rpx;">
+			<!-- <view class="location">
+				<u-icon name="map-fill" color="#000"></u-icon>
+				<text>保利中心</text>
+				<u-icon name="arrow-down-fill" size="20"></u-icon>
+			</view> -->
+			<view class="search-form" @click="$jump('/pages/search/search')">
+				<text class="cuIcon-search"></text>
+				<text class="margin-left-20">请输入搜索内容</text>
+			</view>
+			<view class="tabs">
+				<view class="tabs-con" :class="activeIndex==0?'active active0':'in_active in_active0'"
+					@click="tabsChange(0)" :style="{ color: activeIndex == 0 ? activeColor : '' }">
+					<view class="title">附近优惠</view>
+				</view>
+				<view class="tabs-con" :class="activeIndex==1?'active active1':'in_active in_active1'"
+					@click="tabsChange(1)" :style="{ color: activeIndex == 1 ? activeColor : '' }">
+					<view class="title">
+						<text>线上</text>
+						<text>/</text>
+						<text>线下</text>
+						场景
+					</view>
+				</view>
+
+			</view>
+			<view class="list">
+				<swiper :style="{ height: swiperHeight + 'rpx' }" :current="swiperCurrent" @change="swiperChange">
+					<swiper-item style="height: 100%">
+						<view class="list0">
+							<view class="item">
+								<slot name="swiper1">
+
+								</slot>
+							</view>
+						</view>
+					</swiper-item>
+					<swiper-item style="height: 100%">
+						<view class="list1">
+							<view class="item">
+								<slot name="swiper2">
+
+								</slot>
+							</view>
+						</view>
+					</swiper-item>
+				</swiper>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "tabsSwiper",
+		props: {
+			activeColor: {
+				type: String,
+				default: "#ff9420",
+			},
+		},
+		data() {
+			return {
+				activeIndex: 0, // tabs索引
+				swiperCurrent: 0, // swiper索引
+				swiperHeight: 0, //swiper高度
+			};
+		},
+		mounted() {
+			this.initSwiperHeight(".list0");
+		},
+		methods: {
+			// 点击tabs
+			tabsChange(index) {
+				this.activeIndex = index;
+				this.swiperCurrent = index;
+				let list = ".list" + index;
+				this.initSwiperHeight(list);
+				this.$emit('currentChange',index)
+			},
+			// 点击商品
+			touchItem(goods, cur) {
+				this.$emit("touchItem", goods);
+			},
+			// 手势切换
+			swiperChange(e) {
+				let index=e.detail.current
+				this.activeIndex = index;
+				let list = ".list" + index;
+				this.initSwiperHeight(list);
+				this.$emit('currentChange',index)
+			},
+			// 计算高度
+			initSwiperHeight(list) {
+				const query = uni.createSelectorQuery().in(this);
+				this.$nextTick(() => {
+					query
+						.select(list)
+						.boundingClientRect((data) => {
+							this.swiperHeight = Math.ceil(data.height / (uni.upx2px(data.height) / data
+								.height));
+						})
+						.exec();
+				});
+			},
+		},
+	};
+</script>
+
+<style lang="scss">
+	.ads {
+		image{
+			width: 100%;
+			height: 450rpx;
+		}
+	}
+	
+	.location{
+		font-weight: 800;
+		font-size: 30rpx;
+		display: flex;
+		padding:20rpx 30rpx;
+		
+		text{
+			margin: 0 4rpx;
+		}
+	}
+
+	.search-form {
+		background-color: #FFFFFF;
+		border-radius: 50rpx;
+		height: 60rpx;
+		margin-bottom: 16rpx;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		padding-left: 40rpx;
+		color: #b9b9b9;
+		font-size: 26rpx;
+	}
+
+	.tabsSwiper {
+		padding: 14rpx;
+	}
+
+	.tabs {
+		display: flex;
+		width: 100%;
+
+		.tabs-con {
+			padding: 20rpx 0;
+			color: #333;
+			overflow: hidden;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			.des {
+				font-size: 20rpx;
+				width: 100%;
+			}
+		}
+	}
+
+	.active {
+		width: 60%;
+		z-index: 9;
+		border-radius: 20rpx 20rpx 0 0;
+
+		.title {
+			font-weight: 800;
+			font-size: 34rpx;
+			color: #ff9420;
+		}
+	}
+
+	.active0 {
+		background: linear-gradient(-110deg, transparent 40rpx, #ffffff 0) top right;
+	}
+
+	.active1 {
+		background: linear-gradient(120deg, transparent 60rpx, #ffffff 0) top left;
+	}
+
+	.in_active {
+		width: 70%;
+		margin-top: 14rpx;
+		background-color: #fedcc3;
+	}
+
+	.in_active0 {
+		margin-right: -100rpx;
+		border-radius: 20rpx 0 0 0;
+		background-color: #fedcc3;
+	}
+
+	.in_active1 {
+		margin-left: -100rpx;
+		border-radius: 0 20rpx 0 0;
+		background-color: #fedcc3;
+	}
+
+	.list {
+		background-color: #fefefe;
+		padding: 16rpx;
+		border-radius: 0 0 16rpx 16rpx;
+		overflow: hidden;
+		min-height: 100rpx;
+	}
+</style>

+ 94 - 0
pages/gain/comps/card1.vue

@@ -0,0 +1,94 @@
+<template>
+	<view class="">
+		<view class="ads">
+			<image
+				src="https://music.nanyue6688.com/obsfile/e47815d1738640a09655b12efa4f59a9-%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20210705182001.png">
+			</image>
+		</view>
+
+		<view class="">
+			<view v-for="(item, index) in activityList" :key="index" class="container" @click="navWithParm(item.id)">
+				<view class="flex align-center">
+					<view style="margin: 30upx 0 10upx 20upx;">
+						<image :src="item.cover" style="width: 234upx;height: 188upx;border-radius: 16upx;"></image>
+					</view>
+					<view class="padding-lr-sm">
+						<view class="flex">
+							<view style="width: 80%">
+								<view class="text-lg text-bold">{{item.name}}</view>
+								<view class="text-sm margin-tb-xs">{{item.beginTime.split(' ')[0]}} -
+									{{item.endTime.split(' ')[0]}}
+								</view>
+								<view class="text-sm text-cut-2" style="width: 330upx;height: 70upx;">
+									{{item.description}}
+								</view>
+							</view>
+							<view style="margin-top: 10upx;" v-if="item.activityStatus == 0">
+								<image src="/static/icon/ing.png" style="width: 85upx;height: 73upx;"></image>
+							</view>
+							<view style="margin-top: 10upx;" v-if="item.activityStatus == 1">
+								<image src="/static/icon/ing.png" style="width: 100upx;height: 86upx;"></image>
+							</view>
+							<view style="margin-top: 10upx;" v-if="item.activityStatus == 2">
+								<image src="/static/icon/finish.png" style="width: 100upx;height: 86upx;"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="flex justify-end padding-right-sm">
+					<block v-for="(item, index) in item.tags.split(',')" :key="index">
+						<view class="tag">{{item}}</view>
+					</block>
+				</view>
+				<view class="flex align-center justify-end text-sm" style="padding: 20upx 30upx 30upx ;">
+					<text class="cuIcon-hotfill text-orange"></text>
+					<view class="padding-left-xs">已有{{item.applyNum}}人报名</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				activityList: [],
+			}
+		},
+		created() {
+			this.getActivityList()
+		},
+		methods: {
+			getActivityList() {
+				this.$api.activity.list().then(res => {
+					this.activityList = res.data.records
+				})
+			},
+			navWithParm(id) {
+				let url = 'https://music.nanyue6688.com/vote-h5/#/pages/index/guide?id=' + id
+				uni.reLaunch({
+					url: "/pages/webview/webview?url=" + url
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.ads {
+		margin: 20rpx;
+
+		image {
+			width: 100%;
+			height: 360rpx;
+			border-radius: 20rpx;
+		}
+	}
+
+	.container {
+		margin: 20upx;
+		background-color: #FFFFFF;
+		border-radius: 20upx;
+	}
+</style>

+ 253 - 0
pages/gain/comps/card2.vue

@@ -0,0 +1,253 @@
+<template>
+	<view class="">
+		<view class="empty-page" v-if="vuex_agenter_type == 0">
+			<image src="@/static/agent/empty.png" mode=""></image>
+			<block v-if="!$isEmpty(vuex_userId)">
+				<view class="tips">
+					<text>您当前还不是代理身份</text>
+					<text>快去查看代理权益吧~</text>
+				</view>
+				<view class="cu-btn btn round" @click="view">
+					点击查看
+				</view>
+			</block>
+			
+			<block v-else>
+				<view class="tips">
+					<text>当前用户还未登录</text>
+					<text>快去登录查看代理权益吧~</text>
+				</view>
+				<view class="cu-btn btn round" @click="login">
+					点击登录
+				</view>
+			</block>
+			
+		</view>
+		<view class="page" v-else>
+			<view class="card">
+				<view class="top">
+					<image src="https://thirdwx.qlogo.cn/mmopen/vi_32/q6EwR5U6zFp8bYbUWb9HmFc5Q3R88x13Q0ZtOcVK5lO8AmtibQDRcuMA2Y7CmyuMCr6icceM3QibIKN2icAAxSvjpA/132" ></image>
+					<view class="center text-xl" style="margin-left: 20rpx;margin-right: 10rpx;">黄明潘</view>
+					<view class="center margin-left-10">
+						<view class="cu-tag btn-bg-color sm" style="border-radius: 20rpx 20rpx 20rpx 0;">
+							代理商
+						</view>
+					</view>
+				</view>
+				<view class="bottom">
+					<view >
+						<text>今日收益</text>
+						<text class="text-price">108.00</text>
+					</view>
+					<view style="margin: 0 50rpx;">
+						<text>总收益</text>
+						<text class="text-price">888.00</text>
+					</view>
+					<view >
+						<text>我的推广</text>
+						<text >98</text>
+					</view>
+				</view>
+			</view>
+			
+			<view class="menu">
+				<view class="title">推广服务</view>
+				<view class="margin-top-30">
+					<view class="item" v-for="(item,index) in menuList" :key="index">
+						<view class="center">
+							<image style="width: 40rpx;height: 40rpx;margin-right: 10rpx;" :src="item.icon"></image>
+							<text>{{item.name}}</text>
+						</view>
+						<view class="center">
+							<text class="cuIcon-right"></text>
+						</view>
+					</view>
+				</view>
+				
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				menuList:[
+					{
+						icon:'/static/icon/card.png',
+						name:'去推广',
+						path:''
+					},
+					{
+						icon:'/static/icon/card.png',
+						name:'我的推广',
+						path:''
+					},
+					{
+						icon:'/static/icon/card.png',
+						name:'我的收益',
+						path:''
+					},
+				]
+			}
+		},
+		created() {
+			this.judgeAgenterType()
+		},
+		methods:{
+			login(){
+				this.$emit('login')
+			},
+			view(){
+				uni.navigateTo({
+					url:"/pages/agent/agentDetail"
+				})
+			},
+			judgeAgenterType(){
+				if (this.$isEmpty(this.vuex_userId)) {
+					return
+				}
+				let params={
+					userId:this.vuex_userId,
+					enabled:1
+				}
+				this.$api.agenter.list(params).then(res=>{
+					if (!this.$isEmpty(res.data.records)) {
+						let item=res.data.records[0]
+						let type=this.$isEmpty(item.agenterTypeId)?2:1
+						this.$u.vuex('vuex_agenter_type',type)
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.page{
+		background-color: #f6f6f6;
+		height: 80vh;
+		display: flex;
+		margin: 20rpx;
+		flex-direction: column;
+		justify-content: flex-start;
+		align-items: center;
+		
+		.card{
+			padding: 40rpx;
+			width: 100%;
+			border-radius: 20rpx;
+			background-image: linear-gradient(#1F2349,#465274);
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+			
+			
+			.top{
+				color: #FFFFFF;
+				display: flex;
+				
+				image{
+					border-radius: 50%;
+					width: 60rpx;
+					height: 60rpx;
+				}
+			}
+			
+			.bottom{
+				width: 100%;
+				padding-top: 50rpx;
+				display: flex;
+				text-align: center;
+				justify-content: space-around;
+				
+				view{
+					text-align: center;
+					display: flex;
+					flex-direction: column;
+					
+					text:first-child{
+						color: #A9ADB4;
+						font-size: 26rpx;
+						margin-bottom: 10rpx;
+					}
+					text:last-child{
+						font-size: 34rpx;
+						color: #F3D4B4;
+					}
+				}
+			}
+		}
+		
+		.menu{
+			margin-top: 30rpx;
+			width: 100%;
+			background-color: #FFFFFF;
+			border-radius: 20rpx;
+			padding: 0 20rpx;
+			
+			.title{
+				padding-top: 30rpx;
+				padding-left: 20rpx;
+				font-weight: 800;
+				font-size: 34rpx;
+			}
+			
+			.item{
+				border-bottom: 1rpx solid #EFEFEF;
+				padding:30rpx 20rpx;
+				color: #252525;
+				font-size: 30rpx;
+				display: flex;
+				justify-content: space-between;
+			}
+			
+			.item:last-child{
+				border: none;
+			}
+		}
+	}
+	
+	.empty-page{
+		background-color: #f6f6f6;
+		height: 70vh;
+		width: 100%;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		
+		image{
+			width: 280rpx;
+			height: 240rpx;
+		}
+		
+		.tips{
+			margin-top: 20rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			
+			text:first-child{
+				font-size: 32rpx;
+				font-weight: 800;
+			}
+			
+			text:last-child{
+				margin-top: 20rpx;
+				color: #999;
+				font-size: 26rpx;
+			}
+		}
+		
+		.btn{
+			width: 250rpx;
+			margin-top: 100rpx;
+			background-color: #F6F6F6;
+			border: 1rpx solid #EF9944;
+			color: #EF9944;
+		}
+	}
+</style>

+ 155 - 0
pages/mine/myInfo.vue

@@ -0,0 +1,155 @@
+<template>
+	<view>
+		<view class="flex padding justify-between align-center" @click="upload">
+			<view class="title">头像</view>
+			<u-avatar :src="userData.avatar" size="120"></u-avatar>
+		</view>
+		<u-line color="#f1f1f1"></u-line>
+		<view class="flex padding justify-between align-center">
+			<view class="title">昵称<text class="text-red">*</text></view>
+			<u-input v-model="userData.nickName" :clearable="false" inputAlign="right" placeholder="请输入昵称"></u-input>
+		</view>
+		<u-line color="#f1f1f1"></u-line>
+		<view class="flex padding justify-between align-center">
+			<view class="title">性别</view>
+			<view style="width: 200upx;">
+				<u-input v-model="sex" type="select" :border="border" @click="sexShow = true"></u-input>
+				<u-action-sheet :list="actionSheetList" v-model="sexShow" @click="actionSheetCallback"></u-action-sheet>
+			</view>
+		</view>
+		<u-line color="#f1f1f1"></u-line>
+		<view class="flex padding justify-between align-center">
+			<view class="title">手机号码<text class="text-red">*</text></view>
+			<u-input v-model="userData.phone" :clearable="false" inputAlign="right" placeholder="请填写手机号码"></u-input>
+		</view>
+		<u-line color="#f1f1f1"></u-line>
+		<view class="flex padding justify-between align-center" @click="calendarShow = true">
+			<view class="title">生日</view>
+			<view>{{userData.birthday}}</view>
+			<u-calendar v-model="calendarShow" mode="date" @change="change"></u-calendar>
+		</view>
+		<u-line color="#f1f1f1"></u-line>
+		<view class="padding">
+			<view class="title">个人介绍<text class="text-red">*</text></view>
+		</view>
+		<view style="padding: 0 40upx">
+			<u-input v-model="introduce" type="textarea" :clearable="false" height="140" :autoHeight="false" maxlength="60" placeholder="请输入个人简介" />
+		</view>
+		<view class="flex justify-end padding-right-sm padding-bottom-sm text-gray">{{introduce.length}} / 60</view>
+		<view style="height: 120upx;"></view>
+		<view class="footer-fixed margin-bottom">
+			<u-button class="custom-style" shape="circle" @click="save">保存</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				userData: {},
+				sex: '',
+				sexShow: false,
+				border: true,
+				show: false,
+				actionSheetList: [
+					{
+						text: '男'
+					},
+					{
+						text: '女'
+					},
+					{
+						text: '保密'
+					}
+				],
+				calendarShow: false,
+				introduce: '',
+			}
+		},
+		onLoad() {
+			this.getUserInfo();
+		},
+		methods: {
+			getUserInfo() {
+				this.$api.user.detail({id: this.vuex_userId}).then(res => {
+					this.userData = res;
+					this.introduce = res.introduce || " ";
+					if (res.gender == 1) {
+						this.sex = '男';
+					} else if (res.gender == 2) {
+						this.sex = "女";
+					} else {
+						this.sex = "未知"; 
+					}
+				})
+			},
+			// 点击actionSheet回调
+			actionSheetCallback(index) {
+				this.sex = this.actionSheetList[index].text;
+			},
+			change(e) {
+				this.userData.birthday = e.result;
+			},
+			async upload() {
+				let res = await this.$mpi.uploadFile()
+				this.userData.avatar = JSON.parse(res).data;
+			},
+			save() {
+				if (this.$u.test.isEmpty(this.introduce) || this.$u.test.isEmpty(this.userData.nickName) || this.$u.test.isEmpty(this.userData.phone)) {
+					uni.showToast({
+						icon: "none",
+						title: "请填写必填信息",
+					})
+					return;
+				} else if (!this.$u.test.mobile(this.userData.phone)) {
+					uni.showToast({
+						icon: "none",
+						title: "请填写正确的手机号",
+					})
+					return;
+				} else {
+					let data = {
+						id: this.userData.id,
+						nickName: this.userData.nickName,
+						gender: this.sex == '男' ? 1 : this.sex == '女' ? 2 : 0,
+						phone: this.userData.phone,
+						birthday: this.userData.birthday,
+						introduce: this.introduce,
+						avatar: this.userData.avatar
+					}
+					this.$u.api.user.submit(data).then(res => {
+						uni.showToast({
+							icon: "none",
+							title: "修改成功",
+							duration: 2000,
+							success() {
+								uni.navigateBack({
+									delta: 1
+								})
+							}
+						})
+					})
+				}
+			}
+		}
+	}
+</script>
+<style>
+	page {
+		background-color: #ffffff;
+	}
+</style>
+<style lang="scss" scoped>
+	.title {
+		font-size: 30upx;
+		font-weight: bold;
+		color: #060606;
+		padding-left: 10upx;
+	}
+	.custom-style {
+		background-color: #5a3ee7;
+		color: #ffffff;
+		width: 600rpx;
+	}
+</style>

+ 150 - 0
pages/search/search.vue

@@ -0,0 +1,150 @@
+<template>
+	<view class="bg-white" style="min-height: 100vh;">
+		<view class="cu-bar bg-white  ">
+			<view class="search-form round">
+				<text class="cuIcon-search" />
+				<input tyle="font-size: 34rpx;" v-model="searchKey" :adjust-position="false" type="text"
+					placeholder="请输入搜索内容" confirm-type="search" />
+				<text class="cuIcon-roundclose" style="font-size: 34rpx;color: #6c6c6c;" v-if="searchClose"
+					@click="searchKey= ''" />
+			</view>
+			<view class="action" @click="bindsearch">
+				<view class="cu-btn round sm" style="background-color: #f0b363;padding: 28rpx 36rpx;">
+					搜索
+				</view>
+			</view>
+		</view>
+		<view v-if="searchKey.length<=0||datalist==null">
+			<view class="search">
+				<view class="top">
+					<text class="left">历史搜索</text>
+					<view class="center" v-if="!$isEmpty(oldKeywordList)">
+						<text @click="delOldKeywordList" class="cuIcon-delete text-gray"
+							style="font-size: 34rpx;"></text>
+					</view>
+				</view>
+				<view class="list">
+					<view class="cu-tag "
+						style="background-color: #f3f3f4;color: #6c6c6c;padding: 16rpx 26rpx;border-radius: 4rpx;margin-bottom: 16rpx;"
+						v-for="(item,index) in oldKeywordList" :key="index">
+						{{item}}
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				searchKey: '',
+				oldKeywordList: [],
+				datalist: null
+			}
+		},
+		onLoad() {
+			this.loadOldKeyword();
+		},
+		computed: {
+			searchClose: {
+				get() {
+					if (this.$isEmpty(this.searchKey)) {
+						return false
+					} else {
+						return true
+					}
+				}
+			}
+		},
+		methods: {
+			delOldKeywordList() {
+				this.oldKeywordList = [];
+				uni.removeStorage({
+					key: 'OldKeys'
+				});
+			},
+			bindsearch() {
+				if (this.$isEmpty(this.searchKey)) {
+					return
+				}
+				//搜索todo
+				this.saveKeyword()
+			},
+			//加载历史搜索,自动读取本地Storage
+			loadOldKeyword() {
+				uni.getStorage({
+					key: 'OldKeys',
+					success: res => {
+						var OldKeys = JSON.parse(res.data);
+						this.oldKeywordList = OldKeys;
+					}
+				});
+			},
+			//保存关键字到历史记录
+			saveKeyword() {
+				let keyword = this.searchKey
+				uni.getStorage({
+					key: 'OldKeys',
+					success: res => {
+						//获取历史搜索词
+						var OldKeys = JSON.parse(res.data);
+						var findIndex = OldKeys.indexOf(keyword);
+						if (findIndex == -1) {
+							//如果历史搜索词里没有该输入的搜索词,就添加进数组头
+							OldKeys.unshift(keyword);
+						} else {
+							//如果有,就删除该搜索词并插进数组头
+							OldKeys.splice(findIndex, 1);
+							OldKeys.unshift(keyword);
+						}
+						//最多10个纪录,如果超过十条记录,就弹出最后一个元素
+						OldKeys.length > 10 && OldKeys.pop();
+						uni.setStorage({
+							key: 'OldKeys',
+							data: JSON.stringify(OldKeys)
+						});
+						this.oldKeywordList = OldKeys; //更新历史搜索
+					},
+					fail: e => {
+						var OldKeys = [keyword];
+						uni.setStorage({
+							key: 'OldKeys',
+							data: JSON.stringify(OldKeys)
+						});
+						this.oldKeywordList = OldKeys; //更新历史搜索
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	page {
+		background-color: #FFFFFF;
+	}
+
+	.search {
+		padding: 20rpx;
+		margin: 0rpx 20rpx;
+
+		.top {
+			display: flex;
+			justify-content: space-between;
+
+			.left {
+				font-size: 28rpx;
+				font-weight: 800;
+			}
+		}
+
+		.list {
+			padding-top: 30rpx;
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: flex-start;
+		}
+	}
+</style>

+ 117 - 0
pages/test/test.vue

@@ -0,0 +1,117 @@
+<template>
+	<view>
+		<view class="card">
+			<view class="top">
+				<view class="title center">
+					<image src="../../static/icon/yidong.png" mode=""></image>
+					<text>星巴克咖啡店</text>
+				</view>
+				<view class="detail">
+					<view class="">
+						<text>查看详情</text>
+						<text class="cuIcon-right margin-left-10"></text>
+					</view>
+				</view>
+			</view>
+			<view class="content">
+				<view class="">
+					<text class="label">申请人:</text>
+					<text class="value">张三</text>
+				</view>
+				<view class="padding-top-20">
+					<text class="label">时间:</text>
+					<text class="value">2021-08-02 10:10:35</text>
+				</view>
+			</view>
+			
+			<view class="bottom">
+				<view class="cu-btn round pass-btn" style="width: 140rpx;">
+					通过
+				</view>
+				<view class="cu-btn round refuse-btn" style="width: 140rpx;margin-left: 30rpx;">
+					拒绝
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.pass-btn{
+		background-color: 	#EF9944;
+		color: #FFFFFF;
+	}
+	
+	.refuse-btn{
+		background-color: #FFFFFF;
+		color: #EF9944;
+		border: 1rpx solid #EF9944;
+	}
+	
+	.card{
+		border-radius: 30rpx;
+		background-color: #FFFFFF;
+		display: flex;
+		flex-direction: column;
+		padding: 30rpx 36rpx;
+		margin: 20rpx 0;
+		position: relative;
+		
+		.top{
+			display: flex;
+			justify-content: space-between;
+			
+			.title{
+				color: #252525;
+				display: flex;
+				font-size: 34rpx;
+				font-weight: 800;
+				image{
+					margin-right: 10rpx;
+					width: 40rpx;
+					height: 40rpx;
+					border-radius: 50%;
+				}
+			}
+			
+			.detail{
+				display: flex;
+				flex-direction: column;
+				justify-content: flex-end;
+				color: #999999;
+				font-size: 26rpx;
+			}
+		}
+		
+		.content{
+			margin: 30rpx 20rpx;
+			
+			.label{
+				font-size: 28rpx;
+				color: #999999;
+			}
+			
+			.value{
+				color: #252525;
+			}
+		}
+		
+		.bottom{
+			display: flex;
+			justify-content: flex-end;
+		}
+	}
+</style>

+ 161 - 0
pages/userBank/add.vue

@@ -0,0 +1,161 @@
+<template>
+	<view>
+		<view class="bg-white " style="padding: 0rpx 40rpx;margin-top: 30rpx;">
+			<u-form :model="bankModel" ref="uForm" label-width="180">
+					<u-form-item label="银行类型">
+						<u-input type="select" placeholder="请选择银行类型" v-model="bankModel.bankTypeLabel" @click="bankTypeShow = true"/>
+					</u-form-item>
+					<u-form-item label="账户类型">
+						<u-input type="select" placeholder="请选择账户类型" v-model="bankModel.bankAccountTypeLabel" @click="bankAccountTypeShow = true"/>
+					</u-form-item>
+					<u-form-item label="开户姓名">
+						<u-input v-model="bankModel.realName" placeholder="请输入开户姓名"/>
+					</u-form-item>
+					<u-form-item label="联系方式">
+						<u-input v-model="bankModel.phone" placeholder="请输入联系方式"/>
+					</u-form-item>
+					<u-form-item label="银行卡号">
+						<u-input v-model="bankModel.cardNo" placeholder="请输入银行卡号" :clearable="false" />
+					</u-form-item>
+			</u-form>
+		</view>
+		<view class="footer-fixed" style="margin: 0 50rpx 200rpx;z-index: 9;">
+			<view @click="confirm" class="bg-gradual-base cu-btn round" style="padding: 46rpx;width: calc(100% - 100rpx);">
+				添加银行
+			</view>
+		</view>
+		
+		<u-select v-model="bankTypeShow" :default-value="bankTypeDefaultValue" :list="bankTypeList" @confirm="bankTypeConfirm"></u-select>
+		<u-select v-model="bankAccountTypeShow" :default-value="bankAccountTypeDefaultValue" :list="bankAccountTypeList" @confirm="bankAccountTypeConfirm"></u-select>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				id:'',
+				//银行类型
+				bankTypeShow:false,
+				bankTypeList:[],
+				//账户类型
+				bankAccountTypeShow:false,
+				bankAccountTypeList:[],
+				//银行对象
+				bankModel:{
+					userId:'',
+					userType:2,
+					cardNo:'',
+					realName:'',
+					phone:'',
+					bankType:'',
+					bankTypeLabel:'',
+					bankAccountType:'',
+					bankAccountTypeLabel:''
+				},
+			}
+		},
+		onLoad(options) {
+			this.id=options.id
+			this.init()
+		},
+		methods: {
+			async init(){
+				this.bankModel.userId=this.vuex_userId
+				this.bankModel.phone=this.vuex_phone
+				
+				await this.getBankType()
+				await this.getBankAccountType()
+				
+				if (this.id) {
+					uni.setNavigationBarTitle({
+						title:"编辑银行卡"
+					})
+					this.fetchUserBank()
+				}else{
+					uni.setNavigationBarTitle({
+						title:"添加银行卡"
+					})
+				}
+			},
+			//回显 begin
+			fetchUserBank(){
+				let params={
+					id:this.id
+				}
+				this.$api.userBank.detail(params).then(res=>{
+					if (!this.$isEmpty(res.data)) {
+						this.bankModel=res.data
+					}
+				})
+			},
+			//字典 begin
+			async getBankType() {
+				let res = await this.$api.dict({code: 'bank_type'})
+				res.data.forEach(item=>{
+					let obj={
+						label:item.dictValue,
+						value:item.dictKey
+					}
+					this.bankTypeList.push(obj)
+				})
+			},
+			async getBankAccountType() {
+				let res = await this.$api.dict({code: 'bank_account_type'})
+				res.data.forEach(item=>{
+					let obj={
+						label:item.dictValue,
+						value:item.dictKey
+					}
+					this.bankAccountTypeList.push(obj)
+				})
+			},
+			//字典 end
+			bankTypeConfirm(e){
+				this.bankModel.bankTypeLabel=e[0].label
+				this.bankModel.bankType=e[0].value
+			},
+			bankAccountTypeConfirm(e){
+				this.bankModel.bankAccountTypeLabel=e[0].label
+				this.bankModel.bankAccountType=e[0].value
+			},
+			confirm() {
+				if (this.$isEmpty(this.bankModel.phone)) {
+					this.$u.toast('请输入联系方式')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.bankType)) {
+					this.$u.toast('请选择银行类型')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.bankAccountType)) {
+					this.$u.toast('请选择账户类型')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.realName)) {
+					this.$u.toast('请输入开户姓名')
+					return
+				}
+				if (this.$isEmpty(this.bankModel.cardNo)) {
+					this.$u.toast('请输入银行卡号')
+					return
+				}
+				this.$api.userBank.submit(this.bankModel).then(res=>{
+					if (res.success) {
+						this.$dialog.showModal('操作成功',false).then(()=>{
+							uni.navigateBack()
+						})
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.custom-style {
+		background-color: #5b3ee7;
+		width: 400upx;
+		color: #ffffff;
+	}
+</style>

+ 116 - 0
pages/userBank/userBank.vue

@@ -0,0 +1,116 @@
+<template>
+	<view>
+		<navigator style="position: relative;" hover-class="none" :url="'./add?id='+item.id"  v-for="(item,index) in bankList" :key="index" class="card card_bg">
+			<view @click.stop="del(item.id)" style="position: absolute;right: 10rpx;top: 10rpx;">
+				<u-icon name="close-circle" color="#fff" size="40"></u-icon>
+			</view>
+			
+			<view class="top center" style="justify-content: flex-start;">
+				<view class="center margin-top-10">
+					<image :src="'/static/bank/'+item.bankType+'.png'"></image>
+				</view>
+				<view class="">
+					<text class="bankType">{{item.bankTypeLabel}}</text>
+					<text class="bankAccountType">{{item.bankAccountTypeLabel}}</text>
+				</view>
+			</view>
+			<view class="number">
+				<text>{{item.cardNo}}</text>
+			</view>
+		</navigator>
+		<navigator url="./add" class="card_add" hover-class="none">
+			<view class="margin-bottom-10">
+				<u-icon name="plus-circle-fill" color="#F5A85B" size="80"></u-icon>
+			</view>
+			<view  class="" style="color: #666666;">
+				添加新的银行卡
+			</view>
+		</navigator>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				bankList:[]
+			}
+		},
+		onShow() {
+			this.fetchCardList()
+		},
+		methods: {
+			fetchCardList(){
+				let params={
+					userId:this.vuex_userId,
+					size:20
+				}
+				this.$api.userBank.appList(params).then(res=>{
+					this.bankList=res.data.records
+				})
+			},
+			del(id){
+				this.$dialog.showModal('确定要解绑?').then(()=>{
+					this.$api.userBank.remove(id).then(res=>{
+						if (res.success) {
+							this.$u.toast('解绑成功!')
+							this.fetchCardList()
+						}
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.card_add{
+		margin: 30rpx;
+		border-radius:20rpx;
+		padding: 40rpx 30rpx;
+		background-color: #FFFFFF;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		flex-direction: column;
+	}
+	
+	.card {
+		margin: 30rpx;
+		border-radius:20rpx;
+		padding: 40rpx 30rpx;
+		background-image: linear-gradient(#F5A85B, #EF9944);
+		display: flex;
+		flex-direction: column;
+		.top {
+			display: flex;
+			margin-bottom: 20rpx;
+
+			image {
+				border-radius: 50%;
+				background-color: #FFFFFF;
+				width: 70rpx;
+				height: 70rpx;
+			}
+			
+			.bankType{
+				font-size: 36rpx;
+				color: #FFFFFF;
+				font-weight: 800;
+				margin-left: 30rpx;
+			}
+			.bankAccountType{
+				color: #F8E0C6;
+				font-size: 26rpx;
+				margin-left: 20rpx;
+			}
+		}
+
+		.number {
+			margin-left: 110rpx;
+			color: #FFFFFF;
+			font-weight: 800;
+			font-size: 34rpx;
+		}
+	}
+</style>

+ 25 - 0
pages/webview/webview.vue

@@ -0,0 +1,25 @@
+<template>
+	<view>
+		<web-view :src="url"></web-view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				url:''
+			}
+		},
+		onLoad(options) {
+			this.url=options.url
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

BIN
static/agent/empty.png


BIN
static/agent/icon-withdraw.png


BIN
static/agent/icon_weixin.png


BIN
static/agent/icon_yhk.png


BIN
static/agent/icon_zfb.png


BIN
static/agent/pic_agent.png


BIN
static/bank/ABC.png


BIN
static/bank/BOC.png


BIN
static/bank/CCB.png


BIN
static/bank/CGB.png


BIN
static/bank/CMBCHINA.png


BIN
static/bank/ECITIC.png


BIN
static/bank/HXB.png


BIN
static/bank/ICBC.png


BIN
static/del/activitys.png


BIN
static/del/del4.png


BIN
static/del/diancan.png


BIN
static/del/map1.png


BIN
static/icon/avatar.png


BIN
static/icon/bg-yin.png


BIN
static/icon/bg.png


BIN
static/icon/finish.png


BIN
static/icon/ing.png


BIN
static/icon/setting.png


BIN
static/icon/zhaoshang.png


BIN
static/icon/zhongguo.png