码农搬砖工 9018a4f868 xxx
2025-04-23 18:23:41 +08:00

171 lines
3.5 KiB
JavaScript

import request from '~/api/request';
import { areaList } from './areaData.js';
Page({
data: {
personInfo: {
name: '',
gender: 0,
birth: '',
address: [],
introduction: '',
photos: [],
},
genderOptions: [
{
label: '男',
value: 0,
},
{
label: '女',
value: 1,
}
],
birthVisible: false,
birthStart: '1970-01-01',
birthEnd: '2025-03-01',
birthTime: 0,
birthFilter: (type, options) => (type === 'year' ? options.sort((a, b) => b.value - a.value) : options),
addressText: '',
addressVisible: false,
provinces: [],
cities: [],
gridConfig: {
column: 3,
width: 160,
height: 160,
},
},
onLoad() {
this.initAreaData();
this.getPersonalInfo();
},
getPersonalInfo() {
request('/api/genPersonalInfo').then((res) => {
this.setData(
{
personInfo: res.data.data,
},
() => {
const { personInfo } = this.data;
this.setData({
addressText: `${areaList.provinces[personInfo.address[0]]} ${areaList.cities[personInfo.address[1]]}`,
});
},
);
});
},
getAreaOptions(data, filter) {
const res = Object.keys(data).map((key) => ({ value: key, label: data[key] }));
return typeof filter === 'function' ? res.filter(filter) : res;
},
getCities(provinceValue) {
return this.getAreaOptions(
areaList.cities,
(city) => `${city.value}`.slice(0, 2) === `${provinceValue}`.slice(0, 2),
);
},
initAreaData() {
const provinces = this.getAreaOptions(areaList.provinces);
const cities = this.getCities(provinces[0].value);
this.setData({ provinces, cities });
},
onAreaPick(e) {
const { column, index } = e.detail;
const { provinces } = this.data;
// 更改省份则更新城市列表
if (column === 0) {
const cities = this.getCities(provinces[index].value);
this.setData({ cities });
}
},
showPicker(e) {
const { mode } = e.currentTarget.dataset;
this.setData({
[`${mode}Visible`]: true,
});
if (mode === 'address') {
const cities = this.getCities(this.data.personInfo.address[0]);
this.setData({ cities });
}
},
hidePicker(e) {
const { mode } = e.currentTarget.dataset;
this.setData({
[`${mode}Visible`]: false,
});
},
onPickerChange(e) {
const { value, label } = e.detail;
const { mode } = e.currentTarget.dataset;
this.setData({
[`personInfo.${mode}`]: value,
});
if (mode === 'address') {
this.setData({
addressText: label.join(' '),
});
}
},
personInfoFieldChange(field, e) {
const { value } = e.detail;
this.setData({
[`personInfo.${field}`]: value,
});
},
onNameChange(e) {
this.personInfoFieldChange('name', e);
},
onGenderChange(e) {
this.personInfoFieldChange('gender', e);
},
onIntroductionChange(e) {
this.personInfoFieldChange('introduction', e);
},
onPhotosRemove(e) {
const { index } = e.detail;
const { photos } = this.data.personInfo;
photos.splice(index, 1);
this.setData({
'personInfo.photos': photos,
});
},
onPhotosSuccess(e) {
const { files } = e.detail;
this.setData({
'personInfo.photos': files,
});
},
onPhotosDrop(e) {
const { files } = e.detail;
this.setData({
'personInfo.photos': files,
});
},
onSaveInfo() {
// console.log(this.data.personInfo);
},
});