<template> <view> <dHeader :left-icon="!first" :title="first ? '个人信息填写' : $lang.lang.myInfo.info"></dHeader> <view class="start-bar"></view> <view class="consultAdd"> <view class="consult-item"> <view class="consult-item-label required-icon"> <text>{{ $lang.lang.myInfo.name }}</text> </view> <view class="consult-item-put"> <input v-model="params.nickname" type="text" :placeholder="$lang.lang.notices.nickName" /> </view> </view> <view class="consult-item"> <view class="consult-item-label required-icon"> <text>{{ $lang.lang.myInfo.nameEn }}</text> </view> <view class="consult-item-put"> <input v-model="params.englishName" type="text" :placeholder="$lang.lang.notices.nameEn" /> </view> </view> <view class="consult-item"> <view class="consult-item-label"> <text>{{ $lang.lang.myInfo.birth }}</text> </view> <view class="consult-item-put"> <picker style="width: 100%" mode="date" class="date-picker" :value="date" :start="startDate" :end="endDate" @change="bindDateChange" > <view class="uni-input">{{ date }}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> </view> <view class="consult-item"> <view class="consult-item-label"> <text>{{ $lang.lang.myInfo.sex }}</text> </view> <view class="consult-item-put"> <picker style="width: 100%" :value="genderIndex" :range="genderData" @change="generChange" > <view class="uni-input">{{ genderData[genderIndex] }}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> </view> <view class="consult-item"> <view class="consult-item-label"> <text>{{ $lang.lang.myInfo.phone }}</text> </view> <view class="consult-item-put"> <view class="login-area"> <picker :value="areaIndex" :range="areaName" disabled> <view class="uni-input">{{ $request.checkAddIcon(areaData[areaIndex]) }}</view> </picker> <image src="../../static/img/down1.png" mode=""></image> </view> <input v-model="params.mobile" disabled type="number" :placeholder="$lang.lang.notices.contactPhone" /> </view> </view> <view class="consult-item"> <view class="consult-item-label required-icon"> <text>{{ $lang.lang.myInfo.country }}</text> </view> <view class="consult-item-put"> <picker style="width: 100%" :range="countryArray" :range-key="rangeKey == 'zh' ? 'titleZh' : 'titleEn'" @change="bindCountyChange" > <view :class="{ placeholder: !params.country }">{{ params.countryValue ? params.countryValue : $lang.lang.notices.country }}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> </view> <view class="consult-item"> <view class="consult-item-label required-icon"> <text>{{ $lang.lang.myInfo.city }}</text> </view> <view class="consult-item-put" @click="showCityPicker"> <view :class="{ placeholder: !params.city }"> {{ params.cityValue || $lang.lang.notices.city }} </view> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> <cityListPicker v-model="cityPickerPopup" :dataSource="cityArray" :pickerValues="params.city" @reLoad="changeCity" ></cityListPicker> </view> <view class="consult-item"> <view class="consult-item-label"> <text>{{ $lang.lang.myInfo.adderss }}</text> </view> <view class="consult-item-put"> <input v-model="params.address" type="text" :placeholder="$lang.lang.notices.address" /> </view> </view> <view class="consult-item"> <view class="consult-item-label"> <text>{{ $lang.lang.myInfo.department }}</text> </view> <view class="consult-item-put"> <input v-model="params.department" type="text" :placeholder="$lang.lang.notices.department" /> </view> </view> <view class="consult-item"> <view class="consult-item-label"> <text>{{ $lang.lang.myInfo.job }}</text> </view> <view class="consult-item-put"> <input v-model="params.jobPosition" type="text" :placeholder="$lang.lang.notices.job" /> </view> </view> </view> <view class="consult-btn"> <view class="" @click="submitForm">{{ first ? '完成' : $lang.lang.myInfo.edit }}</view> </view> </view> </template> <script> import dHeader from '../../components/dHeader/index.vue' import cityListPicker from './cityListPicker.vue' export default { components: { dHeader, cityListPicker }, data() { const currentDate = this.getDate({ format: true }) return { params: {}, areaData: [], areaName: [], areaIndex: 0, genderData: [ this.$lang.lang.myInfo.girl, this.$lang.lang.myInfo.boy, this.$lang.lang.myInfo.secret ], genderIndex: 2, date: currentDate, time: '00:00', // 国家列表 countryArray: [], countryId: 0, // 城市列表 cityArray: [], // 是否为首次进入 没有国家城市信息 first: false, cityPickerPopup: false //城市下拉列表展示 } }, onLoad(route) { const { type } = route if (type == 'first') { this.first = true } this.getUserInfo() }, computed: { startDate() { return this.getDate('start') }, endDate() { return this.getDate('end') }, rangeKey() { return this.$lang.locale == 'zh' ? 'zh' : 'en' } }, watch: { cityPickerPopup(newValue, oldValue) { console.log('99999', newValue) } }, methods: { //变更城市 changeCity(e) { this.$set(this.params, 'cityValue', e.name) this.$set(this.params, 'city', e.id) console.log('000008', e) }, //弹出城市下拉筛选列表 showCityPicker() { this.cityPickerPopup = true }, submitForm() { if (!this.params.nickname) { uni.showToast({ title: this.$lang.lang.notices.nickName, icon: 'none' }) return } if (!this.params.englishName) { uni.showToast({ title: this.$lang.lang.notices.nameEn, icon: 'none' }) return } if (!this.params.country) { uni.showToast({ title: this.$lang.lang.notices.country, icon: 'none' }) return } if (!this.params.city) { uni.showToast({ title: this.$lang.lang.notices.city, icon: 'none' }) return } this.$request.put('/app-api/member/user/update', this.params).then((res) => { if (res.code == 0) { if (this.first) { uni.showToast({ title: '成功', icon: 'none' }) uni.reLaunch({ url: '/pages/index/index' }) return } uni.showToast({ title: this.$lang.lang.notices.edited, icon: 'none' }) } else { uni.showToast({ title: res.msg, icon: 'none' }) } }) }, getUserInfo() { this.$request.get('/app-api/member/user/get').then((res) => { if (res.code == 0 && res.data) { this.params = res.data if (!res.data.gender) { this.params.gender = 2 } if (res.data.birthday) { this.date = res.data.birthday } const { city, country, countryTitleZh, countryTitleEn, cityTitleZh, cityTitleEn } = res.data if (this.first) { this.params.nickname = '' this.params.englishName = '' } this.params.city = city this.params.country = country this.params.cityValue = this.rangeKey == 'zh' ? cityTitleZh : cityTitleEn this.params.countryValue = this.rangeKey == 'zh' ? countryTitleZh : countryTitleEn this.getCountryList() this.getCityList() this.Country() if (country) this.getCityList(country) } }) }, // 获取国家区号 Country() { let that = this that.$request.get('/app-api/ecw/country/list-all').then((res) => { // console.log(res) if (res.code == 0 && res.data.length > 0) { for (let i in res.data) { that.areaData.push(res.data[i].tel) if (res.data[i].tel == that.params.areaCode) { that.areaIndex = i } if (that.$lang.locale == 'zh') { that.areaName.push(res.data[i].tel + ' ' + res.data[i].nameZh) } else { that.areaName.push(res.data[i].tel + ' ' + res.data[i].nameEn) } } } }) }, areaChange(e) { this.areaIndex = e.detail.value this.params.areaCode = this.areaData[this.areaIndex] }, generChange(e) { console.log(e.detail.value) this.genderIndex = e.detail.value this.params.gender = e.detail.value }, getDate(type) { const date = new Date() let year = date.getFullYear() - 16 let month = date.getMonth() + 1 let day = date.getDate() if (type === 'start') { year = year - 80 } else if (type === 'end') { year = year } month = month > 9 ? month : '0' + month day = day > 9 ? day : '0' + day return `${year}-${month}-${day}` }, bindDateChange: function (e) { this.date = e.detail.value this.params.birthday = e.detail.value }, // 获取国家列表 getCountryList() { this.$request.get('/admin-api/ecw/region/getTradeCountryList').then((res) => { if (res.code == 0) { this.countryArray = res.data } }) }, // 国家选择 change bindCountyChange(e) { const index = e.detail.value const { titleZh, titleEn, id } = this.countryArray[index] const value = this.rangeKey == 'zh' ? titleZh : titleEn if (this.params.country != id) { this.$set(this.params, 'cityValue', '') this.$set(this.params, 'city', '') this.getCityList(id) } this.$set(this.params, 'countryValue', value) this.$set(this.params, 'country', id) }, // 获取城市列表 getCityList(id) { this.$request.get('/admin-api/ecw/region/getCityListByParent', { id }).then((res) => { if (res.code == 0) { this.cityArray = res.data } }) } } } </script> <style> page { padding-top: 190upx; } .consultAdd { width: 90%; margin: 0 auto 30upx; background-color: var(--c0); border-radius: 24upx; padding: 20upx 0; font-size: var(--f26); } .consult-item { display: flex; width: 92%; margin: 0 auto; margin-bottom: 20upx; position: relative; } .consult-item-2 { width: 100%; padding: 20upx 0 0 0; } .consult-item image { width: 44upx; height: 44upx; vertical-align: middle; } .consult-item-2 image { width: 44upx; height: 44upx; vertical-align: middle; margin-right: 14upx; margin-left: 40upx; } .consult-item-label { width: 180upx; display: flex; align-items: center; } .consult-item-put { height: 70upx; border: 1px solid var(--cdf); display: flex; align-items: center; padding-left: 20upx; border-radius: 10upx; flex: 1; } .consult-item-put input { font-size: var(--f26); flex: 1; } .consult-item-label-2 { padding: 0 0 0 0upx; display: flex; align-items: center; width: 100%; } .consult-item-put-2 { padding: 30upx 40upx 30upx 40upx; display: flex; align-items: center; border-radius: 1px solid var(--cdf); } .consult-item-put-2 .textarea { font-size: var(--f26); width: 100%; height: 200upx; padding: 20upx; border: 1px solid var(--cdf); border-radius: 10upx; } .noborder { border: none; } .radio { margin-right: 50upx; } radio { margin-right: 10upx; } .consult-btn { width: 90%; margin: 50upx auto 0; } .consult-btn view { width: 100%; height: 94upx; display: flex; align-items: center; justify-content: center; background-color: var(--c036); color: var(--c0); font-size: var(--f36); font-weight: 700; margin-bottom: 40upx; border-radius: 8upx; } .v-picker { width: 100%; } .v-picker-2 .uni-input { color: #666666; } .login-area { display: flex; align-items: center; justify-content: center; font-size: var(--f30); /* background-color: #27417C; */ border-radius: 60upx; height: 50upx; padding: 0 10upx; margin-right: 20upx; font-size: var(--f26); } .login-area text { margin-right: 10upx; } .rgt { position: absolute; right: 20upx; } .placeholder { color: #666666; } .required-icon { position: relative; } .required-icon::after { content: '*'; color: red; position: absolute; left: -14upx; top: 16upx; } </style>