diff --git a/app.json b/app.json
index 3629731..efb8957 100644
--- a/app.json
+++ b/app.json
@@ -86,6 +86,16 @@
"pages": [
"pages/index/index"
]
+ },
+ {
+ "root": "subpages/family",
+ "name": "family",
+ "pages": [
+ "pages/index/index",
+ "pages/bindFamily/bindFamily",
+ "pages/familyInfo/familyInfo",
+ "pages/noAccess/noAccess"
+ ]
}
],
"preloadRule": {
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..e488daf
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,7 @@
+{
+ "projectname": "epdc-office-mp-yushan",
+ "setting": {
+ "compileHotReLoad": true
+ },
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html"
+}
\ No newline at end of file
diff --git a/subpages/family/images/arrow-right.png b/subpages/family/images/arrow-right.png
new file mode 100644
index 0000000..5563325
Binary files /dev/null and b/subpages/family/images/arrow-right.png differ
diff --git a/subpages/family/images/arrow.png b/subpages/family/images/arrow.png
new file mode 100644
index 0000000..1fb30af
Binary files /dev/null and b/subpages/family/images/arrow.png differ
diff --git a/subpages/family/images/close.png b/subpages/family/images/close.png
new file mode 100644
index 0000000..a0948c7
Binary files /dev/null and b/subpages/family/images/close.png differ
diff --git a/subpages/family/images/family-qr.png b/subpages/family/images/family-qr.png
new file mode 100644
index 0000000..240c21c
Binary files /dev/null and b/subpages/family/images/family-qr.png differ
diff --git a/subpages/family/images/no-family.png b/subpages/family/images/no-family.png
new file mode 100644
index 0000000..b2246d2
Binary files /dev/null and b/subpages/family/images/no-family.png differ
diff --git a/subpages/family/pages/bindFamily/bindFamily.js b/subpages/family/pages/bindFamily/bindFamily.js
new file mode 100644
index 0000000..1247c77
--- /dev/null
+++ b/subpages/family/pages/bindFamily/bindFamily.js
@@ -0,0 +1,66 @@
+// subpages/family/pages/bindFamily/bindFamily.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/subpages/family/pages/bindFamily/bindFamily.json b/subpages/family/pages/bindFamily/bindFamily.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/subpages/family/pages/bindFamily/bindFamily.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/subpages/family/pages/bindFamily/bindFamily.wxml b/subpages/family/pages/bindFamily/bindFamily.wxml
new file mode 100644
index 0000000..d6f855e
--- /dev/null
+++ b/subpages/family/pages/bindFamily/bindFamily.wxml
@@ -0,0 +1,2 @@
+
+subpages/family/pages/bindFamily/bindFamily.wxml
diff --git a/subpages/family/pages/bindFamily/bindFamily.wxss b/subpages/family/pages/bindFamily/bindFamily.wxss
new file mode 100644
index 0000000..0c9003b
--- /dev/null
+++ b/subpages/family/pages/bindFamily/bindFamily.wxss
@@ -0,0 +1 @@
+/* subpages/family/pages/bindFamily/bindFamily.wxss */
\ No newline at end of file
diff --git a/subpages/family/pages/familyInfo/familyInfo.js b/subpages/family/pages/familyInfo/familyInfo.js
new file mode 100644
index 0000000..2ff9b27
--- /dev/null
+++ b/subpages/family/pages/familyInfo/familyInfo.js
@@ -0,0 +1,66 @@
+// subpages/family/pages/familyInfo/familyInfo.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/subpages/family/pages/familyInfo/familyInfo.json b/subpages/family/pages/familyInfo/familyInfo.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/subpages/family/pages/familyInfo/familyInfo.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/subpages/family/pages/familyInfo/familyInfo.wxml b/subpages/family/pages/familyInfo/familyInfo.wxml
new file mode 100644
index 0000000..797a815
--- /dev/null
+++ b/subpages/family/pages/familyInfo/familyInfo.wxml
@@ -0,0 +1,2 @@
+
+subpages/family/pages/familyInfo/familyInfo.wxml
diff --git a/subpages/family/pages/familyInfo/familyInfo.wxss b/subpages/family/pages/familyInfo/familyInfo.wxss
new file mode 100644
index 0000000..1ec7536
--- /dev/null
+++ b/subpages/family/pages/familyInfo/familyInfo.wxss
@@ -0,0 +1 @@
+/* subpages/family/pages/familyInfo/familyInfo.wxss */
\ No newline at end of file
diff --git a/subpages/family/pages/index/index.js b/subpages/family/pages/index/index.js
new file mode 100644
index 0000000..6e82e6c
--- /dev/null
+++ b/subpages/family/pages/index/index.js
@@ -0,0 +1,164 @@
+import {
+ getHouseInfo
+} from '../../utils/api.js'
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ familyInfo:null,
+ showQr: true,
+ memberList:[],
+ roomCode:null,
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ async onLoad(options) {
+ wx.showLoading({
+ title: "加载中",
+ mask: true,
+ });
+ this.setData({
+ roomCode : options.roomCode.toString()
+ })
+ // this.setData({
+ // roomCode:'3702110100420037200006'
+ // })
+ wx.setStorage({
+ key: 'roomCode',
+ data: this.data.roomCode
+ })
+ await this.getInfo(this.data.roomCode)
+ wx.hideLoading()
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ async onShow() {
+ wx.showLoading({
+ title: "加载中",
+ mask: true,
+ });
+ let roomCode = wx.getStorageSync('roomCode')
+ this.setData({
+ roomCode : roomCode
+ })
+ await this.getInfo(this.data.roomCode)
+ wx.hideLoading()
+ },
+
+ // 获取房屋信息
+ async getInfo(code){
+ const res = await getHouseInfo({roomCode:code})
+ if(res.msg === 'success' && res.code === 0){
+ this.setData({
+ 'familyInfo':res.data,
+ 'roomCode':res.data.members
+ })
+ }
+ },
+ // 跳转新增页面
+ handleTo(){
+ wx.navigateTo({
+ url: '/subpages/family/pages/familyInfo/familyInfo?pageType=add&id='+ this.data.familyInfo.id
+ })
+ },
+ // 跳转查看页面
+ toFamilyInfo(e){
+ wx.navigateTo({
+ url: '/subpages/family/pages/familyInfo/familyInfo?pageType=look&idCard='+ e.currentTarget.dataset.id
+ })
+ },
+ // 取消编辑
+ cancel() {
+ this.setData({
+ showQr: true,
+ });
+ },
+ // 点击保存二维码
+ comfirmSave() {
+ wx.downloadFile({
+ url: this.data.familyInfo.maUrl,
+ success: function (res) {
+ let imageFilePath = res.tempFilePath;
+ wx.saveImageToPhotosAlbum({
+ filePath: imageFilePath,
+ success: function (data) {
+ wx.showToast({
+ title: '保存成功',
+ icon: 'none',
+ duration: 1500
+ });
+ },
+ fail: function (res) {
+ wx.showToast({
+ title: '保存失败',
+ icon: 'none',
+ duration: 1500
+ })
+ }
+ })
+ },
+ fail: (err) => {
+ wx.showToast({
+ title: '下载失败',
+ icon: 'none',
+ duration: 1500
+ })
+ }
+ })
+ },
+ handlePreview() {
+ if (!this.data.familyInfo.maUrl) return;
+ this.setData({
+ showQr: false,
+ });
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/subpages/family/pages/index/index.json b/subpages/family/pages/index/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/subpages/family/pages/index/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/subpages/family/pages/index/index.wxml b/subpages/family/pages/index/index.wxml
new file mode 100644
index 0000000..193d9dc
--- /dev/null
+++ b/subpages/family/pages/index/index.wxml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+ {{ familyInfo.plotName + familyInfo.buildingName + familyInfo.unit + familyInfo.roomNo}}
+
+ No.{{ familyInfo.roomCode }}
+
+
+
+
+
+
+
+
+
+ 我的"e家码"
+
+
+
+ No.{{ familyInfo.roomCode }}
+
+
+
+
+
+
+
+ 家庭成员
+
+
+
+
+
+
+
+
+
+ {{ item.userName }}
+ {{ item.relation }}
+ {{ item.mobile }}
+ 查看
+
+
+ 暂无成员
+
+
+ +
+ 添加家庭成员
+
+
+
+ 暂无家庭信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存到相册
+
+
+
\ No newline at end of file
diff --git a/subpages/family/pages/index/index.wxss b/subpages/family/pages/index/index.wxss
new file mode 100644
index 0000000..67b2fee
--- /dev/null
+++ b/subpages/family/pages/index/index.wxss
@@ -0,0 +1 @@
+/* subpages/family/pages/index/index.wxss */
\ No newline at end of file
diff --git a/subpages/family/pages/noAccess/noAccess.js b/subpages/family/pages/noAccess/noAccess.js
new file mode 100644
index 0000000..c8a3cc2
--- /dev/null
+++ b/subpages/family/pages/noAccess/noAccess.js
@@ -0,0 +1,71 @@
+// subpages/family/pages/noAccess/noAccess.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+ handleHome(){
+ wx.navigateTo({
+ url: '/pages/index/index',
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/subpages/family/pages/noAccess/noAccess.json b/subpages/family/pages/noAccess/noAccess.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/subpages/family/pages/noAccess/noAccess.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/subpages/family/pages/noAccess/noAccess.wxml b/subpages/family/pages/noAccess/noAccess.wxml
new file mode 100644
index 0000000..c116329
--- /dev/null
+++ b/subpages/family/pages/noAccess/noAccess.wxml
@@ -0,0 +1,4 @@
+
+
+ 返回首页
+
\ No newline at end of file
diff --git a/subpages/family/pages/noAccess/noAccess.wxss b/subpages/family/pages/noAccess/noAccess.wxss
new file mode 100644
index 0000000..b8d3da3
--- /dev/null
+++ b/subpages/family/pages/noAccess/noAccess.wxss
@@ -0,0 +1 @@
+/* subpages/family/pages/noAccess/noAccess.wxss */
\ No newline at end of file
diff --git a/subpages/family/utils/api.js b/subpages/family/utils/api.js
new file mode 100644
index 0000000..ba995a9
--- /dev/null
+++ b/subpages/family/utils/api.js
@@ -0,0 +1,71 @@
+const request = require('../../../utils/request')
+
+/**
+ * 绑定我的家庭房屋
+ */
+export function bindingFamily (param) {
+ return request.post('custom/family/bindingFamily',param)
+}
+
+/**
+ * 获取小区下拉列表
+ */
+export function getPlotOption (param) {
+ return request.get('custom/personroom/getPlotOption',param)
+}
+
+/**
+ * 获取楼栋下拉列表
+ */
+export function getBuildingOption (param) {
+ return request.get('custom/personroom/getBuildingOption',param)
+}
+
+/**
+ * 获取单元下拉列表
+ */
+export function getUnitOption (param) {
+ return request.get('custom/personroom/getUnitOption',param)
+}
+
+/**
+ * 获取房屋下拉列表
+ */
+export function getHouseOption (param) {
+ return request.get('custom/personroom/getHouseOption', param)
+}
+
+/**
+ * 添加成员信息
+ */
+ export function addFamilyMember (param) {
+ return request.post('custom/personroom/addFamilyMember', param)
+}
+
+/**
+ * 修改成员信息
+ */
+ export function updateFamilyMember (param) {
+ return request.post('custom/personroom/updateFamilyMember',param)
+}
+
+/**
+ * 获取成员信息
+ */
+ export function getFamilyMember (param) {
+ return request.get('custom/personroom/getFamilyMember',param)
+}
+
+/**
+ * 获取房屋信息
+ */
+ export function getHouseInfo (param) {
+ return request.get('custom/personroom/getHouseInfo',param)
+}
+
+/**
+ * 获取与户主关系
+ */
+ export function householderRelation () {
+ return request.get('imgconfig/heartImgType/householder_relation')
+}
diff --git a/subpages/family/utils/validate/index.js b/subpages/family/utils/validate/index.js
new file mode 100644
index 0000000..49845d2
--- /dev/null
+++ b/subpages/family/utils/validate/index.js
@@ -0,0 +1,51 @@
+import rules from './rules';
+
+/**
+ * 表单验证
+ *
+ * @param {Object} fmData [表单数据]
+ * @param {Object} opts [参数]
+ * @return {Object} [descrsiption]
+ */
+export default function(fmData, opts){
+ let res = {
+ valid: true,
+ error: '',
+ errors: [],
+ fields: {}
+ };
+ Object.keys(opts).forEach(key => {
+
+ let value = fmData[key],
+ item = opts[key],
+ resItem = {
+ valid: true,
+ error: '',
+ errors: []
+ };
+
+ item.forEach(ruleItem => {
+ let {rule, message, param} = ruleItem;
+ if (rules[rule]) {
+ if (!rules[rule].check(value, param)) {
+ message = message
+ ? message
+ : rules[rule].message;
+ if (res.valid) {
+ res.valid = false;
+ res.error = message;
+ }
+ if (resItem.valid) {
+ resItem.valid = false;
+ resItem.error = message;
+ }
+ resItem.errors.push(message);
+ res.errors.push(message);
+ }
+ }
+ });
+ res.fields[key] = resItem;
+ });
+
+ return res;
+}
diff --git a/subpages/family/utils/validate/rules.js b/subpages/family/utils/validate/rules.js
new file mode 100644
index 0000000..25038a8
--- /dev/null
+++ b/subpages/family/utils/validate/rules.js
@@ -0,0 +1,123 @@
+'use strict';
+
+/**
+ * 表单验证规则
+ */
+export default {
+ required: {
+ message: '该字段必填',
+ check(v) {
+ const type = typeof v;
+ if (type === 'string') {
+ return v !== '';
+ } else if (type === 'array') {
+ return v.length > 0;
+ } else if (type === 'boolean') {
+ return v;
+ } else if (type === 'number') {
+ return true;
+ return v !== 0;
+ } else if (type === 'object') {
+ return v !== null && v !== undefined;
+ } else {
+ return true;
+ }
+ }
+ },
+ // 最小
+ min: {
+ message: '超过最小限制',
+ check(v, param) {
+ return parseFloat(v) >= parseFloat(param) || v === '';
+ }
+ },
+ // 最大
+ max: {
+ message: '超过最小限制',
+ check(v, param) {
+ return parseFloat(v) <= parseFloat(param) || v === '';
+ }
+ },
+ //只能数字、字母、下划线组合,下划线不能在开头或结尾
+ user: {
+ message: '只能数字、字母、下划线组合,下划线不能在开头或结尾',
+ check(v) {
+ return /^(?!_)(?!.*?_$)(\w)*$/.test(v) || v === '';
+ }
+ },
+ //身份证号
+ idCard: {
+ message: '',
+ check(v) {
+ return /^([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{4})|\d{3}[Xx]))$/.test(v) || v === '';
+ }
+ },
+ // 手机号
+ mobile: {
+ message: '手机号格式不正确',
+ check(v) {
+ return /^1[23456789]{1}[0-9]{9}$/.test(v) || v === '';
+ }
+ },
+ //url地址
+ url: {
+ message: 'url地址格式不正确',
+ check(v) {
+ return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(v) || v === '';
+ }
+ },
+ //汉字
+ chinese: {
+ message: '仅限汉字',
+ check(v) {
+ return /^[\u4e00-\u9fa5]*$/.test(v) || v === '';
+ }
+ },
+ //数字
+ number: {
+ message: '仅限数字',
+ check(v) {
+ return /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(v) || v === '';
+ }
+ },
+ //数字或字母
+ alphaNum: {
+ message: '仅限字母或数字',
+ check(v) {
+ return /^[A-Za-z0-9]+$/.test(v) || v === '';
+ }
+ },
+ //整数
+ digits: {
+ message: '仅限整数',
+ check(v) {
+ return /^\d+$/.test(v) || v === '';
+ }
+ },
+ //范围长度
+ rangeLength: {
+ message: '请输入指定范围长度',
+ check(v, param) {
+ let length = v.length;
+ if (Array.isArray(param)) {
+ return (length >= param[0] && length <= param[1]) || v === '';
+ } else {
+ return length == param || v === '';
+ }
+ }
+ },
+ //范围
+ range: {
+ message: '',
+ check(v, param) {
+ return (v >= param[0] && v <= param[1]) || v === '';
+ }
+ },
+ //等于
+ equal: {
+ message: '两次输入不一致',
+ check(v, param) {
+ return v == param || v === '';
+ }
+ }
+};
\ No newline at end of file
diff --git a/subpages/family/wxss/c-popForm.wxss b/subpages/family/wxss/c-popForm.wxss
new file mode 100644
index 0000000..0248e43
--- /dev/null
+++ b/subpages/family/wxss/c-popForm.wxss
@@ -0,0 +1 @@
+@charset "UTF-8";.f-cb{float:none;clear:both;height:0}.f-cs::after{display:block;visibility:hidden;clear:both;overflow:hidden;height:0;content:""}.f-hide{display:none}.f-fl{float:left}.f-fr{float:right}.f-bs1{box-shadow:0 2rpx 8rpx 0 rgba(0,0,0,.1)}.f-bs2{box-shadow:0 4rpx 12rpx 0 rgba(0,0,0,.16)}.f-bs3{box-shadow:0 6rpx 18rpx 0 rgba(0,0,0,.22)}.f-blur{filter:blur(3px)}.f-shield{position:fixed;z-index:9999;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);backdrop-filter:blur(8rpx)}@keyframes fade_in{0%{opacity:0}100%{opacity:1}}@keyframes fade_in_up{0%{transform:translate3d(0,360rpx,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_down{0%{transform:translate3d(0,-360rpx),0;opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_right{0%{transform:translate3d(360rpx,0,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_left{0%{transform:translate3d(-360rpx,0,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}.a-fade-in{animation:fade_in .27s ease-in}.a-fade-in-up{animation:fade_in_up .27s ease-in}.a-fade-in-right{animation:fade_in_right .27s ease-in}.a-fade-in-left{animation:fade_in_left .27s ease-in}.a-fade-in-down{animation:fade_in_down .27s ease-in}@keyframes fade_out{0%{display:block;opacity:1}100%{display:block;opacity:0}}@keyframes fade_out_up{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(0,360rpx,0);opacity:0}}@keyframes fade_out_down{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(0,-360rpx,0);opacity:0}}@keyframes fade_out_right{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(360rpx,0,0);opacity:0}}@keyframes fade_out_left{0%{display:block;transform:translate3d(0);opacity:1}100%{display:block;transform:translate3d(-360rpx,0,0);opacity:0}}.a-fade-out{animation:fade_out .27s ease-out}.a-fade-out-up{animation:fade_out_up .27s ease-out}.a-fade-out-right{animation:fade_out_right .27s ease-out}.a-fade-out-left{animation:fade_out_left .27s ease-out}.a-fade-out-down{animation:fade_out_down .27s ease-out}@keyframes scale_in{0%{opacity:0;transform:scale3d(0,0,0)}100%{opacity:1;transform:scale3d(1,1,1)}}@keyframes scale_in_left_up{0%{opacity:0;transform:translate3d(-50%,-50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_right_down{0%{opacity:0;transform:translate3d(50%,50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_right_up{0%{opacity:0;transform:translate3d(50%,-50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_left_down{0%{opacity:0;transform:translate3d(-50%,50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}.a-scale-in{animation:scale_in .27s ease-in}.a-scale-in-left-up{animation:scale_in_left_up .27s ease-in}.a-scale-in-right-up{animation:scale_in_right_up .27s ease-in}.a-scale-in-left-down{animation:scale_in_left_down .27s ease-in}.a-scale-in-right-down{animation:scale_in_right_down .27s ease-in}.m-fm{position:fixed;z-index:9999;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);backdrop-filter:blur(8rpx);z-index:10000}.m-fm .fm{position:absolute;top:50%;left:0;right:0;margin:0 auto;width:630rpx;transform:translateY(-50%);box-sizing:border-box;padding:30rpx 40rpx;background-color:#fff;border-radius:20rpx;background-image:url(https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/20210907/a766bbce71b54c6985fdbd2a38d8fa5e.png);background-repeat:no-repeat;background-size:contain}.m-fm .fm .logo{margin:40rpx 0 0}.m-fm .fm .logo image{display:block;margin:0 auto;width:120rpx;height:120rpx;border-radius:50%}.m-fm .fm .logo .tag{position:relative;margin-top:-25rpx;text-align:center}.m-fm .fm .logo .tag text{display:inline-block;padding:0 15rpx;height:28rpx;line-height:28rpx;background:#e3271c;border-radius:14rpx;font-size:20rpx;font-family:Source Han Serif SC;font-weight:500;color:#fff}.m-fm .fm .title{margin-top:10rpx;text-align:center;font-size:34rpx;font-family:Source Han Serif SC;font-weight:500;color:#333;line-height:60rpx}.m-fm .fm .attr{font-size:22rpx;font-family:Source Han Serif SC;font-weight:400;color:#999;line-height:42rpx;text-align:center}.m-fm .fm .attr text{display:inline-block;margin:0 10rpx}.m-fm .fm .intro{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:5;-webkit-box-orient:vertical;margin:10rpx auto;width:540rpx;font-size:34rpx;font-family:Source Han Serif SC;font-weight:400;color:#333;line-height:52rpx}.m-fm .fm .btn-close{position:absolute;top:0;right:0;padding:30rpx}.m-fm .fm .btn-close image{width:24rpx;height:24rpx}.m-fm .fm .input{display:block;box-sizing:border-box;padding:20rpx;width:550rpx;height:218rpx;background:#f7f7f7;border-radius:10rpx;margin:30rpx auto}.m-fm .fm .input textarea{box-sizing:border-box;display:block;margin:0 auto auto;padding:5rpx 0;width:100%;height:178rpx;line-height:45rpx;border-radius:20rpx;font-size:26rpx;font-family:Source Han Serif SC;font-weight:500;color:#333;line-height:42rpx}.m-fm .fm .input textarea .z-placeholder{white-space:normal;word-wrap:break-word;word-break:break-all;color:#999;font-weight:400}.m-fm .fm .operate{margin-top:30rpx;padding:15rpx 0;overflow:hidden}.m-fm .fm .operate .btn{margin:0 auto;box-sizing:border-box;width:170rpx;height:70rpx;background:#e3271c;border-radius:35rpx;color:#fff;text-align:center;line-height:70rpx;font-size:34rpx;font-family:Source Han Serif SC;font-weight:500}
\ No newline at end of file
diff --git a/subpages/family/wxss/family.wxss b/subpages/family/wxss/family.wxss
new file mode 100644
index 0000000..4dae7a5
--- /dev/null
+++ b/subpages/family/wxss/family.wxss
@@ -0,0 +1 @@
+page{background:#fff;box-sizing:border-box}.f-container{width:100%;box-sizing:border-box}.f-top{position:relative;width:100%;height:200rpx;background:#e3271c;border-radius:0 0 30rpx 30rpx;-webkit-border-radius:0 0 30rpx 30rpx;-moz-border-radius:0 0 30rpx 30rpx;-ms-border-radius:0 0 30rpx 30rpx;-o-border-radius:0 0 30rpx 30rpx}.f-top .flex-view{display:flex;justify-content:space-between;}.f-top .f-card{position:absolute;left:50%;bottom:-64rpx;width:690rpx;height:200rpx;margin-left:-345rpx;background-color:#fff;box-sizing:border-box;padding:28rpx 30rpx 18rpx;box-shadow: rgba(184,184,184,.25) 0px 0px 30px 5px;overflow:hidden;border-radius:14rpx;-moz-border-radius:14rpx;-ms-border-radius:14rpx;-o-border-radius:14rpx;-webkit-border-radius:14rpx}.f-top .f-card .card-right{flex-shrink:0;margin-left:30rpx}.f-top .f-card .card-title{height:96rpx;font-family:PingFang-SC-Bold;font-size:34rpx;letter-spacing:1rpx;color:#333;overflow:hidden}.f-top .f-card .card-num{display:flex;align-items:center;font-family:PingFang-SC-Medium;font-size:28rpx;letter-spacing:1rpx;color:#333;overflow:hidden}.f-top .f-card .card-num image{flex-shrink:0;width:32rpx;height:18rpx}.f-top .f-card .card-qr{width:140rpx;height:140rpx;margin: auto;position: relative;top: -5px;}.f-top .f-card .card-qr image{display:block;width:100%;height:100%;border-radius: 10px;}.f-top .f-card .card-qr-long{width:100rpx;height:100rpx}.f-top .f-card .card-qr-name{font-family:PingFang-SC-Regular;font-size:22rpx;font-weight:400;font-stretch:normal;letter-spacing:1rpx;color:#333}.f-wr{width:100%;box-sizing:border-box;padding:100rpx 20rpx 0}.title-right,.title-wr{display:flex;align-items:center}.title-wr{justify-content:space-between;padding:28rpx 0;border-bottom:1rpx solid #e7eeee}.title-wr .title-label{position:relative;padding-left:25rpx;font-family:PingFang-SC-Bold;font-size:34rpx;font-weight:400;font-stretch:normal;letter-spacing:0;color:#333}.title-wr .title-label::after{content:'';position:absolute;top:50%;left:0;width:6rpx;height:30rpx;margin-top:-15rpx;background-color:#e60000;border-radius:3rpx;-webkit-border-radius:3rpx;-moz-border-radius:3rpx;-ms-border-radius:3rpx;-o-border-radius:3rpx}.title-wr .title-right-label{font-family:PingFang-SC-Light;font-size:26rpx;font-weight:400;font-stretch:normal;color:#999}.title-wr .right-icon{width:30rpx;height:30rpx}.f-table{background-color:#fbfbfb}.f-table .table-cell{display:flex;align-items:center;padding:26rpx 0;border:solid 1rpx #e3e3e3;border-top:0;font-family:PingFang-SC-Regular;font-size:30rpx;color:#000003}.f-table .table-cell .table-col{flex:1;text-align:center;line-height:1}.f-table .table-cell .table-col-4{color:#dd2a2a}.f-table .table-header{background:#f1f1f1;border:0;font-family:PingFang-SC-Regular;font-size:28rpx;color:#666}.f-btns{display:flex;align-items:center;padding:30rpx 0}.f-btns .f-btns-icon{width:30rpx;height:30rpx;font-size:28rpx;color:#dd2a2a;text-align:center;line-height:30rpx;border:1rpx solid #dd2a2a;border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%}.f-btns .f-btns-label{margin-left:10rpx;font-size:28rpx;color:#dd2a2a}.mt40{margin-top:40rpx}.mt16{margin-top:16rpx}.no-data{font-size:28rpx;color:#999;text-align:center;line-height:300rpx}.m-fm .fm{top:500rpx;width:600rpx;padding:0 0 40rpx 0;background:#fff;overflow:hidden}.m-fm .fm .btn-close{top:27rpx;padding:0 30rpx;font-size:36rpx;color:#fff;line-height:90rpx}.m-fm .fm .btn-close image{display:block;width:36rpx;height:36rpx}.m-fm .fm .fm-btn{width:240rpx;height:54rpx;margin:20rpx auto 0;font-family:PingFang-SC-Medium;font-size:28rpx;font-weight:400;font-stretch:normal;letter-spacing:0;color:#999;text-align:center;line-height:54rpx;border-radius:27rpx;border:solid 1rpx #eee;-webkit-border-radius:27rpx;-moz-border-radius:27rpx;-ms-border-radius:27rpx;-o-border-radius:27rpx}.m-fm .fm-header{width:100%;height:90rpx;margin-bottom:20rpx;text-align:center;line-height:90rpx;font-family:PingFang-SC-Bold;font-size:32rpx;color:#fff;background-image:linear-gradient(90deg,#ca151d 0,#e11c13 100%)}.m-fm .fm-qr{width:400rpx;height:400rpx;box-sizing:border-box;margin:0 auto}.m-fm .fm-qr image{display:block;width:100%;height:100%}.no-family{padding-top:200rpx}.no-family image{display:block;width:506rpx;margin:0 auto}.no-family .no-btn{width:220rpx;height:66rpx;margin:60rpx auto 0;font-size:32rpx;color:#fff;text-align:center;line-height:66rpx;background-image:linear-gradient(90deg,#ca151d 0,#e11c13 100%);border-radius:30rpx;-webkit-border-radius:30rpx;-moz-border-radius:30rpx;-ms-border-radius:30rpx;-o-border-radius:30rpx}
\ No newline at end of file
diff --git a/subpages/family/wxss/familyInfo.wxss b/subpages/family/wxss/familyInfo.wxss
new file mode 100644
index 0000000..56ff418
--- /dev/null
+++ b/subpages/family/wxss/familyInfo.wxss
@@ -0,0 +1 @@
+@charset "UTF-8";.f-cb{float:none;clear:both;height:0}.f-cs::after{display:block;visibility:hidden;clear:both;overflow:hidden;height:0;content:""}.f-hide{display:none}.f-fl{float:left}.f-fr{float:right}.f-bs1{box-shadow:0 2rpx 8rpx 0 rgba(0,0,0,.1)}.f-bs2{box-shadow:0 4rpx 12rpx 0 rgba(0,0,0,.16)}.f-bs3{box-shadow:0 6rpx 18rpx 0 rgba(0,0,0,.22)}.f-blur{filter:blur(3px)}.f-shield{position:fixed;z-index:9999;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);backdrop-filter:blur(8rpx)}@keyframes fade_in{0%{opacity:0}100%{opacity:1}}@keyframes fade_in_up{0%{transform:translate3d(0,360rpx,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_down{0%{transform:translate3d(0,-360rpx),0;opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_right{0%{transform:translate3d(360rpx,0,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_left{0%{transform:translate3d(-360rpx,0,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}.a-fade-in{animation:fade_in .27s ease-in}.a-fade-in-up{animation:fade_in_up .27s ease-in}.a-fade-in-right{animation:fade_in_right .27s ease-in}.a-fade-in-left{animation:fade_in_left .27s ease-in}.a-fade-in-down{animation:fade_in_down .27s ease-in}@keyframes fade_out{0%{display:block;opacity:1}100%{display:block;opacity:0}}@keyframes fade_out_up{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(0,360rpx,0);opacity:0}}@keyframes fade_out_down{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(0,-360rpx,0);opacity:0}}@keyframes fade_out_right{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(360rpx,0,0);opacity:0}}@keyframes fade_out_left{0%{display:block;transform:translate3d(0);opacity:1}100%{display:block;transform:translate3d(-360rpx,0,0);opacity:0}}.a-fade-out{animation:fade_out .27s ease-out}.a-fade-out-up{animation:fade_out_up .27s ease-out}.a-fade-out-right{animation:fade_out_right .27s ease-out}.a-fade-out-left{animation:fade_out_left .27s ease-out}.a-fade-out-down{animation:fade_out_down .27s ease-out}@keyframes scale_in{0%{opacity:0;transform:scale3d(0,0,0)}100%{opacity:1;transform:scale3d(1,1,1)}}@keyframes scale_in_left_up{0%{opacity:0;transform:translate3d(-50%,-50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_right_down{0%{opacity:0;transform:translate3d(50%,50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_right_up{0%{opacity:0;transform:translate3d(50%,-50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_left_down{0%{opacity:0;transform:translate3d(-50%,50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}.a-scale-in{animation:scale_in .27s ease-in}.a-scale-in-left-up{animation:scale_in_left_up .27s ease-in}.a-scale-in-right-up{animation:scale_in_right_up .27s ease-in}.a-scale-in-left-down{animation:scale_in_left_down .27s ease-in}.a-scale-in-right-down{animation:scale_in_right_down .27s ease-in}.m-fm .fm{position:relative;margin-bottom:15rpx;background-color:#fff}.m-fm .fm .fm-title{padding:30rpx;line-height:50rpx;font-size:34rpx;font-family:Source Han Serif SC;font-weight:800;color:#333}.m-fm .fm .record-btn{position:absolute;right:0;top:28rpx;width:160rpx;height:56rpx;line-height:56rpx;border-radius:56rpx 0 0 56rpx;text-align:center;font-size:28rpx;font-family:Source Han Serif SC;color:#fff;background:linear-gradient(to right,#e83100,#ff6326)}.m-fm .fm .item-list{padding:0 30rpx}.m-fm .fm .item-list .item{border-top:1rpx solid #e7eeee;padding:25rpx 0;line-height:60rpx;display:flex;justify-content:space-between}.m-fm .fm .item-list .item .upload{position:relative;width:100%;height:280rpx}.m-fm .fm .item-list .item .upload .upload-show{width:100%;height:280rpx}.m-fm .fm .item-list .item .upload .upload-add{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;text-align:center;height:100rpx;width:300rpx;font-size:30rpx;font-family:Source Han Serif SC;font-weight:300;color:#999;line-height:54rpx}.m-fm .fm .item-list .item .upload .upload-add image{display:block;margin:0 auto;width:46rpx;height:46rpx}.m-fm .fm .item-list .item .radio{width:100%;display:flex;justify-content:flex-end}.m-fm .fm .item-list .item .radio .radio-item{margin-left:40rpx;width:150rpx;height:60rpx;border-radius:4rpx;text-align:center;font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;line-height:60rpx;background:#f7f7f7;color:#333}.m-fm .fm .item-list .item .radio .radio-item.z-on{color:#e3271c;background:#fff2f1}.m-fm .fm .item-list .item .textarea{box-sizing:border-box;padding:0 30rpx;width:100%}.m-fm .fm .item-list .item .textarea textarea{box-sizing:border-box;display:block;padding:0;width:100%;height:200rpx;border-radius:10rpx;font-size:32rpx;font-family:Source Han Serif SC;color:#333}.m-fm .fm .item-list .item .textarea textarea .z-ph{color:#999}.m-fm .fm .item-list .item .field{position:relative;box-sizing:border-box;width:300rpx;padding-left:25rpx}.m-fm .fm .item-list .item .field .must{position:absolute;top:0;left:0;margin:0 auto;color:#d81918}.m-fm .fm .item-list .item .field .field-text{font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#333}.m-fm .fm .item-list .item .value{position:relative;width:410rpx;display:flex;font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#333;line-height:60rpx}.m-fm .fm .item-list .item .value .picker{position:relative;width:100%;padding-right:40rpx;text-align:right}.m-fm .fm .item-list .item .value .picker .z-weak{color:#999}.m-fm .fm .item-list .item .value .picker .menu-arrow{position:absolute;top:20rpx;right:0;width:16rpx;height:23rpx}.m-fm .fm .item-list .item .value .input{width:100%;text-align:right}.m-fm .fm .item-list .item .value .input input{border:0;width:100%;line-height:60rpx;text-align:right;font-size:30rpx;font-family:Source Han Serif SC;font-weight:400;color:#333}.m-fm .fm .item-list .item .value .input input .z-ph{color:#999}.m-fm .operate .btn{margin:100rpx auto;width:400rpx;height:80rpx;line-height:80rpx;background:#e3271c;border-radius:40rpx;text-align:center;font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#fff}.m-fm .operate .btn.z-disabled{opacity:.5}.m-fm .edit{display:flex;justify-content:space-between}.m-fm .edit .btn{margin:100rpx auto;width:240rpx;height:80rpx;line-height:80rpx;border-radius:40rpx;text-align:center;font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#fff}.m-fm .edit .btn.z-disabled{opacity:.5}.m-fm .edit .btn.left{background-image:linear-gradient(90deg,#0863b3 0,#0399d8 100%);box-shadow:0 4px 10px 0 rgba(4,144,210,.32);border-radius:40px}.m-fm .edit .btn.right{background-image:linear-gradient(90deg,#dc1b03 0,#f37b03 100%);box-shadow:0 4px 10px 0 rgba(241,114,3,.32);border-radius:40px}.m-fm .edit-two{display:flex;justify-content:space-between}.m-fm .edit-two .btn{margin:100rpx auto;width:240rpx;height:80rpx;line-height:80rpx;background:#e3271c;border-radius:40rpx;text-align:center;font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#fff}.m-fm .edit-two .btn.z-disabled{opacity:.5}.m-fm .edit-two .btn.left{color:#999;background-color:#fff;box-shadow:0 4px 10px 0 rgba(209,209,209,.32);border-radius:40px;border:solid 1px #cacaca}.m-fm .edit-two .btn.right{background-image:linear-gradient(90deg,#dc1b03 0,#f37b03 100%);box-shadow:0 4px 10px 0 rgba(241,114,3,.32);border-radius:40px}.m-modal{position:fixed;z-index:10000;width:100%;height:100vh;left:0;top:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center}.content{position:relative;box-sizing:border-box;padding:9rpx 40rpx 10rpx;width:530rpx;border-radius:16rpx;background:#fff}.content .close-dialog{position:absolute;z-index:1;top:10rpx;right:10rpx;width:60rpx;height:60rpx;display:flex;align-items:center;justify-content:center}.content .close-dialog image{width:24rpx;height:24rpx}.content .title{font-size:36rpx;color:#333;width:100%;line-height:60rpx;height:60rpx;text-align:center;margin-bottom:27rpx}.content .item-list .item{display:flex;justify-content:space-between}.content .item-list .item .textarea{margin-top:20rpx;box-sizing:border-box;width:100%;border:1rpx solid #e7eeee;border-radius:10rpx}.content .item-list .item .textarea textarea{box-sizing:border-box;display:block;padding:20rpx;width:100%;height:200rpx;border-radius:10rpx;font-size:32rpx;font-family:Source Han Serif SC;color:#333}.content .item-list .item .textarea textarea .z-ph{color:#999}.content .item-list .item .field{position:relative;box-sizing:border-box;width:300rpx;padding-left:25rpx}.content .item-list .item .field .must{position:absolute;top:0;left:0;margin:0 auto;color:#d81918}.content .item-list .item .field .field-text{font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#333}.content .item-list .item .value{position:relative;width:410rpx;display:flex;font-size:32rpx;font-family:Source Han Serif SC;font-weight:400;color:#333;line-height:60rpx}.content .item-list .item .value .picker{position:relative;width:100%;padding-right:40rpx;text-align:right}.content .item-list .item .value .picker .z-weak{color:#999}.content .item-list .item .value .picker .menu-arrow{position:absolute;top:20rpx;right:0;width:16rpx;height:23rpx}.content .item-list .item .value .input{width:100%;text-align:right}.content .item-list .item .value .input input{border:0;width:100%;line-height:60rpx;text-align:right;font-size:30rpx;font-family:Source Han Serif SC;font-weight:400;color:#333}.content .item-list .item .value .input input .z-ph{color:#999}.content .tip{margin-top:20rpx;color:#d81918;font-size:23rpx}.btns{display:flex;justify-content:space-between}.btns .btn{margin:50rpx auto;width:35%;height:50rpx;line-height:50rpx;border-radius:40rpx;text-align:center;font-size:28rpx;font-family:Source Han Serif SC;font-weight:400;color:#fff}.btns .btn.z-disabled{opacity:.5}.btns .btn.left{color:#999;background-color:#fff;box-shadow:0 4px 10px 0 rgba(209,209,209,.32);border-radius:40px;border:solid 1px #cacaca}.btns .btn.right{background-image:linear-gradient(90deg,#dc1b03 0,#f37b03 100%);box-shadow:0 4px 10px 0 rgba(241,114,3,.32);border-radius:40px}
\ No newline at end of file
diff --git a/subpages/family/wxss/register.wxss b/subpages/family/wxss/register.wxss
new file mode 100644
index 0000000..0540cd5
--- /dev/null
+++ b/subpages/family/wxss/register.wxss
@@ -0,0 +1 @@
+@charset "UTF-8";.f-cb{float:none;clear:both;height:0}.f-cs::after{display:block;visibility:hidden;clear:both;overflow:hidden;height:0;content:""}.f-hide{display:none}.f-fl{float:left}.f-fr{float:right}.f-bs1{box-shadow:0 2rpx 8rpx 0 rgba(0,0,0,.1)}.f-bs2{box-shadow:0 4rpx 12rpx 0 rgba(0,0,0,.16)}.f-bs3{box-shadow:0 6rpx 18rpx 0 rgba(0,0,0,.22)}.f-blur{filter:blur(3px)}.f-shield{position:fixed;z-index:9999;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);backdrop-filter:blur(8rpx)}@keyframes fade_in{0%{opacity:0}100%{opacity:1}}@keyframes fade_in_up{0%{transform:translate3d(0,360rpx,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_down{0%{transform:translate3d(0,-360rpx),0;opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_right{0%{transform:translate3d(360rpx,0,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes fade_in_left{0%{transform:translate3d(-360rpx,0,0);opacity:.3}100%{transform:translate3d(0,0,0);opacity:1}}.a-fade-in{animation:fade_in .27s ease-in}.a-fade-in-up{animation:fade_in_up .27s ease-in}.a-fade-in-right{animation:fade_in_right .27s ease-in}.a-fade-in-left{animation:fade_in_left .27s ease-in}.a-fade-in-down{animation:fade_in_down .27s ease-in}@keyframes fade_out{0%{display:block;opacity:1}100%{display:block;opacity:0}}@keyframes fade_out_up{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(0,360rpx,0);opacity:0}}@keyframes fade_out_down{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(0,-360rpx,0);opacity:0}}@keyframes fade_out_right{0%{display:block;transform:translate3d(0,0,0);opacity:1}100%{display:block;transform:translate3d(360rpx,0,0);opacity:0}}@keyframes fade_out_left{0%{display:block;transform:translate3d(0);opacity:1}100%{display:block;transform:translate3d(-360rpx,0,0);opacity:0}}.a-fade-out{animation:fade_out .27s ease-out}.a-fade-out-up{animation:fade_out_up .27s ease-out}.a-fade-out-right{animation:fade_out_right .27s ease-out}.a-fade-out-left{animation:fade_out_left .27s ease-out}.a-fade-out-down{animation:fade_out_down .27s ease-out}@keyframes scale_in{0%{opacity:0;transform:scale3d(0,0,0)}100%{opacity:1;transform:scale3d(1,1,1)}}@keyframes scale_in_left_up{0%{opacity:0;transform:translate3d(-50%,-50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_right_down{0%{opacity:0;transform:translate3d(50%,50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_right_up{0%{opacity:0;transform:translate3d(50%,-50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes scale_in_left_down{0%{opacity:0;transform:translate3d(-50%,50%,0) scale3d(0,0,0)}100%{opacity:1;transform:translate3d(0,0,0) scale3d(1,1,1)}}.a-scale-in{animation:scale_in .27s ease-in}.a-scale-in-left-up{animation:scale_in_left_up .27s ease-in}.a-scale-in-right-up{animation:scale_in_right_up .27s ease-in}.a-scale-in-left-down{animation:scale_in_left_down .27s ease-in}.a-scale-in-right-down{animation:scale_in_right_down .27s ease-in}page{background-color:#f5f6f7;padding-bottom:100rpx}.m-hint{text-align:center;padding:100rpx 50rpx;line-height:50rpx;color:#999;text-align:center;font-size:34rpx;font-family:Source Han Serif SC;font-weight:500}.m-status{position:fixed;z-index:9999;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);backdrop-filter:blur(8rpx)}.m-status .wrap{padding:20rpx 25rpx;line-height:40rpx;font-size:26rpx;background-color:#fff;font-family:Source Han Serif SC;font-weight:500;color:#333}.m-status .wrap::after{display:block;visibility:hidden;clear:both;overflow:hidden;height:0;content:""}.m-status .wrap .btn{display:block;box-sizing:border-box;width:120rpx;height:40rpx;border-radius:40rpx;line-height:38rpx;border:1rpx solid #ff4c52;color:#ff4c52;text-align:center}.m-fm .fm2{margin-top:1px;background-color:#fff;padding:30rpx}.m-fm .fm2 textarea{box-sizing:border-box;display:block;padding:20rpx;width:100%;height:300rpx;border-radius:10rpx;background-color:#f3f4f5;font-size:13px;font-family:Source Han Serif SC;font-weight:500;color:#333}.m-fm .fm2 textarea .z-ph{color:#999}.m-fm .fm{box-sizing:border-box;margin:20rpx auto;width:710rpx;border-radius:10rpx;padding:5rpx 20rpx;background-color:#fff}.m-fm .fm .fm-title{line-height:40rpx;padding:25rpx 0;font-size:34rpx;font-family:Source Han Serif SC;font-weight:500;color:#333}.m-fm .fm .item{line-height:40rpx;padding:25rpx 0;border-top:1rpx solid #eee}.m-fm .fm .item::after{display:block;visibility:hidden;clear:both;overflow:hidden;height:0;content:""}.m-fm .fm .item:first-child{border-top:none}.m-fm .fm .item .field{float:left;font-size:32rpx;font-family:Source Han Serif SC;font-weight:500;color:#333}.m-fm .fm .item .field .z-stress{color:#e60000}.m-fm .fm .item .input-long{float:right;width:500rpx}.m-fm .fm .item .input-long .input-show{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-wrap:normal;display:block;width:500rpx;height:40rpx;line-height:40rpx;min-height:40rpx;text-align:right;border:none;background-color:#fff;font-size:28rpx;font-family:Source Han Serif SC;color:#333}.m-fm .fm .item .input-long .input-show .input-btn{display:inline-block;margin:0 10rpx;color:#ffa03c}.m-fm .fm .item .input-long input{display:block;width:500rpx;height:40rpx;line-height:40rpx;min-height:40rpx;text-align:right;border:none;background-color:#fff;font-size:28rpx;font-family:Source Han Serif SC;color:#333}.m-fm .fm .item .input-long input .z-placeholder{color:#999}.m-fm .fm .item .input-long.z-small{width:300rpx}.m-fm .fm .item .input-long.z-small input{width:300rpx}.m-fm .fm .item .input{float:right;width:400rpx}.m-fm .fm .item .input .input-show{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-wrap:normal;display:block;width:400rpx;height:40rpx;line-height:40rpx;min-height:40rpx;text-align:right;border:none;background-color:#fff;font-size:28rpx;font-family:Source Han Serif SC;color:#333}.m-fm .fm .item .input .input-show .input-btn{display:inline-block;margin:0 10rpx;color:#ffa03c}.m-fm .fm .item .input input{display:block;width:400rpx;height:40rpx;line-height:40rpx;min-height:40rpx;text-align:right;border:none;background-color:#fff;font-size:28rpx;font-family:Source Han Serif SC;color:#333}.m-fm .fm .item .input input .z-placeholder{color:#999}.m-fm .fm .item .input.z-small{width:300rpx}.m-fm .fm .item .input.z-small input{width:300rpx}.m-fm .fm .item .item-btn{float:right;margin-left:10rpx;width:138rpx;height:40rpx;background:linear-gradient(90deg,#ff2400 2%,#cc0101 99%);border-radius:10rpx;text-align:center;font-size:22rpx;font-family:Source Han Serif SC;font-weight:500;color:#fff}.m-fm .fm .item .back-grey{background:#999}.m-fm .fm .item2{line-height:40rpx;padding:20rpx 0}.m-fm .fm .item2::after{display:block;visibility:hidden;clear:both;overflow:hidden;height:0;content:""}.m-fm .fm .item2 .field{position:relative;float:left;padding-left:50rpx;font-size:28rpx;font-family:Source Han Serif SC;font-weight:500;color:#333}.m-fm .fm .item2 .field .field-select{position:absolute;box-sizing:border-box;top:0;left:0;bottom:0;margin:auto;width:26rpx;height:26rpx;display:block;border-radius:100%;border:1px solid #aaa;pointer-events:none}.m-fm .fm .item2 .field .field-select::after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;width:10rpx;height:10rpx;border-radius:100%;pointer-events:none}.m-fm .fm .item2 .field .field-select.z-on{border-color:#ff4c52}.m-fm .fm .item2 .field .field-select.z-on::after{background-color:#ff4c52}.m-fm .fm .item2 .input{float:left;margin-left:10rpx;width:400rpx}.m-fm .fm .item2 .input input{display:block;width:400rpx;height:40rpx;line-height:40rpx;min-height:40rpx;text-align:left;border:none;background-color:#fff;font-size:28rpx;font-family:Source Han Serif SC;color:#333}.m-fm .fm .item2 .input input .z-placeholder{color:#999}.m-fm .edit-item{display:flex;justify-content:space-between;align-items:center;width:100%;box-sizing:border-box;padding:20rpx 0;line-height:1}.m-fm .edit-item .label-avatar{font-size:32rpx;font-family:Source Han Serif SC;font-weight:500;color:#333}.m-fm .edit-item .label-avatar .z-stress{color:#e60000}.m-fm .edit-item .input-avatar{width:120rpx;height:120rpx;overflow:hidden;border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%}.m-fm .edit-item .input-avatar image{display:block;width:100%;height:100%}.m-fm .fm-hint{padding:0 20rpx;line-height:50rpx;font-size:22rpx;font-family:Source Han Serif SC;font-weight:500;color:#999}
\ No newline at end of file