<template>
  <!-- 个人资料 -->
	<view>
		<form @submit="formSubmit">
			<view class='personal-data' :style="viewColor">
				<view class='list'>
					<view class='item acea-row row-between-wrapper'>
						<view>头像</view>
						<view class="avatar-box">
							<image :src="userInfo.avatar || '/static/images/f.png'"></image>
						</view>
					</view>
					<view class='item acea-row row-between-wrapper'>
						<view>昵称</view>
						<view class='input acea-row row-between-wrapper'>
							<input type='nickname' name='nickname' :value='userInfo.nickname' maxlength="16" class='id' disabled></input>
							<text class='iconfont icon-suozi'></text>
						</view>
					</view>
					<view class='item acea-row row-between-wrapper'>
						<view>手机号码</view>
						<navigator url="/pages/users/user_phone/index" hover-class="none" class="input"
							v-if="!userInfo.phone">
							点击绑定手机号<text class="iconfont icon-xiangyou"></text>
						</navigator>
						<view class='input acea-row row-between-wrapper' v-else>
							<input type='text' disabled='true' name='phone' :value='userInfo.phone' class='id'></input>
							<text class='iconfont icon-suozi'></text>
						</view>
					</view>
					<view class='item acea-row row-between-wrapper'>
						<view>ID号</view>
						<view class='input acea-row row-between-wrapper'>
							<input type='text' :value='userInfo.uid' disabled='true' class='id'></input>
							<text class='iconfont icon-suozi'></text>
						</view>
					</view>
					<view class='item acea-row row-between-wrapper'  v-for="(item,index) in userInfo.extend_info" :key="index">
						<view class="acea-row row-middle">{{item.title}}<text v-if="item.is_require==1" class="asterisk iconfont icon-xinghao"></text></view>
						<!-- text -->
						<view class='input' v-if="item.type == 'input'">
							<input type='text' v-model="item.value" :placeholder="item.msg" placeholder-class="placeholder"></input>
						</view>
						<!-- number -->
						<view class='input' v-if="item.type == 'int'">
							<input type='number' v-model="item.value" :placeholder="item.msg" placeholder-class="placeholder"></input>
						</view>
						<!-- email -->
						<view class='input' v-if="item.type == 'email'">
							<input type='text' v-model="item.value" :placeholder="item.msg" placeholder-class="placeholder"></input>
						</view>
						<!-- data -->
						<view class="input acea-row row-middle row-right" v-if="item.type=='date'">
							<picker mode="date" :value="item.value" start="1970-01-01" @change="bindDateChange($event,index)">
								<input type="text" v-model="item.value" :placeholder="item.msg" placeholder-class='placeholder' />
							</picker>
							<text class='iconfont icon-xiangyou'></text>
						</view>
						<!-- id -->
						<view class='input' v-if="item.type == 'id_card'">
							<input type='idcard' v-model="item.value" :placeholder="item.msg" placeholder-class="placeholder"></input>
						</view>
						<!-- phone -->
						<view class='input' v-if="item.type == 'phone'">
							<input type='tel' v-model="item.value" :placeholder="item.msg" placeholder-class="placeholder"></input>
						</view>
						<!-- radio -->
						<view class="input" v-if="item.type=='radio'">
							<radio-group @change="radioChange($event, item)">
								<label class="label" v-for="(itm,idx) in item.content" :key="idx">
									<radio :value="idx.toString()" :checked="item.value == idx.toString()">{{itm}}</radio>
								</label>
							</radio-group>
						</view>
						<!-- address -->
						<view class="input acea-row row-middle row-right" v-if="item.type=='address'">
							<input type='text' v-model="item.value" :placeholder="item.msg" placeholder-class="placeholder"></input>
						</view>
					</view>
				</view>
				<button class='modifyBnt' formType="submit">保存修改</button>
			</view>
		</form>
		<canvas canvas-id="canvas" v-if="canvasStatus"
			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
	</view>
</template>

