高敬炎 2 年 前
コミット
db374d1778
31 ファイル変更11063 行追加5 行削除
  1. 5 0
      unimall-data/src/main/java/com/iotechn/unimall/data/domain/CircleFriendsDetail.java
  2. 87 0
      xiaochengxu/pageA/cardHolder/map.vue
  3. 99 0
      xiaochengxu/pageA/cardHolder/notice.vue
  4. 832 0
      xiaochengxu/pageA/cardHolder/scanCodeAddCard.vue
  5. 340 0
      xiaochengxu/pageA/cardHolder/scancode.vue
  6. 387 0
      xiaochengxu/pageA/cardHolder/search.vue
  7. 156 0
      xiaochengxu/pageA/circle/addFriendCirlce.vue
  8. 484 0
      xiaochengxu/pageA/circle/changeCard.vue
  9. 515 0
      xiaochengxu/pageA/circle/circle-item.vue
  10. 232 0
      xiaochengxu/pageA/circle/createCirclce.vue
  11. 910 0
      xiaochengxu/pageA/circle/detail.vue
  12. 415 0
      xiaochengxu/pageA/circle/friendSCirlce.vue
  13. 287 0
      xiaochengxu/pageA/circle/lookHome.vue
  14. 378 0
      xiaochengxu/pageA/circle/search.vue
  15. 250 0
      xiaochengxu/pageA/mySet/cardType.vue
  16. 19 0
      xiaochengxu/pageA/mySet/contactCustomer.vue
  17. 762 0
      xiaochengxu/pageA/mySet/editCard.vue
  18. 116 0
      xiaochengxu/pageA/mySet/editHome.vue
  19. 84 0
      xiaochengxu/pageA/mySet/editNickName.vue
  20. 40 0
      xiaochengxu/pageA/mySet/help.vue
  21. 175 0
      xiaochengxu/pageA/mySet/lookCard.vue
  22. 19 0
      xiaochengxu/pageA/mySet/myAccount.vue
  23. 925 0
      xiaochengxu/pageA/mySet/myCard.vue
  24. 475 0
      xiaochengxu/pageA/mySet/myHome.vue
  25. 1057 0
      xiaochengxu/pageA/mySet/myInfo.vue
  26. 769 0
      xiaochengxu/pageA/mySet/newCard.vue
  27. 1126 0
      xiaochengxu/pageA/mySet/poster.vue
  28. 113 0
      xiaochengxu/pageA/mySet/set.vue
  29. 5 3
      xiaochengxu/pages/circle/circle.vue
  30. 0 1
      xiaochengxu/uni_modules/cl-upload/components/cl-upload/cl-upload.vue
  31. 1 1
      xiaochengxu/util/request.js

+ 5 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/domain/CircleFriendsDetail.java

@@ -58,6 +58,11 @@ public class CircleFriendsDetail extends SuperDO {
     @TableField("comment_id")
     private Long commentId;
 
+    /** 回复的评论人昵称 */
+    @Excel(name = "回复的评论人昵称")
+    @TableField("comment_name")
+    private String commentName;
+
     /** 标识(1点赞2评论) */
     @Excel(name = "标识(1点赞2评论)")
     @TableField("interaction_flag")

+ 87 - 0
xiaochengxu/pageA/cardHolder/map.vue

@@ -0,0 +1,87 @@
+<template>
+	<view>
+		<view class="page-body">
+			<view class="page-section page-section-gap">
+				<map style="width: 100%; height: 100vh;" :latitude="latitude" :longitude="longitude" :markers="covers">
+				<cover-view class="cover-view">
+				          <cover-view class="container">
+				            <cover-view class="flex-wrp" style="flex-direction:row;">
+				              <cover-view class="flex-item demo-text-1">
+								  <cover-view style="font-weight: bold;font-size: 28rpx;">{{dataObj.companyName}}</cover-view>
+								   <cover-view style="margin-top: 24rpx;color: rgba(128, 128, 128, 1);;font-size: 24rpx;display: flex;align-items: center;"><image src="https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/point.png" mode="widthFix" style="width: 20px;margin-right: 24rpx;"></image>{{dataObj.province}}{{dataObj.city}}{{dataObj.area}}{{dataObj.detailedAddress}}</cover-view>
+							  </cover-view>
+				            </cover-view>
+				          </cover-view>
+				        </cover-view>
+				</map>
+				
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		data() {
+			return {
+				id:0, // 使用 marker点击事件 需要填写id
+				title: 'map',
+				latitude: 39.909,
+				longitude: 116.39742,
+				covers: [],
+				dataObj:{
+					companyName:'',
+					area:'',
+					city:'',
+					province:'',
+					detailedAddress:''
+				}
+			}
+		},
+		onLoad(options) {
+			this.dataObj = JSON.parse(options.val)
+			
+			let location=this.dataObj.location.split(',')
+			this.latitude=location[0]
+			this.longitude=location[1]
+			this.covers = [
+				{
+					latitude: this.latitude,
+					longitude: this.longitude,
+					width:34,
+					height:40,
+					iconPath: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/marker.png'
+				}
+			]
+		},
+		methods: {
+	
+		}
+	}
+</script>
+
+<style lang="scss">
+.cover-view {
+  position: absolute;
+  bottom: 80rpx;
+  left:20rpx;
+  /* opacity: .7; */
+}
+
+.flex-wrp{
+  display:flex;
+}
+
+.flex-item{
+  width: calc(100vw - 40rpx);
+  height: 150rpx;
+  font-size: 26rpx;
+}
+
+.demo-text-1 {
+  background: #fff;
+  border-radius: 20rpx;
+  padding: 24rpx;
+  box-sizing: border-box;
+}
+
+</style>

+ 99 - 0
xiaochengxu/pageA/cardHolder/notice.vue

