/* ═════ 档案填写页:出生年月/性别/地区(原生 picker)+ 日常肤质选择(对齐 H5 #s-profile) ═════ * 档案字段与 H5 一致:{ real_age, gender, region, daily_skin_type } */ var api = require('../../utils/api.js'); var REGION_DATA = require('../../utils/region-data.js'); // 肤质选项(与 H5 SKINS 一致,图片远程加载) var SKINS = [ { img: 'img/ui-20261009/skin-0-dry.png', name: '干性肌肤', desc: '全脸干燥,容易紧绷、缺乏光泽' }, { img: 'img/ui-20261009/skin-1-mixeddry.png', name: '混合偏干肌肤', desc: '两颊偏干,T区油脂较少或偶尔出油' }, { img: 'img/ui-20261009/skin-2-neutral.png', name: '中性肌肤', desc: '水油平衡,肤感舒适,无明显干燥出油' }, { img: 'img/ui-20261009/skin-3-oily.png', name: '油性肌肤', desc: '全脸易出油,容易泛油光、毛孔明显' }, { img: 'img/ui-20261009/skin-4-mixedoily.png', name: '混合偏油肌肤', desc: 'T区易出油,两颊相对清爽或轻微干燥' } ]; var NOW = new Date(), NOW_Y = NOW.getFullYear(), NOW_M = NOW.getMonth() + 1; var YEARS = [], MONTHS = []; for (var y = NOW_Y - 99; y <= NOW_Y - 1; y++) YEARS.push(y + '年'); for (var m = 1; m <= 12; m++) MONTHS.push(m + '月'); function ageFromBirth(y, m) { return NOW_Y - y - (NOW_M < m ? 1 : 0); } // 未过生日月份按少一岁(与 H5 一致) Page({ data: { bgUrl: api.assetUrl('img/bg-splash.jpg'), // 出生年月(两列滚轮:年+月,默认 30 岁 1 月) birthRange: [YEARS, MONTHS], birthIndex: [YEARS.indexOf((NOW_Y - 30) + '年'), 0], birthText: '', birth: '', // 'YYYY-MM' age: 0, // real_age // 性别 genderRange: ['女', '男'], genderText: '', // 所在地区(省 + 市两列) regionRange: [ REGION_DATA.map(function (p) { return p[0]; }), REGION_DATA[0][1] ], regionIndex: [0, 0], regionText: '', // 肤质轮播 skins: SKINS.map(function (s) { return { img: api.assetUrl(s.img), name: s.name, desc: s.desc }; }), skinIndex: 0, showGuide: false, picker: '', pickerValue: [0, 0] }, onLoad: function () { if (!api.user()) { my.redirectTo({ url: '/pages/splash/splash' }); return; } this.ownerId = api.user().id; try { var saved = my.getStorageSync({ key: 'juzi.taobao.profile.' + api.user().id }).data; if (saved) { saved.age = ageFromBirth(Number(saved.birth.split('-')[0]), Number(saved.birth.split('-')[1])); this.setData(saved); } } catch (_) {} }, onShow: function () { if (!api.user() || this.ownerId !== api.user().id) { this.setData({ birthText: '', genderText: '', regionText: '', showGuide: false }); my.redirectTo({ url: '/pages/splash/splash' }); } }, onOpenBirth: function () { this.setData({ picker: 'birth', pickerValue: this.data.birthIndex.slice() }); }, onOpenRegion: function () { var index = this.data.regionIndex.slice(); // A canceled draft may have changed the cities while the saved province stayed put. this.setData({ picker: 'region', pickerValue: index, regionRange: [REGION_DATA.map(function (p) { return p[0]; }), REGION_DATA[index[0]][1]] }); }, onPickerChange: function (e) { var value = e.detail.value; if (this.data.picker === 'region' && value[0] !== this.data.pickerValue[0]) value[1] = 0; var patch = { pickerValue: value }; if (this.data.picker === 'region') patch.regionRange = [REGION_DATA.map(function (p) { return p[0]; }), REGION_DATA[value[0]][1]]; this.setData(patch); }, onPickerConfirm: function () { var e = { detail: { value: this.data.pickerValue } }; if (this.data.picker === 'birth') this.onBirthChange(e); else this.onRegionChange(e); this.onPickerClose(); }, onPickerClose: function () { this.setData({ picker: '' }); }, /* ─── 出生年月 ─── */ onBirthChange: function (e) { var idx = e.detail.value; var y = parseInt(YEARS[idx[0]], 10); var m = idx[1] + 1; this.setData({ birthIndex: idx, birthText: y + '年' + m + '月', birth: y + '-' + (m < 10 ? '0' : '') + m, age: ageFromBirth(y, m) }); }, /* ─── 性别 ─── */ onGenderChange: function (e) { this.setData({ genderText: this.data.genderRange[e.detail.value] }); }, /* ─── 地区:省份列滚动时联动城市列 ─── */ onRegionColumnChange: function (e) { if (e.detail.column !== 0) return; var cities = REGION_DATA[e.detail.value][1]; this.setData({ 'regionRange[1]': cities, regionIndex: [e.detail.value, 0] }); }, onRegionChange: function (e) { var idx = e.detail.value; var prov = REGION_DATA[idx[0]][0]; var city = REGION_DATA[idx[0]][1][idx[1]]; // 直辖市/港澳台只显示一级(与 H5 一致) var text = !city || city === prov ? prov : prov + ' ' + city; this.setData({ regionIndex: idx, regionText: text }); }, /* ─── 肤质轮播 ─── */ onSkinChange: function (e) { this.setData({ skinIndex: e.detail.current }); }, onSkinPrev: function () { if (this.data.skinIndex > 0) this.setData({ skinIndex: this.data.skinIndex - 1 }); }, onSkinNext: function () { if (this.data.skinIndex < SKINS.length - 1) this.setData({ skinIndex: this.data.skinIndex + 1 }); }, /* ─── 提交 → 拍照引导弹窗 ─── */ onSubmit: function () { var d = this.data; if (!d.birth || !(d.age >= 1 && d.age <= 99)) { my.showToast({ content: '请选择出生年月', type: 'none' }); return; } if (!d.genderText) { my.showToast({ content: '请选择性别', type: 'none' }); return; } if (!d.regionText) { my.showToast({ content: '请选择所在地区', type: 'none' }); return; } this.setData({ showGuide: true }); }, onCloseGuide: function () { this.setData({ showGuide: false }); }, // 「开始」:档案入全局态,进入拍照页 onStartCamera: function () { if (!api.user()) { my.redirectTo({ url: '/pages/splash/splash' }); return; } var d = this.data; getApp().globalData.profile = { real_age: d.age, gender: d.genderText, region: d.regionText, daily_skin_type: SKINS[d.skinIndex].name }; my.setStorageSync({ key: 'juzi.taobao.profile.' + api.user().id, data: { birth: d.birth, birthIndex: d.birthIndex, birthText: d.birthText, genderText: d.genderText, regionIndex: d.regionIndex, regionText: d.regionText, regionRange: d.regionRange, skinIndex: d.skinIndex } }); this.setData({ showGuide: false }); my.navigateTo({ url: '/pages/camera/camera' }); }, noop: function () {} });