<script>
	// +----------------------------------------------------------------------
	// | CRMEB [ CRMEB赋能开发者，助力企业发展 ]
	// +----------------------------------------------------------------------
	// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
	// +----------------------------------------------------------------------
	// | Licensed CRMEB并不是自由软件，未经许可不能去掉CRMEB相关版权
	// +----------------------------------------------------------------------
	// | Author: CRMEB Team <admin@crmeb.com>
	// +----------------------------------------------------------------------
	import { getUserSetting, userSettingEdit } from '@/api/user.js';
	import { toLogin } from '@/libs/login.js';
	import { mapGetters } from "vuex";
	import dayjs from "@/plugin/dayjs/dayjs.min.js";
	export default {
		data() {
			return {
				userInfo: {},
				loginType: 'h5', //app.globalData.loginType
				userIndex: 0,
				canvasWidth: "",
				canvasHeight: "",
				canvasStatus: false,
				mp_is_new: this.$Cache.get('MP_VERSION_ISNEW') || false,
			};
		},
		components: {},
		computed: mapGetters(['isLogin','viewColor','keyColor']),
		watch: {},
		onLoad() {
			if (this.isLogin) {
				this.getUserSetting();
			}else{
				toLogin()
			}
		},
		onShow() {},
		methods: {
			radioChange(e,item){
				item.value = e.detail.value
			},
			bindDateChange: function(e, index) {
				this.userInfo['extend_info'][index].value = e.detail.value
			},
			/**
			 * 获取用户详情
			 */
			getUserSetting: function() {
				let that = this;
				getUserSetting().then(res => {
					that.$set(that, 'userInfo', res.data);
				});
			},
			/**
			 * 上传文件
			 * 
			 */
			uploadpic: function() {
				let that = this;
				that.canvasStatus = true
				that.$util.uploadImageChange('upload/image', (res) => {
					that.userInfo.avatar = res.data.url;
					that.canvasStatus = false
				}, (res) => {
					that.canvasStatus = false
				}, (res) => {
					that.canvasWidth = res.w
					that.canvasHeight = res.h
				});
			},
			// 微信头像获取
			onChooseAvatar(e) {
				const {
					avatarUrl
				} = e.detail
				this.$util.uploadImgs('upload/image', avatarUrl, (res) => {
					this.userInfo.avatar = res.data.url
				}, (err) => {
					console.log(err)
				})
			},
			/**
			 * 提交修改
			 */
			formSubmit: function(e) {
				let that = this,
				value = e.detail.value;
				if (!value.nickname) return that.$util.Tips({
					title: '用户姓名不能为空'
				});
				value.avatar = this.userInfo.avatar;
				for (var i = 0; i < that.userInfo.extend_info.length; i++) {
					let data = that.userInfo.extend_info[i]
					if (data.is_require || data.value) {
						if (data.type === 'date' || data.type === 'address') {
							if (!data.value) {
								return that.$util.Tips({
									title: `${data.msg}`
								});
							}
						}
						if(data.type === 'input'){
							if (!data.value.trim()) {
								return that.$util.Tips({
									title: `${data.msg}`
								});
							}
						}
						if (data.type === 'int') {
							if (data.value <= 0) {
								return that.$util.Tips({
									title: `${data.msg}`
								});
							}
						}
						if (data.type === 'email') {
							if (data.is_require) {
								if (!data.value) {
									return that.$util.Tips({
										title: `${data.msg}`
									});
								}
							}
							if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(data.value)) {
								return that.$util.Tips({
									title: '请填写正确的邮箱'
								});
							}
						}
						if (data.type === 'phone') {
							if (data.is_require) {
								if (!data.value) {
									return that.$util.Tips({
										title: `${data.msg}`
									});
								}
							}
							if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(data.value)) {
								return that.$util.Tips({
									title: `${data.msg}`
								});
							}
						}
						if (data.type === 'id_card') {
							if (data.is_require) {
								if (!data.value) {
									return that.$util.Tips({
										title: `${data.msg}`
									});
								}
							}
							if (!/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/i.test(data.value)) {
								return that.$util.Tips({
									title: '请填写正确的身份证号码'
								});
							}
						}
					}
				}
				value.extend_info = that.userInfo.extend_info;
				userSettingEdit(value).then(res => {
					that.$util.Tips({
						title: res.message,
						icon: 'success'
					});
					setTimeout(()=>{
						uni.switchTab({
							url: '/pages/user/index'
						})
					},500)
				}).catch(msg => {
					return that.$util.Tips({
						title: msg || '保存失败，您并没有修改'
					});
				});
			}
		}
	}
</script>
<style>
	.placeholder{
		color: #ccc;
		font-size: 30rpx;
	}