@@ -0,0 +1,99 @@
+<template>
+	<view>
+		<!-- <mescroll-body  :up="upOption" ref="mescrollRef" @init="mescrollInit" @up="upCallback" @down="downCallback"> -->
+			
+			<view class='notice-wrap' v-for='item in noticeList'>
+				<view class="flex justify-space-between">
+					<view style='width:100px;margin:10rpx 0;' class='flex justify-space-between'>
+						<u--image :showLoading="true" src="/static/imgs/card/news.png" width="52rpx" height="52rpx"></u--image>
+						<view>{{item.newsTitle}}</view>
+					</view>
+					
+					<view class='date'>{{parseTime(item.gmtCreate)}}</view>
+				</view>
+				<view class='content'>{{item.newsContent}}</view>
+			</view>
+		<!-- </mescroll-body> -->
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin],
+		data() {
+			return {
+				noticeList:[],
+				unreadList:[]
+			};
+		},
+		onShow() {
+			this.getList()
+		},
+		methods:{
+			getList(){
+				var that = this
+				uni.showLoading({
+						title: '数据加载中'
+					})
+				this.$request.baseRequest('admin.unimall.cardNewsInfo', 'list',{
+					receiveId:uni.getStorageSync("userInfo").id,
+				}, failres => {
+					uni.showToast({
+						icon:"none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					let curPageLen = res.data.items.length;
+					let totalPage = res.data.total;
+					this.noticeList=res.data.items
+					if(this.noticeList.length>0){
+						var data=this.noticeList.filter((item)=>{return item.newsFlag==0})
+						this.unreadList=data
+						if(this.unreadList.length>0){
+							for(var i=0;i<this.unreadList.length;i++){
+								if(this.unreadList[i].newsFlag==0){
+									this.unreadList[i].newsFlag=1
+									this.$request.baseRequest('admin.unimall.cardNewsInfo', 'update',{
+										cardNewsInfo:JSON.stringify(this.unreadList[i]),
+									}, failres => {
+										uni.showToast({
+											icon:"none",
+											title: failres.errmsg,
+											duration: 3000
+										});
+										uni.hideLoading()
+									}).then(res => {})
+								}
+								
+							}
+							
+						}
+					}
+					
+					uni.hideLoading()
+				})
+			},
+		}
+		
+	}
+</script>
+
+<style lang="scss" scoped>
+.notice-wrap{
+	background:#fff;
+	padding:20rpx;
+	margin:10rpx;
+	border-radius:20rpx;
+}
+.date{
+	color:#CCCCCC;
+}
+.content{
+	font-size:26rpx;
+	color:#666;
+}
+</style>

+ 832 - 0
xiaochengxu/pageA/cardHolder/scanCodeAddCard.vue

@@ -0,0 +1,832 @@
+<template>
+	<view>
+		<view class="card-wrap">
+			<!-- <card :obj="cardInfo" :styleList="bottomStyle" page="scanCodeAddCard"></card> -->
+			<view class="card-list-cardInfo relative"
+				:style="cardInfo.currentBackground?'background: url('+cardInfo.currentBackground+');background-size:100% 100%':''">
+				<view class="card-content style1" v-if="cardInfo.cuttentTemplate==1">
+					<view class="left">
+						<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+							shape="circle"></u--image>
+					</view>
+					<view class="right">
+						<view class="row1">
+							<text class="name">{{cardInfo.name}}</text>
+							<text class="post">{{cardInfo.post}}</text>
+						</view>
+						<view class="row2">
+							{{cardInfo.companyName}}
+						</view>
+						<view class="row3 flex" @click="toMap(cardInfo)">
+							<u--image :showLoading="true" :src="'/static/imgs/card/address'+cardInfo.icon+'.png'"
+								width="13px" height="16px"></u--image>
+							<view class='icon-text'>{{ cardInfo.province }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+						</view>
+						<view @click="freeTell(cardInfo)" class="row4 flex">
+							<u--image :showLoading="true" :src="'/static/imgs/card/phone'+cardInfo.icon+'.png'"
+								width="12px" height="13px"></u--image>
+							<view class='icon-text'>{{ cardInfo.phone }}</view>
+						</view>
+						<view class="row2 flex" style="color: #808080">
+							<u--image :showLoading="true" :src="'/static/imgs/card/remark'+cardInfo.icon+'.png'"
+								width="10px" height="12px"></u--image>
+							<view class='icon-text' style="color: #808080;">{{cardInfo.remark?cardInfo.remark:''}}
+							</view>
+						</view>
+					</view>
+					<u-checkbox-group v-if='islongPress' placement="column" @change="checkboxChange($event,index)">
+						<u-checkbox iconColor='#4977FC' activeColor="#fff" :name='index+1' :checked='cardInfo.checked'
+							:customStyle="{marginBottom: '8px'}">
+						</u-checkbox>
+					</u-checkbox-group>
+				</view>
+				<view class="card-content style1 flex-between" v-if="cardInfo.cuttentTemplate==2">
+					<view class="right">
+						<view class="row1">
+							<text class="name">{{cardInfo.name}}</text>
+							<text class="post">{{cardInfo.post}}</text>
+						</view>
+						<view class="row2">
+							{{cardInfo.companyName}}
+						</view>
+						<view @click="toMap(cardInfo)" class="row3 flex">
+							<u--image :showLoading="true" :src="'/static/imgs/card/address'+cardInfo.icon+'.png'"
+								width="13px" height="16px"></u--image>
+							<view class='icon-text'>{{ cardInfo.province }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+						</view>
+						<view @click="freeTell(cardInfo)" class="row4 flex">
+							<u--image :showLoading="true" :src="'/static/imgs/card/phone'+cardInfo.icon+'.png'"
+								width="12px" height="13px"></u--image>
+							<view class='icon-text'>{{ cardInfo.phone }}</view>
+						</view>
+						<view  class="row2 flex" style="color: #808080">
+							<u--image :showLoading="true" :src="'/static/imgs/card/remark'+cardInfo.icon+'.png'"
+								width="10px" height="12px"></u--image>
+							<view class='icon-text' style="color: #808080;">{{cardInfo.remark?cardInfo.remark:''}}
+							</view>
+						</view>
+					</view>
+					<view class="left">
+						<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+							shape="circle" v-if="cardInfo.headSculpture"></u--image>
+						<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+							shape="circle" v-else></u--image>
+					</view>
+					<u-checkbox-group v-if='islongPress' placement="column" @change="checkboxChange($event,index)">
+						<u-checkbox iconColor='#4977FC' activeColor="#fff" :name='index+1' :checked='cardInfo.checked'
+							:customStyle="{marginBottom: '8px'}">
+						</u-checkbox>
+					</u-checkbox-group>
+				</view>
+				<view class="card-content style2" v-if="cardInfo.cuttentTemplate==3">
+					<view class="top">
+						<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+							shape="circle" v-if="cardInfo.headSculpture"></u--image>
+						<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+							shape="circle" v-else></u--image>
+					</view>
+					<view class="bottom flex">
+						<view class="left">
+							<view class="row1">
+								<text class="name">{{cardInfo.name}}</text>
+								<text class="post">{{cardInfo.post}}</text>
+							</view>
+							<view class="row2">
+								{{cardInfo.companyName}}
+							</view>
+						</view>
+						<view class="right">
+							<view @click="toMap(cardInfo)" class="row1 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/address'+cardInfo.icon+'.png'"
+									width="13px" height="16px"></u--image>
+								<view class='icon-text'>{{ cardInfo.province }}{{ cardInfo.city }}{{ cardInfo.area }}
+								</view>
+							</view>
+							<view @click="freeTell(cardInfo)" class="row2 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/phone'+cardInfo.icon+'.png'"
+									width="12px" height="13px"></u--image>
+								<view class='icon-text'>{{ cardInfo.phone }}</view>
+							</view>
+							<view class="row2 flex" style="color: #808080">
+								<u--image :showLoading="true" :src="'/static/imgs/card/remark'+cardInfo.icon+'.png'"
+									width="10px" height="12px"></u--image>
+								<view class='icon-text' style="color: #808080;">
+									{{cardInfo.remark?cardInfo.remark:''}}
+								</view>
+							</view>
+						</view>
+					</view>
+					<u-checkbox-group v-if='islongPress' placement="column" @change="checkboxChange($event,index)">
+						<u-checkbox iconColor='#4977FC' activeColor="#fff" :name='index+1' :checked='cardInfo.checked'
+							:customStyle="{marginBottom: '8px'}">
+						</u-checkbox>
+					</u-checkbox-group>
+				</view>
+				<view class="card-content style2" v-if="cardInfo.cuttentTemplate==4">
+					<view class="top">
+						<view class="row1">
+							<text class="name">{{cardInfo.name}}</text>
+							<text class="post">{{cardInfo.post}}</text>
+						</view>
+						<view class="row2">
+							{{cardInfo.companyName}}
+						</view>
+
+					</view>
+					<view class="bottom flex">
+						<view class="left">
+							<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+								shape="circle" v-if="cardInfo.headSculpture"></u--image>
+							<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+								height="66px" shape="circle" v-else></u--image>
+						</view>
+						<view class="right">
+							<view @click="toMap(cardInfo)" class="row1 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/address'+cardInfo.icon+'.png'"
+									width="13px" height="16px"></u--image>
+								<view class='icon-text'>{{ cardInfo.province }}{{ cardInfo.city }}{{ cardInfo.area }}
+								</view>
+							</view>
+							<view @click="freeTell(cardInfo)" class="row2 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/phone'+cardInfo.icon+'.png'"
+									width="12px" height="13px"></u--image>
+								<view class='icon-text'>{{ cardInfo.phone }}</view>
+							</view>
+							<view class="row2 flex" style="color: #808080">
+								<u--image :showLoading="true" :src="'/static/imgs/card/remark'+cardInfo.icon+'.png'"
+									width="10px" height="12px"></u--image>
+								<view :style='cardInfo.remark?"color:#000;":"color:#808080;"' class='icon-text'>
+									{{cardInfo.remark?cardInfo.remark:''}}
+								</view>
+							</view>
+						</view>
+					</view>
+					<u-checkbox-group v-if='islongPress' placement="column" @change="checkboxChange($event,index)">
+						<u-checkbox iconColor='#4977FC' activeColor="#fff" :name='index+1' :checked='cardInfo.checked'
+							:customStyle="{marginBottom: '8px'}">
+						</u-checkbox>
+					</u-checkbox-group>
+				</view>
+				<view class="car-bottom flex">
+						<text style="color: #fff;font-size: 36rpx;font-weight: 700;margin-left: 40rpx;">{{value?value:'默'}}</text>
+				</view>
+			</view>
+		</view>
+		<view class="title">
+			名片信息
+		</view>
+		<view class="form-style">
+			<view class="row" style="border-bottom: 1px solid #E6E5E5;padding-bottom: 20rpx;">
+				<view class="left">
+					名片分类
+				</view>
+				<view class="right" @click="show = true">
+					{{cardInfo.classify?cardInfo.classify:'默认分类'}}
+				</view>
+			</view>
+			<view class="" style="padding: 20rpx 0;">
+				<view class="left" style="margin-bottom: 20rpx;">
+					备注(选填)
+				</view>
+				<view class="right">
+					<u--textarea v-model="cardInfo.remark" placeholder="输入备注,不超过150个字 "></u--textarea>
+				</view>
+			</view>
+			<view v-if='commonId' class="flex flex-between" style="border-bottom: 1px solid #E6E5E5;padding: 20rpx 0;">
+				<view class="left">
+					我的名片
+				</view>
+				<view class="right" @click="show1 = true">
+					{{cardInfo.cardBusiness?cardInfo.cardBusiness:'无名片'}}
+				</view>
+			</view>
+		</view>
+		<u-picker :immediateChange="true" keyName="cardBusiness" title="选择名片" @close="show1=false" @cancel="show1=false"
+			closeOnClickOverlay @confirm="cardConfirm" :show="show1" :columns="cardList"></u-picker>
+		<u-picker :immediateChange="true" keyName="circleName" title="选择分类" @close="show=false" @cancel="show=false"
+			closeOnClickOverlay @confirm="typeConfirm" :show="show" :columns="columns"></u-picker>
+		<view class="bottom-btn">
+			<u-button @click='cancel' text="取消" type="primary" :plain="true" color="#18254C"
+				:customStyle="btnStyle"></u-button>
+			<u-button @click='$u.debounce(save, 500)' text="保存" type="primary" color="#18254C"
+				:customStyle="btnStyle"></u-button>
+		</view>
+	<u-modal :show="showAuthorizePhone" :showConfirmButton="false">
+			<view class="slot-content">
+				<view class="auth-card">
+					<view class="img">
+						<img class="avatar-img" src="@/static/imgs/logo.png" mode="widthFix">
+					</view>
+					<!-- <div class="title">手机登录后才能查看名片哦~</div> -->
+					<view class="content">手机登录后才能查看名片哦~</view>
+				</view>
+				<view class="auth-btncard">
+					<view class="btn-unok">
+						<u-button :customStyle="customStyleUnOk" @click="showAuthorizePhone=false" :plain="true">
+							拒绝</u-button>
+					</view>
+					<view class="btn-ok">
+						<u-button :customStyle="customStyleOk" open-type="getPhoneNumber"
+							@getphonenumber="getPhoneNumber"> 立即登录</u-button>
+					</view>
+				</view>
+			</view>
+		</u-modal>
+		<u-modal :show="showAuthorizeUser" :showConfirmButton="false">
+			<view class="slot-content">
+				<view class="auth-card">
+					<view class="img">
+						<img class="avatar-img" src="/static/imgs/logo.png" mode="widthFix">
+					</view>
+					<view class="content">邀请您补全个人信息<br></br>(昵称、头像)</view>
+					<view style="margin-left: 100rpx;margin-right: 100rpx">
+						<u-form :model="userInfo" ref="uForm">
+							<u-form-item label="头像">
+								<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"
+									slot="right">
+									<image class="avatar"
+										:src="userInfo.head?userInfo.head:'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'">
+									</image>
+								</button>
+							</u-form-item>
+							<u-form-item label="昵称">
+								<u-input inputAlign='right' v-model="userInfo.nickname" class="weui-input"
+									@blur="userNameInput" placeholder="请输入昵称" border="false" />
+								<!-- <input type="nickname" :value="userInfo.nickname" class="weui-input" @blur="userNameInput" placeholder="请输入昵称"/> -->
+							</u-form-item>
+						</u-form>
+					</view>
+				</view>
+				<view class="auth-btncard">
+					<view class="btn-unok"><u-button :customStyle="customStyleUnOk" @click="showAuthorizeUser=false">
+							拒绝</u-button></view>
+					<view class="btn-ok"><u-button :customStyle="customStyleOk" @click="authUser"> 允许</u-button></view>
+				</view>
+			</view>
+		</u-modal>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	var that;
+	import {
+		pathToBase64,
+		base64ToPath
+	} from 'image-tools'
+	import Card from '../../components/Card/Card.vue'
+	export default {
+		components: {
+			Card
+		},
+		data() {
+			return {
+				showAuthorizeUser: false,
+				showAuthorizePhone: false,
+				customStyleUnOk: {
+					marginTop: '20rpx',
+					color: '#18254C',
+					border: '2px solid #18254C',
+					"border-radius": "10px",
+					fontSize: "32rpx"
+				},
+				customStyleOk: {
+					marginTop: '20rpx',
+					color: '#fff',
+					border: '2px solid #18254C',
+					"border-radius": "10px",
+					fontSize: "32rpx",
+					background: "#18254C"
+				},
+				value: '',
+				btnStyle: {
+					width:'calc(50% - 80rpx)'
+				},
+				bottomStyle: [
+					"position:absolute;left: 0;width:24vw;height:0;border-bottom:80rpx solid red;border-right:80rpx solid transparent;border-radius:0 0 0 20rpx",
+					"position: absolute;right: -40rpx;width: 58vw;height: 0;border-top: 80rpx solid green;border-left: 80rpx solid transparent;border-radius: 0 0 10px 0"
+				],
+				id: '',
+				commonId: '',
+				cardInfo: {},
+				show: false,
+				show1: false,
+				columns: [],
+				cardList: [],
+				userInfo:{},
+				rules: {
+					'userInfo.name': {
+						type: 'string',
+						required: true,
+						message: '请填写姓名',
+						trigger: ['blur', 'change']
+					},
+					'userInfo.sex': {
+						type: 'string',
+						max: 1,
+						required: true,
+						message: '请选择男或女',
+						trigger: ['blur', 'change']
+					},
+				},
+			}
+		},
+		onLoad(options) {
+			uni.showToast({
+				title:options,
+				duration:'10000'
+			})
+			that = this
+			console.log(options)
+			if(options.id){
+				this.id = options.id.indexOf(",") ? options.id.split(",")[0] : options.id
+			}else if(options.q){
+				var id = decodeURIComponent(options.q).split("=")[1]
+				this.id =id.indexOf(",") ? id.split(",")[0] : id
+			}
+			if (uni.getStorageSync("userInfo").phone) {
+				this.userInfo = uni.getStorageSync("userInfo")
+				if(options.q){
+					var id = decodeURIComponent(options.q).split("=")[1]
+					this.commonId =id.indexOf(",") ? id.split(",")[1] : ''
+				}else{
+					this.commonId = options.id.indexOf(",") ? options.id.split(",")[1] : ''
+				}
+				
+				
+				this.getList()
+				
+			} else {
+				this.showAuthorizePhone = true
+			}
+		},
+		onShow() {
+			
+		},
+		methods: {
+			//获取昵称输入内容
+			userNameInput(e) {
+				this.userInfo.nickname = e.detail.value
+			},
+			async onChooseAvatar(e) {
+				this.$set(this.userInfo, "head", await this.toBase64(e.detail.avatarUrl))
+			},
+			toBase64(url) {
+				return new Promise(resolve => {
+					pathToBase64(url).then(path => {
+						resolve(path);
+					}).catch(error => {
+						console.log(error)
+					})
+				})
+			},
+			async authUser(type) {
+				//同步信息,没有头像和昵称自动生成
+				this.userInfo =  await this.$request.syncInfo(this.userInfo)
+				if(this.userInfo.openId) {
+					uni.setStorageSync("userInfo", that.userInfo)
+					that.showAuthorizeUser = false
+					// that.mescroll.resetUpScroll()
+					this.getList()
+				}
+			},
+			async getPhoneNumber(e) {
+				console.log("开始登录")
+				that.userInfo = await this.$request.wxlogin()
+				console.log("结束登录",that.userInfo)
+				console.log("开始获取手机号码")
+				this.$nextTick(function() {
+					that.userInfo.phone = that.$request.getPhone(e, that.userInfo)
+					that.showAuthorizePhone = false
+					that.showAuthorizeUser = true
+					console.log("结束获取手机号码",that.userInfo.phone)
+				});
+				
+			
+			},
+			save() {
+				if(this.cardInfo.length==0){
+					uni.showToast({
+						icon: "none",
+						title: "您还未创建名片,请前往我的先创建名片!",
+						duration: 3000
+					});
+					return
+				}
+				this.$request.baseRequest('admin.unimall.cardHolderInfo', 'getAdded', {
+					commonId: uni.getStorageSync("userInfo").id,
+					cardId: this.cardInfo.id,
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res1 => {
+					uni.showLoading({
+						title: '数据加载中',
+						mask: true
+					})
+					this.$request.baseRequest('admin.unimall.cardHolderInfo', 'add', {
+						cardHolderInfo: JSON.stringify({
+							cardId: this.cardInfo.id,
+							remark: this.cardInfo.remark,
+							cardCommonId: this.commonId,
+							myCardId: this.cardInfo.myCardId,
+							commonId: uni.getStorageSync("userInfo").id,
+							classify: this.cardInfo.classify
+						})
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						uni.showToast({
+							icon: "success",
+							title: '保存成功!',
+							duration: 2000
+						});
+						 uni.setStorageSync("scanAddCardToIndex",1)
+						uni.switchTab({
+							url: "/pages/cardHolder/cardHolder"
+					
+						})
+					})
+				})
+				
+			},
+			cancel() {
+				uni.switchTab({
+					url: "/pages/cardHolder/cardHolder"
+
+				})
+			},
+			cardConfirm(e) {
+				console.log(e)
+				this.cardInfo.cardBusiness = e.value[0].cardBusiness
+				this.cardInfo.myCardId = e.value[0].id
+				this.show1 = false
+			},
+			typeConfirm(e) {
+				console.log(e)
+				this.cardInfo.classify = e.value[0].circleName
+				this.value = e.value[0].circleName.substring(0,1)
+				this.show = false
+			},
+			async getList() {
+				await this.$request.baseRequest('admin.unimall.cardManagementInfo', 'get', {
+					id: this.id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					console.log("this.cardInfo",res)
+					this.cardInfo = res.data
+					// if(this.cardInfo.length==0){
+					// 	uni.showToast({
+					// 		icon: "none",
+					// 		title: "您还未创建名片,请前往我的先创建名片!",
+					// 		duration: 3000
+					// 	});
+					// }
+					// this.cardInfo.cardBusiness = ''
+					// this.cardInfo.cardCommonId = res.data.commonId
+					console.log(res)
+				})
+				await this.$request.baseRequest('admin.unimall.cardManagementInfo', 'list', {
+					commonId: uni.getStorageSync("userInfo").id
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					this.cardList = [res.data.items]
+					this.cardInfo.cardBusiness = res.data.items[0].cardBusiness
+					this.cardInfo.myCardId = res.data.items[0].id
+					
+				})
+				await this.$request.baseRequest('admin.unimall.cardClassifyInfo', 'list', {
+					page: 1,
+					limit: 9999,
+					commonId: uni.getStorageSync("userInfo").id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					this.columns = [res.data.items]
+					console.log(this.columns)
+				})
+
+
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.card-wrap {
+		margin: 0 20rpx;
+		background: #f5f5f5;
+		// height: 1000px;
+		border-radius: 30rpx;
+
+		.style1 {
+			display: flex;
+			padding: 20rpx 30rpx;
+			width: 85%;
+			margin-bottom: 90rpx;
+
+			.left {
+				width: 132rpx;
+				height: 132rpx;
+				border-radius: 50%;
+			}
+
+			.right {
+				margin-left: 40rpx;
+
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+
+				.row3 {
+					margin-top: 30rpx;
+					font-size: 24rpx;
+					font-weight: 500;
+					color: #323333;
+
+				}
+
+				.row2,
+				.row4 {
+					margin-top: 10rpx;
+				}
+			}
+		}
+
+		.style2 {
+			padding: 15rpx;
+			margin-bottom: 80rpx;
+
+			.top {
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 10rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+			}
+
+			.bottom {
+				margin-top: 20rpx;
+
+				.left {
+					margin-right: 40rpx;
+
+					.row1 {
+						.name {
+							font-size: 38rpx;
+							font-weight: bold;
+							color: #040000;
+							margin-right: 20rpx;
+						}
+
+						.post {
+							font-size: 26rpx;
+							font-weight: 500;
+							color: #666666;
+						}
+					}
+
+					.row2 {
+						margin-top: 10rpx;
+						font-size: 26rpx;
+						font-weight: bold;
+						color: #323333;
+					}
+
+				}
+
+				.right {
+
+					.row1,
+					.row2 {
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+					}
+
+					.row2,
+					.row4 {
+						margin-top: 10rpx;
+					}
+				}
+			}
+
+		}
+
+
+	}
+	.car-bottom {
+			position: absolute;
+			bottom: 63rpx;
+			left: 20rpx;
+			bottom: 24rpx;
+			width: 94.9%;
+			background: url("../../static/imgs/card/bgc4.png") no-repeat center;
+			background-size: cover;
+			height: 80rpx;
+
+			// width: calc(100% - 40rpx);
+			.left {
+				// top: -40rpx;
+				position: absolute;
+				padding: 20rpx 0;
+				width: 70vw;
+				height: 80rpx;
+				box-sizing: border-box;
+				display: flex;
+				align-items: center;
+				justify-content: space-evenly;
+				left: 0px;
+
+				// background-size: 100% 100%;
+				overflow-y: hidden;
+			}
+		}
+	.card-list-item {
+		width: calc(100%);
+		// left:-20rpx;
+		position: relative;
+		border-radius: 30rpx;
+		padding: 40rpx;
+		box-sizing: border-box;
+
+	
+
+		.left {
+			width: 30%;
+
+			.top {
+
+				margin-bottom: 20rpx;
+			}
+
+			.img {
+				width: 80%;
+			}
+
+			.bottom {}
+		}
+
+		.right {
+			.row1 {
+				.line {
+					width: 1px;
+					height: 20px;
+					margin: 0 20rpx;
+					background: black;
+				}
+			}
+		}
+	}
+
+	.title {
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #19191A;
+		margin-left: 20rpx;
+	}
+
+	.form-style {
+		background: #fff;
+		padding: 20rpx;
+		margin: 20rpx;
+		box-sizing: border-box;
+		border-radius: 20rpx;
+
+		.row {
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+
+	.bottom-btn {
+		position: fixed;
+		bottom: 40rpx;
+		display: flex;
+		justify-content: space-between;
+		// padding: 20rpx;
+		width: 100vw;
+		height: auto;
+	}
+
+	.card-list-cardInfo {
+		padding: 40rpx;
+	}
+	.icon-text{
+		margin-left: 20rpx;
+	}
+	.slot-content {
+		width: 100%;
+	}
+	
+	.auth-btncard {
+		display: flex !important;
+		justify-content: space-between !important;
+	
+		.btn-unok {
+			width: 40%;
+		}
+	
+		.btn-ok {
+			width: 40%;
+		}
+	}
+	
+	.auth-card {
+		text-align: center;
+	
+		.avatar-img {
+			width: 250rpx;
+		}
+	
+		.title {
+			font-size: 20rpx;
+		}
+	
+		.content {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #1A1A1A;
+			margin-bottom: 30rpx;
+		}
+	}
+	
+	.avatar-wrapper {
+		color: #333 !important;
+		border: none !important;
+		border-radius: 0 !important;
+		background-color: transparent !important;
+		padding: 0;
+	}
+	
+	.avatar-wrapper::after {
+		border: none !important;
+	}
+	
+	.avatar {
+		width: 100rpx;
+		height: 100rpx;
+		overflow: hidden;
+		border-radius: 100%;
+	}
+</style>

+ 340 - 0
xiaochengxu/pageA/cardHolder/scancode.vue

@@ -0,0 +1,340 @@
+<template>
+	<view>
+		 
+		 
+		 <!-- 扫描框 -->
+		 <view class="scanBox" >
+			 <view class="scan-view">
+				<view class="scan-border">
+					<camera :class="status==0?'scan-camera':'camera'" @error="error" :mode="status==0?'scanCode':'normal'" @scancode="scancode" :flash='flashBtn'>
+					 <cover-view v-if='status==0'
+							   class="scan-animation"
+							   :animation="animation"
+							 ></cover-view>
+						   <!--  <cover-view class="scan-pict"
+							   ><cover-image
+								 class="pic"
+								 src="../../static/images/selectpic.png"
+							   ></cover-image>
+							 </cover-view> -->
+
+					</camera>
+				</view>
+			</view>
+		     
+			  
+		     <view class="scanTip">{{status==1?'请':'请扫描二维码'}}</view>
+		     <!-- 关闭扫码页面 -->
+			 <view class='wrap'>
+				 <view class='content'>
+					 <view class='scan-left' @click="scanClick(0)">扫码添加名片</view>
+					<view  v-if='status==0'></view>
+					<view @click='takePhoto' v-if='status==1' class='center-btn'><u-icon size="40" name="camera"></u-icon></view>
+					<view class='scan' @click="scanClick(1)">名片识别</view>
+				 </view>
+				
+			 </view>
+		 </view>
+	</view>
+</template>
+
+<script>
+// import { iconScanBgGif,scancodeOpen,scancodeClose } from "../../../utils/imgUrl/index";
+// const permisson = require("../../../utils/tools/permisson"); // 权限校验封装
+import uploadImage from '@/components/ossutil/uploadFile.js';
+const userCameraName = "scope.camera"; // 摄像头权限
+const userCameraZhName = "手机摄像头"; // 摄像头权限对应的中文名称
+let animation = uni.createAnimation({});
+export default {
+  data() {
+    return {
+		// iconScanBgGif:'/static/imgs/code1.gif',
+		// iconScanBgGif,scancodeOpen,scancodeClose,
+		canScan: false, // 是否显示自定义扫码界面
+        flashBtn: 'off', // off关闭   on  打开手电筒
+        scanResult: '', // 扫描结果
+		isShow:false,
+		status:uni.getStorageSync('scancodeStatus')?uni.getStorageSync('scancodeStatus'):0,
+		flag:false,
+		src:'',
+		animation,
+    };
+  },
+  onShow() {
+  	this.donghua()
+  },
+  mounted() {
+	  var that = this
+  	    //需要获得现在的授权信息
+  		uni.getSetting({
+  			success(res){
+  			    //如果相机访问权限没有授权
+  				if (!res.authSetting['scope.camera']) {
+  				    //访问授权
+  					uni.authorize({
+  						scope: 'scope.camera',
+  						success(){
+  							uni.showToast({
+  								title:'授权成功',
+  							})
+  							that.isShow = true
+  						},
+  						//拒绝后第二次访问授权默认进入fail,询问用户“检测到您没打开获取相机功能权限,是否去设置打开”
+  						fail(){
+  							uni.showModal({
+  								content: '检测到您没打开获取相机功能权限,是否去设置打开?',
+  								confirmText: "确认",
+  								cancelText: '取消',
+  								success: (res)=>{
+  									if (res.confirm) {
+  									//打开设置页面,让用户授权
+  										uni.openSetting({
+  											success: ()=>{
+  												uni.showModal({
+  													title: '授权后请重新打开此页面',
+  													icon: 'none',
+  													success: function(){
+  													// 刷新
+  														uni.redirectTo({
+  															url: '/pages/cardHolder/scancode',
+  														});
+  													}
+  												})
+  											}
+  										})
+  									}
+  								}
+  							})
+  						}
+  					})
+  				}else{
+  				  that.isShow = true
+  				}
+  			}
+  					
+  		})
+  	},
+	methods: {
+		donghua() {
+		    let that = this;
+		    let scode = true;
+		    setInterval(
+		        function () {
+		          if (scode) {
+		            animation.translateY(240).step({
+		              duration: 1500,
+		            });
+		            scode = !scode;
+		          } else {
+		            animation.translateY(-10).step({
+		              duration: 1500,
+		            });
+		            scode = !scode;
+		          }
+		          that.animation = animation.export();
+		        }.bind(this),
+		        1500
+		    );
+		},
+		takePhoto() {
+			uni.showLoading({
+				title: '数据加载中',
+				mask:true
+			})
+	        const ctx = uni.createCameraContext();
+			console.log(ctx)
+	        ctx.takePhoto({
+	            quality: 'high',
+				fail: (req) => {
+					uni.hideLoading()
+	            },
+	            success: (res) => {
+	                this.src = res.tempImagePath
+					this.uploadFilePromise(res.tempImagePath)
+	            },
+				
+	        });
+		},
+		uploadFilePromise(url) {
+			console.log(url)
+			uploadImage(url, 'cardImages/',
+				result => {
+					console.log(result, 22222)
+					
+				}
+			)
+		},
+		error(e) {
+		    console.log(e.detail);
+		},
+       // 显示扫码界面(扫一扫)
+       scanShowClick(){
+		   console.log('扫码')
+           // 校验权限, 必须开启摄像头权限
+           // wx.getSetting({
+           //     success:async(res)=> {
+           //         if(!res.authSetting['scope.camera']) {
+                       // 权限封装
+                       // permisson.permission_request(userCameraName, userCameraZhName);
+    
+                       // 也可自己写,通过 wx.authorize 打开有关授权=>官方链接https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorize.html
+                   // } else {
+                       this.canScan=true
+                       // 顶部标题栏背景变黑
+                       uni.setNavigationBarColor({
+                           backgroundColor: '#000000',
+                           frontColor: '#ffffff',
+                       });
+           //         }
+           //     }
+           // })
+       },
+       // 隐藏扫码界面
+       scanClick(status){
+          this.status=status
+		  uni.setStorageSync('scancodeStatus', this.status);
+		  uni.redirectTo({
+		  	url: '/pages/cardHolder/scancode',
+		  });
+       },
+       // 扫一扫返回数据
+       scancode(e) {
+		   if(this.flag){
+			   return
+		   }else{
+			   this.flag=true
+			   if(e){
+				   console.log(e)
+				   if(e.target.result){
+					   
+						uni.navigateTo({
+							url: "/pageA/cardHolder/scanCodeAddCard?id="+e.target.result
+						})
+						this.flag=false
+				   }else{
+					   uni.showModal({
+					   		content: '二维码无效',
+					   		showCancel: false
+					   	});
+					   	this.flag = false
+					   	return
+				   }
+			   }  
+		   }
+           
+           // const {result:scanResult} = e.detail; 
+           // if(result) {
+           //     this.scanResult,canScan=false
+           //     // 顶部标题栏背景变白
+           //     uni.setNavigationBarColor({
+           //         backgroundColor: '#ffffff',
+           //         frontColor: '#000000'
+           //     });
+           // }
+       }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.scanBox {
+    position: fixed;
+    top: 0;
+    width: 100%;
+    height: 100vh;
+    background-color: #000000;
+}
+
+
+.camera {
+    position: relative;
+    width: 100vw;
+    height: 80vh;
+
+}
+.coverImg{
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 99999;
+}
+.scanTip {
+    padding: 20rpx 0 0 0;
+    font-size: 32rpx;
+    text-align: center;
+    color: #fff;
+}
+
+
+/* 关闭按钮 */
+.scan,.scan-left{
+    padding: 20rpx 30rpx;
+    background: #fff;
+}
+.wrap{
+	width:100vw;
+	position:absolute;
+	z-index: 99999;
+	left:0;
+	bottom:0;
+	background-color: #000000;
+}
+.content{
+	display: flex;
+	justify-content: space-between;
+}
+.center-btn{
+	background:#fff;
+}
+
+// .scan-border {
+//   width: 100%;
+//   height: 100%;
+//   /* border: 6rpx solid #08FDFE; */
+//   display: flex;
+//   flex-direction: column;
+//   align-items: center;
+ 
+
+  .scan-camera {
+      position: relative;
+      width: 70vw;
+      height: 70vw;
+      margin: 20vh auto 0;
+	  border-radius: 6rpx;
+  }
+// }
+ 
+.scan-animation {
+  position: absolute;
+  top: 10%;
+  left:5%;
+  width: 480rpx;
+  height: 8rpx;
+  background-color: #0091ff;
+  border-radius: 50%;
+}
+.btns {
+  margin: 10rpx;
+  width: 100%;
+  background-color: #0091ff;
+}
+.scan-pict {
+  position: absolute;
+  right: 1%;
+  bottom: 1%;
+  width: 70rpx;
+  height: 70rpx;
+  z-index: 20;
+  border-radius: 50%;
+  background-color: #c0c0c0;
+  opacity: 0.8;
+  .pic {
+    z-index: 999;
+    width: 50rpx;
+    height: 50rpx;
+    margin: 10rpx;
+  }
+}
+</style>

+ 387 - 0
xiaochengxu/pageA/cardHolder/search.vue

@@ -0,0 +1,387 @@
+<template>
+	<view>
+		<d-search-log :placeholder="'搜索名片'" :color_border="color_border" :color_text="color_border"
+			:search_list_old_man_num='15' :search_list_hot="search_list_hot" :store_key="store_key" :input_text="input_text"
+			@onClickDelAllApi="onClickDelAll" @onSearchNameApi="onSearchName" @onSearchvoiceApi='onSearchvoice'></d-search-log>
+		<u-popup :show="isRecorderManager" mode="bottom">
+			<view class="shqx" v-if="longPress == '2'">
+				上划取消
+			</view>
+			<view class="record-layer">
+				<view class="record-box">
+					<view class="record-btn-layer" v-if="tempFilePath == ''">
+						<view class="record-btn">
+							<image src="../../static/mic1.png" mode="widthFix" style="width:120rpx;height: auto;"
+								@longpress="longpressBtn" @touchend="touchendBtn" @touchmove="handleTouchMove"></image>
+							<text class="text">{{longPress == '1' ? '按住说出姓名' : '松开自动识别'}}</text>
+						</view>
+					</view>
+					<view class="prompt-layer prompt-layer-1" v-if="longPress == '2'">
+						<view class="prompt-loader">
+							<view class="em" v-for="(item,index) in 15" :key="index"></view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	import dSearchLog from '@/uni_modules/d-search-log/components/d-search-log/d-search-log.vue'
+	const recorderManager = uni.getRecorderManager();
+	const innerAudioContext = uni.createInnerAudioContext();
+	var init // 录制时长计时器
+	var timer // 播放 录制倒计时
+	export default {
+		components: {
+			"dSearchLog": dSearchLog
+		},
+		data() {
+			return {
+
+				duration: 2000, //录音最大值ms 60000/1分钟
+				tempFilePath: '', //音频路径
+				playStatus: 0, //录音播放状态 0:未播放 1:正在播放
+				longPress: '1',
+				tempFilePath: '',
+				color_border: "#00aaff",
+				search_list_hot: [],
+				store_key: 'search_list',
+				isRecorderManager: false,
+				is_clock: true,
+				startPoint: "",
+				input_text:""
+			};
+		},
+		onLoad(options) {
+			if (options.mic == 1) {
+				this.isRecorderManager = true
+			}
+		},
+		methods: {
+			onSearchvoice(e){
+				this.isRecorderManager = true
+			},
+			handleTouchMove: function(e) {
+				console.log("滑动")
+				if (Math.abs(e.touches[e.touches.length - 1].clientY - this.startPoint.clientY) > 35) {
+
+					this.is_clock = false
+				} else {
+
+					this.is_clock = true
+				}
+			},
+			longpressBtn(e) {
+				this.longPress = '2';
+				this.is_clock = true,
+					console.log(e);
+				this.startPoint = e.touches[0],
+					recorderManager.onStop((res) => {
+						console.log("录音结束")
+						this.tempFilePath = res.tempFilePath;
+					})
+				const options = {
+					duration: this.duration, // 指定录音的时长,单位 ms
+					sampleRate: 16000, // 采样率
+					numberOfChannels: 1, // 录音通道数
+					encodeBitRate: 96000, // 编码码率
+					// format: 'mp3', // 音频格式,有效值 aac/mp3
+					frameSize: 10, // 指定帧大小,单位 KB
+				}
+				recorderManager.start(options);
+				// 监听音频开始事件
+				recorderManager.onStart((res) => {
+					console.log(res)
+				})
+			},
+			touchendBtn() {
+				console.log("录音结束")
+				let that = this
+				this.longPress = '1'; 
+				that.isRecorderManager = false
+				recorderManager.onStop((res) => {
+					this.tempFilePath = res.tempFilePath
+					let _file = ''
+					if (that.is_clock) {
+						_file = uni.getFileSystemManager().readFileSync(res.tempFilePath, "base64")
+						console.log(_file)
+						uni.showLoading({
+							title:"正在识别"
+						})
+						that.$request.baseRequest('admin.unimall.certificateManagementInfo', 'speechRecognition', {
+							voiceMessage: _file,
+						}, failres => {
+							console.log('res+++++', failres.errmsg)
+							uni.hideLoading()
+							uni.showToast({
+								icon:"none",
+								title: failres.errmsg,
+								duration: 3000
+							});
+						}).then(res => {
+							uni.hideLoading()
+							console.log(res)
+							if(res.data.text.length>10){
+								var text = res.data.text.substring(0, 10)
+							}else{
+								var text = res.data.text
+							}
+							that.input_text = text
+							// uni.setStorageSync('search_val', text);
+							// uni.switchTab({
+							// 	url: "/pages/cardHolder/search"
+
+							// })
+
+						})
+					}
+					recorderManager.stop()
+				})
+			},
+			onClickDelAll() {},
+			onSearchName(e) {
+				if(e.length>10){
+					var text = e.substring(0, 10)
+				}else{
+					var text = e
+				}
+				
+				uni.setStorageSync('search_val', text);
+				uni.switchTab({
+					url: "/pages/cardHolder/cardHolder"
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.shqx {
+		position: absolute;
+		top: -100rpx;
+		left: 0;
+		right: 0;
+		margin: auto;
+		text-align: center;
+		color: rgba(221, 221, 221, 1);
+	}
+
+	.record-box {
+		width: 100%;
+		position: relative;
+		top: 80rpx;
+	}
+
+	.record-btn-layer {
+		width: 100%;
+		display: flex;
+		justify-content: center;
+	}
+
+	.record-btn-layer button::after {
+		border: none;
+	}
+
+	.record-btn-layer button {
+		font-size: 14px;
+		line-height: 38px;
+		width: 100%;
+		height: 38px;
+		border-radius: 8px;
+		text-align: center;
+		background: rgba(56, 86, 156, 1);
+	}
+
+	.record-btn-layer button image {
+		width: 16px;
+		height: 16px;
+		margin-right: 4px;
+		vertical-align: middle;
+	}
+
+	.record-btn-layer .record-btn-2 {
+		background: rgba(56, 86, 156, 1);
+	}
+
+	.prompt-layer {
+		border-radius: 8px;
+		background: rgba(56, 86, 156, 1);
+		padding: 8px 16px;
+		box-sizing: border-box;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+
+	.prompt-layer::after {
+		content: '';
+		display: block;
+		border: 6px solid rgba(0, 0, 0, 0);
+		border-top-color: rgba(56, 86, 156, 1);
+		position: absolute;
+		bottom: -10px;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+
+	.prompt-layer-1 {
+		font-size: 12px;
+		width: 128px;
+		text-align: center;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		top: -240px;
+	}
+
+	.del {
+		position: absolute;
+		top: -200rpx;
+
+		.img {
+			width: 100rpx;
+		}
+	}
+
+	.prompt-layer-1 .p {
+		color: #000000;
+	}
+
+	.prompt-layer-1 .span {
+		color: #fff;
+	}
+
+	.prompt-loader .em {}
+
+	.prompt-loader {
+		width: 96px;
+		height: 20px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 6px;
+	}
+
+	.prompt-loader .em {
+		display: block;
+		background: #fff;
+		width: 1px;
+		height: 10%;
+		margin-right: 2.5px;
+		float: left;
+	}
+
+	.prompt-loader .em:last-child {
+		margin-right: 0px;
+	}
+
+	.prompt-loader .em:nth-child(1) {
+		animation: load 2.5s 1.4s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(2) {
+		animation: load 2.5s 1.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(3) {
+		animation: load 2.5s 1s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(4) {
+		animation: load 2.5s 0.8s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(5) {
+		animation: load 2.5s 0.6s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(6) {
+		animation: load 2.5s 0.4s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(7) {
+		animation: load 2.5s 0.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(8) {
+		animation: load 2.5s 0s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(9) {
+		animation: load 2.5s 0.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(10) {
+		animation: load 2.5s 0.4s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(11) {
+		animation: load 2.5s 0.6s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(12) {
+		animation: load 2.5s 0.8s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(13) {
+		animation: load 2.5s 1s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(14) {
+		animation: load 2.5s 1.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(15) {
+		animation: load 2.5s 1.4s infinite linear;
+	}
+
+	@keyframes load {
+		0% {
+			height: 10%;
+		}
+
+		50% {
+			height: 100%;
+		}
+
+		100% {
+			height: 10%;
+		}
+	}
+
+	.prompt-layer-2 {
+		// top: -540px;
+	}
+
+	.prompt-layer-2 .text {
+		color: rgba(0, 0, 0, 1);
+		font-size: 12px;
+	}
+
+	.record-btn {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+
+		.text {
+			margin-top: 20rpx;
+		}
+
+	}
+
+	/deep/.u-popup__content {
+		padding-bottom: 100rpx;
+		// background: linear-gradient(180deg, rgba(204, 204, 204, 0.95) 0%, rgba(203, 203, 203, 0.01) 100%) !important;
+		border-radius: 50% 50% 0 0;
+	}
+
+	.record-layerP {
+		position: relative;
+		top: 50px;
+	}
+</style>

+ 156 - 0
xiaochengxu/pageA/circle/addFriendCirlce.vue

@@ -0,0 +1,156 @@
+<template>
+	<view class="content">
+		<view class="row1">
+			<u-input placeholder="这一刻得想法..." focus :border="false" v-model="formData.content"></u-input>
+		</view>
+		<view class="row2">
+			<cl-upload v-model="fileList" @onSuccess="onSuccess" @showType='getShowType($event)'></cl-upload>
+		</view>
+		<view class="row3 flex flex-between" @click="selectPlace">
+			<view class="left flex">
+				<u-icon name="map-fill" color="#112253" size="18"></u-icon>
+				<text style="margin:0 20rpx;">{{formData.location?formData.location:'所在位置'}}</text>
+			</view>
+			<view class="right">
+				<u-icon name="arrow-right" color="#112253" size="20"></u-icon>
+			</view>
+		</view>
+		<view class="row4 flex flex-between">
+			<view class="left flex">
+				<u-icon name="pushpin" color="#112253" size="18"></u-icon>
+				<text style="margin:0 20rpx;">开启评论</text>
+				<u-switch v-model="switchStatus" activeColor="#112253" @change="change($event,1)" size="20"></u-switch>
+			</view>
+			<view class="right">
+				<u-icon name="arrow-right" color="#112253" size="20"></u-icon>
+			</view>
+		</view>
+		<view @click="submit" class="submit">提交</view>
+	</view>
+</template>
+
+<script>
+	var that;
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				userInfo: {},
+				switchStatus: true,
+				fileList: [],
+				formData: {
+					commonId: '',
+					head: '',
+					nickname: '',
+					content: '',
+					image: '',
+					location: '',
+					commentFlag: '',
+					positioning:'',
+					circleId:'',
+					mediaType:''
+					
+				}
+			};
+		},
+		onShow() {
+			this.userInfo = uni.getStorageSync("userInfo")
+			
+		},
+		onLoad(options) {
+			that = this
+			this.formData.circleId = options.id
+		},
+		methods: {
+			getShowType(type){debugger
+			console.log("文件类型",type)
+				this.mediaType = type
+			},
+			onSuccess(reslut) {
+				// 把服务端返回的图片地址添加到list中与组件数据同步
+				this.fileList.push(reslut)
+			},
+			submit() {debugger
+				this.formData.commonId = this.userInfo.id
+				this.formData.head = this.userInfo.head
+				this.formData.nickname = this.userInfo.nickname
+				this.formData.image = this.fileList.toString()
+				this.formData.mediaType = this.mediaType
+				if (this.switchStatus) {
+					this.formData.commentFlag  = 1
+				} else {
+					this.formData.commentFlag  = 0
+				}
+				if (!this.formData.content) {
+					uni.showToast({
+						icon: "none",
+						title: '内容不能为空!',
+						duration: 2000
+					});
+					return
+				}
+				this.$request.baseRequest('admin.unimall.circleFriendsInfo', 'add', {
+					circleFriendsInfo: JSON.stringify(this.formData)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+
+					uni.hideLoading()
+				}).then(res => {
+					debugger
+				})
+				uni.showToast({
+					icon: "success",
+					title: '保存成功!',
+					duration: 2000
+				});
+				setTimeout(() => {
+					uni.navigateBack()
+				}, 2000)
+			},
+			selectPlace() {
+				uni.chooseLocation({
+					success: function(res) {
+						that.formData.location = res.address
+						console.log('位置名称:' + res.name);
+						console.log('详细地址:' + res.address);
+						console.log('纬度:' + res.latitude);
+						console.log('经度:' + res.longitude);
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content {
+		background-color: #fff;
+		padding: 40rpx;
+
+		.row2,
+		.row3 {
+			border-bottom: 1px solid #E6E6E6;
+			padding: 30rpx 0;
+		}
+
+		.row4 {
+			padding-top: 30rpx;
+		}
+	}
+
+	.submit {
+		position: fixed;
+		bottom: 100rpx;
+		background: #112253;
+		color: #fff;
+		width: calc(100% - 80rpx);
+		padding: 20rpx;
+		box-sizing: border-box;
+		text-align: center;
+		border-radius: 20rpx;
+	}
+</style>

+ 484 - 0
xiaochengxu/pageA/circle/changeCard.vue

@@ -0,0 +1,484 @@
+<template>
+	<view class="content">
+		<view class="content1 flex">
+			<span @click='switchStatus(1)' :class='status==1?"active":""' class='default'>邀请</span>
+			<span @click='switchStatus(2)' :class='status==2?"active":""' class='default'>黑名单</span>
+		</view>
+		<view class="content2 ">
+			<view class="row" v-for="(item,index) in cardList" :key="index">
+				<view class="card-list-item"
+					:style="item.cardManagementInfo.currentBackground?'background:url('+item.cardManagementInfo.currentBackground+');background-size:100% 100%':''">
+					<view class="card-content style1" v-if="item.cardManagementInfo.cuttentTemplate==1">
+						<view class="left">
+							<u--image :showLoading="true" :src="item.cardManagementInfo.headSculpture?item.cardManagementInfo.headSculpture:'/static/imgs/card/defaulthead.png'" width="66px" height="66px"
+								shape="circle"></u--image>
+						</view>
+						<view class="right">
+							<view class="row1">
+								<text class="name">{{item.cardManagementInfo.name}}</text>
+								<text class="post">{{item.cardManagementInfo.post}}</text>
+							</view>
+							<view class="row2">
+								{{item.cardManagementInfo.companyName}}
+							</view>
+							<view class="row3 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/address'+item.cardManagementInfo.icon+'.png'" width="13px"
+									height="16px"></u--image> <view class='icon-text'>{{ item.cardManagementInfo.province }}{{ item.cardManagementInfo.city }}{{ item.cardManagementInfo.area }}</view>
+							</view>
+							<view class="row4 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.cardManagementInfo.icon+'.png'" width="12px"
+									height="13px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.phone }}</view>
+							</view>
+							<view class="row4 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.cardManagementInfo.icon+'.png'" width="10px"
+									height="12px"></u--image><view class='icon-text'>{{item.cardManagementInfo.remark?item.cardManagementInfo.remark:'--'}}</view>
+							</view>
+							<!-- <view class="">
+								备注
+							</view> -->
+						</view>
+					</view>
+					<view class="card-content style1 flex-between" v-if="item.cardManagementInfo.cuttentTemplate==2">
+						<view class="right">
+							<view class="row1">
+								<text class="name">{{item.cardManagementInfo.name}}</text>
+								<text class="post">{{item.cardManagementInfo.post}}</text>
+							</view>
+							<view class="row2">
+								{{item.cardManagementInfo.companyName}}
+							</view>
+							<view class="row3 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/address'+item.cardManagementInfo.icon+'.png'" width="13px"
+									height="16px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.province }}{{ item.cardManagementInfo.city }}{{ item.cardManagementInfo.area }}</view>
+							</view>
+							<view class="row4 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.cardManagementInfo.icon+'.png'" width="12px"
+									height="13px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.phone }}</view>
+							</view>
+							<view class="row4 flex">
+								<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.cardManagementInfo.icon+'.png'" width="10px"
+									height="12px"></u--image><view class='icon-text'>{{item.cardManagementInfo.remark?item.cardManagementInfo.remark:'--'}}</view>
+							</view>
+							<!-- <view class="">
+								备注
+							</view> -->
+						</view>
+						<view class="left">
+							<u--image :showLoading="true" :src="item.cardManagementInfo.headSculpture" width="66px" height="66px"
+								shape="circle" v-if="item.cardManagementInfo.headSculpture"></u--image>
+							<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+								height="66px" shape="circle" v-else></u--image>
+						</view>
+					</view>
+					<view class="card-content style2" v-if="item.cardManagementInfo.cuttentTemplate==3">
+						<view class="top">
+							<u--image :showLoading="true" :src="item.cardManagementInfo.headSculpture" width="66px" height="66px"
+								shape="circle" v-if="item.cardManagementInfo.headSculpture"></u--image>
+							<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+								height="66px" shape="circle" v-else></u--image>
+						</view>
+						<view class="bottom flex">
+							<view class="left">
+								<view class="row1">
+									<text class="name">{{item.cardManagementInfo.name}}</text>
+									<text class="post">{{item.cardManagementInfo.post}}</text>
+								</view>
+								<view class="row2">
+									{{item.cardManagementInfo.companyName}}
+								</view>
+							</view>
+							<view class="right">
+								<view class="row3 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/address'+item.cardManagementInfo.icon+'.png'" width="13px"
+										height="16px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.province }}{{ item.cardManagementInfo.city }}{{ item.cardManagementInfo.area }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.cardManagementInfo.icon+'.png'" width="12px"
+										height="13px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.phone }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.cardManagementInfo.icon+'.png'" width="10px"
+										height="12px"></u--image><view class='icon-text'>{{item.cardManagementInfo.remark?item.cardManagementInfo.remark:'--'}}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="card-content style2" v-if="item.cardManagementInfo.cuttentTemplate==4">
+						<view class="top">
+							<view class="row1">
+								<text class="name">{{item.cardManagementInfo.name}}</text>
+								<text class="post">{{item.cardManagementInfo.post}}</text>
+							</view>
+							<view class="row2">
+								{{item.cardManagementInfo.companyName}}
+							</view>
+						
+						</view>
+						<view class="bottom flex">
+							<view class="left">
+								<u--image :showLoading="true" :src="item.cardManagementInfo.headSculpture" width="66px" height="66px"
+									shape="circle" v-if="item.cardManagementInfo.headSculpture"></u--image>
+								<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+									height="66px" shape="circle" v-else></u--image>
+							</view>
+							<view class="right">
+								<view class="row3 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/address'+item.cardManagementInfo.icon+'.png'" width="13px"
+										height="16px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.province }}{{ item.cardManagementInfo.city }}{{ item.cardManagementInfo.area }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.cardManagementInfo.icon+'.png'" width="12px"
+										height="13px"></u--image><view class='icon-text'>{{ item.cardManagementInfo.phone }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.cardManagementInfo.icon+'.png'" width="10px"
+										height="12px"></u--image><view class='icon-text'>{{item.cardManagementInfo.remark?item.cardManagementInfo.remark:'--'}}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="car-bottom flex">
+						<view class="status-btns" v-if="item.status==0">
+							<span class='status-btn' @click='cardExchangeInfoEdit(1,item)'> 拉黑</span>
+							<span class='status-btn error' @click='cardExchangeInfoEdit(2,item)'>拒绝</span>
+							<span class='status-btn success' @click='cardExchangeInfoEdit(3,item)'>接受</span>
+						
+						</view>
+						<view class="status-btns" v-else>
+							<span class='status' v-if="item.status==1">已接受</span>
+							<span class='status' v-if="item.status==3">已拒绝</span>
+							<span class='status' v-if="item.status==5">已过期</span>
+							<span v-if="item.status==7" class='status-btn' @click='cardExchangeInfoEdit(4,item)'>移除</span>
+						</view>
+					</view>
+				</view>
+				<view style='margin:0 20rpx;color:#666666;font-size: 26rpx;' class="flex flex-between">
+					<span>来自: {{item.circleName}}</span>
+					<span> {{parseTime(item.gmtCreate)}}</span>
+				</view>
+			</view>
+		</view>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				userInfo: {},
+				status: 1,
+				cardList: [{
+					cardManagementInfo: {}
+				}],
+			};
+		},
+		onLoad() {
+			this.userInfo = uni.getStorageSync("userInfo")
+			this.getList()
+		},
+		methods: {
+			switchStatus(status) {
+				this.status = status
+				this.getList()
+			},
+			getList() {
+				uni.showLoading({
+					title: '数据加载中'
+				})
+				this.$request.baseRequest('admin.unimall.cardExchangeInfo', 'list', {
+					receiveId: this.userInfo.id,
+					status: this.status
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					uni.hideLoading()
+					this.cardList = res.data.items
+				})
+			},
+			cardExchangeInfoEdit(type, val) {
+				uni.showLoading({
+					title: '数据加载中'
+				})
+				this.$request.baseRequest('admin.unimall.cardExchangeInfo', 'update', {
+					cardExchangeInfo: JSON.stringify(val),
+					updateFlag: type
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '操作成功!',
+						duration: 2000
+					});
+					this.getList()
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content1 {
+		background: #112253;
+		padding: 0rpx 20rpx 160rpx 20rpx;
+		box-sizing: border-box;
+		border-radius: 0px 0px 20rpx 20rpx;
+	}
+
+	
+	.default {
+		color: rgba(255, 255, 255, 0.5);
+		font-size: 26rpx;
+		padding: 20rpx;
+		position: relative;
+	}
+
+	.active {
+		color: #fff;
+		font-size: 32rpx;
+	}
+
+	.active:after {
+		content: '';
+		display: block;
+		width: 10px;
+		height: 2px;
+		background: #fff;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 0;
+	}
+
+	.content2 {
+		position: relative;
+		top: -144rpx;
+		padding: 20rpx;
+		.icon-text{
+			margin-left:10rpx;
+		}
+		.style1 {
+			display: flex;
+			padding: 20rpx 30rpx;
+			width: 85%;
+			margin-bottom: 70rpx;
+
+			.left {
+				width: 132rpx;
+				height: 132rpx;
+				border-radius: 50%;
+			}
+
+			.right {
+				margin-left: 40rpx;
+
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+
+				.row3,.row4 {
+					margin-top: 30rpx;
+					font-size: 24rpx;
+					font-weight: 500;
+					color: #323333;
+
+				}
+			}
+		}
+
+		.style2 {
+			padding: 30rpx;
+
+			.top {
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+				
+			}
+
+			.bottom {
+				margin-top: 20rpx;
+
+				.left {
+					margin-right: 40rpx;
+
+					.row1 {
+						.name {
+							font-size: 38rpx;
+							font-weight: bold;
+							color: #040000;
+							margin-right: 20rpx;
+						}
+
+						.post {
+							font-size: 26rpx;
+							font-weight: 500;
+							color: #666666;
+						}
+					}
+
+					.row2 {
+						margin-top: 20rpx;
+						font-size: 24rpx;
+						font-weight: bold;
+						color: #323333;
+					}
+				}
+
+				.right {
+
+					.row1,
+					.row2 {
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+					}
+
+					.row2 {
+						margin-top: 20rpx;
+					}
+					.row3,.row4 {
+						margin-top: 30rpx;
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+					
+					}
+				}
+			}
+
+		}
+	}
+
+	.card-list {
+		padding: 0 20rpx;
+
+		.title-name {
+			font-weight: bold;
+			color: #19191A;
+			margin: 20rpx 0;
+		}
+	}
+
+	.card-list-item {
+		width: calc(100% + 40rpx);
+		left: -20rpx;
+		position: relative;
+		border-radius: 30rpx;
+		padding: 40rpx;
+		box-sizing: border-box;
+
+		.car-bottom {
+			justify-content: flex-end;
+		}
+
+		.left {
+			width: 30%;
+
+			.top {
+
+				margin-bottom: 20rpx;
+			}
+
+			.img {
+				width: 80%;
+			}
+
+			.bottom {}
+		}
+
+		.right {
+			.row1 {
+				.line {
+					width: 1px;
+					height: 20px;
+					margin: 0 20rpx;
+					background: black;
+				}
+			}
+		}
+	}
+
+	.icon-text {
+		margin-left: 10px;
+		font-size: 24rpx;
+		font-weight: 500;
+		color: #323333;
+	}
+
+	.status-btns {
+		margin: 10rpx 0 25rpx;
+		
+	}
+
+	.status-btns span {
+		margin-right: 10rpx;
+		border-radius: 10rpx;
+		background: #fff;
+		border: 1px solid rgba(0, 0, 0, 0.20);
+		padding: 10rpx 30rpx;
+		font-size: 26rpx;
+	}
+
+	.status {
+		color: #666;
+	}
+
+	.error {
+		color: #FF4E4E;
+	}
+
+	.success {
+		color: #279D2A;
+	}
+</style>

+ 515 - 0
xiaochengxu/pageA/circle/circle-item.vue

@@ -0,0 +1,515 @@
+<template>
+	<!-- <mescroll-uni :ref="'mescrollRef' + i" @init="mescrollInit" :height="height" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick" @scroll="scroll"> -->
+	<view class="u-demo-block">
+		<view class="u-demo-block__content" v-for="(item, index) in list" :key="index" @touchstart="click">
+			<view class="album" style="padding: 30upx;">
+					<image :src="item.head" mode="" style="width: 80upx;height: 80upx;border-radius: 10rpx;"></image>
+				<view class="album__content">
+					<view class="album__info">
+						<text class="info-name" @click="toDetail(item)">{{ item.nickname }}</text>
+						<text class="info-content" @click="toDetail(item)">{{ item.content }}</text>
+						<template v-if="item.mediaType == 1">
+							<u-album v-if="item.urlList && item.urlList.length > 0" :urls="item.urlList" multipleSize="90" space='10'></u-album>
+							<u-album v-else :urls="item.urlList"></u-album>
+						</template>
+						<view v-else class="video">
+								<video v-show="isShowVideo"
+									class="video-info"
+									:show-center-play-btn="false"
+									:src="item.image"
+									id="myVideo"
+									:autoplay="true"
+									:loop="true"
+									:controls= "true"
+								></video>
+							<view v-if="item.direction==1&&!isShowVideo" class="relative">
+								<image :src="item.image + '?x-oss-process=video/snapshot,t_1000,f_jpg,w_800,h_600,m_fast,ar_auto'" mode="aspectFill" style="width: 424rpx;height:320rpx"></image>
+								<image class="cover" src="/static/play.png" @click="playVideo"></image>
+							</view>
+							<view v-if="item.direction==2&&!isShowVideo" class="relative">
+								<image :src="item.image + '?x-oss-process=video/snapshot,t_1000,f_jpg,w_800,h_600,m_fast,ar_auto'" mode="aspectFill" style="width: 320rpx;height:424rpx"></image>
+								<image class="cover1" src="/static/play.png" @click="playVideo"></image>
+							</view>
+						</view>
+					</view>
+					<view class="location" v-if="item.location">
+						<view class="location-left">
+							<text class="location-left-name">{{ item.location }}</text>
+						</view>
+					</view>
+					<view class="time">
+							<text class="time-text">{{$u.timeFrom(new Date(item.gmtCreate).getTime(),'yyyy年mm月dd日')}}</text>
+						</view>
+					<view class="comment">
+						<text class="time-text">{{ item.dateTime }}</text>
+						<view class="comment-right">
+							<view class="comment-item" @click="doThumb(item, index)">
+								<image class="image-love" :src="item.helpFlag==1 ? '../../static/love-fill.png' : '../../static/love.png'"></image>
+								<text class="number">{{ item.count }}</text>
+							</view>
+							<view class="comment-item" @click="doComment(item, null, index)">
+								<image class="image-comment" src="../../static/comment.png"></image>
+								<text class="number">{{ item.count1 }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="thumb-comment" v-if="item.circleFriendsDetailList&&(item.circleFriendsDetailList.length > 0 || item.comments.circleFriendsDetailList.length > 0)">
+				<view class="thumbs" v-if="item.circleFriendsDetailList&&item.circleFriendsDetailList.length > 0">
+					<image class="image-love thumbs-icon" src="../../static/love.png"></image>
+					<view class="thumbs-headers">
+						<view class="thumbs-headers-img" v-for="(item2, index2) in item.circleFriendsDetailList" :key="index2">
+							<view class="thumbs-item">
+								<text class="thumbs-name">{{ item2.nickname }}</text>
+								<text class="thumbs-name" v-if="index2 != item.circleFriendsDetailList.length - 1">,</text>
+							</view>
+						</view>
+						<text class="thumbs-headers-img thumbs-headers-more" v-if="item.circleFriendsDetailList.length > 20">等</text>
+					</view>
+				</view>
+				<view class="comments" v-if="item.circleFriendsDetailList1&&item.circleFriendsDetailList1.length > 0">
+					<image class="image-comment comments-icon" src="../../static/comment.png"></image>
+					<view class="comments-headers">
+						<view class="comments-headers-item" v-for="(item3, index3) in item.circleFriendsDetailList1" :key="index3">
+							<view class="item-left">
+								<u-avatar :src="item3.head" shape="square" size="32"></u-avatar>
+							</view>
+							<view class="item-right">
+								<view class="item-right-name">
+									<text class="item-right-name-top">{{ item3.nickname }}</text>
+									<text class="item-right-name-bottom">{{$u.timeFrom(new Date(item3.gmtCreate).getTime(),'yyyy年mm月dd日')}}</text>
+								</view>
+								<view class="comment-content">
+									<view class="comment-response" v-if="item3.commentName">
+										<text class="comment-response-txt">回复</text>
+										<text class="comment-response-name">{{ item3.commentName }}</text>
+										<text class="comment-response-txt">:</text>
+									</view>
+									<text class="item-right-info" @click="doComment(item, item3, index)">{{ item3.commentContent }}</text>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<u-line></u-line>
+		</view>
+	</view>
+	<!-- </mescroll-uni> -->
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js';
+import MescrollMoreItemMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js';
+// import { apiGoods } from '@/api/mock.js';
+
+export default {
+	mixins: [MescrollMixin, MescrollMoreItemMixin], // 注意此处还需使用MescrollMoreItemMixin (必须写在MescrollMixin后面)
+	data() {
+		return {
+			isShowVideo:false,
+			videoContext:'',
+			downOption: {
+				auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+			},
+			upOption: {
+				onScroll: true,
+				auto: false, // 不自动加载
+				// page: {
+				// 	num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+				// 	size: 10 // 每页数据的数量
+				// },
+				noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
+				empty: {
+					tip: '空空如也', // 提示
+					icon: 'http://cdn.uviewui.com/uview/empty/data.png'
+				}
+			},
+			showInput: false
+		};
+	},
+	props: {
+		list: {
+			type: Array,
+			default: function(e) {
+				return [];
+			}
+		}
+	},
+
+	computed: {
+		...mapState(['locateInformation'])
+	},
+
+	created() {},
+
+	filters: {
+		formatDistance(distance) {
+			var strDistance = '';
+			if (distance < 1) {
+				//一公里以内的
+				strDistance = distance * 1000 + 'm';
+			} else {
+				distance = distance.toFixed(1);
+				strDistance = distance + 'km';
+			}
+			return strDistance;
+		}
+	},
+
+	methods: {
+		playVideo(val) {
+			this.isShowVideo = true
+			console.log('--play--');
+			// 点击显示全屏
+			this.videoContext = uni.createVideoContext('myVideo')
+			this.videoContext.requestFullScreen();
+		},
+
+		onJump(url) {
+			uni.navigateTo({
+				url: url
+			});
+		},
+
+		toDetail(item) {
+			uni.navigateTo({
+				url: '/pageA/circle/circleDetail?item=' + JSON.stringify(item)
+			});
+		},
+
+		click() {
+			this.$emit('click');
+		},
+
+		doThumb(item, index) {
+			item.index = index;
+			this.$emit('doThumb', item);
+		},
+
+		doComment(item, comment, index) {debugger
+			item.index = index;
+			this.$emit('doComment', item, comment);
+		},
+
+		doComment2Com(item, comment) {
+			this.$emit('doComment2Com', item, comment);
+		}
+	}
+};
+</script>
+<style lang="scss">
+.view {
+	flex-direction: column;
+}
+.album {
+	display: flex;
+	flex-direction: row;
+	align-items: flex-start;
+}
+.album__avatar {
+	background-color: #fff;
+	padding: 5px;
+	border-radius: 3px;
+}
+.album__content {
+	margin-left: 10px;
+	flex: 1;
+}
+.album__info {
+	margin-bottom: 15upx;
+	display: flex;
+	flex-direction: column;
+}
+.info-name {
+	color: #5786cc;
+	font-size: 30upx;
+	font-weight: bold;
+}
+.info-content {
+	color: #333;
+	font-size: 30upx;
+	padding: 5px 0 8px 0;
+}
+.video {
+	position: relative;
+	image {
+		width: 100%;
+		height: 180px;
+	}
+	.cover {
+	width: 50px;
+	    height: 50px;
+	    position: absolute;
+	    z-index: 5;
+	    left: -180rpx;
+	    right: 0;
+	    bottom: 0;
+	    top: 0;
+	    margin: auto;
+	}
+	.cover1 {
+	width: 50px;
+	    height: 50px;
+	    position: absolute;
+	    z-index: 5;
+	    left: -270rpx;
+	    right: 0;
+	    bottom: 0;
+	    top: 0;
+	    margin: auto;
+	}
+}
+.video-info {
+	width: 280px;
+	height: 200px;
+}
+.video-cover {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 270px;
+	height: 200px;
+}
+.location {
+}
+.location-left {
+	display: flex;
+	flex-direction: row;
+}
+.location-left-name {
+	font-size: 24upx;
+	color: #5786cc;
+}
+.location-left-distance {
+	margin-left: 30upx;
+	font-size: 24upx;
+	color: #5786cc;
+}
+
+.location-right {
+	color: #999;
+	font-size: 24upx;
+}
+
+.time-text {
+	color: #666;
+	font-size: 24upx;
+}
+
+.comment {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+	margin-top: 15upx;
+}
+
+.comment-right {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: center;
+}
+
+.comment-item {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	margin-left: 40upx;
+	color: #666;
+}
+
+.image-love {
+	width: 32upx;
+	height: 32upx;
+	margin-right: 6upx;
+}
+.image-comment {
+	width: 30upx;
+	height: 30upx;
+	margin-right: 8upx;
+}
+
+.number {
+	color: #666;
+	padding-left: 5upx;
+	font-size: 26upx;
+}
+.yzb {
+	margin-right: 8upx;
+}
+.yzb-pinglun1 {
+}
+.thumb-on {
+	font-size: 32upx;
+	color: red;
+}
+.thumb-off {
+	font-size: 32upx;
+}
+
+.thumb-comment {
+	padding: 20upx;
+}
+.thumbs {
+	padding: 20upx;
+	border-radius: 10upx;
+	background-color: #f8f8f8;
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+.thumbs-icon {
+	margin-right: 10upx;
+	color: #666;
+	/* margin-top: 5upx; */
+}
+
+.thumbs-headers {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	overflow: hidden;
+	white-space: nowrap;
+	flex-wrap: wrap;
+	flex: 1;
+}
+.thumbs-headers-img {
+	margin-left: 10upx;
+	margin-bottom: 10upx;
+}
+
+.thumbs-headers-more {
+	font-size: 30upx;
+	color: #999;
+}
+
+.thumbs-item {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+
+.thumbs-name {
+	font-size: 28upx;
+	color: #5786cc;
+}
+
+.comments {
+	margin-top: 1upx;
+	padding: 20upx;
+	border-radius: 10upx;
+	background-color: #f8f8f8;
+	display: flex;
+	flex-direction: row;
+}
+.comments-icon {
+	margin-right: 10upx;
+	color: #666;
+	margin-top: 15upx;
+	font-size: 24upx;
+}
+.comments-headers {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+}
+.comments-headers-item {
+	flex: 1;
+	display: flex;
+	flex-direction: row;
+	/* align-items: center; */
+	margin-bottom: 20upx;
+}
+.item-left {
+	margin: 0 10upx;
+	margin-top: 10upx;
+}
+.item-right {
+	margin-left: 5upx;
+	display: flex;
+	flex: 1;
+	flex-direction: column;
+}
+.item-right-name {
+	display: flex;
+	flex: 1;
+	flex-direction: row;
+	justify-content: space-between;
+	align-items: center;
+}
+.item-right-name-top {
+	color: #5786cc;
+	font-size: 26upx;
+}
+.item-right-name-bottom {
+	font-size: 24upx;
+	color: #999;
+	margin-top: 10upx;
+}
+.item-right-info {
+	font-size: 28upx;
+	color: #333;
+	flex: 1;
+}
+
+.comment-content {
+	display: flex;
+	flex-direction: row;
+	align-items: flex-start;
+	margin-top: 3upx;
+	flex: 1;
+}
+.comment-response {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	margin-right: 10upx;
+}
+.comment-response-txt {
+	font-size: 28upx;
+}
+.comment-response-name {
+	font-size: 28upx;
+	color: #5786cc;
+	padding: 0 8upx;
+}
+
+.bottom {
+	bottom: 0;
+	position: fixed;
+	height: 120rpx;
+	width: 100%;
+	padding: 0 20rpx;
+	box-sizing: border-box;
+	background-color: #f8f8f8;
+	align-items: center;
+	justify-content: center;
+	display: flex;
+
+	.bottom-bt {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		input {
+			width: 550rpx;
+			height: 70rpx;
+			padding: 0 15rpx;
+			border-radius: 10rpx;
+			background-color: #fff;
+			margin-right: 20rpx;
+		}
+		button {
+			padding: 0 20rpx;
+			height: 60rpx;
+			line-height: 60rpx;
+			background-color: #12ae85;
+			color: #fff;
+			font-size: 28rpx;
+		}
+	}
+}
+</style>

+ 232 - 0
xiaochengxu/pageA/circle/createCirclce.vue

@@ -0,0 +1,232 @@
+<template>
+	<view class="content">
+		<view class="row1">
+			<view class="title">
+				圈子名称
+			</view>
+			<u--input placeholder="请输入圈子名称" border="none" v-model="formData.circleName" @change="change"
+				:customStyle="custom"></u--input>
+		</view>
+		<view class="flex justify-space-between select-card">
+			<view class="title">
+				选择名片
+			</view>
+			<view style="font-size:12px;padding-right:20rpx;" class='flex align-item-center' @click="cardShow">
+			{{formData.cardBusiness}}
+			<u-icon name="arrow-right" size="12"></u-icon>
+			</view>
+		</view>
+		<view class="row1">
+			<view class="flex flex-between" style="margin-top: 20rpx;">
+				<view class="title">圈子标签</view>
+				<uni-icons type="plus-filled" @click="add(item)" size="40" color="#112253"></uni-icons>
+			</view>
+			<view class="">
+				<view v-for="(item,index) in labelList":key="index">
+					<view>
+						<view class="flex">
+							<u-input placeholder="请输入圈子标签,2-6个字" border="none" v-model="item.labelName" @change="change"
+							:customStyle="custom">
+							<template slot="suffix">
+								<image src="../../static/imgs/mySet/del.png" mode="widthFix" style="width: 40rpx;height: auto;" @click="subtract(index)"></image>
+							</template>
+							</u-input>
+						</view>
+						<!-- <uni-icons type="minus-filled" @click="subtract(index)" size="40"></uni-icons> -->
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="">
+			<button type="default" @click="submit" class="submit">提交</button>
+		</view>
+		<u-picker :immediateChange ="true" keyName="cardBusiness" title="选择名片" @close="show=false"
+			@cancel="show=false" closeOnClickOverlay @confirm="cardConfirm" :show="show" :columns="cardList"></u-picker>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	var that;
+	export default {
+		data() {
+			return {
+				custom: {
+					"margin-top":"20rpx",
+					"background": "#fff",
+					"border-radius": "20rpx",
+					"padding":"20rpx"
+				},
+				value: '',
+				show:false,
+				cardList:[],
+				labelList: [{
+						labelName: '',
+					},
+					{
+						labelName: '',
+					}
+				],
+				list:[],
+				formData: {
+					circleName: '',
+					circleLabel: [],
+					commonId: '',
+					cardBusiness:''
+				},
+				currectData:{}
+			};
+		},
+		onLoad() {
+			that = this
+			this.userInfo = uni.getStorageSync("userInfo")
+			this.formData.commonId = this.userInfo.id
+		},
+		onShow() {
+			uni.showLoading({
+				title: '数据加载中'
+			})
+			this.$request.baseRequest('admin.unimall.cardManagementInfo', 'list', {
+				commonId: uni.getStorageSync("userInfo").id
+			}, failres => {
+				uni.showToast({
+				  icon:"none",
+				  title: failres.errmsg,
+				  duration: 3000
+				});
+				uni.hideLoading()
+			}).then(res => {
+				uni.hideLoading()
+				this.cardList = [res.data.items]
+				this.list = res.data.items
+				this.formData.cardBusiness  = res.data.items[0].cardBusiness
+				this.formData.cardId=res.data.items[0].id
+			})
+		},
+		methods: {
+			cardConfirm(e){
+				console.log(e)
+				this.formData.cardBusiness=e.value[0].cardBusiness
+				this.formData.cardId=e.value[0].id
+				this.show=false
+				console.log(this.labelList)
+			},
+			cardShow(){
+				if(this.list.length>0){
+					this.show=true
+				}else{
+					uni.showToast({
+					  icon:"none",
+					  title: '暂无名片',
+					  duration: 2000
+					});
+				}
+				
+			},
+			change(e) {
+				console.log('change', e);
+			},
+			submit() {
+				this.formData.circleLabel = []
+				if (!this.formData.circleName) {
+					uni.showToast({
+					  icon:"none",
+					  title: '圈子名称不能为空!',
+					  duration: 2000
+					});
+					return
+				}
+				for (let i = 0; i < this.labelList.length; i++) {
+					if (!this.labelList[i].labelName) {
+						uni.showToast({
+						  icon:"none",
+						  title: '标签内容不能为空!',
+						  duration: 2000
+						});
+						return
+					}
+					if (this.labelList[i].labelName.length > 6 || this.labelList[i].labelName.length < 2) {
+						uni.showToast({
+						  icon:"none",
+						  title: '标签内容2-6个字!',
+						  duration: 2000
+						});
+						return
+					}
+					this.formData.circleLabel.push(this.labelList[i].labelName)
+				}
+				this.formData.circleLabel = this.formData.circleLabel.toString()
+
+				this.$request.baseRequest('admin.unimall.circleManagementInfo', 'add', {
+					circleManagementInfo: JSON.stringify(this.formData)
+				}, failres => {
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+
+					uni.hideLoading()
+				}).then(res => {
+					uni.showToast({
+					  icon:"none",
+					  title: '信息审核中,请留意消息通知!',
+					  duration: 2000
+					});
+				})
+				setTimeout(() => {
+					uni.navigateBack()
+				}, 3000)
+			},
+			add() {
+				if (this.labelList.length > 5) {
+					uni.showToast({
+					  icon:"none",
+					  title: '标签数量2-6个!',
+					  duration: 2000
+					});
+					return
+				}
+				this.labelList.push({
+					labelName: '',
+				})
+			},
+			subtract(index) {
+				if (this.labelList.length < 3) {
+					uni.showToast({
+					  icon:"none",
+					  title: '标签数量2-6个!',
+					  duration: 2000
+					});
+					return
+				}
+				this.labelList.splice(index, 1)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		padding: 20rpx;
+
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #1A1A1A;
+		}
+	}
+	.submit{
+		position: fixed;
+		bottom: 100rpx;
+		background-color:#112253 ;
+		color: #fff;
+		width: calc(100% - 40rpx);
+	}
+	.select-card{
+		background:#fff;padding:20rpx 0 20rpx 20rpx;
+		margin:10rpx 0;
+		border-radius: 20rpx;
+		
+	}
+</style>

+ 910 - 0
xiaochengxu/pageA/circle/detail.vue

@@ -0,0 +1,910 @@
+<template>
+	<view class="content">
+		<view class="bgc">
+			<view class="content1">
+				<view class="left relative">
+					<image :src="dataObj.circleHead?dataObj.circleHead:'../../static/imgs/logo.png'" mode="aspectFill" class="img"></image>
+					<view class="share">
+						<button class="shareBtn" type="default" data-name="shareBtn" open-type="share">
+							<image style='width:30rpx;height:30rpx;position: absolute;top: 2px;right: 2px;' src="@/static/imgs/share1.png" mode="aspectFill">
+							</image>
+						</button>
+					</view>
+				</view>
+				<view class="right">
+					<view  class="top flex flex-between">
+						<view class="text">
+							{{dataObj.circleName}}({{dataObj.cardNum}})
+						</view>
+						<span class="join" @click="$u.debounce(addCircle, 500)" v-if="!dataObj.circleCardInfo">
+							<uni-icons type="plusempty" size="12" color="#fff"
+								style="margin:0 10rpx;font-weight: bold;"></uni-icons>加入
+						</span>
+						<span class="join" @click="exitCircle" v-else>
+							退出
+						</span>
+					</view>
+					<view style='flex-wrap: wrap;' class="bottom flex">
+						<view v-for="item in dataObj.circleLabel" class="text">
+							{{item}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="content2">
+				<view class="top flex-between">
+					<view class="span">
+						<span :class="selectIndex==0?'active':'text'" @click="changeCardStatus(0)">全部</span>
+						<span @click="changeCardStatus(1)" :class="selectIndex==1?'active':'text'">已交换</span>
+						<span @click="changeCardStatus(2)" :class="selectIndex==2?'active':'text'">未交换</span>
+					</view>
+					<view class="right flex">
+					<!-- 	<view class="flex"  v-if="dataObj.circleCardInfo" @click="myCardClick">
+							<image src="../../static/imgs/cirlce/account.png" mode="widthFix"
+								style="width: 36rpx;margin-right: 15rpx;height: auto;"></image>我的名片
+						</view> -->
+						<view class="">
+							<image src="../../static/imgs/card/share1.png" mode="widthFix"
+								style="width: 50rpx;margin-left: 30rpx;height: 50rpx;" @click="toFriendsCirlce()"></image>
+							<image src="../../static/imgs/card/buju1.png" mode="widthFix"
+								style="width: 50rpx;margin-left: 30rpx;height: 50rpx;" @click="change()"></image>
+			<!-- 				<image src="../../static/imgs/card/buju1.png" mode="widthFix"
+								style="width: 50rpx;margin-left: 30rpx;height: 50rpx;" v-if="layout==1" @click="changeLayout(2)"></image> -->
+						<!-- 		<image src="../../static/imgs/card/buju2.png" mode="widthFix"
+									style="width: 50rpx;margin-left: 30rpx;height: 50rpx;" v-if="layout==2" @click="changeLayout(1)"></image> -->
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view  class="relative" style='top:150px;'>
+			<mescroll-uni height='1200' :up="upOption" :down="downOption" ref="mescrollRef" @init="mescrollInit" @up="upCallback" @down="downCallback" >
+			<view class="content3" v-for="(item,index) in changeCardList"
+				:style="item.currentBackground?'background:url('+item.currentBackground+');background-size:100% 100%':''"
+				:key="index" v-if="layout">
+				<view class="flex item">
+					<view class="top flex">
+						<view class="left">
+							<u--image :src="item.headSculpture?item.headSculpture:'https://cdn.uviewui.com/uview/album/1.jpg'" shape="circle" width="66px"
+								height="66px"></u--image>
+						</view>
+						<view class="right">
+							<view class="row1">
+								<text class="name">{{item.name}}</text>
+								<text class="post">{{item.post}}</text>
+							</view>
+							<view class="row2">
+								{{item.companyName}}
+							</view>
+						</view>
+					</view>
+				</view>
+
+				<view class="line">
+					<image src="../../static/imgs/cirlce/line.png" mode="widthFix" style="width: 95%;height: auto;"></image>
+				</view>
+				<view class="bottom" v-if="item.scopeOfBusiness">
+					{{item.scopeOfBusiness}}
+				</view>
+				<view class="bottom no-text" v-else>
+					暂无业务描述
+				</view>
+				<view class="flex btn" v-if="item.lookPage==1||item.notDisplay!=1">
+					<image @click='toHome(item)' src="../../static/imgs/cirlce/home.png" mode="widthFix" style="width: 32rpx;height: auto;"
+						v-if="item.lookPage==1&&item.personalHomeId"></image>
+					<image src="../../static/imgs/cirlce/change.png" mode="widthFix" style="width: 32rpx;;height: auto"
+						@click="changeCard(item)" v-if="item.notDisplay!=1"></image>
+				</view>
+			</view>
+			<view class="layout2" v-if="!layout">
+				<view class="list_box">
+					<view class="list-item" v-for="(item,index) in changeCardList" :key="index" @click="itemClick(item,index)">
+						<view class="left">
+							<view class="icon-box">
+								<image :src="item.headSculpture?item.headSculpture:'https://cdn.uviewui.com/uview/album/1.jpg'" style="width: 70rpx;height:70rpx;border-radius: 20rpx;"></image>
+							</view>
+							<view class="name">
+								{{item.name}}
+							</view>
+							<view class="name">
+								{{item.post}}
+							</view>
+						</view>
+						<view class="right">
+							<view class="flex btn" v-if="item.lookPage==1||item.notDisplay!=1">
+								<image @click='toHome(item)' src="../../static/imgs/cirlce/home.png" mode="widthFix" style="width: 32rpx;height: auto;"
+									v-if="item.lookPage==1&&item.personalHomeId"></image>
+								<image src="../../static/imgs/cirlce/change.png" mode="widthFix" style="width: 32rpx;;height: auto;margin-left: 20rpx;"
+									@click="changeCard(item)" v-if="item.notDisplay!=1"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</mescroll-uni>
+		</view>
+		
+		<u-picker :immediateChange ="true" @cancel="isShowCard=false" :show="isShowCard" :columns="cardList" keyName="cardBusiness"
+			@confirm="cardConfirm"></u-picker>
+			<u-picker :immediateChange ="true" @cancel="changeMore=false" :show="changeMore" :columns="moreList" keyName="name"
+				@confirm="changeMoreConfirm"></u-picker>
+		<u-toast ref="uToast"></u-toast>
+		<u-modal :show="show" :content='content' @confirm="$u.debounce(joinCircle, 500)" showCancelButton
+			@cancel="show=false" @close="show=false" closeOnClickOverlay></u-modal>
+		<u-modal :show="show1" content='确定退出圈子' @confirm="$u.debounce(exitCircleConfirm, 500)" showCancelButton
+			@cancel="show1=false" @close="show1=false" closeOnClickOverlay></u-modal>
+		<u-modal :show="isShowChangeCard" content='确定交换名片?' @confirm="$u.debounce(confirmChangeSubmit, 500)"
+			showCancelButton @cancel="isShowChangeCard=false" @close="isShowChangeCard=false"
+			closeOnClickOverlay></u-modal>
+			<!-- #ifdef MP-WEIXIN -->
+			<u-modal :show="showAuthorizePhone" :showConfirmButton="false">
+				<view class="slot-content">
+					<view class="auth-card">
+						<view class="">
+							<img class="avatar-img" src="@/static/imgs/logo.png" mode="widthFix">
+						</view>
+						<view class="content">手机登录后才能查看名片哦~</view>
+					</view>
+					<view class="auth-btncard">
+						<view class="btn-unok">
+							<u-button :customStyle="customStyleUnOk" @click="showAuthorizePhone=false" :plain="true">
+								拒绝</u-button>
+						</view>
+						<view class="btn-ok">
+							<u-button :customStyle="customStyleOk" open-type="getPhoneNumber"
+								@getphonenumber="getPhoneNumber"> 立即登录</u-button>
+						</view>
+					</view>
+				</view>
+			</u-modal>
+			<u-modal :show="showAuthorizeUser" :showConfirmButton="false">
+				<view class="slot-content">
+					<view class="auth-card">
+						<view class="">
+							<img class="avatar-img" src="/static/imgs/logo.png" mode="widthFix">
+						</view>
+						<view class="content">邀请您补全个人信息<br></br>(昵称、头像)</view>
+						<view style="margin-left: 100rpx;margin-right: 100rpx">
+							<u-form :model="userInfo" ref="uForm">
+								<u-form-item label="头像">
+									<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"
+										slot="right">
+										<image class="avatar"
+											:src="userInfo.head?userInfo.head:'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'">
+										</image>
+									</button>
+								</u-form-item>
+								<u-form-item label="昵称">
+									<u-input inputAlign='right' v-model="userInfo.nickname" class="weui-input"
+										@blur="userNameInput" placeholder="请输入昵称" border="false" />
+									<!-- <input type="nickname" :value="userInfo.nickname" class="weui-input" @blur="userNameInput" placeholder="请输入昵称"/> -->
+								</u-form-item>
+							</u-form>
+						</view>
+					</view>
+					<view class="auth-btncard">
+						<view class="btn-unok"><u-button :customStyle="customStyleUnOk" @click="authUser(0)">
+								拒绝</u-button>
+						</view>
+						<view class="btn-ok">
+							<u-button :customStyle="customStyleOk" @click="authUser(1)"> 允许</u-button>
+						</view>
+					</view>
+				</view>
+			</u-modal>
+			<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	var that;
+	import {
+		pathToBase64,
+		base64ToPath
+	} from 'image-tools'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		data() {
+			return {
+				moreList:[
+					[
+						{
+							"name":'切换名片'
+						},
+						{
+							"name":'更换布局'
+						}
+					]
+				],
+				changeMore:false,
+				layout:true,
+				showAuthorizeUser: false,
+				showAuthorizePhone: false,
+				customStyleUnOk: {
+					marginTop: '20rpx',
+					color: '#18254C',
+					border: '2px solid #18254C',
+					"border-radius": "10px",
+					fontSize: "32rpx"
+				},
+				customStyleOk: {
+					marginTop: '20rpx',
+					color: '#fff',
+					border: '2px solid #18254C',
+					"border-radius": "10px",
+					fontSize: "32rpx",
+					background: "#18254C"
+				},
+				userInfo: {
+					head: '',
+					nickname: '',
+					phone: '',
+				},
+				downOption: {
+					auto: false,
+					textColor: '#bbb'
+				},
+				upOption: {
+					page: {
+						size: 10 // 每页数据的数量,默认10
+					},
+					auto: false,
+					noMoreSize: 1,
+					textNoMore: '没有更多了~',
+					textColor: '#bbb'
+				},
+				selectIndex: 0,
+				isShowChangeCard: false,
+				show1:false,
+				dataObj: {
+					circleName: '',
+					cardNum: '',
+					circleLabel: []
+				},
+				canReset: false,
+				cardList: [],
+				isShowCard: false,
+				show: false,
+				content: '加入后其他用户查看您的名片和主页,确认加入圈子?',
+				cardId: '',
+				id: '',
+				changeCardList: [],
+				cardStatus: '',
+				isMyCard: false,
+				swapNameCards: false,
+				selectMycard: {},
+				selectRowCard: {}
+			};
+		},
+		onShow() {
+			if (uni.getStorageSync("userInfo").phone) {
+				this.$nextTick(function() {
+					that.mescroll.resetUpScroll() 
+				});
+			}else {
+				this.showAuthorizePhone = true
+			}
+		},
+		onLoad(options) {
+			that = this
+			console.log(options)
+				this.id = options.val
+			this.userInfo = uni.getStorageSync("userInfo")
+			
+		},
+		onShareAppMessage(res) {
+			if (res.from === 'button') {
+				let path = `/pages/circle/detail?val=${that.dataObj.id}`
+				return {
+					title:`${that.userInfo.nickname}邀请您加入${that.dataObj.circleName}圈子`,
+					path: path,
+				};
+			}
+		},
+		methods: {
+			toFriendsCirlce(){
+				uni.navigateTo({
+					url:"/pageA/circle/friendSCirlce?id="+this.dataObj.id
+				})
+			},
+			changeMoreConfirm(val){
+				console.log(val)
+				if(val.value[0].name=="切换名片"){
+					this.isShowCard = true
+					this.isMyCard = true
+				}else{
+					this.layout = !this.layout
+				}
+				
+				this.changeMore = false
+			},
+			change(){
+				this.changeMore = true
+			},
+			changeLayout(type){
+				
+			},
+			//获取昵称输入内容
+			userNameInput(e) {
+				this.userInfo.nickname = e.detail.value
+			},
+			async onChooseAvatar(e) {
+				this.$set(this.userInfo, "head", await this.toBase64(e.detail.avatarUrl))
+			},
+			toBase64(url) {
+				return new Promise(resolve => {
+					pathToBase64(url).then(path => {
+						resolve(path);
+					}).catch(error => {
+						console.log(error)
+					})
+				})
+			},
+			async authUser(type) {
+				//同步信息,没有头像和昵称自动生成
+				this.userInfo = await this.$request.syncInfo(this.userInfo)
+				if (this.userInfo.openId) {
+					uni.setStorageSync("userInfo", that.userInfo)
+					that.showAuthorizeUser = false
+					that.mescroll.resetUpScroll() 
+				}
+			},
+			async getPhoneNumber(e) {
+				that.userInfo = await this.$request.wxlogin()
+				this.$nextTick(function() {
+					that.userInfo.phone = that.$request.getPhone(e, that.userInfo)
+					that.showAuthorizePhone = false
+					that.showAuthorizeUser = true
+				});
+			
+			},
+			toHome(item){
+				uni.navigateTo({
+					url:'/pageA/circle/lookHome?id='+item.personalHomeId
+				})
+			},
+			confirmChangeSubmit() {
+				this.$request.baseRequest('admin.unimall.cardExchangeInfo', 'add', {
+					cardExchangeInfo: JSON.stringify({
+						sendId: this.userInfo.id,
+						receiveId: this.selectRowCard.receiveId,
+						sendCardId: this.selectMycard.id,
+						receiveCardId: this.selectRowCard.id,
+						circleName: this.dataObj.circleName
+					}),
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					this.isShowChangeCard = false
+					uni.showToast({
+					  icon:"success",
+					  title: '操作成功!',
+					  duration: 2000
+					});
+					setTimeout(() => {
+						this.mescroll.resetUpScroll()
+					}, 500)
+
+				})
+			},
+			changeMyCard() {
+				this.$request.baseRequest('admin.unimall.circleCardInfo', 'update', {
+					circleCardInfo: JSON.stringify({
+						circleId: this.dataObj.id,
+						cardId: this.cardId,
+						commonId: this.userInfo.id
+					}),
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					this.isShowCard = false
+					uni.showToast({
+					  icon:"success",
+					  title: '更改圈子名片成功!',
+					  duration: 2000
+					});
+					this.mescroll.resetUpScroll()
+				})
+			},
+			myCardClick() {
+				this.isShowCard = true
+				this.isMyCard = true
+			},
+			changeCardStatus(val) {
+				this.selectIndex = val
+				this.cardStatus = val
+				this.getCardList({
+					num: 1,
+					size: 10
+				})
+			},
+			exitCircle() {
+				console.log(11111)
+				this.show1=true
+			},
+			exitCircleConfirm(){
+				this.$request.baseRequest('admin.unimall.circleCardInfo', 'delete', {
+					id: this.dataObj.circleCardInfo.id,
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					this.isShowCard = false
+					this.show1=false
+					uni.showToast({
+					  icon:"success",
+					  title: '退出成功!',
+					  duration: 2000
+					});
+					this.mescroll.resetUpScroll()
+				})
+			},
+			cardConfirm(e) {
+				console.log("e", e)
+				this.cardId = e.value[0].id
+				if (this.isMyCard) {
+					this.changeMyCard()
+				} else if (this.swapNameCards) {
+					this.selectMycard = e.value[0]
+					this.isShowCard = false
+					this.isShowChangeCard = true
+
+				} else {
+					this.joinCircle()
+				}
+			},
+			joinCircle() {
+				this.$request.baseRequest('admin.unimall.circleCardInfo', 'add', {
+					circleCardInfo: JSON.stringify({
+						circleId: this.dataObj.id,
+						cardId: this.cardId,
+						commonId: this.userInfo.id
+					}),
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					this.isShowCard = false
+					this.show = false
+					uni.showToast({
+					  icon:"success",
+					  title: '加入成功!',
+					  duration: 2000
+					});
+					this.mescroll.resetUpScroll()
+
+				})
+			},
+			addCircle() {
+				if (this.cardList[0].length == 1) {
+					// console.log(this.cardList[0])
+					this.cardId = this.cardList[0][0].id
+					this.show = true
+				} else if (this.cardList[0].length > 1) {
+					this.isShowCard = true
+				} else {
+					uni.showToast({
+						icon:"none",
+						title: '您还没有自己的名片,请创建后再加入圈子!',
+						duration: 2000
+					});
+					// this.$refs.uToast.show({
+					// 	type: 'error',
+					// 	message: "您还没有自己的名片,请创建后再加入圈子",
+					// })
+				}
+
+			},
+			getCardList(page) {
+				uni.showLoading({
+					title: '数据加载中'
+				})
+				this.$request.baseRequest('admin.unimall.circleManagementInfo', 'circleCardlist', {
+					commonId: this.userInfo.id,
+					id: this.dataObj.id,
+					status: this.cardStatus,
+					page: page.num,
+					limit: page.size,
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+				}).then(res => {
+					uni.hideLoading()
+					console.log(11)
+					let curPageData = res.data.items;
+					let totalPage = res.data.total;
+					let curPageLen = curPageData.length;
+					this.mescroll.endByPage(curPageLen, totalPage);
+					console.log(res.data)
+					// this.makeData(res.data)
+					if (page.num == 1) this.changeCardList = []; //如果是第一页需手动置空列表
+					this.changeCardList = this.changeCardList.concat(curPageData); //追加新数据
+					for(let i = 0;i<this.changeCardList.length;i++){
+						if(this.changeCardList[i].scopeOfBusiness&&this.changeCardList[i].scopeOfBusiness.length>90){
+							 this.changeCardList[i].scopeOfBusiness = this.changeCardList[i].scopeOfBusiness.substr(0,90) + '...' ;
+						}
+					}
+				})
+			},
+			async upCallback(page) {
+				//获取名片
+				await this.$request.baseRequest('admin.unimall.cardManagementInfo', 'list', {
+					commonId: this.userInfo.id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+				}).then(res => {
+					this.cardList = [res.data.items]
+				})
+				await this.$request.baseRequest('admin.unimall.circleManagementInfo', 'get', {
+					commonId: this.userInfo.id,
+					id: this.id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+				}).then(res => {
+					console.log(res.data)
+					this.dataObj = res.data
+					this.dataObj.circleLabel = res.data.circleLabel.split(",")
+
+				})
+				this.getCardList(page)
+			},
+			changeCard(val) {
+				if(!this.dataObj.circleCardInfo){
+					uni.showToast({
+					  icon:"none",
+					  title: "请先加入圈子!",
+					  duration: 2000
+					});
+				}else{
+					this.selectRowCard = val
+					this.swapNameCards = true
+					this.isShowCard = true
+				}
+				
+
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.bgc {
+		background-color: #112253;
+		padding-bottom: 100rpx;
+		position:fixed;
+		top:0;
+		width:100%;
+	}
+
+	.content1 {
+		display: flex;
+		padding: 40rpx;
+		box-sizing: border-box;
+
+		.right {
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-evenly;
+
+			.top {
+				width: 100%;
+
+				.text {
+					color: #fff;
+					font-weight: bold;
+				}
+
+				.join {
+					background: #0A173D;
+					color: #fff;
+					position: absolute;
+					right: 0rpx;
+					padding: 15rpx 20rpx;
+					font-size: 26rpx;
+					border-radius: 50rpx 0rpx 0rpx 50rpx;
+				}
+			}
+
+			.bottom {
+				.text {
+					color: #ffffff50;
+					background: #f1f5ff20;
+					padding: 10rpx 20rpx;
+					margin:0 10rpx 10rpx 0;
+					border-radius: 10rpx;
+					font-size: 26rpx;
+
+				}
+			}
+		}
+	}
+
+	.no-text {
+		color: #969393;
+	}
+
+	.img {
+		width: 122rpx;
+		height: 122rpx;
+		border-radius: 10px;
+		margin-right: 30rpx;
+	}
+
+	.content2 {
+		padding: 0 40rpx 40rpx 40rpx;
+		box-sizing: border-box;
+
+		.text {
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #FFFFFF;
+			opacity: 0.5;
+			margin-right: 56rpx;
+		}
+
+		.active {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+			position: relative;
+			margin-right: 56rpx;
+		}
+
+		.active:after {
+			position: absolute;
+			bottom: -20rpx;
+			content: '';
+			width: 50%;
+			height: 6rpx;
+			border-radius: 40rpx;
+			background: #FFFFFF;
+			right: 0;
+			left: 0;
+			margin: auto;
+		}
+
+		.right {
+			color: #D7C08B;
+			font-size: 26rpx;
+
+		}
+	}
+
+	.content3 {
+		position: relative;
+		border-radius: 30rpx;
+		background: red;
+		box-sizing: border-box;
+		height:400rpx;
+		.item {
+			align-items: flex-start;
+			padding: 34rpx 40rpx 0 40rpx;
+		}
+
+		.top {
+			.left {
+				margin-right: 36rpx;
+			}
+
+			.right {
+				.row1 {
+					margin-bottom: 10rpx;
+
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #000000;
+						margin-right: 26rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					font-size: 26rpx;
+					font-weight: bold;
+					color: #333333;
+				}
+			}
+		}
+
+		.bottom {
+			padding: 20rpx 60rpx 0rpx 60rpx;
+			font-size: 26rpx;
+		}
+
+		.btn {
+			background: #11225350;
+			width: 145rpx;
+			display: flex;
+			justify-content: space-evenly;
+			padding: 15rpx 0;
+			border-radius: 32rpx;
+			position: absolute;
+			top: 35rpx;
+			right: 40rpx;
+
+
+		}
+	}
+
+	.line {
+		text-align: center;
+	}
+	.shareBtn{
+		background-color: #9E9E9E !important;
+		position: absolute;
+		top: 0;
+		right: 30rpx;
+		height: 40rpx;
+		padding: 0;
+		margin: 0;
+		width: 40rpx;
+		border-radius: 0 10px 0 27rpx;
+	}
+	.slot-content {
+		width: 100%;
+	}
+
+	.auth-btncard {
+		display: flex !important;
+		justify-content: space-between !important;
+
+		.btn-unok {
+			width: 40%;
+		}
+
+		.btn-ok {
+			width: 40%;
+		}
+	}
+
+	.auth-card {
+		text-align: center;
+
+		.avatar-img {
+			width: 250rpx;
+		}
+
+		.title {
+			font-size: 20rpx;
+		}
+
+		.content {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #1A1A1A;
+			margin-bottom: 30rpx;
+		}
+	}
+
+	.avatar-wrapper {
+		color: #333 !important;
+		border: none !important;
+		border-radius: 0 !important;
+		background-color: transparent !important;
+		padding: 0;
+	}
+
+	.avatar-wrapper::after {
+		border: none !important;
+	}
+
+	.avatar {
+		width: 100rpx;
+		height: 100rpx;
+		overflow: hidden;
+		border-radius: 100%;
+	}
+
+	/deep/.u-popup__content {
+		border-radius: 20rpx !important;
+	}
+	/* 主体样式 */
+	.list_box {
+		width: 100%;
+	
+		.list-item {
+			padding: 10px 10px;
+			border-bottom: 1px solid #eee;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			transition: all .5s;
+			&:active{
+				background-color: #EEEEEE;
+			}
+			.left {
+				display: flex;
+				align-items: center;
+	
+				.icon-box {
+					width: 70rpx;
+					height: 70rpx;
+					border-radius: 10px;
+					box-shadow: 3px 3px 7px #bebebe,
+						-3px -3px 7px #ffffff;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+	
+					image {
+						width: 70%;
+						height: 70%;
+					}
+	
+					text::before {
+						font-size: 20px;
+					}
+				}
+	
+				.name {
+					margin-left: 10px;
+					font-size: 30rpx;
+					color: #FFFFFF;
+					text-shadow: 1px 1px 3px #000;
+				}
+			}
+	
+			.right {
+				display: flex;
+				align-items: center;
+	
+				.rightText {
+					margin-right: 5px;
+					color: #999;
+					font-size: 12px;
+				}
+			}
+		}
+	}
+	.layout2{
+		background: #9e9e9e94;
+		margin: 0 20rpx;
+		border-radius: 20rpx		
+	}
+</style>

+ 415 - 0
xiaochengxu/pageA/circle/friendSCirlce.vue

@@ -0,0 +1,415 @@
+<template>
+	<view class="u-page">
+		<mescroll-uni :up="upOption" :down="downOption" ref="mescrollRef" @init="mescrollInit" @up="upCallback"
+			@down="downCallback">
+			<circle-item ref="mescrollItem" :list="list" @click="showInput = false" @doThumb="doThumb"
+				@doComment="doComment"></circle-item>
+		</mescroll-uni>
+		<view class="bottom" v-if="showInput">
+			<view class="bottom-bt">
+				<input class="bottom-bt-input" placeholder="请输入内容" v-model="commentValue" />
+				<text class="bottom-bt-button" @click="submitComment">发送</text>
+			</view>
+		</view>
+		<image src="../../static/imgs/cirlce/add.png" mode="widthFix" class="add" @click="addCircle"></image>
+		<u-action-sheet :show="show2" @close="show2 = false" @select="sheetSelect" :actions="actions2"
+			cancelText="取消"></u-action-sheet>
+	</view>
+</template>
+
+<script>
+	var that;
+	import circleItem from './circle-item.vue';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js';
+	import {
+		friendlyDate
+	} from '@/common/util.js';
+
+	export default {
+		mixins: [MescrollMixin],
+		components: {
+			circleItem
+		},
+		data() {
+			return {
+				formData: {
+					circleFriendsId: '',
+					commonId: '',
+					head: '',
+					nickname: '',
+					interactionFlag: '',
+
+				},
+				userInfo: {},
+				circleId: '',
+				downOption: {
+					auto: false,
+					textColor: '#bbb'
+				},
+				upOption: {
+					page: {
+						size: 10 // 每页数据的数量,默认10
+					},
+					auto: false,
+					noMoreSize: 1,
+					textNoMore: '没有更多了~',
+					textColor: '#bbb'
+				},
+				list: [],
+				requestParams: {
+					searchType: 1,
+					latitude: 0,
+					longitude: 0,
+					pageSize: 10,
+					pageNo: 1
+				},
+
+				show2: false,
+				actions2: [{
+					name: '删除'
+				}],
+				showInput: false
+			};
+		},
+		onLoad(options) {
+			that = this
+			this.circleId = options.id
+			this.userInfo = uni.getStorageSync("userInfo")
+			// 需要固定swiper的高度 (需减去悬浮tabs的高度64rpx)
+			// this.height = uni.getSystemInfoSync().windowHeight - uni.upx2px(100) + 'px';
+			// this.tabHeight = uni.upx2px(100) + 'px';
+			this.loadData(true);
+		},
+		methods: {
+			addCircle() {
+				console.log(1111)
+				uni.navigateTo({
+					url: "/pageA/circle/addFriendCirlce?id=" + this.circleId
+				})
+			},
+			/*下拉刷新的回调 */
+			downCallback() {
+				// this.loadData(true);
+				this.mescroll.resetUpScroll();
+			},
+			/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
+			upCallback(page) {
+				console.log('upCallback=================', page);
+				this.requestParams.pageNo = page.num;
+				this.requestParams.pageSize = page.size;
+				this.loadData();
+			},
+
+			scroll() {},
+
+			change(index) {
+				console.log('change=========', index);
+				this.requestParams.searchType = index + 1;
+				this.loadData(true);
+			},
+			// 处理图片
+			imageInfo(url) {
+				let promise = new Promise(function(resolve, reject) {
+					uni.getImageInfo({
+						src: url,
+						success: function(image) {
+							resolve(image)
+							console.log(image.width);
+							console.log(image.height);
+						}
+					});
+				})
+				return promise
+			},
+			loadData(refresh) {
+				this.$request.baseRequest('admin.unimall.circleFriendsInfo', 'list', {
+					page: this.requestParams.pageNo,
+					limit: this.requestParams.pageSize,
+					circleId: this.circleId,
+					currentCommonId: this.userInfo.id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(async res => {
+					console.log(res)
+					if (this.requestParams.pageNo.num == 1) this.list = [];
+					let curPageLen = res.data.items.length;
+					let totalPage = res.data.total;
+					this.list = res.data.items
+					for (let i = 0; i < this.list.length; i++) {
+						this.list[i].urlList = this.list[i].image.split(",")
+						if (this.list[i].mediaType == 2) {
+							let _image = await this.imageInfo(this.list[i].image +
+								'?x-oss-process=video/snapshot,t_1000,f_jpg,w_800,h_600,m_fast,ar_auto')
+							console.log("_image", _image)
+							if (_image.width > _image.height) {
+								this.list[i].direction = 1
+							} else {
+								this.list[i].direction = 2
+							}
+						}
+					}
+					this.$nextTick(() => {
+						that.mescroll.endBySize(curPageLen, totalPage)
+					});
+					uni.hideLoading()
+				})
+			},
+
+			getCircleDetail(id, index) {
+				let param = {
+					id: id,
+					searchType: 1,
+					latitude: 0,
+					longitude: 0
+				};
+				if (this.locateInformation.location) {
+					param.latitude = this.locateInformation.location.lat;
+					param.longitude = this.locateInformation.location.lng;
+				}
+				getCircleDetail({
+						params: param
+					})
+					.then(res => {
+						console.log('getCircleDetail====', res);
+						if (res) {
+							let data = res;
+							if (data.mediaType == 1) {
+								let arr = data.url.split(',');
+								if (arr.length > 1) {
+									let list = [];
+									arr.forEach(item2 => {
+										list.push(item2);
+									});
+									data.urlList = list;
+								} else {
+									data.urlList = arr;
+								}
+							}
+							data.dateTime = friendlyDate(new Date(data.createTime.replace(/\-/g, '/')).getTime());
+							this.list[index].thumbNumber = data.thumbNumber;
+							this.list[index].commentNumber = data.commentNumber;
+							this.list[index].thumbed = data.thumbed;
+							this.list[index].thumbs = data.thumbs;
+							this.list[index].comments = data.comments;
+							console.log('data====', data);
+							console.log('index====', index);
+							console.log('this.list====', this.list);
+							this.$forceUpdate();
+						} else {}
+					})
+					.catch(err => {
+						console.log(err, 'catch');
+					});
+			},
+			//点赞
+			async doThumb(item) {
+				if (item.helpFlag == 0) {
+					this.formData = {
+						circleFriendsId: item.id,
+						commonId: this.userInfo.id,
+						head: this.userInfo.head,
+						nickname: this.userInfo.nickname
+					}
+					
+					this.formData.interactionFlag = 1
+					this.$request.baseRequest('admin.unimall.circleFriendsDetail', 'add', {
+						circleFriendsDetail: JSON.stringify(this.formData)
+					}, failres => {
+						console.log('res+++++', failres.errmsg)
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(async res => {
+						console.log(res)
+						uni.showToast({
+							icon: "success",
+							title: '点赞成功!',
+							duration: 2000
+						});
+						this.loadData()
+					})
+				} else {
+					this.$request.baseRequest('admin.unimall.circleFriendsDetail', 'cancelLike', {
+						circleFriendsId: item.id,
+						commonId: this.userInfo.id,
+					}, failres => {
+						console.log('res+++++', failres.errmsg)
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(async res => {
+						console.log(res)
+						uni.showToast({
+							icon: "success",
+							title: '取消成功!',
+							duration: 2000
+						});
+						this.loadData()
+					})
+				}
+			},
+
+			doComment(item, comment) {debugger
+				this.selectedComment = comment;
+				if(!this.selectedComment){
+					this.selectedComment.id = ''
+				}
+				this.selectedCircle = item;
+				if (comment != null && comment.userId == this.userInfo.id) {
+					this.show2 = true;
+					return;
+				}
+				this.showInput = !this.showInput;
+				this.commentValue = '';
+				this.$forceUpdate();
+			},
+
+			async submitComment() {
+				debugger
+				// if (!this.commentValue) {
+				// 	uni.$u.toast('请输入内容');
+				// 	return;
+				// }
+				
+				this.formData = {
+					circleFriendsId: this.selectedCircle.id,
+					commonId: this.userInfo.id,
+					head: this.userInfo.head,
+					nickname: this.userInfo.nickname,
+					commentContent:this.commentValue,
+					commentId:this.selectedComment.id,
+					commentName:this.selectedComment.nickname,
+				}
+				
+				this.formData.interactionFlag = 2
+				this.$request.baseRequest('admin.unimall.circleFriendsDetail', 'add', {
+					circleFriendsDetail: JSON.stringify(this.formData)
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(async res => {
+					console.log(res)
+					uni.showToast({
+						icon: "success",
+						title: '评论成功!',
+						duration: 2000
+					});
+					this.loadData()
+				})
+				
+				// let params = {
+				// 	comment: this.commentValue,
+				// 	circleId: this.selectedCircle.id,
+				// 	circleUserId: this.selectedCircle.userId
+				// };
+				// if (this.selectedComment) {
+				// 	let tmp = {
+				// 		pid: this.selectedComment.id,
+				// 		comUserId: this.selectedComment.userId
+				// 	};
+				// 	params = uni.$u.deepMerge(params, tmp);
+				// }
+				// let res = await addComment(params);
+				// if (res) {
+				// 	uni.$u.toast('评论成功');
+				// 	this.getCircleDetail(this.selectedCircle.id, this.selectedCircle.index);
+				// }
+			},
+
+			sheetSelect(val) {
+				console.log('---sheetSelect---');
+				this.doDelComment();
+			},
+
+			async doDelComment() {
+				let params = {
+					id: this.selectedComment.id,
+					circleId: this.selectedComment.circleId
+				};
+				let res = await delComment(params);
+				console.log('doDelComment', res);
+				if (res) {
+					uni.$u.toast('删除成功');
+					this.getCircleDetail(this.selectedCircle.id, this.selectedCircle.index);
+				}
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.u-swiper {
+		position: relative;
+	}
+
+	.bottom {
+		bottom: 0;
+		position: fixed;
+		height: 120upx;
+		width: 750upx;
+		// padding: 0 20upx;
+		background-color: #eee;
+		align-items: center;
+		justify-content: center;
+		display: flex;
+		z-index: 999;
+	}
+
+	.bottom-bt {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.bottom-bt-input {
+		width: 550upx;
+		height: 70upx;
+		padding: 0 15upx;
+		border-radius: 10upx;
+		background-color: #fff;
+		margin-right: 20upx;
+		font-size: 28upx;
+		color: #333;
+	}
+
+	.bottom-bt-button {
+		padding: 0 20upx;
+		height: 55upx;
+		line-height: 55upx;
+		background-color: #344577;
+		font-size: 28upx;
+		color: #fff;
+		border-radius: 10upx;
+	}
+
+	.add {
+		width: 84rpx;
+		height: auto;
+		position: fixed;
+		bottom: 200rpx;
+		right: 30rpx;
+		height: auto;
+		z-index: 999;
+	}
+</style>

+ 287 - 0
xiaochengxu/pageA/circle/lookHome.vue

@@ -0,0 +1,287 @@
+<template>
+	<view class="content">
+		<u-loading-page loading-mode='spinner' image="/static/imgs/logo.png" iconSize='60' :loading='loading'></u-loading-page>
+		<view v-if='!loading'>
+			<view v-if='fileList.length>0||companyData.companyName||companyData.companyIntroduction||companyData.scopeOfBusiness||companyData.companyAddress||companyData.phone||companyData.portraiture||companyData.postbox'>
+				<view v-if='fileList.length>0' class="swiper-wrap">
+					<u-swiper :list="fileList" 
+					autoplay
+					imgMode='aspectFill'
+					height='260'
+					circular
+					@change="e => current = e.current" @click="click">
+						<view slot="indicator" class="indicator">
+							<view
+								class="indicator__dot"
+								v-for="(item, index) in fileList"
+								:key="index"
+								:class="[index === current && 'indicator__dot--active']">
+							</view>
+						</view>
+					</u-swiper>
+				</view>
+
+				<view v-if='companyData.companyName' class="company-title row flex flex-between line" >
+					<view class='title' >{{companyData.companyName}}</view>
+				</view>
+				<view v-if='companyData.companyIntroduction||companyData.scopeOfBusiness||companyData.companyAddress||companyData.phone||companyData.portraiture||companyData.postbox' class="content1" >
+					<view v-if='companyData.companyIntroduction' class="intro top-m">
+						<view  class="title">基本信息</view>
+						<view class='content'>{{companyData.companyIntroduction}}</view>
+					</view>
+					<view v-if='companyData.scopeOfBusiness' class="scope top-m">
+						<view class="title">业务范围</view>
+						<view class='content'>{{companyData.scopeOfBusiness}}</view>
+					</view>
+					<view v-if='companyData.companyAddress||companyData.phone||companyData.portraiture||companyData.postbox' class='compInformation' >
+						<view v-if="companyData.companyAddress" class="row flex top-m align-item-center">
+							<view class='image-wrap'>
+								<image style='width:24rpx;height:31rpx;'  src="../../static/imgs/mySet/home/address.png" mode=""></image>
+							</view>
+							<view>地址:{{companyData.companyAddress}}</view>
+						</view>
+						<view v-if="companyData.phone" class="row flex top-m align-item-center">
+							<view class='image-wrap'>
+								<image style='width:27rpx;height:28rpx;' src="../../static/imgs/mySet/home/phone.png" mode=""></image>
+							</view>
+							<view>电话:{{companyData.phone}}</view>
+						</view>
+						<view v-if="companyData.portraiture" class="row flex top-m align-item-center">
+							<view class='image-wrap'>
+								<image style='width:27rpx;height:28rpx;' src="../../static/imgs/mySet/home/portraiture.png" mode=""></image>
+							</view>
+							<view>座机:{{companyData.portraiture}}</view>
+						</view>
+						<view v-if="companyData.postbox" class="row flex top-m align-item-center">
+							<view class='image-wrap'>
+								<image style='width:29rpx;height:25rpx;' src="../../static/imgs/mySet/home/postbox.png" mode=""></image>
+							</view>
+							<view>邮箱:{{companyData.postbox}}</view>
+						</view>
+					</view>
+				</view>	
+			</view>
+			<view style='position:relative;height:100vh;' v-if='fileList.length==0&&!companyData.companyName&&!companyData.companyIntroduction&&!companyData.scopeOfBusiness&&!companyData.companyAddress&&!companyData.phone&&!companyData.portraiture&&!companyData.postbox'>
+				<image class='notavailable' src="../../static/imgs/notavailable.png" mode=""></image>
+			</view>
+		</view>
+		
+		
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	import uploadImage from '@/components/ossutil/uploadFile.js'; 
+	export default {
+		data() {
+			return {
+				companyData:{
+					commonId:''
+				},
+				userInfo:{},
+				fileList:[],
+				fileList1:[],
+				editstatus:false,
+				id:'',
+				current:0,
+				loading:true,
+			}
+		},
+		onLoad(options) {
+			this.id=options.id
+			uni.showLoading({
+					title: '数据加载中'
+				})
+				this.getList()
+		},
+		onShow() {
+				this.userInfo = uni.getStorageSync("userInfo")
+				this.companyData.commonId=uni.getStorageSync("userInfo").id
+				console.log(1111111111)
+				
+			
+			// this.getList()
+			
+		},
+		onUnload(){
+			this.id=''
+		},
+		methods: {
+			getList(){
+				var that=this
+				var data={}
+				if(this.id){
+					data={
+						id:this.id,
+					}
+				}
+				this.$request.baseRequest('admin.unimall.personalHomepageInfo', 'get',data, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					console.log(res)
+						this.companyData=res.data
+						if(res.data.addressUrl){
+							var arr=res.data.addressUrl.split(',')
+							this.fileList1=[]
+							for(var i=0;i<arr.length;i++){
+								if(arr[i]){
+									this.fileList1.push({url:arr[i]})
+								}
+							}
+							this.fileList=arr
+						}else{
+							this.fileList1=[]
+							this.fileList=[]
+						}
+					setTimeout(()=>{
+						that.loading=false
+					},1000)
+					// if (res.errno == 200) {
+					uni.hideLoading()
+					
+					// }
+				})
+			},
+			change(){
+				
+			},
+			click(index){
+				console.log(index)
+				uni.previewImage({
+						current: index,     // 当前显示图片的索引值
+						urls: this.fileList,    // 需要预览的图片列表,photoList要求必须是数组
+						loop:true,          // 是否可循环预览
+					})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	/deep/.u-border {
+		border-color: #E6E6E6!important;
+	}
+	.content{
+		
+	}
+	 .indicator {
+		background:rgba(10, 23, 61, 0.5);
+		padding: 9rpx 5rpx;
+		border-radius: 20rpx;
+	        @include flex(row);
+	        justify-content: center;
+	
+	        &__dot {
+	             height: 6px;
+	             width: 6px;
+	             border-radius: 100px;
+	             background-color: rgba(255, 255, 255, 0.5);
+	             margin: 0 5px;
+	             transition: background-color 0.3s;
+	    
+	            &--active {
+	                 background-color: #ffffff;
+	             }
+	        }
+	}
+
+	.top{
+		width: 100vw;
+		height: 135rpx;
+		background: #112253;
+		border-radius: 0px 0px 20rpx 20rpx;
+	}
+	.content1{
+		margin: 0rpx 0 120rpx 0;
+		background-color: #fff;
+		border-radius: 20rpx 20rpx 0 0;
+		padding:10rpx 20rpx;
+		box-sizing: border-box;
+		.row{
+			padding-bottom: 24rpx;
+		}
+		.line{
+			border-bottom: 1px solid #E6E6E6;
+		}
+		.top-m{
+			margin-top: 24rpx;
+		}
+		.qyfc{
+			margin: 24rpx 0;
+		}
+	}
+	.content1-edit{
+		position: relative;
+		top: -230rpx;
+		margin: 20rpx 20rpx 120rpx 20rpx;
+		border-radius: 20rpx;
+		padding:20rpx;
+	}
+	.footer{
+		position: fixed;
+		bottom: 80rpx;
+		width: calc(100% - 40rpx);
+		padding: 0 20rpx;
+		z-index: 999;
+	}
+	.button{
+		color: #fff;
+		background-color: #112253;
+		border-radius: 20rpx;
+		padding:10rpx;
+		font-size:28rpx;
+	}
+	.company-title{
+		margin:30rpx 20rpx;
+		.button{
+			padding:10rpx 20rpx;
+			width:96rpx;
+		}
+	}
+	.company-title .title{
+		color:#112253;
+		font-size:36rpx;
+		font-weight: bold;
+	}
+	.title{
+		font-size:32rpx;
+		font-weight: bold;
+		color: #1A1A1A;
+	}
+	.content{
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #666666;
+	}
+	.compInformation{
+		margin:20rpx 0;
+		background:#F7F7F7;
+		color:#112253;
+		font-size: 28rpx;
+		font-weight: 500;
+		padding:10rpx 30rpx;
+		border-radius:20rpx;
+	}
+	.image-wrap{
+		width:50rpx;
+		position:relative;
+		top:2rpx;
+	}
+	.input-title{
+		margin-right:10rpx;
+	}
+	.notavailable{
+		width:252rpx;height:348rpx;
+		    position: absolute;
+		    top: 50%;
+		    left: 50%;
+		    transform: translateX(-50%) translateY(-50%);
+	}
+</style>

+ 378 - 0
xiaochengxu/pageA/circle/search.vue

@@ -0,0 +1,378 @@
+<template>
+	<view>
+		<d-search-log :color_border="color_border" :color_text="color_border" :search_list_old_man_num='15' :search_list_hot="cirlce_search_list_hot"
+			:store_key="store_key" @onClickDelAllApi="onClickDelAll" @onSearchNameApi="onSearchName" @onSearchvoiceApi='onSearchvoice'></d-search-log>
+		<u-popup :show="isRecorderManager" mode="bottom">
+			<view class="shqx" v-if="longPress == '2'">
+				上划取消
+			</view>
+			<view class="record-layer">
+				<view class="record-box">
+					<view class="record-btn-layer" v-if="tempFilePath == ''">
+						<view class="record-btn">
+							<image src="../../static/mic1.png" mode="widthFix" style="width:120rpx;"
+									@longpress="longpressBtn" @touchend="touchendBtn" @touchmove="handleTouchMove"></image>
+							<text class="text">{{longPress == '1' ? '按住说出姓名' : '松开自动识别'}}</text>
+						</view>
+					</view>
+					<!-- 语音音阶动画 -->
+					<view class="prompt-layer prompt-layer-1" v-if="longPress == '2'">
+						<view class="prompt-loader">
+							<view class="em" v-for="(item,index) in 15" :key="index"></view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import dSearchLog from '@/uni_modules/d-search-log/components/d-search-log/d-search-log.vue';
+	const recorderManager = uni.getRecorderManager();
+	const innerAudioContext = uni.createInnerAudioContext();
+	var init // 录制时长计时器
+	var timer // 播放 录制倒计时
+	export default {
+		components: {
+			"dSearchLog": dSearchLog
+		},
+		data() {
+			return {
+				color_border: "#00aaff",
+				cirlce_search_list_hot: [],
+				store_key: 'circle_search_list',
+				duration: 2000, //录音最大值ms 60000/1分钟
+				tempFilePath: '', //音频路径
+				playStatus: 0, //录音播放状态 0:未播放 1:正在播放
+				longPress: '1',
+				tempFilePath: '',
+				isRecorderManager: false,
+				is_clock: true,
+				startPoint: ""
+			};
+		},
+		methods: {
+			onClickDelAll(val) {
+				console.log(val)
+			},
+			onSearchvoice(e){
+				this.isRecorderManager = true
+			},
+			handleTouchMove: function(e) {
+				console.log("滑动")
+				if (Math.abs(e.touches[e.touches.length - 1].clientY - this.startPoint.clientY) > 35) {
+			
+					this.is_clock = false
+				} else {
+			
+					this.is_clock = true
+				}
+			},
+			longpressBtn(e) {
+				this.longPress = '2';
+				this.is_clock = true,
+					console.log(e);
+				this.startPoint = e.touches[0],
+					recorderManager.onStop((res) => {
+						console.log("录音结束")
+						this.tempFilePath = res.tempFilePath;
+					})
+				const options = {
+					duration: this.duration, // 指定录音的时长,单位 ms
+					sampleRate: 16000, // 采样率
+					numberOfChannels: 1, // 录音通道数
+					encodeBitRate: 96000, // 编码码率
+					// format: 'mp3', // 音频格式,有效值 aac/mp3
+					frameSize: 10, // 指定帧大小,单位 KB
+				}
+				recorderManager.start(options);
+				// 监听音频开始事件
+				recorderManager.onStart((res) => {
+					console.log(res)
+				})
+			},
+			touchendBtn() {
+				console.log("录音结束")
+				let that = this
+				this.longPress = '1'; 
+				recorderManager.onStop((res) => {
+					this.tempFilePath = res.tempFilePath
+					let _file = ''
+					if (that.is_clock) {
+						_file = uni.getFileSystemManager().readFileSync(res.tempFilePath, "base64")
+						console.log(_file)
+						that.$request.baseRequest('admin.unimall.certificateManagementInfo', 'speechRecognition', {
+							voiceMessage: _file,
+						}, failres => {
+							console.log('res+++++', failres.errmsg)
+							uni.showToast({
+							  icon:"none",
+							  title: failres.errmsg,
+							  duration: 3000
+							});
+						}).then(res => {
+							uni.hideLoading()
+							console.log(res)
+							if(res.data.text.length>10){
+								var text = res.data.text.substring(0, 10)
+							}else{
+								var text = res.data.text
+							}
+							uni.setStorageSync('cirlce_search_val', text);
+							uni.switchTab({
+								url: "/pages/circle/circle"
+			
+							})
+			
+						})
+					}
+					recorderManager.stop()
+				})
+			},
+			onSearchName(e) {
+				if(e.length>10){
+					var text = e.substring(0, 10)
+				}else{
+					var text = e
+				}
+				uni.setStorageSync('cirlce_search_val', text);
+				uni.switchTab({
+					url:`/pages/circle/circle`
+				})
+				// uni.switchTab({
+				// 	url:"/pages/circle/circle?val="+e
+					
+				// })
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.shqx {
+		position: absolute;
+		top: -100rpx;
+		left: 0;
+		right: 0;
+		margin: auto;
+		text-align: center;
+		color: rgba(221, 221, 221, 1);
+	}
+
+	.record-box {
+		width: 100%;
+		position: relative;
+		top: 80rpx;
+	}
+
+	.record-btn-layer {
+		width: 100%;
+		display: flex;
+		justify-content: center;
+	}
+
+	.record-btn-layer button::after {
+		border: none;
+	}
+
+	.record-btn-layer button {
+		font-size: 14px;
+		line-height: 38px;
+		width: 100%;
+		height: 38px;
+		border-radius: 8px;
+		text-align: center;
+		background: rgba(56, 86, 156, 1);
+	}
+
+	.record-btn-layer button image {
+		width: 16px;
+		height: 16px;
+		margin-right: 4px;
+		vertical-align: middle;
+	}
+
+	.record-btn-layer .record-btn-2 {
+		background: rgba(56, 86, 156, 1);
+	}
+
+	.prompt-layer {
+		border-radius: 8px;
+		background: rgba(56, 86, 156, 1);
+		padding: 8px 16px;
+		box-sizing: border-box;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+
+	.prompt-layer::after {
+		content: '';
+		display: block;
+		border: 6px solid rgba(0, 0, 0, 0);
+		border-top-color: rgba(56, 86, 156, 1);
+		position: absolute;
+		bottom: -10px;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+
+	.prompt-layer-1 {
+		font-size: 12px;
+		width: 128px;
+		text-align: center;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		top: -240px;
+	}
+
+	.del {
+		position: absolute;
+		top: -200rpx;
+
+		.img {
+			width: 100rpx;
+		}
+	}
+
+	.prompt-layer-1 .p {
+		color: #000000;
+	}
+
+	.prompt-layer-1 .span {
+		color: #fff;
+	}
+
+	.prompt-loader .em {}
+
+	.prompt-loader {
+		width: 96px;
+		height: 20px;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 6px;
+	}
+
+	.prompt-loader .em {
+		display: block;
+		background: #fff;
+		width: 1px;
+		height: 10%;
+		margin-right: 2.5px;
+		float: left;
+	}
+
+	.prompt-loader .em:last-child {
+		margin-right: 0px;
+	}
+
+	.prompt-loader .em:nth-child(1) {
+		animation: load 2.5s 1.4s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(2) {
+		animation: load 2.5s 1.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(3) {
+		animation: load 2.5s 1s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(4) {
+		animation: load 2.5s 0.8s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(5) {
+		animation: load 2.5s 0.6s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(6) {
+		animation: load 2.5s 0.4s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(7) {
+		animation: load 2.5s 0.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(8) {
+		animation: load 2.5s 0s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(9) {
+		animation: load 2.5s 0.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(10) {
+		animation: load 2.5s 0.4s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(11) {
+		animation: load 2.5s 0.6s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(12) {
+		animation: load 2.5s 0.8s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(13) {
+		animation: load 2.5s 1s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(14) {
+		animation: load 2.5s 1.2s infinite linear;
+	}
+
+	.prompt-loader .em:nth-child(15) {
+		animation: load 2.5s 1.4s infinite linear;
+	}
+
+	@keyframes load {
+		0% {
+			height: 10%;
+		}
+
+		50% {
+			height: 100%;
+		}
+
+		100% {
+			height: 10%;
+		}
+	}
+
+	.prompt-layer-2 {
+		// top: -540px;
+	}
+
+	.prompt-layer-2 .text {
+		color: rgba(0, 0, 0, 1);
+		font-size: 12px;
+	}
+
+	.record-btn {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+
+		.text {
+			margin-top: 20rpx;
+		}
+
+	}
+
+	/deep/.u-popup__content {
+		padding-bottom: 100rpx;
+		// background: linear-gradient(180deg, rgba(204, 204, 204, 0.95) 0%, rgba(203, 203, 203, 0.01) 100%) !important;
+		border-radius: 50% 50% 0 0;
+	}
+
+	.record-layerP {
+		position: relative;
+		top: 50px;
+	}
+</style>

+ 250 - 0
xiaochengxu/pageA/mySet/cardType.vue

@@ -0,0 +1,250 @@
+<template>
+	<view class="content">
+		<u-loading-page loading-mode='spinner' image="/static/imgs/logo.png" iconSize='60'
+			:loading='loading'></u-loading-page>
+		<view v-show='!loading' class="content1">
+			<view v-for='item in cardTypeList'>
+				<view class='flex row flex-between'>
+					<view class="left flex">
+						<view class="f-text flex flex-all-center">{{item.circleName[0]}}</view>
+						<view class="text">{{item.circleName}}</view>
+					</view>
+					<view class="right">
+						<image src="../../static/imgs/mySet/del.png" class="img" mode="widthFix"
+							v-if='item.circleName!="默认分类"' @click="del(item)"></image>
+						<image src="../../static/imgs/mySet/zd.png" class="img" mode="widthFix" @click="stick(item)">
+						</image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<u-modal showCancelButton='true' @confirm='$u.debounce(confirm, 500)' @cancel='show=false' :show="show"
+			title="新增分类" confirmColor="#112253">
+			<view class="slot-content">
+				<u--input v-model="cardTypeData.circleName" placeholder="输入分类名称,2-8个字符" border="none"></u--input>
+			</view>
+		</u-modal>
+
+		<view @click='add' class='button'>新增</view>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	var that;
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin],
+		data() {
+			return {
+				show: false,
+				cardTypeList: [],
+				cardTypeData: {},
+				userInfo: {},
+				canReset: false,
+				loading: true,
+			};
+		},
+		onLoad() {
+			that = this
+		},
+		onShow() {
+			this.userInfo = uni.getStorageSync("userInfo")
+			this.cardTypeData.commonId = uni.getStorageSync("userInfo").id
+			this.getList()
+		},
+		methods: {
+			getList() {
+				uni.showLoading({
+					title: '数据加载中'
+				})
+				this.$request.baseRequest('admin.unimall.cardClassifyInfo', 'list', {
+					commonId: uni.getStorageSync("userInfo").id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					// this.cardTypeList = res.data.items
+					uni.hideLoading()
+					if (res.data.items.length > 0) {
+						for (var i = 0; i < res.data.items.length; i++) {
+							res.data.items[i].name = res.data.items[i].circleName[0]
+						}
+						// var itemIndex = res.data.items.findIndex((item) => {
+						// 	return item.topMarking == 1
+						// })
+						// if (itemIndex != -1) {
+						// 	var data = res.data.items.splice(itemIndex, 1)
+						// 	res.data.items = data.concat(res.data.items)
+
+						// } else {
+						// 	res.data.items = [].concat(res.data.items)
+						// }
+						this.cardTypeList = res.data.items
+					} else {
+						this.cardTypeList = []
+					}
+					setTimeout(() => {
+						that.loading = false
+					}, 1000)
+				})
+			},
+			del(item) {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.unimall.cardClassifyInfo', 'delete', {
+					commonId: uni.getStorageSync("userInfo").id,
+					id: item.id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						title: failres.errmsg,
+						icon: 'none',
+						duration: 2000
+					})
+				}).then(res => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '删除成功!',
+						duration: 2000
+					});
+				})
+			},
+			stick(item) {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				var type = '',
+					type1 = '',
+					data = {}
+				if (item.id) {
+					type = 'admin.unimall.cardClassifyInfo'
+					type1 = 'top'
+					data = {
+						cardClassifyInfo: JSON.stringify({
+							id: item.id
+						})
+					}
+				}
+				this.$request.baseRequest(type, type1, data, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						title: failres.errmsg,
+						icon: 'none',
+						duration: 2000
+					})
+					uni.hideLoading()
+				}).then(res => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '置顶成功!',
+						duration: 2000
+					})
+					this.getList()
+				})
+			},
+
+			add() {
+				this.show = true
+			},
+			confirm() {
+				if (!this.cardTypeData.circleName) {
+					uni.showToast({
+						title: '分类名称不能为空!',
+						icon: 'none',
+						duration: 2000
+					})
+					return
+				}
+				if (this.cardTypeData.circleName < 2 || this.cardTypeData.circleName > 8) {
+					uni.showToast({
+						title: '类别名称2-8个字!',
+						icon: 'none',
+						duration: 2000
+					})
+					return
+				}
+				this.$request.baseRequest('admin.unimall.cardClassifyInfo', 'add', {
+					cardClassifyInfo: JSON.stringify(this.cardTypeData)
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+
+				}).then(res => {
+					uni.hideLoading()
+					this.show = false
+					this.cardTypeData = {
+						commonId: uni.getStorageSync("userInfo").id,
+					}
+					uni.showToast({
+						icon: "success",
+						title: '修改成功!',
+						duration: 2000,
+						complete: function() {
+							that.getList()
+						}
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content1 {
+		.row {
+			margin: 20rpx 20rpx 0 20rpx;
+			background-color: #fff;
+			padding: 20rpx;
+			border-radius: 20rpx;
+
+			.f-text {
+				width: 58rpx;
+				height: 58rpx;
+				background-color: #112253;
+				border-radius: 50%;
+				color: #fff;
+				margin-right: 20rpx;
+				font-size: 32rpx;
+			}
+
+			.img {
+				width: 48rpx;
+				height: auto;
+				margin-left: 20rpx;
+			}
+		}
+	}
+
+	.button {
+		position: fixed;
+		bottom: 108rpx;
+		width: calc(100% - 40rpx);
+		padding: 24rpx 0;
+		color: #fff;
+		background-color: #112253;
+		text-align: center;
+		margin: 0 20rpx;
+		border-radius: 20rpx;
+	}
+
+	.slot-content {
+		width: 100%;
+	}
+</style>

+ 19 - 0
xiaochengxu/pageA/mySet/contactCustomer.vue

@@ -0,0 +1,19 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 762 - 0
xiaochengxu/pageA/mySet/editCard.vue

@@ -0,0 +1,762 @@
+<template>
+	<view class="content">
+		<view class="content1 relative">
+			<view class="relative">
+				<image :src="imgList[selectIndex].dictLabel" mode="widthFix" style="width: 100%;height: auto;"></image>
+			</view>
+			<view class="absolute card-content style1" v-if="imgList[layoutSelectIndex].dictSort==1">
+				<view class="left">
+					<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+						shape="circle" v-if="cardInfo.headSculpture"></u--image>
+					<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+						shape="circle" v-else></u--image>
+				</view>
+				<view class="right">
+					<view class="row1">
+						<text class="name">{{cardInfo.name}}</text>
+						<text class="post">{{cardInfo.post}}</text>
+					</view>
+					<view class="row2">
+						{{cardInfo.companyName}}
+					</view>
+					<view class="row3 flex">
+						<u--image
+							:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+							height="16px"></u--image>
+						<view class='icon-text'>
+							{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+							height="13px"></u--image>
+						<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+							height="12px"></u--image>
+						<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+					</view>
+				</view>
+			</view>
+			<view class="absolute card-content style1 flex-between" v-if="imgList[layoutSelectIndex].dictSort==2">
+				<view class="right">
+					<view class="row1">
+						<text class="name">{{cardInfo.name}}</text>
+						<text class="post">{{cardInfo.post}}</text>
+					</view>
+					<view class="row2">
+						{{cardInfo.companyName}}
+					</view>
+					<view class="row3 flex">
+						<u--image
+							:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+							height="16px"></u--image>
+						<view class='icon-text'>
+							{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+							height="13px"></u--image>
+						<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+							height="12px"></u--image>
+						<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+					</view>
+				</view>
+				<view class="left">
+					<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+						shape="circle" v-if="cardInfo.headSculpture"></u--image>
+					<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+						shape="circle" v-else></u--image>
+				</view>
+			</view>
+			<view class="absolute card-content style2" v-if="imgList[layoutSelectIndex].dictSort==3">
+				<view class="top">
+					<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+						shape="circle" v-if="cardInfo.headSculpture"></u--image>
+					<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+						shape="circle" v-else></u--image>
+				</view>
+				<view class="bottom flex">
+					<view class="left">
+						<view class="row1">
+							<text class="name">{{cardInfo.name}}</text>
+							<text class="post">{{cardInfo.post}}</text>
+						</view>
+						<view class="row2">
+							{{cardInfo.companyName}}
+						</view>
+					</view>
+					<view class="right">
+						<view class="row1 flex">
+							<u--image
+								:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+								height="16px"></u--image>
+							<view class='icon-text'>
+								{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}
+							</view>
+						</view>
+						<view class="row2 flex">
+							<u--image
+								:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+								height="13px"></u--image>
+							<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+						</view>
+						<view class="row4 flex">
+							<u--image
+								:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+								height="12px"></u--image>
+							<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="absolute card-content style2" v-if="imgList[layoutSelectIndex].dictSort==4">
+				<view class="top">
+					<view class="row1">
+						<text class="name">{{cardInfo.name}}</text>
+						<text class="post">{{cardInfo.post}}</text>
+					</view>
+					<view class="row2">
+						{{cardInfo.companyName}}
+					</view>
+
+				</view>
+				<view class="bottom flex">
+					<view class="left">
+						<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+							shape="circle" v-if="cardInfo.headSculpture"></u--image>
+						<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+							shape="circle" v-else></u--image>
+					</view>
+					<view class="right">
+						<view class="row1 flex">
+							<u--image
+								:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+								height="16px"></u--image>
+							<view class='icon-text'>
+								{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}
+							</view>
+						</view>
+						<view class="row2 flex">
+							<u--image
+								:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+								height="13px"></u--image>
+							<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+						</view>
+						<view class="row4 flex">
+							<u--image
+								:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+								height="12px"></u--image>
+							<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="flex">
+			<view class="change-template" :class="selectConfig==1?'active-style':''" @click="changeTab(1)">
+				背景配置
+			</view>
+			<view class="change-template" :class="selectConfig==2?'active-style':''" @click="changeTab(2)">
+				图标颜色
+			</view>
+			<view class="change-template" :class="selectConfig==3?'active-style':''" @click="changeTab(3)">
+				布局配置
+			</view>
+		</view>
+
+		<view class="img-list" v-if="selectConfig==1">
+			<view class="img-item" v-for="(item,index) in imgList" @click="changeTemplate(index)">
+				<image :src="item.dictValue" class="img-item" :key="index"></image>
+				<image src="@/static/imgs/card/dh.png" class="dh" v-if="selectIndex==index"></image>
+			</view>
+		</view>
+		<view class="font-color flex" v-if="selectConfig==2">
+			<view v-for="(item,index) in colorList"
+				:style="'background:'+item.color+';width:100rpx;height:100rpx;border-radius:50%;margin-right:20rpx'"
+				class="relative" @click="changeIconColor(index)">
+				<image src="@/static/imgs/card/dh.png" class="icon-dh" v-if="colorSelectIndex==index"></image>
+			</view>
+		</view>
+		<view class="font-color img-list" v-if="selectConfig==3">
+			<view class="img-item" v-for="(item,index) in layoutImgList" @click="layoutChangeTemplate(index)">
+				<image :src="item.dictValue" class="img-item" :key="index"></image>
+				<image src="@/static/imgs/card/dh.png" class="dh" v-if="layoutSelectIndex==index"></image>
+			</view>
+		</view>
+		<view class="change-template">
+			名片信息
+		</view>
+
+		<view class="content2">
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					名片标识
+				</view>
+				<u--input v-model="cardInfo.cardBusiness" border="none" placeholder="输入名片标识"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					姓名
+				</view>
+				<u--input v-model="cardInfo.name" border="none" placeholder="输入姓名" inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					职务
+				</view>
+				<u--input v-model="cardInfo.post" border="none" placeholder="输入职务,不超过8个字符"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					公司/机构名称
+				</view>
+				<u--input v-model="cardInfo.companyName" border="none" placeholder="输入公司/机构名称"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row" @click="placeSelect();hideKeyboard()">
+				<view class="left">
+					地址
+				</view>
+				<view v-if="cardInfo.province">{{ cardInfo.province }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+				<view class="" v-else>
+					<text>选择地址 </text>
+					<image src="@/static/imgs/card/yjt.png" mode=""
+						style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+				</view>
+
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					详细地址
+				</view>
+				<u--input v-model="cardInfo.detailedAddress" border="none" placeholder="输入详细地址,不超过15个字"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					联系电话
+				</view>
+				<u--input v-model="cardInfo.phone" maxlength='15' border="none" placeholder="输入联系电话"
+					inputAlign='right'></u--input>
+			</view>
+			<!-- 		<u-form-item label="地址" prop="userInfo.name" borderBottom>
+						<view @click="showPicker">选择地址</view>
+						<view>{{ province }}{{ city }}{{ area }}</view>
+					</u-form-item> -->
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					上传企业logo或个人头像
+				</view>
+				<view class="right">
+					<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
+						:maxCount="1"></u-upload>
+				</view>
+			</view>
+
+
+
+
+		</view>
+		<view class="bottom">
+			<button @click='$u.debounce(submit, 500)' class='button' type="default">提交</button>
+		</view>
+		<city-picker ref="picker" mode="multiSelector" :list="areaData" :level="3" @confirm="finishSelectAddress">
+		</city-picker>
+		<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	var that;
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		onLoad(options) {
+			that = this
+			this.userInfo = uni.getStorageSync("userInfo")
+			this.cardInfo = JSON.parse(options.itemVal)
+			// this.cardInfo.cardBusiness ="名片标识"+ options.cardIndex
+			this.fileList1 = [
+				{
+					url:this.cardInfo.headSculpture
+				}
+			]
+			that = this
+			this.getList()
+		},
+		data() {
+			return {
+				layoutSelectIndex: 0,
+				layoutImgList: [{
+						dictValue: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/muban3.png',
+						dictSort: 1
+					},
+					{
+						dictValue: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/muban2.png',
+						dictSort: 2
+					},
+					// {
+					// 	dictValue: '/static/imgs/card/3.png',
+					// 	dictSort: 3
+					// },
+					{
+						dictValue: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/muban1.png',
+						dictSort: 4
+					}
+				],
+				colorSelectIndex: 0,
+				colorList: [{
+						"color": "rgba(196, 196, 196, 1)",
+						index: 1
+					},
+					{
+						"color": "rgba(96, 148, 196, 1)",
+						index: 2
+					},
+					{
+						"color": "rgba(168, 135, 98, 1)",
+						index: 3
+					}
+
+				],
+				selectConfig: 1,
+				selectIndex: 0,
+				imgList: [],
+				isSubmit: false,
+				content: '确定提交名片信息?',
+				userInfo: {},
+				fileList1: [],
+				cardInfo: {
+					city: '',
+					area: '',
+					province: '',
+					commonId: '',
+					cardBusiness: '',
+					name: '',
+					post: '',
+					companyName: '',
+					location: '',
+					detailedAddress: '',
+					phone: '',
+					headSculpture: '',
+					currentBackground: '',
+					cuttentTemplate: '',
+					icon: '',
+				}
+			};
+		},
+		methods: {
+			layoutChangeTemplate(index) {
+				this.layoutSelectIndex = index
+				this.cardInfo.cuttentTemplate = this.layoutImgList[index].dictSort
+			},
+			changeIconColor(index) {
+				this.colorSelectIndex = index
+				this.cardInfo.icon = this.colorList[index].index
+			},
+			changeTab(index) {
+				this.selectConfig = index
+			},
+			changeTemplate(index) {
+				this.selectIndex = index
+				this.cardInfo.currentBackground = this.imgList[index].dictLabel
+
+			},
+			getList() {
+				this.$request.baseRequest('admin.dictData', 'list', {
+					dictType: "card_template"
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+
+				}).then(res => {
+					console.log("img", res)
+					this.imgList = res.data.items
+					for(var i=0;i<this.imgList.length;i++){
+						if(this.cardInfo.currentBackground==this.imgList[i].dictLabel){
+							this.selectIndex=i
+						}
+					}
+					
+					for(var i=0;i<this.layoutImgList.length;i++){
+						if(this.cardInfo.cuttentTemplate==this.layoutImgList[i].dictSort){
+							this.layoutSelectIndex=i
+						}
+					}
+					
+					for(var i=0;i<this.colorList.length;i++){
+						if(this.cardInfo.icon==this.colorList[i].index){
+							this.colorSelectIndex=i
+						}
+					}
+				})
+			},
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.cardInfo.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						that.cardInfo.province = _address.Province
+						that.cardInfo.city = _address.City
+						that.cardInfo.area = _address.Country
+						that.cardInfo.detailedAddress = _address.Village
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			// 删除图片
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+				}
+			},
+			uploadFilePromise(res) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							that.cardInfo.headSculpture = result
+							resolve(res)
+						}
+					)
+				})
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.unimall.cardManagementInfo', 'update', {
+					cardManagementInfo: JSON.stringify(this.cardInfo)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '编辑成功!',
+						duration: 2000
+					});
+					uni.navigateBack()
+
+				})
+			},
+			submit() {
+				this.isSubmit = true
+
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		padding: 20rpx;
+	}
+
+	.bgc0 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc1.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc1 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc2.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc2 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc3.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc3 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc4.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc4 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc5.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.img {
+		width: 100rpx;
+	}
+
+	.change-template {
+		margin: 30rpx 0 50rpx 0;
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #19191A;
+		margin-right: 20rpx;
+	}
+
+	.img-list {
+		display: block;
+		white-space: nowrap;
+		overflow-x: auto;
+
+		.dh {
+			width: 32rpx;
+			height: 32rpx;
+			position: absolute;
+			right: 8rpx;
+			bottom: 8rpx;
+		}
+
+
+		.img-item {
+			position: relative;
+			width: 186rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 2 0rpx;
+			border-radius: 20rpx;
+			margin-right: 20rpx;
+		}
+
+	}
+
+	.content2 {
+		background-color: #fff;
+		border-radius: 20rpx;
+		padding: 0 20rpx 0 20rpx;
+
+		.row {
+			padding: 20rpx;
+			border-bottom: 1px solid #E6E5E5;
+		}
+	}
+
+	.button {
+		color: #fff;
+		background-color: #112253;
+		border-radius: 20rpx;
+		margin: 40rpx 0;
+	}
+
+	.card-content {
+		top: 20rpx;
+		left: 20rpx;
+	}
+
+	.content1 {
+		.icon-text {
+			margin-left: 10rpx;
+		}
+
+		.style1 {
+			display: flex;
+			padding: 20rpx 30rpx;
+			width: 85%;
+
+			.left {
+				width: 132rpx;
+				height: 132rpx;
+				border-radius: 50%;
+			}
+
+			.right {
+				margin-left: 40rpx;
+
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+
+				.row3 {
+					margin-top: 30rpx;
+					font-size: 24rpx;
+					font-weight: 500;
+					color: #323333;
+				}
+
+				.row2,
+				.row3,
+				.row4 {
+					margin-top: 20rpx;
+				}
+			}
+		}
+
+		.style2 {
+			padding: 30rpx;
+
+			.top {
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+			}
+
+			.bottom {
+				margin-top: 48rpx;
+
+				.left {
+					margin-right: 40rpx;
+
+					.row1 {
+						.name {
+							font-size: 38rpx;
+							font-weight: bold;
+							color: #040000;
+							margin-right: 20rpx;
+						}
+
+						.post {
+							font-size: 26rpx;
+							font-weight: 500;
+							color: #666666;
+						}
+					}
+
+					.row2 {
+						margin-top: 20rpx;
+						font-size: 24rpx;
+						font-weight: bold;
+						color: #323333;
+					}
+				}
+
+				.right {
+
+					.row1,
+					.row2 {
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+					}
+
+					.row2,
+					.row3,
+					.row4 {
+						margin-top: 20rpx;
+					}
+				}
+			}
+
+		}
+	}
+
+	.content2 {
+		.left {
+			margin-right: 10rpx;
+		}
+	}
+
+	.active-style {
+		color: '#112253';
+		font-size: 36rpx;
+		font-weight: bold;
+		position: relative;
+	}
+
+	.active-style::after {
+		position: absolute;
+		bottom: -20rpx;
+		content: "";
+		width: 70rpx;
+		height: 8rpx;
+		border-radius: 4rpx;
+		background: #112253;
+		left: 0;
+		right: 0;
+		margin: auto;
+	}
+
+	.font-color {
+		position: relative;
+	}
+
+	.icon-dh {
+		width: 32rpx;
+		height: 32rpx;
+		position: absolute;
+		right: 20rpx;
+		bottom: 20rpx;
+	}
+</style>

+ 116 - 0
xiaochengxu/pageA/mySet/editHome.vue

@@ -0,0 +1,116 @@
+<template>
+	<view class="content">
+		<view class="content1">
+			<u--form labelPosition="left" :model="homeInfo" ref="uForm">
+				<u-form-item label="公司/机构名称" prop="userInfo.name" borderBottom ref="item1">
+					<u--input v-model="homeInfo.name" border="none" placeholder="输入公司名称"></u--input>
+				</u-form-item>
+				<view class="">
+					<view class="">
+						公司/机构简介
+					</view>
+					<u--textarea v-model="value2" placeholder="输入公司/机构简介,不超过1000个字" count maxlength="1000"></u--textarea>
+				</view>
+				<view class="">
+					<view class="">
+						业务范围
+					</view>
+					<u--textarea v-model="value2" placeholder="输入业务范围,不超过500个字" count maxlength="500"></u--textarea>
+				</view>
+				<u-form-item label="公司地址" prop="userInfo.name" borderBottom ref="item1">
+					<u--input v-model="homeInfo.name" border="none" placeholder="输入地址"></u--input>
+				</u-form-item>
+				<u-form-item label="联系电话" prop="userInfo.name" borderBottom ref="item1">
+					<u--input v-model="homeInfo.name" border="none" placeholder="输入地址"></u--input>
+				</u-form-item>
+				<u-form-item label="传真" prop="userInfo.name" borderBottom ref="item1">
+					<u--input v-model="homeInfo.name" border="none" placeholder="输入地址"></u--input>
+				</u-form-item>
+				<u-form-item label="邮箱" prop="userInfo.name" borderBottom ref="item1">
+					<u--input v-model="homeInfo.name" border="none" placeholder="输入地址"></u--input>
+				</u-form-item>
+				<view class="">
+					<view class="">
+						企业风采
+					</view>
+					<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
+						:maxCount="10"></u-upload>
+				</view>
+			</u--form>
+		</view>
+		<view class="bottom">
+			<button>提交</button>
+		</view>
+	</view>
+</template>
+
+<script>
+		import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				fileList1: [],
+				value2:'',
+				homeInfo:{
+					name:''
+				}
+			};
+		},
+		methods:{
+			// 删除图片
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+				}
+			},
+			uploadFilePromise(url) {
+				return new Promise((resolve, reject) => {
+					// uploadImage(res.tempFilePaths[0], 'cardImages/',
+					// 				result => {
+					// 					// this.trainImg = result
+					// 					uni.hideLoading();
+					// 				}
+					// 			)
+					// let a = uni.uploadFile({
+					// 	url: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
+					// 	filePath: url,
+					// 	name: 'file',
+					// 	formData: {
+					// 		user: 'test'
+					// 	},
+					// 	success: (res) => {
+					// 		setTimeout(() => {
+					// 			resolve(res.data.data)
+					// 		}, 1000)
+					// 	}
+					// });
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 84 - 0
xiaochengxu/pageA/mySet/editNickName.vue

@@ -0,0 +1,84 @@
+<template>
+	<view class="content">
+		<view class="row1 flex">
+			<view class="left">
+				昵称
+			</view>
+			<u-input v-model="userInfo.nickname" :border="false" focus class="input" />
+		</view>
+		<view class="row2">
+			<view class="btn" @click="edit">
+				保存
+			</view>
+		</view>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value: '',
+				userInfo: {
+					nickname: ''
+				}
+			};
+		},
+		onLoad() {
+			this.userInfo = uni.getStorageSync("userInfo")
+		},
+		methods: {
+			edit() {
+				this.$request.baseRequest('commonUserApp', 'edit', {
+					commonUserInfo: JSON.stringify(this.userInfo)
+				}, failres => {
+					uni.hideLoading()
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+				}).then(res => {
+					this.userInfo = res.data
+					uni.setStorageSync("userInfo", this.userInfo)
+					uni.showToast({
+					  icon:"success",
+					  title: '修改成功!',
+					  duration: 2000,
+					  complete:function(){
+					    uni.switchTab({
+					      url: "/pages/mySet/mySet"
+					    })
+					  }
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.row1 {
+		background: #fff;
+		padding: 20rpx;
+	}
+
+	.input {
+		font-size: 28rpx;
+	}
+
+	.row2 {
+		padding: 20rpx;
+	}
+
+	.btn {
+		color: #fff;
+		padding: 20rpx;
+		border-radius: 8px;
+		background: rgba(17, 34, 83, 1);
+		text-align: center;
+		font-size: 36rpx;
+
+	}
+</style>

+ 40 - 0
xiaochengxu/pageA/mySet/help.vue

@@ -0,0 +1,40 @@
+<template>
+	<view class='content'>
+		<view class="bg"></view>
+		<view class=' imgwrap'>
+			<image class='img'  src="../../static/imgs/mySet/question1.png" mode=""></image>
+			<image class='img'  src="../../static/imgs/mySet/question2.png" mode=""></image>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.bg{
+	height:162rpx;
+	background: linear-gradient(180deg, #112253 0%,  #FCFCFC 100%);
+}
+// .content{
+// 	padding:20rpx;
+// }
+.imgwrap{
+	position:relative;
+	top:-132rpx;
+	text-align:center;
+}
+.img{
+	width:680rpx;
+	height:246rpx;
+	margin:20rpx auto;
+}
+</style>

+ 175 - 0
xiaochengxu/pageA/mySet/lookCard.vue

@@ -0,0 +1,175 @@
+<template>
+	<view>
+		<view v-for='(item,index) in cardList' class="">
+			<view style='margin:10px;' class='flex justify-space-between'>
+				<view class="flex">
+					<view style="margin-right: 20rpx;">
+						{{item.certificateName}}
+					</view>
+					<view class="">
+						<view v-if='item.personNo'>{{item.personNo1}}</view>
+						<view v-if='item.bankNo'>{{item.bankNo1}}</view>
+					</view>
+				</view>
+				<view class="flex">
+
+					<view style='margin:0 10rpx;' class='finished' v-if='item.personNo' @click='clip(0,item)'>
+						复制号码
+					</view>
+
+					<view class='finished' v-if='item.bankNo' @click='clip(1,item)'>
+						复制号码
+					</view>
+					<view :class='countdownTime==0?"finished":"unfinished"' @click='imageOCR(item,index)' style="margin-left: 20rpx;">{{text}}
+					</view>
+				</view>
+
+
+			</view>
+			<view style='text-align:center;' class="">
+				<image @click="click(item)" style='width:96%;height:190px;border-radius:20rpx;'
+					:src="item.certificateImage" mode="aspectFill"></image>
+			</view>
+
+		</view>
+		<u-toast ref="uToast"></u-toast>
+		<u-picker :immediateChange="true" @cancel='show=false' @confirm='pickerConfirm' title='识别类型' :show="show"
+			:columns="columns"></u-picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				cardList: [],
+				show: false,
+				countdownTime: 0,
+				currectData: {},
+				index: 0,
+				columns: [
+					['识别身份证号', '识别银行卡号']
+				],
+				text: '识别号码'
+			}
+		},
+		onLoad(options) {
+			console.log(11111)
+			this.cardList = JSON.parse(options.dataList);
+			console.log(this.cardList, 11111111)
+		},
+		methods: {
+			click(item) {
+				console.log(111111111)
+				uni.previewImage({
+					current: 0, // 当前显示图片的索引值
+					urls: [item], // 需要预览的图片列表,photoList要求必须是数组
+					loop: true, // 是否可循环预览
+				})
+			},
+			clip(status, item) {
+				uni.setClipboardData({
+					data: status == 1 ? item.bankNo : item.personNo, // e是你要保存的内容
+					success: function() {
+						uni.showToast({
+							title: '复制成功',
+							icon: 'none'
+						})
+					}
+				})
+			},
+			imageOCR(item, index) {
+				this.currectData = item
+				this.index = index
+				this.show = true
+			},
+			getCountdownTime() {
+				this.countdownTime = 60
+				let timer = setInterval(() => {
+					this.countdownTime--;
+					this.text = '识别号码(' + this.countdownTime + 's)'
+					if (this.countdownTime < 1) {
+						clearInterval(timer)
+						this.countdownTime = 0
+						this.text = '识别号码'
+
+					}
+				}, 1000)
+			},
+			pickerConfirm(e) {
+
+				this.show = false
+
+				if (this.countdownTime == 0) {
+					this.getCountdownTime()
+					uni.showLoading({
+						title: '数据加载中',
+						mask: true
+					})
+					var type = '',
+						type1 = ''
+					if (e.value[0] == '识别身份证号') {
+						type = 'admin.unimall.certificateManagementInfo'
+						type1 = 'personShibie'
+					} else if (e.value[0] == '识别银行卡号') {
+						type = 'admin.unimall.certificateManagementInfo'
+						type1 = 'bankShibie'
+					}
+					this.$request.baseRequest(type, type1, {
+						certificateImage: this.currectData.certificateImage
+					}, failres => {
+						console.log('res+++++', failres.errmsg)
+						uni.hideLoading()
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+					}).then(res => {
+						uni.hideLoading()
+						uni.showToast({
+							icon: "success",
+							title: '识别成功!',
+							duration: 2000
+						});
+						if (e.value[0] == '识别身份证号') {
+							this.cardList[this.index].personNo = res.data.recPersonNo
+							this.cardList[this.index].personNo1 = '*' + (this.cardList[this.index].personNo
+								.substring(this.cardList[this.index].personNo.length - 4))
+
+						} else if (e.value[0] == '识别银行卡号') {
+							this.cardList[this.index].bankNo = res.data.bankNo
+							this.cardList[this.index].bankNo1 = '*' + (this.cardList[this.index].bankNo.substring(
+								this.cardList[this.index].bankNo.length - 4))
+						}
+						this.credentialsShow = true
+					})
+				}
+				console.log(e)
+
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.finished {
+		padding: 10rpx 14rpx;
+		text-align: center;
+		background: #112253;
+		border-radius: 10rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.unfinished {
+		padding: 10rpx 14rpx;
+		text-align: center;
+		background: rgba(17, 34, 83, 0.3);
+		border-radius: 10rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+</style>

+ 19 - 0
xiaochengxu/pageA/mySet/myAccount.vue

@@ -0,0 +1,19 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 925 - 0
xiaochengxu/pageA/mySet/myCard.vue

@@ -0,0 +1,925 @@
+<template>
+	<view>
+		<u-navbar placeholder title="我的证件" @leftClick="leftClick" bgColor="#112253" titleStyle="color:#fff"
+			leftIconColor="#fff">
+		</u-navbar>
+		<view class="flex content1 flex-between">
+			<view @click='addclick' class="button">
+				<!-- <u--image :showLoading="true" src="../../static/imgs/mySet/add.png" width="80px" height="80px"></u--image> -->
+				<image src="../../static/imgs/mySet/add.png" mode="widthFix" class="btn-img"></image>
+				新增
+			</view>
+			<view @click='share' class="button">
+				<image src="../../static/imgs/mySet/share1.png" mode="widthFix" class="btn-img"></image>
+				分享
+			</view>
+			<view @click='imageOCR' class="button">
+				<image src="../../static/imgs/mySet/shibie.png" mode="widthFix" class="btn-img"></image>
+				识别号码
+			</view>
+		</view>
+		<view v-if='addstatus' class="content2">
+			<view class="flex flex-between">
+				<u--input border="bottom" v-model="cardData.certificateName" placeholder="输入证件名称" focus></u--input>
+				<view @click='add' class="submit">提交</view>
+			</view>
+			<view class='add-image'>
+				<u-upload @afterRead="afterRead" :fileList="fileList1" @delete="deletePic" name="1" multiple
+					:maxCount="1" height='190' width='360'>
+					<view class="bgc">
+						<image class='circle' style='width:148rpx;height:148rpx;' src="../../static/imgs/mySet/uploadbg.png" mode=""></image>
+						<!-- <view class="circle">
+							<view class="add">
+								+
+							</view>
+						</view> -->
+					</view>
+				</u-upload>
+			</view>
+		</view>
+		<view class="content3" style="background-color: #F7F7F7;">
+			<mescroll-body v-if='!addstatus&&cardList.length==0||cardList.length>0' ref="mescrollRef"
+				@init="mescrollInit" @up="upCallback" @down="downCallback" :up="upOption" :down="downOption">
+				<view v-for='(item,index) in cardList' class="">
+					<view class="flex flex-between row">
+						<view v-if='!item.editstatus' class="left flex">
+							<view class="name-text">
+								{{item.certificateName}}
+							</view>
+							<text v-if='item.personNo'>({{item.personNo1}})</text>
+							<image src="../../static/imgs/mySet/copy.png" mode="widthFix" style="width: 28rpx;" v-if='item.personNo' @click='clip(0,item)'></image>
+							<!-- <u-icon v-if='item.personNo' @click='clip(0,item)' name="file-text-fill" color="#2979ff"
+								size="28"></u-icon> -->
+							<text v-if='item.bankNo' style="margin:0 20rpx ;">{{item.bankNo1}}</text>
+							<image src="../../static/imgs/mySet/copy.png" mode="widthFix" style="width: 28rpx;" v-if='item.bankNo' @click='clip(1,item)'></image>
+							<!-- <u-icon v-if='item.bankNo' @click='clip(1,item)' name="file-text-fill" color="#2979ff"
+								size="28"></u-icon> -->
+						</view>
+						<u--input @input='certificateNameInput($event,item)' border="bottom" v-else
+							v-model="item.certificateName" placeholder="输入证件名称"></u--input>
+						<view class="flex" v-if="item.editstatus">
+							<view @click='qxEdit(item)' :class="!item.editstatus?'edit':'finished'"
+								style="margin:0 20rpx;">取消</view>
+							<view @click='edit(item)' :class="!item.status?'edit':'finished'">完成</view>
+						</view>
+						<view class="flex" v-if="!item.editstatus">
+							<view @click="del(item)" :class="!item.editstatus?'edit':'finished'"
+								style="margin:0 20rpx 0 0;">删除</view>
+							<view @click='edit(item)' class="finished">编辑</view>
+						</view>
+					</view>
+					<view class="row2" v-if='!item.editstatus'>
+						<image @click='previewImage(item.certificateImage)' :src="item.certificateImage" class="img" mode="aspectFill" style="width: 95%;"></image>
+						<view class="right">
+							<u-checkbox-group v-model="item.checked" placement="column"
+								@change="checkboxChange($event,index,item)">
+								<u-checkbox iconColor='#4977FC' activeColor="#fff" :name='index+1'
+									:customStyle="{marginBottom: '8px'}">
+								</u-checkbox>
+							</u-checkbox-group>
+							<!-- <image src="../../static/imgs/mySet/del1.png" mode="widthFix" @click="del(item)" style="width: 28rpx;"></image> -->
+						</view>
+					</view>
+					<view v-else style='padding-left:20rpx;'>
+						<u-upload @afterRead="afterRead" :fileList="fileList2" @delete="deletePic" name="2" multiple
+							:maxCount="1" height='190' width='340'>
+							<!-- <view class="">
+								123
+							</view> -->
+							<!-- <image src="https://cdn.uviewui.com/uview/demo/upload/positive.png" 
+								mode="widthFix" style="width: 250px;height: 150px;"></image> -->
+						</u-upload>
+					</view>
+				</view>
+			</mescroll-body>
+		</view>
+
+		<u-picker :immediateChange="true" @cancel='show=false' @confirm='pickerConfirm' title='识别类型' :show="show"
+			:columns="columns"></u-picker>
+		<u-popup :show="popupshow" :closeOnClickOverlay='true' :overlayOpacity='0.4' @close='handleHiddenShare'
+			:round="10" mode="bottom">
+			<view>
+				<view class="share-content">
+					<view class="block" @click="toUrl()">
+						<button class="moment">
+							<view class="iconfont icon-pengyouquan"></view>
+							<view style="font-size: 26rpx;">分享朋友圈</view>
+						</button>
+					</view>
+					<view class="block">
+						<button class="shareBtn" type="default" data-name="shareBtn" open-type="share">
+							<view class="iconfont icon-weixin"></view>
+							<view style="font-size: 26rpx;">分享微信好友</view>
+						</button>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-modal @cancel='modalshow=false' confirmText='删除' showCancelButton='true' @confirm='delConfirm'
+			:show="modalshow" title="提示" content='确定删除证件?'></u-modal>
+		<u-modal @cancel='credentialscancel' cancelText='重新识别' confirmText='确认号码' showCancelButton='true'
+			@confirm='credentialsConfirm' :show="credentialsShow" title="提示">
+			<view class="slot-content">
+				证件号码
+				<u--input v-if='shibie=="识别身份证号"' v-model="credentials.recPersonNo" placeholder="输入证件名称"
+					border="none"></u--input>
+				<u--input v-if='shibie=="识别银行卡号"' v-model="credentials.bankNo" placeholder="输入证件名称"
+					border="none"></u--input>
+			</view>
+		</u-modal>
+		<u-modal :show="modalstatusshow" confirmText='继续返回' cancelText='取消' @confirm='confirm' @cancel='cancel'
+			showCancelButton='true' title="提示" content='有证件处于编辑状态未提交。'></u-modal>
+		<u-toast ref="uToast"></u-toast>
+		<canvas style="position: absolute; top: -1000px; left: -1000px; width: 600px; height: 400px; background: #000;"
+			canvas-id="canvas"></canvas>
+		<point-share @close='showShare=false' :show='showShare'></point-share>
+	</view>
+</template>
+
+<script>
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import PointShare from '../../components/point-share/index.vue';
+	export default {
+		mixins: [MescrollMixin],
+		components: {
+			PointShare
+		},
+		data() {
+			return {
+				downOption: {
+					textColor: '#bbb'
+				},
+				upOption: {
+					page: {
+						size: 10 // 每页数据的数量,默认10
+					},
+					auto: false,
+					noMoreSize: 1,
+					textNoMore: '没有更多了~',
+					textColor: '#bbb'
+				},
+				show: false,
+				modalshow: false,
+				modalstatusshow: false,
+				popupshow: false,
+				columns: [
+					['识别身份证号', '识别银行卡号']
+				],
+				showShare: false,
+				userInfo: {},
+				cardData: {},
+				cardList: [],
+				fileList1: [],
+				fileList2: [],
+				checkedList: [],
+				addstatus: false,
+				id: '',
+				credentialsShow: false,
+				credentials: {},
+				shibie: '',
+				shibieList: [],
+				canReset: false,
+				shareimg: ''
+			};
+		},
+		onLoad() {
+
+			// this.getList()
+		},
+		onShow() {
+			this.userInfo = uni.getStorageSync("userInfo")
+			this.cardData.commonId = uni.getStorageSync("userInfo").id
+			this.$nextTick(function() {
+				this.canReset && this.mescroll.resetUpScroll() // 重置列表数据为第一页  
+				this.canReset && this.mescroll.scrollTo(0, 0) // 重置列表数据为第一页时,建议把滚动条也重置到顶部,避免无法再次翻页的问题  
+				this.canReset = true // 过滤第一次的onShow事件,避免初始化界面时重复触发upCallback, 无需配置auto:false
+			});
+			this.cutShareImg()
+		},
+		onShareAppMessage(res) {
+
+			let that = this;
+			//生成名片图片
+			let imageUrl = this.poster
+			console.log("imageUrl", uni.getStorageSync('checkedList'))
+			if (res.from === 'button') {
+				return {
+					title: '证件分享',
+					path: '/pages/mySet/lookCard?dataList=' + uni.getStorageSync('checkedList'),
+					imageUrl: this.shareimg,
+				};
+			}
+			if (res.from === 'menu') {
+				return {
+					title: '名片夹',
+					path: '/pages/tabBarPro/index/index',
+					imageUrl: this.popupshow ? imageUrl : ''
+				};
+			}
+		},
+		methods: {
+			previewImage(src) {
+				console.log(src)
+				//预览图片
+				uni.previewImage({
+					urls: [src], // 需要预览的图片链接列表,可以写你图片链接的数组或者跟我一样,就写一个单独的链接
+					current: src // 为当前显示图片的链接/索引值,不填或填写的值无效则为 urls 的第一张
+				});
+			},
+			toUrl() {
+				this.popupshow = false
+				this.showShare = true
+			},
+			cutShareImg() {
+				let that = this;
+				uni.getImageInfo({
+					src: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230506110702.png', // 这里填写网络图片路径 
+					success: (res) => {
+						let ctx = uni.createCanvasContext('canvas');
+						ctx.drawImage(res.path, 0, 0, 480, 300)
+						ctx.draw(false, () => {
+							uni.canvasToTempFilePath({
+								canvasId: 'canvas',
+								fileType: 'png',
+								success: (res) => {
+									//设置分享图片路径
+									that.shareimg = res.tempFilePath
+									console.log(that.shareimg)
+								}
+							})
+						})
+					}
+				});
+			},
+			handleHiddenShare() {
+				this.popupshow = false
+			},
+			certificateNameInput(e, item) {
+				console.log(item)
+				if (item.certificateName1 != item.certificateName) {
+					item.status = true
+				} else {
+					item.status = false
+				}
+
+			},
+			qxEdit() {
+				this.mescroll.resetUpScroll()
+			},
+			clip(status, item) {
+				uni.setClipboardData({
+					data: status == 1 ? item.bankNo : item.personNo, // e是你要保存的内容
+					success: function() {
+						uni.showToast({
+							title: '复制成功',
+							icon: 'none'
+						})
+					}
+				})
+			},
+			edit(item) {
+				if (item.editstatus) {
+					if (item.status) {
+						this.$request.baseRequest('admin.unimall.certificateManagementInfo', 'update', {
+							certificateManagementInfo: JSON.stringify(item)
+						}, failres => {
+							console.log('res+++++', failres.errmsg)
+							uni.hideLoading()
+							uni.showToast({
+								icon: "none",
+								title: failres.errmsg,
+								duration: 3000
+							});
+						}).then(res => {
+							uni.hideLoading()
+							uni.showToast({
+								icon: "success",
+								title: '编辑成功!',
+								duration: 2000
+							});
+							this.modalshow = false
+							this.checkedList = []
+							this.mescroll.resetUpScroll()
+						})
+					}
+				} else {
+					item.editstatus = true
+					item.certificateName1 = item.certificateName
+					this.fileList2 = [{
+						url: item.certificateImage
+					}]
+				}
+
+			},
+			delConfirm() {
+				this.$request.baseRequest('admin.unimall.certificateManagementInfo', 'delete', {
+					id: this.id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '删除成功!',
+						duration: 2000
+					});
+					this.modalshow = false
+					this.checkedList = []
+					this.mescroll.resetUpScroll()
+				})
+			},
+			pickerConfirm(e) {
+				this.show = false
+				console.log(e)
+				uni.showLoading({
+					title: '数据加载中',
+					mask: true
+				})
+				var type = '',
+					type1 = ''
+				this.shibie = e.value[0]
+				this.shibieList = JSON.parse(JSON.stringify(this.cardList[this.checkedList[0]]))
+				if (e.value[0] == '识别身份证号') {
+					type = 'admin.unimall.certificateManagementInfo'
+					type1 = 'personShibie'
+				} else if (e.value[0] == '识别银行卡号') {
+					type = 'admin.unimall.certificateManagementInfo'
+					type1 = 'bankShibie'
+				}
+				this.$request.baseRequest(type, type1, {
+					certificateImage: this.cardList[this.checkedList[0]].certificateImage
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					console.log(res.data)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '识别成功!',
+						duration: 2000
+					});
+					this.credentials = res.data
+					this.credentialsShow = true
+				})
+			},
+			checkboxChange(e, i) {
+				console.log(e[0], i)
+				if (e[0]) {
+					this.checkedList.push(i)
+				} else {
+					var index = this.checkedList.findIndex((item) => {
+						return item == i
+					})
+					this.checkedList.splice(index, 1)
+				}
+				// for(var i=0;i<this.cardList.length;i++){
+				// 	console.log(this.cardList[i].checked)
+				// 	// if(this.cardList[i].checkedList.length>0){
+				// 	// 	this.checkedList.push(i)
+				// 	// }
+				// }
+				console.log(this.checkedList)
+			},
+			share() {
+				if (this.checkedList.length == 0) {
+					uni.showToast({
+						icon: "none",
+						title: '请勾选想要分享的证件!!',
+						duration: 2000
+					});
+					return
+				}
+				var arr = []
+				for (var i = 0; i < this.cardList.length; i++) {
+					if (this.checkedList.findIndex((item) => {
+							return item == i
+						}) != -1) {
+						arr.push(this.cardList[i])
+					}
+				}
+				console.log(arr, 111)
+				uni.setStorageSync('checkedList', JSON.stringify(arr));
+				this.popupshow = true
+			},
+			imageOCR() {
+				console.log(this.cardList, this.checkedList)
+				if (this.checkedList.length == 0) {
+					uni.showToast({
+						icon: "none",
+						title: '请勾选想要识别的证件!',
+						duration: 2000
+					});
+					return
+				}
+				if (this.checkedList.length > 1) {
+					uni.showToast({
+						icon: "none",
+						title: '一次只能勾选一张证件',
+						duration: 3000
+					});
+					return
+				}
+				this.show = true
+			},
+			credentialscancel() {
+				this.credentialsShow = false
+				this.pickerConfirm({
+					value: [this.shibie]
+				})
+			},
+			credentialsConfirm() {
+				var type = '',
+					type1 = ''
+				if (this.shibie == '识别身份证号') {
+					this.shibieList.personNo = this.credentials.recPersonNo
+				} else if (this.shibie == '识别银行卡号') {
+					this.shibieList.bankNo = this.credentials.bankNo
+				}
+				// if(this.shibie=='识别身份证号'){
+				// 	type='admin.unimall.certificateManagementInfo'
+				// 	type1='personShibie'
+				// }else if(this.shibie=='识别银行卡号'){
+				// 	type='admin.unimall.certificateManagementInfo'
+				// 	type1='bankShibie'
+				// }
+
+				this.$request.baseRequest('admin.unimall.certificateManagementInfo', 'update', {
+					certificateManagementInfo: JSON.stringify(this.shibieList)
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '编辑成功!',
+						duration: 2000
+					});
+					this.credentialsShow = false
+					this.checkedList = []
+					this.mescroll.resetUpScroll()
+				})
+			},
+			confirm() {
+				uni.navigateBack()
+			},
+			cancel() {
+				this.modalstatusshow = false
+			},
+			leftClick() {
+				if (this.cardData.certificateImage) {
+					console.log(22222)
+					this.modalstatusshow = true
+				} else {
+					uni.navigateBack()
+				}
+			},
+			del(item) {
+				this.modalshow = true
+				this.id = item.id
+			},
+			addclick() {
+				this.addstatus = true
+			},
+			add() {
+				if (!this.cardData.certificateImage) {
+					uni.showToast({
+						icon: "none",
+						title: "请上传证件照片",
+						duration: 2000
+					});
+					return
+				}
+				uni.showLoading({
+					title: '数据加载中'
+				})
+				this.$request.baseRequest('admin.unimall.certificateManagementInfo', 'add', {
+					certificateManagementInfo: JSON.stringify(this.cardData)
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					// if (res.errno == 200) {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "success",
+						title: '提交成功!',
+						duration: 2000
+					});
+					this.fileList1 = []
+					this.addstatus = false
+					this.cardData = {
+						commonId: uni.getStorageSync("userInfo").id
+					}
+					this.mescroll.resetUpScroll()
+
+					// }
+				})
+
+			},
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+				this.cardData.certificateImage = this[`fileList${event.name}`].toString()
+			},
+			// 新增图片
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				// console.log(event,111111,fileListLen)
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					this.cardData.certificateImage = result
+					this[`fileList${event.name}`][fileListLen] = {}
+					let item = this[`fileList${event.name}`][fileListLen]
+					console.log(item)
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					this.checkedList = []
+				}
+				console.log(this[`fileList${event.name}`])
+			},
+			uploadFilePromise(url) {
+				console.log(url)
+				return new Promise((resolve, reject) => {
+					uploadImage(url, 'cardImages/',
+						result => {
+							console.log(result, 22222)
+
+							resolve(result)
+						}
+					)
+				})
+			},
+			mescrollInit() {
+
+			},
+			downCallback() {
+				var that = this
+				this.$nextTick(() => {
+					// mescroll.endSuccess(data.result);
+					that.mescroll.resetUpScroll()
+				});
+
+			},
+			upCallback(page) {
+				var that = this
+				uni.showLoading({
+					title: '数据加载中'
+				})
+				this.$request.baseRequest('admin.unimall.certificateManagementInfo', 'list', {
+					page: page.num,
+					limit: page.size,
+					commonId: uni.getStorageSync("userInfo").id
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					this.mescroll.endBySize(curPageLen, totalPage)
+				}).then(res => {
+					console.log(res)
+					if (page.num == 1) this.cardList = [];
+					let curPageLen = res.data.items.length;
+					let totalPage = res.data.total;
+					if (res.data.items.length > 0) {
+						for (var i = 0; i < res.data.items.length; i++) {
+							res.data.items[i].editstatus = false
+							res.data.items[i].status = false
+							if (res.data.items[i].personNo) res.data.items[i].personNo1 = '****' + (res.data.items[i]
+								.personNo.substring(res.data.items[i].personNo.length - 4))
+							if (res.data.items[i].bankNo) res.data.items[i].bankNo1 = '****' + (res.data.items[i]
+								.bankNo.substring(res.data.items[i].bankNo.length - 4))
+						}
+					}
+					this.cardList = this.cardList.concat(res.data.items)
+					this.cardData.certificateName = '证件' + '-' + (this.cardList.length + 1)
+					this.$nextTick(() => {
+						console.log(that)
+						// mescroll.endSuccess(data.result);
+						that.mescroll.endBySize(curPageLen, totalPage)
+					});
+
+					// if (res.errno == 200) {
+					uni.hideLoading()
+
+					// }
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	button::after {
+		border: initial;
+	}
+
+	.share {
+		width: 100%;
+		height: 100%;
+	}
+
+	.share-box {
+		width: 100%;
+		height: 100%;
+		position: fixed;
+		top: 0rpx;
+		left: 0rpx;
+		bottom: 0rpx;
+		right: 0rpx;
+		background-color: rgba(0, 0, 0, 0.4);
+		transition: .3s;
+		z-index: 999;
+	}
+
+	.block>button {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		background-color: white;
+		border-style: none;
+		width: 300rpx;
+		height: 180rpx;
+		// outline:none;
+		// opacity: 0;
+	}
+
+	// 进入分享动画
+	.share-show {
+		transition: all 0.3s ease;
+		transform: translateY(0%) !important;
+	}
+
+	// 离开分享动画
+	.share-item {
+
+		.share-to {
+			width: 100%;
+			height: 3rem;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			&::after {
+				content: '';
+				width: 240rpx;
+				height: 0rpx;
+				border-top: 1px solid #E4E7ED;
+				-webkit-transform: scaleY(0.5);
+				transform: scaleY(0.5);
+				margin-left: 30rpx;
+			}
+
+			&::before {
+				content: '';
+				width: 240rpx;
+				height: 0rpx;
+				border-top: 1px solid #E4E7ED;
+				-webkit-transform: scaleY(0.5);
+				transform: scaleY(0.5);
+				margin-right: 30rpx;
+			}
+		}
+
+		.content {
+			width: 100%;
+			height: auto;
+			display: flex;
+			flex-wrap: wrap;
+
+			.block {
+				width: 50%;
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+				height: 180rpx;
+
+				image {
+					width: 80rpx;
+					height: 80rpx;
+				}
+
+				text {
+					margin-top: 16rpx;
+					font-size: 28rpx;
+					color: #606266;
+				}
+			}
+		}
+
+		.cancel {
+			width: 100%;
+			height: 3rem;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			border-top: 1rpx solid #E4E7ED;
+		}
+	}
+
+	.content1 {
+
+		background-color: #112253;
+		padding: 20rpx;
+		box-sizing: border-box;
+		border-radius: 0px 0px 20rpx 20rpx;
+
+		.button {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			background: #fff;
+			color: #333333;
+			border-radius: 20rpx;
+			padding: 0 24rpx;
+			height: 88rpx;
+			width: calc(33% - 60rpx);
+			font-size: 32rpx;
+		}
+
+		.btn-img {
+			width: 28rpx;
+			margin-right: 18rpx;
+			height: auto;
+		}
+	}
+
+	.content2 {
+		padding: 20rpx;
+
+		.bgc {
+			background: #fff;
+			width: calc(100vw - 40rpx);
+			height: 380rpx;
+			position: relative;
+			border-radius: 30rpx;
+
+			.circle {
+				position: absolute;
+				top: 50%;
+				left: 50%;
+				transform: translateX(-50%) translateY(-50%);
+				text-align: center;
+			}
+		}
+
+		.submit {
+			padding: 8rpx 20rpx;
+			text-align: center;
+			background: #112253;
+			border-radius: 10rpx;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+			margin-left: 20rpx;
+		}
+	}
+
+	.content3 {
+		.row {
+			padding: 20rpx;
+			box-sizing: border-box;
+
+			.name-text {
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #1A1A1A;
+			}
+		}
+
+		.edit {
+			padding: 10rpx 14rpx;
+			text-align: center;
+			background: rgba(17, 34, 83, 0.1);
+			border-radius: 10rpx;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+		}
+
+		.finished {
+			padding: 10rpx 14rpx;
+			text-align: center;
+			background: #112253;
+			border-radius: 10rpx;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+		}
+
+		.row2 {
+			display: flex;
+			justify-content: center;
+			position: relative;
+
+			.img {
+				border-radius: 20rpx;
+				height: 380rpx;
+			}
+
+			.right {
+				position: absolute;
+				right: 0;
+				height: 100%;
+				right: 10px;
+
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				align-items: center;
+				padding: 10px 5px;
+				box-sizing: border-box;
+			}
+
+			/deep/.u-checkbox__icon-wrap {
+				margin-right: 0 !important;
+			}
+		}
+	}
+
+	.add-image {
+		background-color: #fff;
+		margin-top: 20rpx;
+		border-radius: 20rpx;
+	}
+
+	.share-content {
+		display: flex;
+		padding: 20rpx;
+		justify-content: center;
+		font-size: 24rpx;
+
+		button {
+			background: transparent;
+			line-height: 1.5;
+		}
+
+		button:after {
+			border: none;
+		}
+	}
+
+	.icon-pengyouquan,
+	.icon-weixin {
+		font-size: 50px;
+		color: #33CC00;
+	}
+
+	/deep/.u-upload {
+
+		.u-upload__deletable {
+			height: 40rpx;
+			width: 40rpx;
+			line-height: 40rpx;
+		}
+
+		.u-upload__deletable__icon {
+			top: 8rpx;
+		}
+
+		.uicon-close {
+			font-size: 20px !important;
+		}
+	}
+</style>

+ 475 - 0
xiaochengxu/pageA/mySet/myHome.vue

@@ -0,0 +1,475 @@
+<template>
+	<view class="content">
+		<u-navbar leftIconColor='#fff' bgColor='#112253' titleStyle ='color:#fff'  placeholder title="我的主页" @leftClick="leftClick">
+		</u-navbar>
+		<u-loading-page loading-mode='spinner' image="/static/imgs/logo.png" iconSize='60' :loading='loading'></u-loading-page>
+		<view v-if='!loading'>
+			<view v-if='!editstatus&&fileList.length>0' class="swiper-wrap">
+			<u-swiper :list="fileList" 
+			autoplay
+			imgMode='aspectFill'
+			height='260'
+			:circular="true"
+		    @change="e => current = e.current" @click="click">
+				<view slot="indicator" class="indicator">
+					<view
+			            class="indicator__dot"
+			            v-for="(item, index) in fileList"
+			            :key="index"
+			            :class="[index === current && 'indicator__dot--active']">
+			        </view>
+				</view>
+			</u-swiper>
+		</view>
+		<!-- <u-skeleton
+			    rows="3"
+			    title
+				loading
+		></u-skeleton> -->
+		<view class="top" v-else>
+			
+		</view>
+		<view class="company-title row flex flex-between line" >
+			<view class='title' v-if='!editstatus'>{{companyData.companyName}}</view>
+		</view>
+		<view class="content1" :class="editstatus?'content1-edit':''">
+			<view v-if='editstatus' class="row flex flex-between align-item-center line" >
+				<view class='input-title'>公司/机构名称</view>
+				<u--input v-model="companyData.companyName"  placeholder="请输入公司名称" border="none" inputAlign='right'></u--input>
+			</view>
+			<view class="intro top-m">
+				<view v-if='editstatus' class="row">公司/机构简介</view>
+				<view v-else class="title">基本信息</view>
+				<u--textarea v-if='editstatus' v-model="companyData.companyIntroduction" count placeholder="请输入公司/机构简介,不超过1000个字" maxlength="1000"></u--textarea>
+				
+				<view class='content' v-else>{{companyData.companyIntroduction}}</view>
+			</view>
+			<view class="scope top-m">
+				<view v-if='editstatus' class="row">业务范围</view>
+				<view v-else class="title">业务范围</view>
+				<u--textarea v-if='editstatus' v-model="companyData.scopeOfBusiness" count placeholder="输入业务范围,不超过500个字" maxlength="500"></u--textarea>
+				<view class='content' v-else>{{companyData.scopeOfBusiness}}</view>
+			</view>
+			<view class='compInformation' v-if='!editstatus'>
+				<view v-if="companyData.companyAddress" class="row flex top-m align-item-center">
+					<view class='image-wrap'>
+						<image style='width:24rpx;height:31rpx;'  src="../../static/imgs/mySet/home/address.png" mode=""></image>
+					</view>
+					<view>地址:{{companyData.companyAddress}}</view>
+				</view>
+				<view v-if="companyData.phone" class="row flex top-m align-item-center">
+					<view class='image-wrap'>
+						<image style='width:27rpx;height:28rpx;' src="../../static/imgs/mySet/home/phone.png" mode=""></image>
+					</view>
+					<view>电话:{{companyData.phone}}</view>
+				</view>
+				<view v-if="companyData.portraiture" class="row flex top-m align-item-center">
+					<view class='image-wrap'>
+						<image style='width:27rpx;height:28rpx;' src="../../static/imgs/mySet/home/portraiture.png" mode=""></image>
+					</view>
+					<view>座机:{{companyData.portraiture}}</view>
+				</view>
+				<view v-if="companyData.postbox" class="row flex top-m align-item-center">
+					<view class='image-wrap'>
+						<image style='width:29rpx;height:25rpx;' src="../../static/imgs/mySet/home/postbox.png" mode=""></image>
+					</view>
+					<view>邮箱:{{companyData.postbox}}</view>
+				</view>
+			</view>
+			
+			<view v-if='editstatus' class="row flex flex-between align-item-center line top-m">
+				<view class='input-title'>公司地址</view>
+				<u--input v-model="companyData.companyAddress" placeholder="输入地址" border="none" inputAlign='right'></u--input>
+			</view>
+				
+			<view v-if='editstatus' class="row flex flex-between align-item-center line top-m">
+				<view class='input-title'>联系电话</view>
+				<u--input v-model="companyData.phone" placeholder="输入联系电话" maxlength='15' border="none" inputAlign='right'></u--input>
+			</view>
+				
+			<view v-if='editstatus' class="row flex flex-between align-item-center line top-m">
+				<view  class='input-title'>传真</view>
+				<u--input v-model="companyData.portraiture" placeholder="输入传真号" border="none" inputAlign='right'></u--input>
+			</view>
+				
+			<view v-if='editstatus' class="row flex flex-between align-item-center line top-m">
+				<view class='input-title'>邮箱</view>
+				<u--input v-if='editstatus' v-model="companyData.postbox" placeholder="输入邮箱" border="none" inputAlign='right'></u--input>
+			</view>
+			
+			<view v-if='editstatus'>
+				<view class="qyfc">企业风采</view>
+				<!-- <image v-for='item in fileList' :src="item.url" mode=""></image> -->
+				<u-upload
+						@afterRead="afterRead"
+						:fileList="fileList1"
+						@delete="deletePic"
+						name="1"
+						multiple
+						:maxCount="10"
+					>
+					</u-upload>
+			</view>
+		</view>	
+		</view>
+		
+	<view class="footer">
+		<button  v-if='editstatus' @click='$u.debounce(buttonsubmit, 500)' class='button' type="default">提交</button>
+		<button v-if='!editstatus' class='button' type="default" @click='$u.debounce(edit, 500)'>编辑</button>
+	</view>
+	
+		
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	import uploadImage from '@/components/ossutil/uploadFile.js'; 
+	export default {
+		data() {
+			return {
+				companyData:{
+					commonId:'',
+					companyIntroduction:'',
+					scopeOfBusiness:''
+				},
+				userInfo:{},
+				fileList:[],
+				fileList1:[],
+				editstatus:false,
+				id:'',
+				current:0,
+				loading:true,
+			}
+		},
+		onLoad(options) {
+			this.id=options.id
+			uni.showLoading({
+					title: '数据加载中'
+				})
+				this.getList()
+		},
+		onShow() {
+				this.userInfo = uni.getStorageSync("userInfo")
+				this.companyData.commonId=uni.getStorageSync("userInfo").id
+				console.log(1111111111)
+				
+			
+			// this.getList()
+			
+		},
+		onUnload(){
+			this.id=''
+		},
+		methods: {
+			leftClick() {
+				console.log(11111111)
+					uni.switchTab({url:'/pages/mySet/mySet'})
+			},
+			getList(){
+				var that=this
+				var data={}
+				var type=''
+				if(this.id){
+					data={
+						id:this.id,
+					}
+					type='get'
+				}else{
+					data={
+						page:1,
+						limit:10,
+						commonId:uni.getStorageSync("userInfo").id
+					}
+					type='list'
+				}
+				this.$request.baseRequest('admin.unimall.personalHomepageInfo', type,data, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+				}).then(res => {
+					console.log(res)
+					if(type=='list'){
+						if(res.data.items.length>0){
+							this.companyData=res.data.items[0]
+							if(res.data.items[0].addressUrl){
+								var arr=res.data.items[0].addressUrl.split(',')
+								this.fileList1=[]
+								for(var i=0;i<arr.length;i++){
+									if(arr[i]){
+										this.fileList1.push({url:arr[i]})
+									}
+								}
+								this.fileList=arr
+							}
+							console.log(this.fileList1)
+							this.editstatus=false
+						}else{
+							this.editstatus=true
+						}
+					}else{
+						if(res.data){
+							this.companyData=res.data
+							if(res.data.addressUrl){
+								var arr=res.data.addressUrl.split(',')
+								this.fileList1=[]
+								for(var i=0;i<arr.length;i++){
+									if(arr[i]){
+										this.fileList1.push({url:arr[i]})
+									}
+								}
+								this.fileList=arr
+							}
+							console.log(this.fileList1)
+							this.editstatus=false
+						}else{
+							this.editstatus=true
+						}
+					}
+					
+					setTimeout(()=>{
+						that.loading=false
+					},1000)
+					
+					// if (res.errno == 200) {
+					uni.hideLoading()
+					
+					// }
+				})
+			},
+			edit(){
+				this.editstatus=true
+			},
+			change(){
+				
+			},
+			click(index){
+				console.log(index)
+				uni.previewImage({
+						current: index,     // 当前显示图片的索引值
+						urls: this.fileList,    // 需要预览的图片列表,photoList要求必须是数组
+						loop:true,          // 是否可循环预览
+					})
+			},
+			buttonsubmit(){
+				uni.showLoading({
+					title: '数据加载中',
+					mask:true
+				})
+				if(this.companyData.id){
+					this.$request.baseRequest('admin.unimall.personalHomepageInfo', 'update',{
+						personalHomepageInfo:JSON.stringify(this.companyData)
+					}, failres => {
+						console.log('res+++++', failres.errmsg)
+						uni.showToast({
+						  icon:"none",
+						  title: failres.errmsg,
+						  duration: 3000
+						});
+
+					}).then(res => {
+						// if (res.errno == 200) {
+						uni.hideLoading()
+						uni.showToast({
+						  icon:"success",
+						  title: '编辑成功!',
+						  duration: 2000
+						});
+
+						this.getList()
+						// }
+					})
+				}else{
+					this.$request.baseRequest('admin.unimall.personalHomepageInfo', 'add',{
+						personalHomepageInfo:JSON.stringify(this.companyData)
+					}, failres => {
+						console.log('res+++++', failres.errmsg)
+						uni.hideLoading()
+						uni.showToast({
+						  icon:"none",
+						  title: failres.errmsg,
+						  duration: 3000
+						});
+					}).then(res => {
+						uni.hideLoading()
+						uni.showToast({
+						  icon:"success",
+						  title: '提交成功!',
+						  duration: 2000
+						});
+						this.getList()
+					})
+				}
+				
+			},
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+				this.companyData.addressUrl =this[`fileList${event.name}`].toString()
+			},
+			// 新增图片
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+				     this[`fileList${event.name}`].push({
+				      ...item,
+				      status: 'uploading',
+				      message: '上传中'
+				     })
+				    })
+				// console.log(event,111111,fileListLen)
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					this.companyData.addressUrl = this.companyData.addressUrl?this.companyData.addressUrl+','+result:result
+					this[`fileList${event.name}`][fileListLen]={}
+					let item = this[`fileList${event.name}`][fileListLen]
+					console.log(item)
+					 this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+					  status: 'success',
+					  message: '',
+					  url: result
+					 }))
+					 fileListLen++
+				}
+				console.log(this[`fileList${event.name}`])
+			},
+			uploadFilePromise(url) {
+				console.log(url)
+				return new Promise((resolve, reject) => {
+					uploadImage(url, 'cardImages/',
+						result => {
+							console.log(result,22222)
+							
+							resolve(result)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	/deep/.u-border {
+		border-color: #E6E6E6!important;
+	}
+	.content{
+		
+	}
+	 .indicator {
+		background:rgba(10, 23, 61, 0.5);
+		padding: 9rpx 5rpx;
+		border-radius: 20rpx;
+	        @include flex(row);
+	        justify-content: center;
+	
+	        &__dot {
+	             height: 6px;
+	             width: 6px;
+	             border-radius: 100px;
+	             background-color: rgba(255, 255, 255, 0.5);
+	             margin: 0 5px;
+	             transition: background-color 0.3s;
+	    
+	            &--active {
+	                 background-color: #ffffff;
+	             }
+	        }
+	}
+
+	.top{
+		width: 100vw;
+		height: 135rpx;
+		background: #112253;
+		border-radius: 0px 0px 20rpx 20rpx;
+	}
+	.content1{
+		.row{
+			padding-bottom: 20rpx;
+		}
+		margin: 0rpx 0 120rpx 0;
+		background-color: #fff;
+		border-radius: 20rpx 20rpx 0 0;
+		padding:10rpx 20rpx;
+		box-sizing: border-box;
+		.row:last-child{
+			padding-bottom: 20rpx;
+		}
+		.line{
+			border-bottom: 1px solid #E6E6E6;
+		}
+		.top-m{
+			margin-top: 20rpx;
+		}
+		.qyfc{
+			margin: 24rpx 0;
+		}
+	}
+	.content1-edit{
+		position: relative;
+		top: -172rpx;
+		margin: 20rpx 20rpx 120rpx 20rpx;
+		border-radius: 20rpx;
+		padding:20rpx;
+	}
+	.footer{
+		position: fixed;
+		bottom: 0rpx;
+		width: calc(100% - 40rpx);
+		padding: 40rpx 20rpx;
+		z-index: 999;
+		background:#fff;
+	}
+	.button{
+		color: #fff;
+		background-color: #112253;
+		border-radius: 20rpx;
+		padding:10rpx;
+		font-size:28rpx;
+	}
+	.company-title{
+		margin:30rpx 20rpx;
+		.button{
+			padding:10rpx 20rpx;
+			width:96rpx;
+		}
+	}
+	.company-title .title{
+		color:#112253;
+		font-size:36rpx;
+		font-weight: bold;
+	}
+	.title{
+		font-size:32rpx;
+		font-weight: bold;
+		color: #1A1A1A;
+		margin:20rpx 0;
+	}
+	.content{
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #666666;
+	}
+	.compInformation{
+		margin:20rpx 0;
+		background:#F7F7F7;
+		color:#112253;
+		font-size: 28rpx;
+		font-weight: 500;
+		padding:10rpx 30rpx;
+		border-radius:20rpx;
+	}
+	.image-wrap{
+		width:50rpx;
+		position:relative;
+		top:2rpx;
+	}
+	.input-title{
+		margin-right:10rpx;
+	}
+</style>

+ 1057 - 0
xiaochengxu/pageA/mySet/myInfo.vue

@@ -0,0 +1,1057 @@
+<template>
+	<view class="content">
+		<u-loading-page loading-mode='spinner' image="/static/imgs/logo.png" iconSize='60'
+			:loading='loading'></u-loading-page>
+		<view v-show='!loading'>
+			<view class="card-list content1">
+				<view class="row" v-for="(item,index) in cardList" :key="index">
+					<view class="title-name">
+						{{item.cardBusiness}}
+					</view>
+					<view class="card-list-item"
+						:style="item.currentBackground?'background:url('+item.currentBackground+');background-size:100% 100%':''">
+						<view class="card-content style1" v-if="item.cuttentTemplate==1">
+							<view class="left">
+								<u--image :showLoading="true"
+									:src="item.headSculpture?item.headSculpture:'/static/imgs/card/defaulthead.png'"
+									width="66px" height="66px" shape="circle"></u--image>
+							</view>
+							<view class="right">
+								<view class="row1">
+									<text class="name">{{item.name}}</text>
+									<text class="post">{{item.post}}</text>
+								</view>
+								<view class="row2">
+									{{item.companyName}}
+								</view>
+								<view class="row3 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/address'+item.icon+'.png'"
+										width="13px" height="16px"></u--image>
+									<view class='icon-text'>{{ item.province }}{{ item.city }}{{ item.area }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.icon+'.png'"
+										width="12px" height="13px"></u--image>
+									<view class='icon-text'>{{ item.phone }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.icon+'.png'"
+										width="10px" height="12px"></u--image>
+									<view class='icon-text'>{{item.remark?item.remark:'--'}}</view>
+								</view>
+								<!-- <view class="">
+									备注
+								</view> -->
+							</view>
+						</view>
+						<view class="card-content style1 flex-between" v-if="item.cuttentTemplate==2">
+							<view class="right">
+								<view class="row1">
+									<text class="name">{{item.name}}</text>
+									<text class="post">{{item.post}}</text>
+								</view>
+								<view class="row2">
+									{{item.companyName}}
+								</view>
+								<view class="row3 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/address'+item.icon+'.png'"
+										width="13px" height="16px"></u--image>
+									<view class='icon-text'>{{ item.province }}{{ item.city }}{{ item.area }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.icon+'.png'"
+										width="12px" height="13px"></u--image>
+									<view class='icon-text'>{{ item.phone }}</view>
+								</view>
+								<view class="row4 flex">
+									<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.icon+'.png'"
+										width="10px" height="12px"></u--image>
+									<view class='icon-text'>{{item.remark?item.remark:'--'}}</view>
+								</view>
+								<!-- <view class="">
+									备注
+								</view> -->
+							</view>
+							<view class="left">
+								<u--image :showLoading="true" :src="item.headSculpture" width="66px" height="66px"
+									shape="circle" v-if="item.headSculpture"></u--image>
+								<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+									height="66px" shape="circle" v-else></u--image>
+							</view>
+						</view>
+						<view class="card-content style2" v-if="item.cuttentTemplate==3">
+							<view class="top">
+								<u--image :showLoading="true" :src="item.headSculpture" width="66px" height="66px"
+									shape="circle" v-if="item.headSculpture"></u--image>
+								<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+									height="66px" shape="circle" v-else></u--image>
+							</view>
+							<view class="bottom flex">
+								<view class="left">
+									<view class="row1">
+										<text class="name">{{item.name}}</text>
+										<text class="post">{{item.post}}</text>
+									</view>
+									<view class="row2">
+										{{item.companyName}}
+									</view>
+								</view>
+								<view class="right">
+									<view class="row3 flex">
+										<u--image :showLoading="true"
+											:src="'/static/imgs/card/address'+item.icon+'.png'" width="13px"
+											height="16px"></u--image>
+										<view class='icon-text'>{{ item.province }}{{ item.city }}{{ item.area }}</view>
+									</view>
+									<view class="row4 flex">
+										<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.icon+'.png'"
+											width="12px" height="13px"></u--image>
+										<view class='icon-text'>{{ item.phone }}</view>
+									</view>
+									<view class="row4 flex">
+										<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.icon+'.png'"
+											width="10px" height="12px"></u--image>
+										<view class='icon-text'>{{item.remark?item.remark:'--'}}</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="card-content style2" v-if="item.cuttentTemplate==4">
+							<view class="top">
+								<view class="row1">
+									<text class="name">{{item.name}}</text>
+									<text class="post">{{item.post}}</text>
+								</view>
+								<view class="row2">
+									{{item.companyName}}
+								</view>
+
+							</view>
+							<view class="bottom flex">
+								<view class="left">
+									<u--image :showLoading="true" :src="item.headSculpture" width="66px" height="66px"
+										shape="circle" v-if="item.headSculpture"></u--image>
+									<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px"
+										height="66px" shape="circle" v-else></u--image>
+								</view>
+								<view class="right">
+									<view class="row3 flex">
+										<u--image :showLoading="true"
+											:src="'/static/imgs/card/address'+item.icon+'.png'" width="13px"
+											height="16px"></u--image>
+										<view class='icon-text'>{{ item.province }}{{ item.city }}{{ item.area }}</view>
+									</view>
+									<view class="row4 flex">
+										<u--image :showLoading="true" :src="'/static/imgs/card/phone'+item.icon+'.png'"
+											width="12px" height="13px"></u--image>
+										<view class='icon-text'>{{ item.phone }}</view>
+									</view>
+									<view class="row4 flex">
+										<u--image :showLoading="true" :src="'/static/imgs/card/remark'+item.icon+'.png'"
+											width="10px" height="12px"></u--image>
+										<view class='icon-text'>{{item.remark?item.remark:'--'}}</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="car-bottom flex">
+							<view class="left">
+								<image src="../../static/imgs/card/home.png" mode="widthFix"
+									style="width: 32rpx;height: auto;" @click="toHome(item)"></image>
+								<image src="../../static/imgs/card/share.png" mode="widthFix"
+									style="width: 35rpx;height: auto;" @click="share(item)"></image>
+								<image src="../../static/imgs/card/ewm.png" mode="widthFix"
+									style="width: 32rpx;height: auto;" @click="showCode(item)"></image>
+							</view>
+							<view class="right">
+								<text class="text" @click="topMarking(item)">置顶</text>
+								<text class="text" @click="del(item.id)">删除</text>
+								<text class="text" @click="toEditCard(item)">编辑</text>
+							</view>
+							<!-- <u-button text="置顶" @click="topMarking(item)" throttle-time='1000'></u-button> -->
+							<!-- <button @click="$u.debounce(topMarking, 500)">置顶</button> -->
+							<!-- <button @click="$u.debounce(topMarking(item), 500)">置顶</button> -->
+							<!-- <u-button text="删除" @click="del(item.id)" throttle-time='1000'></u-button> -->
+							<!-- <button @click="toEditCard(item)">编辑</button> -->
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="upload flex flex-all-center" @click="addCard">
+				<view class="solids flex flex-all-center">
+					<image src="../../static/imgs/card/add.png" mode="widthFix" style="width: 148rpx;height: auto;">
+					</image>
+					<text class='text'>添加新名片</text>
+				</view>
+			</view>
+		</view>
+
+
+		<u-toast ref="uToast"></u-toast>
+		<u-popup :round='10' :show="isShowDel" @close="isShowDel=false" mode="center">
+			<view class="del-style">
+				<text class="title">删除名片自动退出关联得圈子,确定删除?</text>
+				<view class="">
+					<view @click='radiovalue=1' class="flex align-item-center radio-wrap">
+						<image style='width:13px;height:13px;margin-right:10rpx;'
+							:src="radiovalue==1?'../../static/imgs/mySet/checked.png':'../../static/imgs/mySet/not-checked.png'"
+							mode=""></image>
+						<view class="">仅从自己名片列表删除</view>
+					</view>
+					<view @click='radiovalue=2' class="flex align-item-center radio-wrap">
+						<image style='width:13px;height:13px;margin-right:10rpx;'
+							:src="radiovalue==2?'../../static/imgs/mySet/checked.png':'../../static/imgs/mySet/not-checked.png'"
+							mode=""></image>
+						<view class="">从所有拥有此名片用户列表删除</view>
+					</view>
+				</view>
+				<view class="flex footer">
+					<view class="cancel" @click="isShowDel=false">
+						取消
+					</view>
+					<view class="confirm" @click="delCard">
+						删除
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-popup :show="isShowCode" @close="isShowCode=false" mode="center" :round='10'>
+			<image style='margin:10px;height: auto;' :src="selectCode" mode="widthFix"></image>
+		</u-popup>
+		<u-popup :show="popupshow" :closeOnClickOverlay='true' :overlayOpacity='0.4' @close='handleHiddenShare'
+			:round="10" mode="bottom">
+			<view>
+				<view class="share-content">
+					<view class="block" @click="toUrl()">
+						<button class="moment">
+							<view class="iconfont icon-pengyouquan"></view>
+							<view style="font-size: 26rpx;">分享朋友圈</view>
+						</button>
+					</view>
+					<view class="block">
+						<button class="shareBtn" type="default" data-name="shareBtn" open-type="share">
+							<view class="iconfont icon-weixin"></view>
+							<view style="font-size: 26rpx;">分享微信好友</view>
+						</button>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<!-- 生成图片 -->
+		<poster :data="canvasData" background-color="#FFF" :width='750' :height='420' @on-success="posterSuccess"
+			ref="poster" @on-error="posterError"></poster>
+		<point-share @close='showShare=false' :show='showShare'></point-share>
+	</view>
+</template>
+
+<script>
+	import Poster from '../../components/zhangyuhao-poster/Poster.vue';
+	import PointShare from '../../components/point-share/index.vue';
+	var that;
+	export default {
+		components: {
+			Poster,
+			PointShare
+		},
+		data() {
+			return {
+				isShowCode: false,
+				selectCode: '',
+				id: '',
+				showShare: false,
+				popupshow: false,
+				radiovalue: 1,
+				loading: true,
+				isShowDel: false,
+				cardList: [],
+				canvasData: {},
+				clicknum: 0,
+				poster: ''
+			};
+		},
+		onLoad() {
+			that = this
+
+		},
+		onShow() {
+			console.log(123123)
+			if (uni.getLaunchOptionsSync().scene == 1154) {
+				uni.showToast({
+					title: '请前往小程序查看名片~',
+					icon: 'none',
+					duration: 10000
+				});
+			}
+			this.userInfo = uni.getStorageSync("userInfo")
+			if (uni.getStorageSync("userInfo").phone) {
+				this.init()
+			} else {
+				uni.switchTab({
+					url: '/pages/cardHolder/cardHolder'
+				})
+
+
+			}
+
+		},
+		onShareAppMessage(res) {
+			console.log(res, this.popupshow)
+			let that = this;
+			//生成名片图片
+			let imageUrl = this.poster
+			console.log("imageUrl", imageUrl)
+			if (res.from === 'button') {
+				let path = `/pages/cardHolder/scanCodeAddCard?id=${that.currectData.id}`
+				console.log("分享地址", path)
+				return {
+					title: this.popupshow ? `${that.currectData.name}分享的名片~` : '电子名片',
+					path: path,
+					imageUrl: this.popupshow ? imageUrl : '',
+				};
+			}
+			if (res.from === 'menu') {
+				return {
+					title: '我的名片',
+					path: '/pages/tabBarPro/index/index',
+					imageUrl: this.popupshow ? imageUrl : ''
+				};
+			}
+		},
+		methods: {
+			toUrl() {
+				this.popupshow = false
+				this.showShare = true
+			},
+			handleHiddenShare() {
+				this.popupshow = false
+			},
+			posterError(err) {
+				console.log(err)
+				uni.hideLoading()
+			},
+			posterSuccess(url) {
+				console.log("hahahah", url)
+				// 生成成功,会把临时路径在这里返回
+				this.poster = url;
+				uni.hideLoading()
+				this.popupshow = true
+				console.log(url)
+
+			},
+			showCode(val) {
+				this.selectCode = val.qrCodeMyself
+				this.isShowCode = true
+			},
+			share(item) {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.currectData = item
+				var data = [{
+						type: 'image',
+						path: this.currectData.currentBackground,
+						use: 'bg',
+						x: -10,
+						y: 0,
+						width: 530,
+						height: 325
+					},
+					{
+						type: 'image',
+						path: this.currectData.headSculpture ? this.currectData.headSculpture :
+							'../../static/imgs/card/defaulthead.png',
+						shape: 'circle',
+						use: 'head',
+						imageType: this.currectData.headSculpture ? 'wl' : 'bd',
+						x: 30,
+						y: 30,
+						width: 100,
+						height: 100
+					},
+					{
+						type: 'text',
+						text: this.currectData.name,
+						use: 'name',
+						x: 150,
+						y: 50,
+						size: 24,
+						color: '#000'
+
+					},
+					{
+						type: 'text',
+						text: this.currectData.post,
+						use: 'post',
+						x: 240,
+						y: 55,
+						size: 18,
+						color: '#666666'
+
+					},
+					{
+						type: 'text',
+						text: this.currectData.companyName,
+						use: 'companyName',
+						x: 150,
+						y: 95,
+						size: 18,
+						color: '#000'
+
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/address1.png',
+						use: 'address-icon',
+						x: 145,
+						y: 130,
+						width: 15,
+						height: 20
+					},
+					{
+						type: 'textarea',
+						text: this.currectData.province + this.currectData.city + this.currectData.area + this
+							.currectData.detailedAddress,
+						lineSpace: 1,
+						width: 320,
+						use: 'address',
+						x: 175,
+						y: 135,
+						size: 14,
+						color: '#000'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/phone1.png',
+						use: 'phone-icon',
+						x: 145,
+						y: 163,
+						width: 16,
+						height: 16
+					},
+					{
+						type: 'text',
+						text: this.currectData.phone,
+						use: 'phone',
+						x: 175,
+						y: 167,
+						size: 14,
+						color: '#000'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/remark1.png',
+						use: 'remark-icon',
+						x: 145,
+						y: 197,
+						width: 13,
+						height: 16
+					},
+					{
+						type: 'textarea',
+						text: this.currectData.remark ? this.currectData.remark : '单击添加备注',
+						use: 'remark',
+						lineSpace: 2,
+						width: 200,
+						x: 175,
+						y: 200,
+						size: 13,
+						color: '#000'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/bgc6.png',
+						use: 'bg1',
+						x: 3,
+						y: 243,
+						width: 518,
+						height: 67
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/home.png',
+						use: 'home',
+						x: 30,
+						y: 260,
+						width: 33,
+						height: 33
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/share.png',
+						use: 'share',
+						x: 90,
+						y: 263,
+						width: 33,
+						height: 28
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/ewm.png',
+						use: 'code',
+						x: 150,
+						y: 263,
+						width: 32,
+						height: 32
+					},
+					{
+						type: 'text',
+						text: '置顶',
+						use: 'top',
+						x: 280,
+						y: 265,
+						size: 24,
+						color: '#fff'
+					},
+					{
+						type: 'text',
+						text: '删除',
+						use: 'del',
+						x: 350,
+						y: 265,
+						size: 24,
+						color: '#fff'
+					},
+					{
+						type: 'text',
+						text: '编辑',
+						use: 'edit',
+						x: 420,
+						y: 265,
+						size: 24,
+						color: '#fff'
+					},
+				]
+				console.log(this.currectData.cuttentTemplate, 111111)
+				for (var i = 0; i < data.length; i++) {
+					switch (this.currectData.cuttentTemplate) {
+						case '2':
+							if (data[i].use === 'name' ||
+								data[i].use === 'companyName' ||
+								data[i].use === 'address-icon' ||
+								data[i].use === 'phone-icon' ||
+								data[i].use === 'remark-icon') {
+								data[i].x = 30
+							}
+							if (data[i].use === 'address-icon') {
+								data[i].path = '../../static/imgs/card/address3.png'
+							}
+							if (data[i].use === 'phone-icon') {
+								data[i].path = '../../static/imgs/card/phone3.png'
+							}
+							if (data[i].use === 'remark-icon') {
+								data[i].path = '../../static/imgs/card/remark3.png'
+							}
+							if (data[i].use === 'post') {
+								data[i].x = 100
+							}
+							if (data[i].use === 'address' ||
+								data[i].use === 'phone' ||
+								data[i].use === 'remark') {
+								data[i].x = 60
+							}
+							if (data[i].use == 'head') {
+								data[i].x = 370
+							}
+							break;
+						case '3':
+							if (data[i].use === 'name') {
+								data[i].x = 30
+								data[i].y = 150
+							}
+							if (data[i].use === 'companyName') {
+								data[i].x = 30
+								data[i].y = 180
+							}
+							if (data[i].use === 'post') {
+								data[i].x = 100
+								data[i].y = 153
+							}
+							if (data[i].use === 'address-icon' ||
+								data[i].use === 'phone-icon' ||
+								data[i].use === 'remark-icon') {
+								data[i].x = 170
+							}
+							if (data[i].use === 'address-icon') {
+								data[i].y = 150
+							}
+							if (data[i].use === 'address') {
+								data[i].y = 155;
+								data[i].width = 300
+							}
+							if (data[i].use === 'phone-icon') {
+								data[i].y = 180
+							}
+							if (data[i].use === 'phone') {
+								data[i].y = 183
+							}
+							if (data[i].use === 'remark-icon') {
+								data[i].y = 210
+							}
+							if (data[i].use === 'remark') {
+								data[i].y = 212
+							}
+							if (data[i].use === 'address' ||
+								data[i].use === 'phone' ||
+								data[i].use === 'remark') {
+								data[i].x = 190
+							}
+							break;
+						case '4':
+							if (data[i].use === 'name' ||
+								data[i].use === 'companyName') {
+								data[i].x = 30
+							}
+							if (data[i].use === 'companyName') {
+								data[i].y = 90
+							}
+							if (data[i].use === 'post') {
+								data[i].x = 100
+							}
+							if (data[i].use == 'head') {
+								data[i].x = 25
+								data[i].y = 120
+							}
+							if (data[i].use === 'address-icon') {
+								data[i].path = '../../static/imgs/card/address2.png'
+							}
+							if (data[i].use === 'phone-icon') {
+								data[i].path = '../../static/imgs/card/phone2.png'
+							}
+							if (data[i].use === 'remark-icon') {
+								data[i].path = '../../static/imgs/card/remark2.png'
+							}
+							if (data[i].use === 'address-icon' ||
+								data[i].use === 'phone-icon' ||
+								data[i].use === 'remark-icon') {
+								data[i].x = 170
+							}
+							if (data[i].use === 'address') {
+								data[i].width = 300
+							}
+							if (data[i].use === 'address' ||
+								data[i].use === 'phone' ||
+								data[i].use === 'remark') {
+								data[i].x = 190
+							}
+							break;
+						default:
+					}
+				}
+				this.canvasData = {
+					clicknum: this.clicknum++,
+					list: data,
+					page: 'myInfo'
+				}
+				console.log(1111111)
+			},
+			toHome(item) {
+				uni.navigateTo({
+					url: "/pageA/mySet/myHome?id=" + item.personalHomeId
+				})
+			},
+			radioChange(n) {
+				console.log('radioChange', n);
+			},
+			init() {
+				var that = this
+				this.$request.baseRequest('admin.unimall.cardManagementInfo', 'list', {
+					commonId: this.userInfo.id
+				}, failres => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					this.cardList = res.data.items
+					setTimeout(() => {
+						that.loading = false
+					}, 1500)
+				})
+			},
+			toEditCard(val) {
+				uni.navigateTo({
+					url: "/pageA/mySet/editCard?itemVal=" + JSON.stringify(val)
+				})
+			},
+			delCard() {
+				let _data = {}
+				if (this.radiovalue == 1) {
+					_data = {
+						id: this.id
+					}
+				} else {
+					_data = {
+						id: this.id,
+						deleteCondition: 1
+					}
+				}
+				that.$request.baseRequest('admin.unimall.cardManagementInfo', 'delete', _data, failres => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					this.isShowDel = false
+					uni.showToast({
+						icon: "success",
+						title: '删除成功!',
+						duration: 2000
+					});
+					this.init()
+				})
+			},
+			del(val) {
+				this.id = val
+				this.isShowDel = true
+
+			},
+			addCard() {
+				uni.navigateTo({
+					url: "/pageA/mySet/newCard?cardIndex=" + (this.cardList.length + 1)
+				})
+			},
+			topMarking(val) {
+				that.$request.baseRequest('admin.unimall.cardManagementInfo', 'top', {
+					cardManagementInfo: JSON.stringify({
+						id: val.id
+					})
+				}, failres => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					uni.showToast({
+						icon: "success",
+						title: '置顶成功!',
+						duration: 2000
+					})
+					this.init()
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		padding-bottom: 40rpx;
+	}
+
+	.card-content {
+		width: 100%;
+	}
+
+	.content1 {
+		.icon-text {
+			margin-left: 10rpx;
+		}
+
+		.style1 {
+			display: flex;
+			margin-bottom: 70rpx;
+			padding: 30rpx;
+			box-sizing: border-box;
+
+			.left {
+				width: 132rpx;
+				height: 132rpx;
+				border-radius: 50%;
+			}
+
+			.right {
+				margin-left: 40rpx;
+
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+
+				.row3,
+				.row4 {
+					margin-top: 30rpx;
+					font-size: 24rpx;
+					font-weight: 500;
+					color: #323333;
+
+				}
+			}
+		}
+
+		.style2 {
+			padding: 30rpx;
+			box-sizing: border-box;
+			margin-bottom: 70rpx;
+
+			.top {
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+
+			}
+
+			.bottom {
+				margin-top: 20rpx;
+
+				.left {
+					margin-right: 40rpx;
+
+					.row1 {
+						.name {
+							font-size: 38rpx;
+							font-weight: bold;
+							color: #040000;
+							margin-right: 20rpx;
+						}
+
+						.post {
+							font-size: 26rpx;
+							font-weight: 500;
+							color: #666666;
+						}
+					}
+
+					.row2 {
+						margin-top: 20rpx;
+						font-size: 24rpx;
+						font-weight: bold;
+						color: #323333;
+					}
+				}
+
+				.right {
+
+					.row1,
+					.row2 {
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+					}
+
+					.row2 {
+						margin-top: 20rpx;
+					}
+
+					.row3,
+					.row4 {
+						margin-top: 30rpx;
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+
+					}
+				}
+			}
+
+		}
+	}
+
+	.card-list {
+		padding: 0 20rpx;
+
+		.title-name {
+			font-weight: bold;
+			color: #19191A;
+			margin: 20rpx 0;
+		}
+	}
+
+	.card-list-item {
+		width: calc(100% + 40rpx);
+		left: -20rpx;
+		position: relative;
+		border-radius: 30rpx;
+		padding: 40rpx;
+		box-sizing: border-box;
+
+		.car-bottom {
+			position: absolute;
+			bottom: 27rpx;
+			left: 20rpx;
+			width: calc(100% - 40rpx);
+			background: url("../../static/imgs/card/bgc6.png") no-repeat center;
+			background-size: cover;
+			border-radius: 0 0 20rpx 20rpx;
+
+			.left {
+				position: absolute;
+				padding: 20rpx 0;
+				width: 270rpx;
+				box-sizing: border-box;
+				display: flex;
+				justify-content: space-evenly;
+				// background: url("../../static/imgs/card/bgc1.png") no-repeat center;
+				// background-size: 100% 100%;
+			}
+
+			.right {
+				font-size: 25rpx;
+				padding: 20rpx 0;
+				position: relative;
+				right: -278rpx;
+				width: calc(100vw - 320rpx);
+				box-sizing: border-box;
+				display: flex;
+				justify-content: space-evenly;
+				// background: url("../../static/imgs/card/bgc2.png") no-repeat center;
+				// background-size: 100% 100%;
+
+				.text {
+					color: #fff;
+				}
+			}
+		}
+
+		.left {
+			width: 30%;
+
+			.top {
+
+				margin-bottom: 20rpx;
+			}
+
+			.img {
+				width: 80%;
+			}
+
+			.bottom {}
+		}
+
+		.right {
+			.row1 {
+				.line {
+					width: 1px;
+					height: 20px;
+					margin: 0 20rpx;
+					background: black;
+				}
+			}
+		}
+	}
+
+	.upload {
+		background-color: #fff;
+		margin: 20rpx;
+		border-radius: 20rpx;
+		padding: 76rpx;
+
+		.solids {
+			flex-direction: column;
+
+			.text {
+				margin-top: 20rpx;
+				font-size: 26rpx;
+				font-weight: 500;
+				color: #666666;
+			}
+		}
+
+	}
+
+	.share-content {
+		display: flex;
+		padding: 20rpx;
+		justify-content: center;
+		font-size: 24rpx;
+
+		button {
+			background: transparent;
+			line-height: 1.5;
+		}
+
+		button:after {
+			border: none;
+		}
+	}
+
+	.icon-pengyouquan,
+	.icon-weixin {
+		font-size: 50px;
+		color: #33CC00;
+	}
+
+	.del-style {
+		padding: 40rpx 40rpx 160rpx 40rpx;
+		font-size: 32rpx;
+		position: relative;
+
+		.title {
+			color: #1A1A1A;
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+
+		.radio-wrap {
+			padding: 23rpx;
+			border-radius: 10rpx;
+			background: #F5F5F5;
+			margin: 20rpx 0;
+		}
+
+		.cancel,
+		.confirm {
+			width: 50%;
+			text-align: center;
+			padding: 35rpx 0;
+			border-top: 1px solid #ccc;
+			font-size: 36rpx;
+		}
+
+		.footer {
+			position: absolute;
+			bottom: 0px;
+			width: 100%;
+			left: 0;
+		}
+
+		.cancel {
+			border-right: 1px solid #ccc;
+		}
+
+		.confirm {
+			color: #4977FC;
+		}
+	}
+</style> -->

+ 769 - 0
xiaochengxu/pageA/mySet/newCard.vue

@@ -0,0 +1,769 @@
+<template>
+	<view class="content">
+		<view class="content1 relative">
+			<view class="relative">
+				<image :src="imgList[selectIndex].dictLabel" mode="widthFix" style="width: 100%;height: auto;"></image>
+			</view>
+			<view class="absolute card-content style1" v-if="imgList[layoutSelectIndex].dictSort==1">
+				<view class="left">
+					<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+						shape="circle" v-if="cardInfo.headSculpture"></u--image>
+					<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+						shape="circle" v-else></u--image>
+				</view>
+				<view class="right">
+					<view class="row1">
+						<text class="name">{{cardInfo.name}}</text>
+						<text class="post">{{cardInfo.post}}</text>
+					</view>
+					<view class="row2">
+						{{cardInfo.companyName}}
+					</view>
+					<view class="row3 flex">
+						<u--image
+							:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+							height="16px"></u--image>
+						<view class='icon-text'>
+							{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+							height="13px"></u--image>
+						<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+							height="12px"></u--image>
+						<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+					</view>
+				</view>
+			</view>
+			<view class="absolute card-content style1 flex-between" v-if="imgList[layoutSelectIndex].dictSort==2">
+				<view class="right">
+					<view class="row1">
+						<text class="name">{{cardInfo.name}}</text>
+						<text class="post">{{cardInfo.post}}</text>
+					</view>
+					<view class="row2">
+						{{cardInfo.companyName}}
+					</view>
+					<view class="row3 flex">
+						<u--image
+							:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+							height="16px"></u--image>
+						<view class='icon-text'>
+							{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+							height="13px"></u--image>
+						<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+					</view>
+					<view class="row4 flex">
+						<u--image
+							:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+							height="12px"></u--image>
+						<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+					</view>
+				</view>
+				<view class="left">
+					<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+						shape="circle" v-if="cardInfo.headSculpture"></u--image>
+					<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+						shape="circle" v-else></u--image>
+				</view>
+			</view>
+			<view class="absolute card-content style2" v-if="imgList[layoutSelectIndex].dictSort==3">
+				<view class="top">
+					<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+						shape="circle" v-if="cardInfo.headSculpture"></u--image>
+					<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+						shape="circle" v-else></u--image>
+				</view>
+				<view class="bottom flex">
+					<view class="left">
+						<view class="row1">
+							<text class="name">{{cardInfo.name}}</text>
+							<text class="post">{{cardInfo.post}}</text>
+						</view>
+						<view class="row2">
+							{{cardInfo.companyName}}
+						</view>
+					</view>
+					<view class="right">
+						<view class="row1 flex">
+							<u--image
+								:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+								height="16px"></u--image>
+							<view class='icon-text'>
+								{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}
+							</view>
+						</view>
+						<view class="row2 flex">
+							<u--image
+								:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+								height="13px"></u--image>
+							<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+						</view>
+						<view class="row4 flex">
+							<u--image
+								:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+								height="12px"></u--image>
+							<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="absolute card-content style2" v-if="imgList[layoutSelectIndex].dictSort==4">
+				<view class="top">
+					<view class="row1">
+						<text class="name">{{cardInfo.name}}</text>
+						<text class="post">{{cardInfo.post}}</text>
+					</view>
+					<view class="row2">
+						{{cardInfo.companyName}}
+					</view>
+
+				</view>
+				<view class="bottom flex">
+					<view class="left">
+						<u--image :showLoading="true" :src="cardInfo.headSculpture" width="66px" height="66px"
+							shape="circle" v-if="cardInfo.headSculpture"></u--image>
+						<u--image :showLoading="true" src="/static/imgs/card/defaulthead.png" width="66px" height="66px"
+							shape="circle" v-else></u--image>
+					</view>
+					<view class="right">
+						<view class="row1 flex">
+							<u--image
+								:src="'/static/imgs/card/address'+colorList[colorSelectIndex].index+'.png'" width="13px"
+								height="16px"></u--image>
+							<view class='icon-text'>
+								{{ cardInfo.province?cardInfo.province:'-' }}{{ cardInfo.city }}{{ cardInfo.area }}
+							</view>
+						</view>
+						<view class="row2 flex">
+							<u--image
+								:src="'/static/imgs/card/phone'+colorList[colorSelectIndex].index+'.png'" width="12px"
+								height="13px"></u--image>
+							<view class='icon-text'>{{ cardInfo.phone?cardInfo.phone:'-' }}</view>
+						</view>
+						<view class="row4 flex">
+							<u--image
+								:src="'/static/imgs/card/remark'+colorList[colorSelectIndex].index+'.png'" width="10px"
+								height="12px"></u--image>
+							<view class='icon-text'>{{cardInfo.remark?cardInfo.remark:'-'}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="flex">
+			<view class="change-template" :class="selectConfig==1?'active-style':''" @click="changeTab(1)">
+				背景配置
+			</view>
+			<view class="change-template" :class="selectConfig==2?'active-style':''" @click="changeTab(2)">
+				图标颜色
+			</view>
+			<view class="change-template" :class="selectConfig==3?'active-style':''" @click="changeTab(3)">
+				布局配置
+			</view>
+		</view>
+
+		<view class="img-list" v-if="selectConfig==1">
+			<view class="img-item" v-for="(item,index) in imgList" @click="changeTemplate(index)">
+				<image :src="item.dictValue" class="img-item" :key="index"></image>
+				<image src="@/static/imgs/card/dh.png" class="dh" v-if="selectIndex==index"></image>
+			</view>
+		</view>
+		<view class="font-color flex" v-if="selectConfig==2">
+			<view v-for="(item,index) in colorList"
+				:style="'background:'+item.color+';width:100rpx;height:100rpx;border-radius:50%;margin-right:20rpx'"
+				class="relative" @click="changeIconColor(index)">
+				<image src="@/static/imgs/card/dh.png" class="icon-dh" v-if="colorSelectIndex==index"></image>
+			</view>
+		</view>
+		<view class="font-color img-list" v-if="selectConfig==3">
+			<view class="img-item" v-for="(item,index) in layoutImgList" @click="layoutChangeTemplate(index)">
+				<image :src="item.dictValue" class="img-item" :key="index"></image>
+				<image src="@/static/imgs/card/dh.png" class="dh" v-if="layoutSelectIndex==index"></image>
+			</view>
+		</view>
+		<view class="change-template">
+			名片信息
+		</view>
+
+		<view class="content2">
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					名片标识
+				</view>
+				<u--input v-model="cardInfo.cardBusiness" border="none" placeholder="输入名片标识"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					姓名
+				</view>
+				<u--input v-model="cardInfo.name" border="none" placeholder="输入姓名" inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					职务
+				</view>
+				<u--input v-model="cardInfo.post" border="none" placeholder="输入职务,不超过8个字符"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					公司/机构名称
+				</view>
+				<u--input v-model="cardInfo.companyName" border="none" placeholder="输入公司/机构名称"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row" @click="placeSelect();hideKeyboard()">
+				<view class="left">
+					地址
+				</view>
+				<view v-if="cardInfo.province">{{ cardInfo.province }}{{ cardInfo.city }}{{ cardInfo.area }}</view>
+				<view class="" v-else>
+					<text>选择地址 </text>
+					<image src="@/static/imgs/card/yjt.png" mode=""
+						style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+				</view>
+
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					详细地址
+				</view>
+				<u--input v-model="cardInfo.detailedAddress" border="none" placeholder="输入详细地址,不超过15个字"
+					inputAlign='right'></u--input>
+			</view>
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					联系电话
+				</view>
+				<u--input v-model="cardInfo.phone" maxlength='15' border="none" placeholder="输入联系电话"
+					inputAlign='right'></u--input>
+			</view>
+			<!-- 		<u-form-item label="地址" prop="userInfo.name" borderBottom>
+						<view @click="showPicker">选择地址</view>
+						<view>{{ province }}{{ city }}{{ area }}</view>
+					</u-form-item> -->
+			<view class="flex flex-between align-item-center row">
+				<view class="left">
+					上传企业logo或个人头像
+				</view>
+				<view class="right">
+					<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
+						:maxCount="1"></u-upload>
+				</view>
+			</view>
+
+
+
+
+		</view>
+		<view class="bottom">
+			<button @click='$u.debounce(submit, 500)' class='button' type="default">提交</button>
+		</view>
+		<city-picker ref="picker" mode="multiSelector" :list="areaData" :level="3" @confirm="finishSelectAddress">
+		</city-picker>
+		<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	var that;
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		onLoad(options) {
+			that = this
+			this.userInfo = uni.getStorageSync("userInfo")
+			this.cardInfo.commonId = this.userInfo.id
+			this.cardInfo.cardBusiness ="名片标识"+ options.cardIndex
+			
+			this.getList()
+		},
+		data() {
+			return {
+				layoutSelectIndex: 0,
+				layoutImgList: [{
+						dictValue: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/muban3.png',
+						dictSort: 1
+					},
+					{
+						dictValue: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/muban2.png',
+						dictSort: 2
+					},
+					// {
+					// 	dictValue: '/static/imgs/card/3.png',
+					// 	dictSort: 3
+					// },
+					{
+						dictValue: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/app/muban1.png',
+						dictSort: 4
+					}
+				],
+				colorSelectIndex: 0,
+				colorList: [{
+						"color": "rgba(196, 196, 196, 1)",
+						index: 1
+					},
+					{
+						"color": "rgba(96, 148, 196, 1)",
+						index: 2
+					},
+					{
+						"color": "rgba(168, 135, 98, 1)",
+						index: 3
+					}
+
+				],
+				selectConfig: 1,
+				selectIndex: 0,
+				imgList: [],
+				isSubmit: false,
+				content: '确定提交名片信息?',
+				userInfo: {},
+				fileList1: [],
+				cardInfo: {
+					city: '',
+					area: '',
+					province: '',
+					commonId: '',
+					cardBusiness: '',
+					name: '',
+					post: '',
+					companyName: '',
+					location: '',
+					detailedAddress: '',
+					phone: '',
+					headSculpture: '',
+					currentBackground: '',
+					cuttentTemplate: '',
+					icon: '',
+				}
+			};
+		},
+		methods: {
+			layoutChangeTemplate(index) {
+				this.layoutSelectIndex = index
+				this.cardInfo.cuttentTemplate = this.layoutImgList[index].dictSort
+			},
+			changeIconColor(index) {
+				this.colorSelectIndex = index
+				this.cardInfo.icon = this.colorList[index].index
+			},
+			changeTab(index) {
+				this.selectConfig = index
+			},
+			changeTemplate(index) {
+				this.selectIndex = index
+				this.cardInfo.currentBackground = this.imgList[index].dictLabel
+
+			},
+			getList() {
+				this.$request.baseRequest('admin.dictData', 'list', {
+					dictType: "card_template"
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.hideLoading()
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+
+				}).then(res => {
+					console.log("img", res)
+					this.imgList = res.data.items
+					if (!this.cardInfo.currentBackground) {
+						this.cardInfo.currentBackground = this.imgList[0].dictLabel
+					}
+					if (!this.cardInfo.cuttentTemplate) {
+						this.cardInfo.cuttentTemplate = this.layoutImgList[0].dictSort
+					}
+					if (!this.cardInfo.icon) {
+						this.cardInfo.icon = this.colorList[0].index
+					}
+				})
+			},
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.cardInfo.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						that.cardInfo.province = _address.Province
+						that.cardInfo.city = _address.City
+						that.cardInfo.area = _address.Country
+						that.cardInfo.detailedAddress = _address.Village
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			// 删除图片
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+				}
+			},
+			uploadFilePromise(res) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							that.cardInfo.headSculpture = result
+							resolve(res)
+						}
+					)
+				})
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.unimall.cardManagementInfo', 'add', {
+					cardManagementInfo: JSON.stringify(this.cardInfo)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '保存成功!',
+						duration: 2000
+					});
+					this.$request.baseRequest('admin.unimall.personalHomepageInfo', 'list', {
+						page: 1,
+						limit: 10,
+						commonId: uni.getStorageSync("userInfo").id
+					}, failres => {
+						console.log('res+++++', failres.errmsg)
+						uni.hideLoading()
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+					}).then(res => {
+						if (res.data.items.length > 0) {
+							uni.navigateBack()
+						} else {
+							uni.navigateTo({
+								url: '/pageA/mySet/myHome'
+							})
+						}
+					})
+
+				})
+			},
+			submit() {
+				this.isSubmit = true
+
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		padding: 20rpx;
+	}
+
+	.bgc0 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc1.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc1 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc2.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc2 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc3.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc3 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc4.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.bgc4 {
+		background: url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/bgc5.png') no-repeat center;
+		height: 380rpx;
+		border-radius: 20rpx;
+	}
+
+	.img {
+		width: 100rpx;
+	}
+
+	.change-template {
+		margin: 30rpx 0 50rpx 0;
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #19191A;
+		margin-right: 20rpx;
+	}
+
+	.img-list {
+		display: block;
+		white-space: nowrap;
+		overflow-x: auto;
+
+		.dh {
+			width: 32rpx;
+			height: 32rpx;
+			position: absolute;
+			right: 8rpx;
+			bottom: 8rpx;
+		}
+
+
+		.img-item {
+			position: relative;
+			width: 186rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 2 0rpx;
+			border-radius: 20rpx;
+			margin-right: 20rpx;
+		}
+
+	}
+
+	.content2 {
+		background-color: #fff;
+		border-radius: 20rpx;
+		padding: 0 20rpx 0 20rpx;
+
+		.row {
+			padding: 20rpx;
+			border-bottom: 1px solid #E6E5E5;
+		}
+	}
+
+	.button {
+		color: #fff;
+		background-color: #112253;
+		border-radius: 20rpx;
+		margin: 40rpx 0;
+	}
+
+	.card-content {
+		top: 20rpx;
+		left: 20rpx;
+	}
+
+	.content1 {
+		.icon-text {
+			margin-left: 10rpx;
+		}
+
+		.style1 {
+			display: flex;
+			padding: 20rpx 30rpx;
+			width: 85%;
+
+			.left {
+				width: 132rpx;
+				height: 132rpx;
+				border-radius: 50%;
+			}
+
+			.right {
+				margin-left: 40rpx;
+
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+
+				.row3 {
+					margin-top: 30rpx;
+					font-size: 24rpx;
+					font-weight: 500;
+					color: #323333;
+				}
+
+				.row2,
+				.row3,
+				.row4 {
+					margin-top: 20rpx;
+				}
+			}
+		}
+
+		.style2 {
+			padding: 30rpx;
+
+			.top {
+				.row1 {
+					.name {
+						font-size: 38rpx;
+						font-weight: bold;
+						color: #040000;
+						margin-right: 20rpx;
+					}
+
+					.post {
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+					}
+				}
+
+				.row2 {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: #323333;
+				}
+			}
+
+			.bottom {
+				margin-top: 48rpx;
+
+				.left {
+					margin-right: 40rpx;
+
+					.row1 {
+						.name {
+							font-size: 38rpx;
+							font-weight: bold;
+							color: #040000;
+							margin-right: 20rpx;
+						}
+
+						.post {
+							font-size: 26rpx;
+							font-weight: 500;
+							color: #666666;
+						}
+					}
+
+					.row2 {
+						margin-top: 20rpx;
+						font-size: 24rpx;
+						font-weight: bold;
+						color: #323333;
+					}
+				}
+
+				.right {
+
+					.row1,
+					.row2 {
+						font-size: 24rpx;
+						font-weight: 500;
+						color: #323333;
+					}
+
+					.row2,
+					.row3,
+					.row4 {
+						margin-top: 20rpx;
+					}
+				}
+			}
+
+		}
+	}
+
+	.content2 {
+		.left {
+			margin-right: 10rpx;
+		}
+	}
+
+	.active-style {
+		color: '#112253';
+		font-size: 36rpx;
+		font-weight: bold;
+		position: relative;
+	}
+
+	.active-style::after {
+		position: absolute;
+		bottom: -20rpx;
+		content: "";
+		width: 70rpx;
+		height: 8rpx;
+		border-radius: 4rpx;
+		background: #112253;
+		left: 0;
+		right: 0;
+		margin: auto;
+	}
+
+	.font-color {
+		position: relative;
+	}
+
+	.icon-dh {
+		width: 32rpx;
+		height: 32rpx;
+		position: absolute;
+		right: 20rpx;
+		bottom: 20rpx;
+	}
+</style>

+ 1126 - 0
xiaochengxu/pageA/mySet/poster.vue

@@ -0,0 +1,1126 @@
+<template>
+	<view class="page">
+		<view class="poster" v-if="!show_poster">
+			<view class="canvas-content" style="text-align:center;position:relative;" :style='{background:(posterObj1.backgroundType=="rgb"? posterObj1.background:"url("+posterObj1.background+") no-repeat;background-size:100% 100%;"),borderRadius:posterObj1.borderRadius,padding:(check_idx==2?"80rpx 68rpx":"40rpx 36rpx 80rpx")}'>
+				<image v-if='check_idx==1' style='position:absolute;width:103rpx;height:103rpx;bottom: 0;left: 0;' src="https://s.yun-live.com/images/20210201/d88d56843d43b917e2a28550b2a62723.png"></image>
+				<image v-if='check_idx==1' style='position:absolute;width:56.4rpx;height:56.4rpx;right:0rpx;top:50%;' src="https://s.yun-live.com/images/20210201/247736ffd279276b891ec14db8ed0fd0.png"></image>
+				<image :style='{width:posterObj1.width,height:posterObj1.height,borderRadius:posterObj1.imageBorderRadius}' :src="posterObj1.image"></image>
+				<view :style='{fontSize:posterObj1.titleCssFontSize,fontWeight:posterObj1.titleCssFontWeight,color:posterObj1.titleCssColor,lineWeight:posterObj1.titleCssLineHeight
+				}' class="title">{{posterObj1.title}}</view>
+				<view class='flex justify-space-between' style='align-items: flex-start;margin-top:18rpx;'>
+					<view style='text-align:left;margin-top:30rpx;'>
+						<view :style='{fontSize:posterObj1.title1CssFontSize,fontWeight:posterObj1.title1CssFontWeight,color:posterObj1.title1CssColor,lineWeight:posterObj1.title1CssLineHeight
+						}' class="title1">{{posterObj1.title1}}</view>
+						<view :style='{fontSize:posterObj1.title2CssFontSize,color:posterObj1.title2CssColor,lineWeight:posterObj1.title2CssLineHeight
+						}' class="title2">{{posterObj1.title2}}</view>
+					</view>		
+					<view>
+						<image :style='{width:posterObj1.qrcodeWidth,height:posterObj1.qrcodeHeight,}' :src="posterObj1.qrcode"></image>
+					</view>
+				</view>
+			</view>
+			<view class="footer-btn">
+				<view class="">
+					返回
+				</view>
+				<view class="save" @click="toSave">
+					保存
+				</view>
+			</view>
+		</view>
+		<view class="poster-btn">
+			<view class='diy_image'>
+				上传图片
+				<view>
+					<u-radio-group @change='imagechange($event)' v-model="imageValue">
+						<u-radio shape="square" name='自定义图片' label="自定义图片"></u-radio>
+						<u-radio shape="square" name='选择名片' label="选择名片"></u-radio>
+					</u-radio-group>
+				</view>
+			</view>
+			<view style='color:red;font-size:24rpx;padding: 20rpx 20rpx 0;'>注:如勾选“选择名片”,其他用户扫描海报二维码后会自动与您交换名片。</view>
+			<view class='diy_title'>
+				编辑内容
+				<view> 
+				<u--input v-model="value" @focus='titleclick' placeholder="请输入内容" border="bottom" clearable></u--input></view>
+			</view>
+			<view class='check_bg'>
+				<view style='font-size:28rpx'>定义背景</view>
+				<view :class="{'is-check':check_idx==index}" v-for="(item,index) in footer_arr" :key="index" @click="toChoose(index)">
+					<image :src="item" mode=""></image>
+					<view v-if="check_idx==index"></view>
+				</view>	
+			</view>
+			
+			
+		</view>
+		<!-- 生成的图片 -->
+		<uni-popup type="center" ref="posterImg" :maskClick="false">
+			<view class="poster-img">
+				<text @click="closePopup"></text>
+				<view style='overflow: scroll;width: 670rpx;height: 928rpx;'>
+					<image :src="path" mode="widthFix" @click="previewImg"></image>
+				</view>
+				<!-- #ifdef H5 -->
+				<view class="">
+					长按图片保存到手机
+				</view>
+				<!-- #endif -->
+				<!-- #ifndef H5 -->
+				<view class="">
+					点击图片保存到手机
+				</view>
+				<!-- #endif -->
+			</view>
+		</uni-popup>
+		<u-popup :show="titleStatus"  :round="10" mode="center" @close="close" @open="open">
+		    <view style='width:600rpx;padding:20rpx;'>
+		        <u--textarea v-model="value" maxlength='300' count placeholder="请输入内容" ></u--textarea>
+				<view style='margin:20rpx 0rpx 0;'>
+					<u-button @click='confirm' type="success" text="确定"></u-button>
+				</view>
+		    </view>
+		</u-popup>
+		<u-picker :immediateChange="true" keyName="cardBusiness" confirmText='确定' title="选择名片" @cancel="show1=false"
+			closeOnClickOverlay @confirm="cardConfirm" :show="show1" :columns="cardList"></u-picker>
+		<poster :data="canvasData" background-color="#FFF" :width='948' :height='534' @on-success="posterSuccess"
+			ref="poster" @on-error="posterError"></poster>
+		<lPainter :board="posterObj" ref="painter"></lPainter>
+		<canvas id="canvasId" 
+		:type="type" 
+		style="width:0;height:0;"></canvas>
+	</view>
+</template>
+
+<script>
+	var that;
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	import uniPopup from "@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue";
+	import lPainter from '@/components/lime-painter/index.vue';
+	import { Layout } from '@/components/lime-painter/layout';
+	import Poster from '../../components/zhangyuhao-poster/Poster.vue';
+	import { toPx, isNumber, getImageInfo, base64ToPath, compareVersion  } from '@/components/lime-painter/utils'
+	import { adaptor, expand } from '@/components/lime-painter/canvas';
+	export default {
+		components: {
+			lPainter,
+			uniPopup,
+			Poster,
+		},
+		data() {
+			return {
+				imageValue:'',
+				canvasData:{},
+				value:'云现场 | 2020年 麓客城市 WO-LUNTEER创想礼·麓客共创之夜',
+				show_poster:false,//显示海报
+				path: '', //生成的图片地址
+				image:'',
+				show1:false,
+				cardList: [],
+				list:[],
+				theight:0,
+				poster:'',
+				type:'2d',
+				height:0,
+				use2dCanvas:false,
+				layout1: new Layout(),
+				titleStatus:false,
+				posterObj1:{
+					background:'#fff',
+					backgroundType:'rgb',
+					borderRadius: '16rpx',
+					image:'https://s.yun-live.com/images/20210201/eb694718fa6c7b90d60a2c250847a192.jpg',
+					width: '606rpx',
+					height: '341rpx',
+					imageBorderRadius:'16rpx',
+					title:'云现场 | 2020年 麓客城市 WO-LUNTEER创想礼·麓客共创之夜',
+					titleCssFontSize: '32rpx',
+					titleCssColor: '#1A2033',
+					titleCssFontWeight: 'bold',
+					titleCssLineHeight: '45rpx',
+					title1:'厦门吴彦祖',
+					title1CssFontSize: '28rpx',
+					title1CssColor: '#1A2033',
+					title1CssFontWeight: 'bold',
+					title1CssLineHeight: '28rpx',
+					title2:'扫描识别二维码',
+					title2CssFontSize: '24rpx',
+					title2CssColor: '#4070FF',
+					title2CssLineHeight: '24rpx',
+					qrcode:'../../static/imgs/qrcode.jpg',
+					qrcodeWidth: '240rpx',
+					qrcodeHeight: '240rpx',
+				},
+				posterObj: {
+					width: '670rpx',
+					height: '890rpx',
+					background: '#fff',
+					borderRadius: '16rpx',
+					views: [
+						// {
+						// 	type: 'image',
+						// 	src: 'https://s.yun-live.com/images/20210201/9a4e7df322dc5c9f30ea9b126d3269a6.png',
+						// 	css: {
+						// 		width: '128rpx',
+						// 		height: '50rpx',
+						// 		left: '542rpx',
+						// 		top: '0rpx',
+						// 	}
+						// },
+						// {
+						// 	type: 'image',
+						// 	src: 'https://s.yun-live.com/images/20210201/eb694718fa6c7b90d60a2c250847a192.jpg',
+						// 	css: {
+						// 		left: '32rpx',
+						// 		top: '480rpx',
+						// 		borderRadius: '50%',
+						// 		width: '80rpx',
+						// 		height: '80rpx'
+						// 	}
+						// },
+						{
+							type: 'text',
+							text: '云现场 | 2020年 麓客城市 WO-LUNTEER创想礼·麓客共创之夜',
+							use:'title',
+							css: {
+								fontSize: '32rpx',
+								color: '#1A2033',
+								fontWeight: 'bold',
+								lineHeight: '45rpx',
+								left: '32rpx',
+								top: '400rpx',
+								width: '606rpx'
+							}
+						},
+						{
+							type: 'text',
+							text: '厦门吴彦祖',
+							use:'title1',
+							css: {
+								fontSize: '28rpx',
+								fontWeight: 'bold',
+								color: '#1A2033',
+								lineHeight: '28rpx',
+								left: '32rpx',
+								top: '515rpx'
+							}
+						},
+						{
+							type: 'text',
+							text: '扫描识别二维码',
+							use:'title2',
+							css: {
+								fontSize: '24rpx',
+								color: '#4070FF',
+								lineHeight: '24rpx',
+								left: '32rpx',
+								top: '559rpx'
+							}
+						},
+						{
+							type: 'image',
+							src: 'https://s.yun-live.com/images/20210201/eb694718fa6c7b90d60a2c250847a192.jpg',
+							use:'dt',
+							css: {
+								left: '32rpx',
+								top: '34rpx',
+								width: '606rpx',
+								height: '341rpx',
+								borderRadius: '16rpx'
+							}
+						},
+						
+						{
+							type: 'qrcode',
+							text: 'https://www.yun-live.com/',
+							css: {
+								left: '445rpx',
+								top: '500rpx',
+								width: '200rpx',
+								height: '200rpx',
+							}
+						},
+						// {
+						// 	type: 'text',
+						// 	text: '————  由云现场提供技术支持  ————',
+						// 	css: {
+						// 		left: '0',
+						// 		top: '863rpx',
+						// 		width: '100%',
+						// 		textAlign: 'center',
+						// 		fontSize: '24rpx',
+						// 		color: '#989FB3',
+						// 		lineHeight: '33rpx'
+						// 	}
+						// }
+					]
+				}, //画板数据
+				footer_arr: [
+					'https://s.yun-live.com/images/20210201/d502979c734077930cee837739ee9285.png',
+					'https://s.yun-live.com/images/20210201/0289000561415e1f9f6e542a3553906d.png',
+					'https://s.yun-live.com/images/20210201/5d2e237728e1dd8727835ca95084721e.png',
+					'https://s.yun-live.com/images/20210201/15075d31c26cc446333d569b0d2346e8.png',
+					'https://s.yun-live.com/images/20210201/6e716c556d1a80e90ecb0260e0990add.png'
+				], //底部选项
+				check_idx: 0, //底部选中的下标
+				dtindex:0,
+				titleindex:0,
+				title1index:0,
+				title2index:0,
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			// #ifdef MP-WEIXIN
+			const {SDKVersion, version, platform} = uni.getSystemInfoSync()
+			// ios wx7.0.20 createImage bug
+			this.use2dCanvas = (this.type === '2d' && compareVersion(SDKVersion, '2.9.2') >= 0) && !(/ios/.test(platform) && /7.0.20/.test(version));
+			// #endif
+			this.posterObj1.title1=uni.getStorageSync("userInfo").nickname+'推荐给你'
+			this.$request.baseRequest('admin.unimall.cardManagementInfo', 'list', {
+				commonId: uni.getStorageSync("userInfo").id
+			}, failres => {
+				uni.hideLoading()
+				uni.showToast({
+					icon: "none",
+					title: failres.errmsg,
+					duration: 3000
+				});
+			
+			}).then(res => {
+				this.list = res.data.items
+				this.cardList = [res.data.items]
+			})
+		},
+		watch: {
+			// check_idx(newVal,oldVal){
+			// 	console.log(111,newVal);
+			// 	console.log(222,oldVal);
+			// }
+		},
+		methods: {
+			confirm(e){
+				this.titleStatus=false
+				this.posterObj1.title=this.value
+			},
+			titleclick(){
+				this.titleStatus=true
+			},
+			posterError(err) {
+				console.log(err)
+				uni.hideLoading()
+			},
+			posterSuccess(url) {
+				console.log("hahahah", url)
+				// 生成成功,会把临时路径在这里返回
+				this.poster = url;
+				this.posterObj1.image = url
+				this.posterObj1.qrcode=this.currectData.qrCodeMyself
+				console.log(url)
+				this.show1 = false
+				// this.show=false
+				uni.hideLoading()
+			},
+			cardConfirm(e) {
+				console.log(e)
+				this.currectData = e.value[0]
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				var data = [{
+						type: 'image',
+						path: this.currectData.currentBackground,
+						use: 'bg',
+						x: -24,
+						y: -27,
+						width: 1000,
+						height: 600
+					},
+					{
+						type: 'image',
+						path: this.currectData.headSculpture ? this.currectData.headSculpture :
+							'../../static/imgs/card/defaulthead.png',
+						shape: 'circle',
+						use: 'head',
+						imageType: this.currectData.headSculpture ? 'wl' : 'bd',
+						x: 60,
+						y: 60,
+						width: 150,
+						height: 150
+					},
+					{
+						type: 'text',
+						text: this.currectData.name,
+						use: 'name',
+						x: 300,
+						y: 80,
+						size: 40,
+						color: '#000'
+			
+					},
+					{
+						type: 'text',
+						text: this.currectData.post,
+						use: 'post',
+						x: 440,
+						y: 85,
+						size: 32,
+						color: '#666666'
+			
+					},
+					{
+						type: 'text',
+						text: this.currectData.companyName,
+						use: 'companyName',
+						x: 300,
+						y: 155,
+						size: 32,
+						color: '#000'
+			
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/address1.png',
+						use: 'address-icon',
+						x: 300,
+						y: 220,
+						width: 30,
+						height: 40
+					},
+					{
+						type: 'textarea',
+						text: this.currectData.province + this.currectData.city + this.currectData.area + this
+							.currectData.detailedAddress,
+						lineSpace: 1,
+						width: 640,
+						use: 'address',
+						x: 345,
+						y: 228,
+						size: 28,
+						color: '#000'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/phone1.png',
+						use: 'phone-icon',
+						x: 300,
+						y: 280,
+						width: 32,
+						height: 32
+					},
+					{
+						type: 'text',
+						text: this.currectData.phone,
+						use: 'phone',
+						x: 345,
+						y: 284,
+						size: 28,
+						color: '#000'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/remark1.png',
+						use: 'remark-icon',
+						x: 300,
+						y: 340,
+						width: 26,
+						height: 32
+					},
+					{
+						type: 'textarea',
+						text: this.currectData.remark ? this.currectData.remark : '单击添加备注',
+						use: 'remark',
+						lineSpace: 2,
+						width: 200,
+						x: 345,
+						y: 345,
+						size: 26,
+						color: '#000'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/bg3.png',
+						use: 'bg1',
+						x: 0,
+						y: 418,
+						width: 687,
+						height: 120
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/bg4.png',
+						use: 'bg2',
+						x: 647,
+						y: 418,
+						width: 305,
+						height: 120
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/home.png',
+						use: 'home',
+						x: 65,
+						y: 455,
+						width: 55,
+						height: 55
+					},
+					{
+						type: 'text',
+						text: this.currectData.classifyName ? this.currectData.classifyName : '默',
+						use: 'classify',
+						x: 245,
+						y: 460,
+						size: 54,
+						color: '#fff'
+					},
+					{
+						type: 'image',
+						path: '../../static/imgs/card/share.png',
+						use: 'share',
+						x: 435,
+						y: 453,
+						width: 66,
+						height: 52
+					},
+				]
+				console.log(this.currectData.cuttentTemplate, 111111)
+				for (var i = 0; i < data.length; i++) {
+					switch (this.currectData.cuttentTemplate) {
+						case '2':
+							if (data[i].use === 'name' ||
+								data[i].use === 'companyName' ||
+								data[i].use === 'address-icon' ||
+								data[i].use === 'phone-icon' ||
+								data[i].use === 'remark-icon') {
+								data[i].x = 60
+							}
+							if (data[i].use === 'post') {
+								data[i].x = 200
+							}
+							if (data[i].use === 'address' ||
+								data[i].use === 'phone' ||
+								data[i].use === 'remark') {
+								data[i].x = 120
+							}
+							if (data[i].use == 'head') {
+								data[i].x = 740
+							}
+							break;
+						case '3':
+							if (data[i].use === 'name') {
+								data[i].x = 60
+								data[i].y = 300
+							}
+							if (data[i].use === 'companyName') {
+								data[i].x = 60
+								data[i].y = 360
+							}
+							if (data[i].use === 'post') {
+								data[i].x = 200
+								data[i].y = 306
+							}
+							if (data[i].use === 'address-icon' ||
+								data[i].use === 'phone-icon' ||
+								data[i].use === 'remark-icon') {
+								data[i].x = 340
+							}
+							if (data[i].use === 'address-icon') {
+								data[i].y = 300
+							}
+							if (data[i].use === 'address') {
+								data[i].y = 310;
+								data[i].width = 300
+							}
+							if (data[i].use === 'phone-icon') {
+								data[i].y = 360
+							}
+							if (data[i].use === 'phone') {
+								data[i].y = 366
+							}
+							if (data[i].use === 'remark-icon') {
+								data[i].y = 420
+							}
+							if (data[i].use === 'remark') {
+								data[i].y = 424
+							}
+							if (data[i].use === 'address' ||
+								data[i].use === 'phone' ||
+								data[i].use === 'remark') {
+								data[i].x = 380
+							}
+							break;
+						case '4':
+							if (data[i].use === 'name' ||
+								data[i].use === 'companyName') {
+								data[i].x = 60
+							}
+							if (data[i].use === 'companyName') {
+								data[i].y = 180
+							}
+							if (data[i].use === 'post') {
+								data[i].x = 200
+							}
+							if (data[i].use == 'head') {
+								data[i].x = 45
+								data[i].y = 240
+							}
+							if (data[i].use === 'address-icon' ||
+								data[i].use === 'phone-icon' ||
+								data[i].use === 'remark-icon') {
+								data[i].x = 340
+							}
+							if (data[i].use === 'address') {
+								data[i].width = 300
+							}
+							if (data[i].use === 'address' ||
+								data[i].use === 'phone' ||
+								data[i].use === 'remark') {
+								data[i].x = 380
+							}
+							break;
+						default:
+					}
+				}
+				this.canvasData = {
+					clicknum: this.clicknum++,
+					list: data
+				}
+			},
+			open() {
+			        // console.log('open');
+			},
+			close() {
+			    this.show = false
+			        // console.log('close');
+			},
+			
+			imagechange(e){
+				console.log(e,1111)
+				if(e=='自定义图片'){
+					uni.showActionSheet({
+					    itemList: ["拍照", "从手机相册选择"],
+					    success(res) {
+					        let sourceType = "camera";
+					        if (res.tapIndex == 0) {
+					            sourceType = "camera";
+					        } else if (res.tapIndex == 1) {
+					            sourceType = "album";
+					        }
+					        uni.chooseImage({
+					            count: 1, //最多可以选择的图片张数,默认9
+					            sizeType: ["original", "compressed"],   //original 原图,compressed 压缩图,默认二者都有
+					            sourceType: [sourceType], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
+					            success: function(res) {
+					                let tempFilePaths = res.tempFilePaths;
+									that.posterObj1.image = tempFilePaths[0]
+									this.posterObj1.qrcode = '../../static/imgs/qrcode.jpg'
+					               console.log(tempFilePaths)
+					            }
+					          });
+					        }
+					      });
+
+				}else{
+					if(this.list.length>0){
+						this.show1=true
+					}else{
+						uni.showToast({
+							icon: "none",
+							title: '您还未创建名片',
+							duration: 3000
+						})
+					}
+				}
+			},
+			
+			previewImg(){
+				// #ifdef H5
+				return;
+				// #endif
+				uni.previewImage({
+					current:this.path,
+					urls: [this.path]
+				});
+			},
+			closePopup(){
+				this.$refs.posterImg.close();
+				this.show_poster=false;
+			},
+			async toSave() {
+			var that = this
+			//写个同步方法 把所谓 高度宽度 位置 都算好
+			let query = wx.createSelectorQuery();
+			await query.select('.canvas-content').boundingClientRect(rect=>{
+			  this.height = rect.height;
+			}).exec()
+			await query.select('.title').boundingClientRect(rect=>{
+			  this.theight = rect.height;
+			}).exec()
+		
+			setTimeout(()=>{
+				var posterObj = this.$request.makeCanvasData(this.check_idx,this.height,this.posterObj1,this.theight)
+				uni.showLoading({
+					title:'海报生成中',
+				})
+				this.posterObj = posterObj
+				setTimeout(()=>{
+				const painter = this.$refs.painter;
+				console.log(painter)
+					painter.canvasToTempFilePath().then(res => {
+						console.log(res.tempFilePath,'path')
+						this.path = res.tempFilePath;
+						this.$refs.posterImg.open();
+						this.show_poster=true;
+						uni.hideLoading()
+					});
+				},4000)
+			},1000)
+				
+			
+				console.log(this.posterObj)
+				
+				console.log(this.check_idx)
+				if (this.check_idx == 4) return;
+				// switch (this.check_idx) {
+				// 	case 0:
+
+				// 		this.posterObj.background = '#fff';
+				// 		this.posterObj.views=[
+					
+				// 				{
+				// 					type: 'text',
+				// 					text: this.posterObj1.title,
+				// 					use:'title',
+				// 					css: {
+				// 						fontSize: '32rpx',
+				// 						color: '#1A2033',
+				// 						fontWeight: 'bold',
+				// 						lineHeight: '45rpx',
+				// 						left: '32rpx',
+				// 						top: '400rpx',
+				// 						width: '606rpx'
+				// 					}
+				// 				},
+				// 				{
+				// 					type: 'text',
+				// 					text:  this.posterObj1.title1,
+				// 					use:'title1',
+				// 					css: {
+				// 						fontSize: '28rpx',
+				// 						fontWeight: 'bold',
+				// 						color: '#1A2033',
+				// 						lineHeight: '28rpx',
+				// 						left: '32rpx',
+				// 						top: '515rpx'
+				// 					}
+				// 				},
+				// 				{
+				// 					type: 'text',
+				// 					text: '长按或扫描识别二维码',
+				// 					use:'title2',
+				// 					css: {
+				// 						fontSize: '24rpx',
+				// 						color: '#4070FF',
+				// 						lineHeight: '24rpx',
+				// 						left: '32rpx',
+				// 						top: '559rpx'
+				// 					}
+				// 				},
+				// 				{
+				// 					type: 'image',
+				// 					src: 'https://s.yun-live.com/images/20210201/eb694718fa6c7b90d60a2c250847a192.jpg',
+				// 					use:'dt',
+				// 					css: {
+				// 						left: '32rpx',
+				// 						top: '34rpx',
+				// 						width: '606rpx',
+				// 						height: '341rpx',
+				// 						borderRadius: '16rpx'
+				// 					}
+				// 				},
+								
+				// 				{
+				// 					type: 'qrcode',
+				// 					text: 'https://www.yun-live.com/',
+				// 					css: {
+				// 						left: '445rpx',
+				// 						top: '500rpx',
+				// 						width: '200rpx',
+				// 						height: '200rpx',
+				// 					}
+				// 				},
+				// 				// {
+				// 				// 	type: 'text',
+				// 				// 	text: '————  由云现场提供技术支持  ————',
+				// 				// 	css: {
+				// 				// 		left: '0',
+				// 				// 		top: '863rpx',
+				// 				// 		width: '100%',
+				// 				// 		textAlign: 'center',
+				// 				// 		fontSize: '24rpx',
+				// 				// 		color: '#989FB3',
+				// 				// 		lineHeight: '33rpx'
+				// 				// 	}
+				// 				// }
+				// 			]
+				// 		break;
+				// 	case 1:
+				// 	this.posterObj.height=(this.height*2)+'rpx'
+				// 	this.posterObj.views=[{
+				// 				type: 'image',
+				// 				use:'bg',
+				// 				src: 'https://s.yun-live.com/images/20210201/39ae4d9d8ad0b1acac7c224e845c641f.png',
+				// 				css: {
+				// 					left: '0',
+				// 					top: '0',
+				// 					width: '100%',
+				// 					height: '100%'
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'image',
+				// 				src: 'https://s.yun-live.com/images/20210201/eb694718fa6c7b90d60a2c250847a192.jpg',
+				// 				css: {
+				// 					left: '32rpx',
+				// 					top: '34rpx',
+				// 					width: '606rpx',
+				// 					height: '341rpx',
+				// 					borderRadius: '16rpx'
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'text',
+				// 				text: this.posterObj1.title,
+				// 				use:'title',
+				// 				css: {
+				// 					fontSize: '32rpx',
+				// 					color: '#fff',
+				// 					fontWeight: 'bold',
+				// 					lineHeight: '45rpx',
+				// 					left: '32rpx',
+				// 					top: '400rpx',
+				// 					width: '606rpx'
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'text',
+				// 				text: this.posterObj1.title1,
+				// 				use:'title1',
+				// 				css: {
+				// 					fontSize: '28rpx',
+				// 					fontWeight: 'bold',
+				// 					color: '#D8AB87',
+				// 					lineHeight: '28rpx',
+				// 					left: '32rpx',
+				// 					top: '515rpx'
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'text',
+				// 				text: '长按或扫描识别二维码',
+				// 				use:'title2',
+				// 				css: {
+				// 					fontSize: '24rpx',
+				// 					color: '#FFFFFF',
+				// 					lineHeight: '24rpx',
+				// 					left: '32rpx',
+				// 					top: '559rpx'
+				// 				}
+				// 			},
+							
+				// 			{
+				// 				type: 'image',
+				// 				src: 'https://s.yun-live.com/images/20210201/d88d56843d43b917e2a28550b2a62723.png',
+				// 				css: {
+				// 					left: '551rpx',
+				// 					top: '111rpx',
+				// 					width: '103rpx',
+				// 					height: '103rpx',
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'image',
+				// 				src: 'https://s.yun-live.com/images/20210201/247736ffd279276b891ec14db8ed0fd0.png',
+				// 				css: {
+				// 					left: '43rpx',
+				// 					top: '432rpx',
+				// 					width: '56.4rpx',
+				// 					height: '56.4rpx',
+				// 				}
+				// 			},
+							
+				// 			{
+				// 				type: 'image',
+				// 				src: 'https://s.yun-live.com/images/20210201/63a9b504fb745b43b9fe5c0adef8fddb.png',
+				// 				css: {
+				// 					left: '50%',
+				// 					top: '750rpx',
+				// 					transform: 'translate(-50%,0)',
+				// 					width: '192rpx',
+				// 					height: '78rpx',
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'view',
+				// 				use:'qrcode-view',
+				// 				css: {
+				// 					left: '445rpx',
+				// 					top: '500rpx',
+				// 					width: '200rpx',
+				// 					height: '200rpx',
+				// 					background: '#fff',
+				// 				}
+				// 			},
+				// 			{
+				// 				type: 'image',
+				// 				src:this.posterObj1.qrcode,
+				// 				use:'qrcode',
+				// 				css: {
+				// 					left: '455rpx',
+				// 					top: '510rpx',
+				// 					// transform: 'translate(-50%,0)',
+				// 					width: '180rpx',
+				// 					height: '180rpx',
+				// 				}
+				// 			},
+
+				// 		]
+						
+				// 		break;
+				// 	case 2:
+				// 		this.posterObj1.backgroundType='image'
+				// 		this.posterObj1.background='https://s.yun-live.com/images/20210201/78f227bd701da20676c9da9166ce3144.png';
+				// 		this.posterObj1.width='540rpx',
+				// 		this.posterObj1.height='303rpx',
+				// 		this.posterObj1.titleCssColor='#1D1D25'
+				// 		this.posterObj1.title1CssColor='#1D1D25'
+				// 		this.posterObj1.title2CssColor='#6CB37A'
+				// 		break;
+				// 	case 3:
+				// 		this.posterObj1.backgroundType='image'
+				// 		this.posterObj1.background='https://s.yun-live.com/images/20210201/524ab6a41fe8c7eb57b35df9a547d388.png';
+				// 		this.posterObj1.width='606rpx',
+				// 		this.posterObj1.height='341rpx',
+				// 		this.posterObj1.titleCssColor='#1D1D25'
+				// 		this.posterObj1.title1CssColor='#1D1D25'
+				// 		this.posterObj1.title2CssColor='#6CB37A'
+				// 		break;
+				// 	default:
+				// 		break;
+				// }
+				// var node = await this.layout1.calcNode(this.posterObj)
+				// console.log(node,'node')
+				// if(node&&node.children.length===this.posterObj.views.length){
+					// for(var i=0;i<node.children.length;i++){
+					// 	if(node.children[i].use==='title'){
+					// 		dth=node.children[i].layoutBox.height-48
+					// 	}
+					// 	if(node.children[i].use==='title'||node.children[i].use==='title1'||node.children[i].use==='title2'){
+					// 		h+=node.children[i].layoutBox.height
+					// 	}
+					// }
+					// console.log(h,h+780,'h打印')
+					// for(var i=0;i<this.posterObj.views.length;i++){
+					// 	if(this.posterObj.views[i].use==='title1'||this.posterObj.views[i].use==='title2'
+					// 	||this.posterObj.views[i].use==='qrcode-view'||this.posterObj.views[i].use==='qrcode'){
+					// 		var top=this.posterObj.views[i].css.top.split('r')[0]
+					// 		this.posterObj.views[i].css.top=(Number(top)+Number(dth*2))+'rpx'
+					// 	}
+					// }
+					// this.posterObj.width='670rpx'
+					
+					// console.log(this.posterObj,'posterObj')
+					// uni.showLoading({
+					// 	title:'海报生成中',
+					// })
+					// const painter = this.$refs.painter;
+					// setTimeout(()=>{
+					// 	console.log(this.height*2,'height')
+					// 	painter.canvasToTempFilePath().then(res => {
+					// 		console.log(res.tempFilePath,'path')
+					// 		this.path = res.tempFilePath;
+					// 		this.$refs.posterImg.open();
+					// 		this.show_poster=true;
+					// 		uni.hideLoading()
+					// 	});
+					// },1000)
+				// }
+				
+				
+			},
+			toChoose(index) {
+				if (index == 4) return;
+				this.check_idx = index;
+				switch (index) {
+					case 0:
+						this.posterObj1.background='#fff';
+						this.posterObj1.backgroundType='rgb'
+						this.posterObj1.width='606rpx',
+						this.posterObj1.height='341rpx',
+						this.posterObj1.titleCssColor='#1A2033'
+						this.posterObj1.title1CssColor='#1A2033'
+						this.posterObj1.title2CssColor='#4070FF'
+						break;
+					case 1:
+						this.posterObj1.backgroundType='image'
+						this.posterObj1.background='https://s.yun-live.com/images/20210201/39ae4d9d8ad0b1acac7c224e845c641f.png';
+						this.posterObj1.width='606rpx',
+						this.posterObj1.height='341rpx',
+						this.posterObj1.titleCssColor='#fff'
+						this.posterObj1.title1CssColor='#D8AB87'
+						this.posterObj1.title2CssColor='#fff'
+						break;
+					case 2:
+						this.posterObj1.backgroundType='image'
+						this.posterObj1.background='https://s.yun-live.com/images/20210201/78f227bd701da20676c9da9166ce3144.png';
+						this.posterObj1.width='540rpx',
+						this.posterObj1.height='303rpx',
+						this.posterObj1.titleCssColor='#1D1D25'
+						this.posterObj1.title1CssColor='#1D1D25'
+						this.posterObj1.title2CssColor='#6CB37A'
+						break;
+					case 3:
+						this.posterObj1.backgroundType='image'
+						this.posterObj1.background='https://s.yun-live.com/images/20210201/524ab6a41fe8c7eb57b35df9a547d388.png';
+						this.posterObj1.width='606rpx',
+						this.posterObj1.height='341rpx',
+						this.posterObj1.titleCssColor='#1D1D25'
+						this.posterObj1.title1CssColor='#1D1D25'
+						this.posterObj1.title2CssColor='#6CB37A'
+						break;
+					default:
+						break;
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	page{
+		background-color: #F2F4F8;
+	}
+	.page{
+		/deep/ .uni-transition{
+			background-color:rgba(0, 0, 0, 0.6)
+		}
+		.poster-img{
+			width: 670rpx;
+			height: 928rpx;
+			position: relative;
+			text{
+				background: url('https://s.yun-live.com/images/20210201/5c4ef9d86bc5eec90f2f915683d9db08.png') no-repeat;
+				background-size: 100% 100%;
+				display: inline-block;
+				width: 50rpx;
+				height: 50rpx;
+				position: absolute;
+				top: -60rpx;
+				right: 0;
+			}
+			image{
+				width: 100%;
+				height: 100%;
+			}
+			view{
+				font-size: 32rpx;
+				font-family: PingFang-SC-Bold, PingFang-SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				line-height: 32rpx;
+				text-align: center;
+				margin-top: 28rpx;
+			}
+		}
+		.poster{
+			padding: 24rpx 40rpx 410rpx;
+			
+			.footer-btn{
+				margin-top: 24rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				view{
+					width: 319rpx;
+					height: 66rpx;
+					border-radius: 40rpx;
+					border: 1px solid #4070FF;
+					font-size: 26rpx;
+					font-family: PingFangSC-Regular, PingFang SC;
+					font-weight: 400;
+					color: #4070FF;
+					line-height: 66rpx;
+					text-align: center;
+				}
+				.save{
+					background: #4070FF;
+					color: #FFFFFF;
+				}
+			}
+		}
+		.poster-btn{
+			position: fixed;
+			bottom: 0;
+			width: 100%;
+			height: 364rpx;
+			background: #FFFFFF;
+			border-radius: 32rpx 32rpx 0px 0px;
+			>.check_bg{
+				display: flex;
+				align-items: center;
+				justify-content: space-around;
+				padding-top:25rpx;
+				>view{
+					width: 80rpx;
+					height: 80rpx;
+					position: relative;
+					border-radius: 10rpx;
+					border: 4rpx solid #fff;
+					&.is-check{
+						border: 4rpx solid #4070FF;
+					}
+					image{
+						width: 100%;
+						height: 100%;
+					}
+					view{
+						width: 30rpx;
+						height: 30rpx;
+						position: absolute;
+						right: -15rpx;
+						bottom: -15rpx;
+						background: url('https://s.yun-live.com/images/20210201/311c01265c1aa508418f6bae10d67602.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+			}
+			/deep/.u-radio{
+				margin-left: 10px;
+			}
+			.diy_title,.diy_image{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 20rpx 20rpx 0;
+				font-size:28rpx;
+			}
+			.diy_title{
+				padding: 10rpx 20rpx 0;
+			}
+		}
+	}
+	.poster{
+		position:relative;
+	}
+	.poster .title{
+		text-align:left;
+		margin-top:20rpx;
+		word-break: break-word;
+	}
+	.poster .title1{
+		margin-bottom:10rpx;
+	}
+</style>

+ 113 - 0
xiaochengxu/pageA/mySet/set.vue

@@ -0,0 +1,113 @@
+<template>
+	<view class="content">
+		<view class='flex bottom flex-between' style="padding: 20rpx;">
+			<text>允许他人分享我的名片</text>
+			<u-switch v-model="value1" activeColor="#112253" :activeValue='true' :inactiveValue='false' @change="change($event,1)"
+				size="20"></u-switch>
+		</view>
+		<view class='flex bottom flex-between' style="padding: 20rpx;">
+			<text>允许圈子成员查看我的主页</text>
+			<u-switch v-model="value2" activeColor="#112253" @change="change($event,2)" size="20"></u-switch>
+		</view>
+		<view class="flex flex-between" style="padding: 20rpx;">
+			<text>自动接受交换名片邀请</text>
+			<u-switch v-model="value3" activeColor="#112253" @change="change($event,3)" size="20"></u-switch>
+		</view>
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value1: false,
+				value2: false,
+				value3: false
+			};
+		},
+		onShow() {
+			this.value1 = (uni.getStorageSync("userInfo").shareCard == 1 ? true : false)
+			this.value2 = (uni.getStorageSync("userInfo").lookPage == 1 ? true : false)
+			this.value3 = (uni.getStorageSync("userInfo").autoAccept == 1 ? true : false)
+		},
+		methods: {
+			change(e, status) {
+				console.log(e)
+				let data = {
+					id: uni.getStorageSync("userInfo").id
+				}
+				if (status == 1) {
+					if (e) {
+						data.shareCard = 1
+					} else {
+						data.shareCard = 0
+					}
+				} else if (status == 2) {
+					if (e) {
+						data.lookPage = 1
+					} else {
+						data.lookPage = 0
+					}
+				} else if (status == 3) {
+					if (e) {
+						data.autoAccept = 1
+					} else {
+						data.autoAccept = 0
+					}
+				}
+				this.$request.baseRequest('admin.unimall.commonUserInfo', 'update', {
+					commonUserInfo: JSON.stringify(data)
+				}, failres => {
+					console.log('res+++++', failres.errmsg)
+					uni.showToast({
+					  icon:"none",
+					  title: failres.errmsg,
+					  duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					uni.showToast({
+					  icon:"success",
+					  title: '设置成功!',
+					  duration: 2000
+					});
+					let userInfo = uni.getStorageSync("userInfo")
+					if (status == 1) {
+						if (e) {
+							userInfo.shareCard = 1
+						} else {
+							userInfo.shareCard = 0
+						}
+					} else if (status == 2) {
+						if (e) {
+							userInfo.lookPage = 1
+						} else {
+							userInfo.lookPage = 0
+						}
+					} else if (status == 3) {
+						if (e) {
+							userInfo.autoAccept = 1
+						} else {
+							userInfo.autoAccept = 0
+						}
+					}
+					uni.setStorageSync("userInfo", userInfo)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		background: #fff;
+		margin: 20rpx;
+		padding: 0rpx 20rpx 0 20rpx;
+		border-radius: 20rpx;
+
+		.bottom {
+			border-bottom: 1px solid #E6E6E6;
+		}
+	}
+</style>

+ 5 - 3
xiaochengxu/pages/circle/circle.vue

@@ -300,9 +300,11 @@
 			},
 			async getPhoneNumber(e) {
 				that.userInfo = await this.$request.wxlogin()
-				that.userInfo.phone = await this.$request.getPhone(e, that.userInfo)
-				this.showAuthorizePhone = false
-				this.showAuthorizeUser = true
+				this.$nextTick(function() {
+					that.userInfo.phone = that.$request.getPhone(e, that.userInfo)
+					that.showAuthorizePhone = false
+					that.showAuthorizeUser = true
+				});
 
 			},
 			delSearchVal() {

+ 0 - 1
xiaochengxu/uni_modules/cl-upload/components/cl-upload/cl-upload.vue

@@ -60,7 +60,6 @@
 					<image class="image" :src="deleteImg" mode="widthFix"></image>
 				</view>
 			</view>
-
 			<view v-if="add && FileList.length < max" @tap="onClickAdd" :style="[rowStyle]"
 				class="file-list-row add-image">
 				<image :src="addImg" mode="widthFix"></image>

+ 1 - 1
xiaochengxu/util/request.js

@@ -254,7 +254,7 @@ const makeCanvasData = (check_idx,height,posterObj1,theight) => {
 							src: posterObj1.qrcode,
 							use:'qrcode',
 							css: {
-								left: '45rpx',
+								left: '410rpx',
 								top: 520+dth+'rpx',
 								// transform: 'translate(-50%,0)',
 								width: '240rpx',