</style>
<style scoped lang="scss">
	/deep/radio .wx-radio-input.wx-radio-input-checked,
	/deep/uni-radio .uni-radio-input.uni-radio-input-checked {
	 border: 1px solid var(--view-theme)!important;
	 background-color: var(--view-theme)!important;
	}
	/deep/checkbox .uni-checkbox-input.uni-checkbox-input-checked,
	/deep/checkbox .wx-checkbox-input.wx-checkbox-input-checked {
	  border: 1px solid var(--view-theme)!important;
	  background-color: var(--view-theme)!important;
	  color: #fff!important;
	}
	.personal-data{
		padding-bottom: 50rpx;
	}
	.dater{
		width: 400rpx;
	}
	.grab{
		color: #ccc !important;
	}
	.asterisk{
		color: red;
		font-size: 20rpx;
		margin-left: 6rpx;
	}
	
	.cartcolor {
		color: var(--view-theme);
		border: 1px solid var(--view-theme);
	}
	.personal-data .wrapper {
		margin: 10rpx 0;
		background-color: #fff;
		padding: 36rpx 30rpx 13rpx 30rpx;
	}
	.personal-data .wrapper .title {
		margin-bottom: 30rpx;
		font-size: 32rpx;
		color: #282828;
	}
	.personal-data .wrapper .wrapList .item {
		width: 690rpx;
		height: 160rpx;
		background-color: #f8f8f8;
		border-radius: 20rpx;
		margin-bottom: 22rpx;
		padding: 0 30rpx;
		position: relative;
		border: 2rpx solid #f8f8f8;
		box-sizing: border-box;
	}
	.personal-data .wrapper .wrapList .item.on {
		border-color: #e93323;
		border-radius: 20rpx;
		background-image: url("data:image/png;base64, ");
		background-size: 100% 100%;
		background-color: #fff9f9;
		background-repeat: no-repeat;
	}
	.personal-data .wrapper .wrapList .item .picTxt {
		width: 445rpx;
	}
	.personal-data .wrapper .wrapList .item .picTxt .pictrue {
		width: 96rpx;
		height: 96rpx;
		position: relative;
	}
	.personal-data .wrapper .wrapList .item .picTxt .pictrue image {
		width: 100%;
		height: 100%;
		border-radius: 50%;
	}
	.personal-data .wrapper .wrapList .item .picTxt .pictrue .alter {
		width: 30rpx;
		height: 30rpx;
		border-radius: 50%;
		position: absolute;
		bottom: 0;
		right: 0;
	}
	.personal-data .wrapper .wrapList .item .picTxt .text {
		width: 325rpx;
	}
	.personal-data .wrapper .wrapList .item .picTxt .text .name {
		width: 100%;
		font-size: 30rpx;
		color: #282828;
	}
	.personal-data .wrapper .wrapList .item .picTxt .text .phone {
		font-size: 24rpx;
		color: #999;
		margin-top: 10rpx;
	}
	.personal-data .wrapper .wrapList .item .bnt {
		font-size: 24rpx;
		background-color: #fff;
		border-radius: 27rpx;
		width: 140rpx;
		height: 54rpx;
		border: 2rpx solid #e93323;
	}
	.personal-data .wrapper .wrapList .item .currentBnt {
		position: absolute;
		right: 0;
		top: 0;
		font-size: 26rpx;
		background-color: rgba(233, 51, 35, 0.1);
		width: 140rpx;
		height: 48rpx;
		border-radius: 0 20rpx 0 20rpx;
	}
	.personal-data .list {
		margin-top: 15rpx;
		background-color: #fff;
	}
	.personal-data .list .item {
		padding: 30rpx 30rpx 30rpx 0;
		border-bottom: 1rpx solid #f2f2f2;
		margin-left: 30rpx;
		font-size: 30rpx;
		color: #282828;
		.label{
			margin-right: 30rpx;
		}
	}
	.personal-data .list .item .phone {
		width: 160rpx;
		height: 56rpx;
		font-size: 24rpx;
		color: #fff;
		line-height: 56rpx;
		border-radius: 32rpx
	}
	.personal-data .list .item .pictrue {
		width: 88rpx;
		height: 88rpx;
	}
	.personal-data .list .item .pictrue image {
		width: 100%;
		height: 100%;
		border-radius: 50%;
	}
	.personal-data .list .item .input {
		width: 460rpx;
		text-align: right;
		color: #cccccc;
		input{
			text-align: right;
		}
		.picker{
			width: 400rpx;
		}
	}
	.personal-data .list .item .input .id {
		width: 414rpx;
	}
	.personal-data .list .item .input .iconfont {
		font-size: 28rpx;
		color: #cccccc;
		margin-left: 10rpx;
	}
	.personal-data .modifyBnt {
		font-size: 32rpx;
		color: #fff;
		width: 690rpx;
		height: 90rpx;
		border-radius: 50rpx;
		text-align: center;
		line-height: 90rpx;
		margin: 76rpx auto 0 auto;
		background-color: var(--view-theme);;
	}
	.personal-data .logOut {
		font-size: 32rpx;
		text-align: center;
		width: 690rpx;
		height: 90rpx;
		border-radius: 45rpx;
		margin: 30rpx auto 0 auto;
	}
	.avatar-box {
		width: 96rpx;
		height: 96rpx;
		image {
			width: 100%;
			height: 100%;
			border-radius: 50%;
			border: 1px solid #eee;
		}
	}
</style>
