Browse Source

Merge branch 'release' of http://121.42.41.42:7070/r/epdc-resident-mp-yushan into release

release
ZhaoTongYao 3 years ago
parent
commit
319612a9d1
  1. BIN
      epdc-resident-mp-yushan/subpages/family/images/arrow-right.png
  2. BIN
      epdc-resident-mp-yushan/subpages/family/images/close.png
  3. BIN
      epdc-resident-mp-yushan/subpages/family/images/family-qr.png
  4. BIN
      epdc-resident-mp-yushan/subpages/family/images/no-family.png
  5. 326
      epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.js
  6. 413
      epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.wxml
  7. 15
      epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.wxss
  8. 115
      epdc-resident-mp-yushan/subpages/family/pages/index/index.js
  9. 106
      epdc-resident-mp-yushan/subpages/family/pages/index/index.wxml
  10. 2
      epdc-resident-mp-yushan/subpages/family/pages/index/index.wxss
  11. 6
      epdc-resident-mp-yushan/subpages/family/pages/noAccess/noAccess.js
  12. 6
      epdc-resident-mp-yushan/subpages/family/pages/noAccess/noAccess.wxml
  13. 24
      epdc-resident-mp-yushan/subpages/family/pages/noAccess/noAccess.wxss
  14. 30
      epdc-resident-mp-yushan/subpages/family/utils/api.js
  15. 51
      epdc-resident-mp-yushan/subpages/family/utils/validate/index.js
  16. 123
      epdc-resident-mp-yushan/subpages/family/utils/validate/rules.js
  17. 1
      epdc-resident-mp-yushan/subpages/family/wxss/c-popForm.wxss
  18. 2
      epdc-resident-mp-yushan/subpages/family/wxss/family.wxss
  19. 2
      epdc-resident-mp-yushan/subpages/family/wxss/familyInfo.wxss

BIN
epdc-resident-mp-yushan/subpages/family/images/arrow-right.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

BIN
epdc-resident-mp-yushan/subpages/family/images/close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
epdc-resident-mp-yushan/subpages/family/images/family-qr.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
epdc-resident-mp-yushan/subpages/family/images/no-family.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

326
epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.js

@ -1,4 +1,11 @@
// subpages/family/pages/familyInfo/familyInfo.js
import {
addFamilyMember,
updateFamilyMember,
getFamilyMember,
householderRelation
} from '../../utils/api.js'
import validate from "../../utils/validate/index.js";
Page({
/**
@ -7,51 +14,70 @@ Page({
data: {
submitBtnIsAllowed: false,
isShowDialog: false,
pageType: null, // add 新增 edit 编辑 look 查看
fmData: {
name: '',
userName: '',
idCard: '',
sex: '',
gender: '',
birthday: '',
mobile: '',
nationValue: '',
nationName: '',
houseRelation: "",
houseRelationName: "",
presentAddressPathCode: "",
presentAddressCode: "",
presentAddress: "",
nation: '',
householdRegisterName: "",
relation: "",
outLiveAddressName: "",
outLiveAddressDetail: "",
},
nationList: [
{
value: "汉族",
label: "汉族",
},
{
value: "维吾尔",
label: "维吾尔",
}
],
houseRelationList: [
{
value: "1",
label: "户主",
},
{
value: "0",
label: "不是户主",
},
]
nationList: [],
houseRelationList: []
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
async onLoad (options) {
wx.showLoading({
title: "加载中",
mask: true,
});
let idCard = options.idCard
this.setData({
pageType:options.pageType
})
if(options.pageType !== 'add'){
await this.getMemberInfo(idCard)
}else{
this.setData({
'fmData.unitId':options.id
})
}
await this.householderRelationFun()
wx.hideLoading()
},
// 获取成员详情信息
async getMemberInfo(idCard){
const res = await getFamilyMember({idCard:idCard})
if(res.msg === 'success' && res.code === 0){
this.setData({
'fmData':res.data,
})
if (idCard) {
this.handleValidBlur('',idCard)
}
}
},
// 获取与户主关系
async householderRelationFun(){
const res = await householderRelation()
if(res.msg === 'success' && res.code === 0){
this.setData({
'houseRelationList':res.data,
})
}
},
nameSync(e){
this.setData({
'fmData.name' : e.detail.value
'fmData.userName' : e.detail.value
})
},
idCardSync(e){
@ -66,32 +92,41 @@ Page({
},
nationSyncPicker(e){
this.setData({
'fmData.nationValue' : this.data.nationList[e.detail.value].value,
'fmData.nationName' : this.data.nationList[e.detail.value].label
'fmData.nationValue' : this.data.nationList[e.detail.value].dictValue,
'fmData.nation' : this.data.nationList[e.detail.value].dictName
})
},
houseSyncPicker(e){
this.setData({
'fmData.houseRelation' : this.data.nationList[e.detail.value].value,
'fmData.houseRelationName' : this.data.nationList[e.detail.value].label
'fmData.houseRelation' : this.data.houseRelationList[e.detail.value].dictValue,
'fmData.relation' : this.data.houseRelationList[e.detail.value].dictName
})
},
householdRegisterSync(e){
this.setData({
'fmData.householdRegisterName' : e.detail.value
})
},
outLiveAddressSync(e){
this.setData({
'fmData.outLiveAddressName' : e.detail.value
})
},
addressSync(e){
this.setData({
'fmData.presentAddress' : e.detail.value
'fmData.outLiveAddressDetail' : e.detail.value
})
},
handleValidBlur: function (e) {
handleValidBlur (e,val) {
var fmData = this.data.fmData;
var right = this.identityCodeValid(e.detail.value);
var right = this.identityCodeValid(val ? val : e.detail.value);
if (right) {
fmData.birthday = this.getBirthday(this.data.fmData.idCard);
fmData.sex = this.getSex(this.data.fmData.idCard);
this.setData({ fmData: fmData });
}
else {
fmData.gender = this.getGender(this.data.fmData.idCard);
this.setData({ fmData });
}else {
fmData.idCard = '';
this.setData({ fmData: fmData });
this.setData({ fmData });
wx.showToast({
title: '身份证号不正确,请重新输入',
icon: "none",
@ -99,23 +134,48 @@ Page({
});
}
},
identityCodeValid: function (idcode) {
var weightFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var code = idcode + '';
var last = idcode[17];
var seventeen = code.substring(0, 17);
var arr = seventeen.split('');
var len = arr.length;
var num = 0;
// 校验身份证是否正确
identityCodeValid (idcode) {
var weightFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
// 校验码
var checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
var code = idcode + ''
var last = idcode[17]// 最后一位
var seventeen = code.substring(0, 17)
// ISO 7064:1983.MOD 11-2
// 判断最后一位校验码是否正确
var arr = seventeen.split('')
var len = arr.length
var num = 0
for (var i = 0; i < len; i++) {
num = num + arr[i] * weightFactor[i];
num = num + arr[i] * weightFactor[i]
}
var resisue = num % 11;
var lastNo = checkCode[resisue];
var idcardPatter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
var format = idcardPatter.test(idcode);
return !!(last === lastNo && format);
// 获取余数
var resisue = num % 11
var lastNo = checkCode[resisue]
// 格式的正则
// 正则思路
/*
第一位不可能是0
第二位到第六位可以是0-9
第七位到第十位是年份所以七八位为19或者20
十一位和十二位是月份这两位是01-12之间的数值
十三位和十四位是日期是从01-31之间的数值
十五十六十七都是数字0-9
十八位可能是数字0-9也可能是X
*/
var idcardPatter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/
// 判断格式是否正确
var format = idcardPatter.test(idcode)
// 返回验证结果,校验码和格式同时正确才算是合法的身份证号码
return !!(last === lastNo && format)
},
getBirthday: function (psidno) {
var birthdayno, birthdaytemp;
@ -132,13 +192,153 @@ Page({
var birthday = birthdayno.substring(0, 4) + '-' + birthdayno.substring(4, 6) + '-' + birthdayno.substring(6, 8);
return birthday;
},
getSex: function (psidno) {
getGender (psidno) {
var num = psidno.charAt(16);
if (num % 2 == 0) {
return '女';
return '女';
}else {
return '男';
}
else {
return '男';
},
// 编辑按钮点击事件
editTap () {
if (this.data.fmData.idCard) {
this.handleValidBlur('',this.data.fmData.idCard)
}
this.setData({
pageType: 'edit'
})
},
// 取消编辑
closeEditTap () {
this.setData({
pageType: 'look'
})
},
// 注册
async submit() {
if (!this.computeSubmitBtnIsAllowed(false)) return;
const { fmData } = this.data;
if (fmData.gender === '男') {
fmData.gender = '1'
} else if (fmData.gender === '女') {
fmData.gender = '2'
}
this.setData({ fmData })
wx.showLoading({
title: "提交中",
mask: true,
});
const res = await addFamilyMember({...fmData})
wx.hideLoading();
if (res.msg === "success" && res.code === 0) {
wx.showToast({
title: "提交成功",
duration: 2000,
});
setTimeout(function () {
wx.navigateBack()
}, 1000)
// wxRedirectTo("../index", {});
}
},
// 修改提交
async editSubmit () {
if (!this.computeSubmitBtnIsAllowed(false)) return;
const { fmData } = this.data;
if (fmData.gender === '男') {
fmData.gender = '1'
} else if (fmData.gender === '女') {
fmData.gender = '2'
}
this.setData({ fmData })
wx.showLoading({
title: "提交中",
mask: true,
});
const res = await updateFamilyMember({...fmData})
wx.hideLoading();
if (res.msg === "success" && res.code === 0) {
wx.showToast({
title: "提交成功",
duration: 2000,
});
setTimeout(function () {
wx.navigateBack()
}, 1000)
}
},
// 更新data数据后需主动触发
$afterUpdateData() {
this.computeSubmitBtnIsAllowed();
},
// 校验
computeSubmitBtnIsAllowed(isQuiet = true) {
const { fmData } = this.data,
vlt = validate(fmData, {
// surname: [
// {
// rule: "required",
// message: "请先输入成员【姓】",
// },
// ],
userName: [
{
rule: "required",
message: "请先输入成员【姓名】",
},
],
idCard: [
{
rule: "required",
message: "请先输入成员【身份证号】",
},
],
mobile: [
{
rule: "required",
message: "请先输入成员【手机号】",
},
{
rule: "mobile",
message: "【手机号】格式不正确",
},
]
});
if (!vlt.valid) {
if (!isQuiet) {
wx.showToast({
title: vlt.error,
icon: "none",
duration: 1500,
});
}
this.setData({
submitBtnIsAllowed: false,
});
return false;
} else {
this.setData({
submitBtnIsAllowed: true,
});
return true;
}
},
/**

413
epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.wxml

@ -3,232 +3,259 @@
<view class="fm">
<view class="fm-title">基本信息</view>
<view class="item-list">
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">姓名</view>
</view>
<view class="value">
<view class="input">
<input type="text"
value="{{ fmData.name }}"
placeholder="请输入"
placeholder-class="z-ph"
bindinput="nameSync"
cursor-spacing="14"
maxlength="100" />
<view wx:if="{{pageType === 'add' || pageType === 'edit'}}">
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">姓名</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.userName }}" placeholder="请输入" placeholder-class="z-ph" bindinput="nameSync" cursor-spacing="14" maxlength="100" />
</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">身份证号</view>
</view>
<view class="value">
<view class="input">
<input type="text"
value="{{ fmData.idCard }}"
placeholder="请输入上报人身份证号"
placeholder-class="z-ph"
bindinput="idCardSync"
cursor-spacing="14"
maxlength="100"
bindblur="handleValidBlur" />
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">身份证号</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.idCard }}" placeholder="请输入上报人身份证号" placeholder-class="z-ph" bindinput="idCardSync" cursor-spacing="14" maxlength="18" bindblur="handleValidBlur" />
</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">性别</view>
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">性别</view>
</view>
<view class="value">
<view class="input">{{fmData.gender}}</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">出生日期</view>
</view>
<view class="value">
<view class="input">{{fmData.birthday}}</view>
</view>
</view>
<view class="value">
<view class="input">
{{fmData.sex}}
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">联系电话</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.mobile }}" placeholder="请输入联系电话" placeholder-class="z-ph" data-fm="fmData" data-name="mobile" bindinput="mobileSync" cursor-spacing="14" maxlength="11" />
</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">出生日期</view>
<view wx:if="{{pageType === 'look'}}">
<!-- 姓名 -->
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">姓名</view>
</view>
<view class="value">
<view class="input">{{fmData.userName}}</view>
</view>
</view>
<view class="value">
<view class="input">
{{fmData.birthday}}
<!-- 身份证号 -->
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">身份证号</view>
</view>
<view class="value">
<view class="input">{{fmData.idCard}}</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">联系电话</view>
</view>
<view class="value">
<view class="input">
<input type="text"
value="{{ fmData.mobile }}"
placeholder="请输入联系电话"
placeholder-class="z-ph"
data-fm="fmData"
data-name="mobile"
bindinput="mobileSync"
cursor-spacing="14"
maxlength="100" />
<!-- 性别 -->
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">性别</view>
</view>
<view class="value">
<view class="input">
{{fmData.gender === '1' ? '男' : fmData.gender === '2' ? '女' : fmData.gender === '0' ? '' : fmData.gender}}
</view>
</view>
</view>
<!-- 出生日期 -->
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">出生日期</view>
</view>
<view class="value">
<view class="input">{{fmData.birthday ? fmData.birthday : ''}}</view>
</view>
</view>
<!-- 联系电话 -->
<view class="item">
<view class="field">
<view class="must">*</view>
<view class="field-text">联系电话</view>
</view>
<view class="value">
<view class="input">{{fmData.mobile ? fmData.mobile : ''}}</view>
</view>
</view>
</view>
</view>
</view>
<view class="fm">
<view class="item-list">
<view class="item" style="border-top: 0rpx">
<view class="field">
<view class="field-text">民族</view>
</view>
<view class="value">
<picker class="picker"
range="{{nationList}}"
range-key="label"
bindchange="nationSyncPicker">
<view class="picker-text" wx:if="{{fmData.nationName}}">{{fmData.nationName}}</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
</picker>
<view wx:if="{{pageType === 'add' || pageType === 'edit'}}">
<view class="item" style="border-top: 0rpx">
<view class="field">
<view class="field-text">民族</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.nation }}" placeholder="请输入民族" placeholder-class="z-ph" data-fm="fmData" data-name="nation" cursor-spacing="14" maxlength="100" />
</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="field-text">与户主关系</view>
</view>
<view class="value">
<picker class="picker"
range="{{houseRelationList}}"
range-key="label"
bindchange="houseSyncPicker">
<view class="picker-text" wx:if="{{fmData.houseRelationName}}">{{fmData.houseRelationName}}</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
</picker>
<!-- <view class="item">
<view class="field">
<view class="field-text">户籍地</view>
</view>
<view class="value">
<view class="picker" bind:tap="select5Addr">
<view class="picker-text" wx:if="{{fmData.presentAddress}}">
{{fmData.presentAddress}}
</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
</view>
</view>
</view> -->
<view class="item">
<view class="field">
<view class="field-text">户籍地</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.householdRegisterName }}" placeholder="xx省x市x区(县)x街道" placeholder-class="z-ph" bindinput="householdRegisterSync" cursor-spacing="14" maxlength="100" />
</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="field-text">现居住地</view>
<view class="item">
<view class="field">
<view class="field-text">与户主关系</view>
</view>
<view class="value">
<picker class="picker" range="{{houseRelationList}}" range-key="dictName" bindchange="houseSyncPicker">
<view class="picker-text" wx:if="{{fmData.relation}}">{{fmData.relation}}</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
</picker>
</view>
</view>
<view class="value">
<view class="picker" bind:tap="select5Addr">
<view class="picker-text" wx:if="{{fmData.presentAddress}}">{{fmData.presentAddress}}</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
<!-- <view class="item">
<view class="field">
<view class="field-text">现居住地</view>
</view>
<view class="value">
<view class="picker" bind:tap="select5Addr">
<view class="picker-text" wx:if="{{fmData.presentAddress}}">
{{fmData.presentAddress}}
</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
</view>
</view>
</view> -->
<view class="item">
<view class="field">
<view class="field-text">现居住地</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.outLiveAddressName }}" placeholder="xx省x市x区(县)x街道" placeholder-class="z-ph" bindinput="outLiveAddressSync" cursor-spacing="14" maxlength="100" />
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="field-text">详细地址</view>
</view>
<view class="value">
<view class="input">
<input type="text" value="{{ fmData.outLiveAddressDetail }}" placeholder="xx小区(号)x号楼x单元x户" placeholder-class="z-ph" bindinput="addressSync" cursor-spacing="14" maxlength="100" />
</view>
</view>
</view>
</view>
<view class="item">
<view class="field">
<view class="field-text">详细地址</view>
</view>
<view class="value">
<view class="input">
<input type="text"
value="{{ address }}"
placeholder="xx小区(号)x号楼x单元x户"
placeholder-class="z-ph"
bindinput="addressSync"
cursor-spacing="14"
maxlength="100" />
<view wx:if="{{pageType === 'look'}}">
<!-- 民族 -->
<view class="item">
<view class="field">
<view class="field-text">民族</view>
</view>
<view class="value">
<view class="input">{{fmData.nation ? fmData.nation : ''}}</view>
</view>
</view>
<!-- 户籍地 -->
<view class="item">
<view class="field">
<view class="field-text">户籍地</view>
</view>
<view class="value">
<view class="input">{{fmData.householdRegisterName ? fmData.householdRegisterName : ''}}</view>
</view>
</view>
<!-- 与户主关系 -->
<view class="item">
<view class="field">
<view class="field-text">与户主关系</view>
</view>
<view class="value">
<view class="input">{{fmData.relation ? fmData.relation : ''}}</view>
</view>
</view>
<!-- 现居住地 -->
<view class="item">
<view class="field">
<view class="field-text">现居住地</view>
</view>
<view class="value">
<view class="input">{{fmData.outLiveAddressName ? fmData.outLiveAddressName : ''}}</view>
</view>
</view>
<!-- 详细地址 -->
<view class="item">
<view class="field">
<view class="field-text">详细地址</view>
</view>
<view class="value">
<view class="input">{{fmData.outLiveAddressDetail ? fmData.outLiveAddressDetail : ''}}</view>
</view>
</view>
</view>
</view>
</view>
<view class="operate">
<view class="operate" wx:if="{{pageType === 'add'}}">
<view class="btn {{ submitBtnIsAllowed ? '' : 'z-disabled'}}" bind:tap="submit">确认提交</view>
</view>
<view class="edit">
<view class="btn {{ submitBtnIsAllowed ? '' : 'z-disabled'}} left">编辑</view>
<view class="btn right" bindtap="delect">删除</view>
</view>
<view class="edit-two">
<view class="btn {{ submitBtnIsAllowed ? '' : 'z-disabled'}} left">取消编辑</view>
<view class="btn {{ submitBtnIsAllowed ? '' : 'z-disabled'}} right">提交</view>
</view>
</view>
</view>
<!-- minfloor="3" maxFloor="3" -->
<select5Address id="select5Address"></select5Address>
<!-- 删除dialog -->
<view class="m-modal" wx:if="{{isShowDialog}}">
<view class="content">
<view class="close-dialog"
bindtap="cancel" >
<image src="../../../../../assets/images/guanbi.png" />
<view class="edit" wx:if="{{pageType === 'look'}}">
<view class="editbtn" bindtap="editTap">编辑</view>
</view>
<view class="title">家庭成员信息删除</view>
<view class="fm">
<view class="item-list">
<view class="item" style="border-top: 0rpx">
<view class="field">
<view class="must">*</view>
<view class="field-text">删除原因</view>
</view>
<view class="value">
<picker class="picker"
range="{{nationList}}"
range-key="label"
data-list-name="nationList"
data-id-key="nationValue"
data-name-key="nationName"
bindchange="inputSyncPicker">
<view class="picker-text" wx:if="{{fmData.nationName}}">{{fmData.nationName}}</view>
<view class="picker-text z-weak" wx:else>请选择</view>
<image class="menu-arrow" src="/subpages/family/images/arrow.png" mode="aspectFit" />
</picker>
</view>
</view>
<view class="item" style="border-top: 0rpx">
<view class="field">
<view class="must">*</view>
<view class="field-text">情况说明:</view>
</view>
</view>
<view class="item">
<view class="textarea">
<textarea type="text"
value="{{ fmData.remark }}"
placeholder="请输入情况说明"
placeholder-class="z-ph"
data-fm="fmData"
data-name="remark"
bindinput="inputSync"
cursor-spacing="14"
maxlength="300">
</textarea>
</view>
</view>
<view class="edit-two" wx:if="{{pageType === 'edit'}}">
<view class="editbtn" bindtap="closeEditTap">取消编辑</view>
<view class="btn {{ submitBtnIsAllowed ? '' : 'z-disabled'}} right" bindtap="editSubmit">
提交
</view>
</view>
<view class="btns">
<view class="btn right">确定</view>
<view class="btn left" bindtap="cancel">取消</view>
</view>
</view>
</view>

15
epdc-resident-mp-yushan/subpages/family/pages/familyInfo/familyInfo.wxss

@ -1 +1,16 @@
@import '../../wxss/familyInfo.wxss';
.editbtn{
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;
background-color: #0399d8;
}

115
epdc-resident-mp-yushan/subpages/family/pages/index/index.js

@ -1,25 +1,123 @@
// subpages/family/pages/index/index.js
import {
getHouseInfo
} from '../../utils/api.js'
Page({
/**
* 页面的初始数据
*/
data: {
familyInfo:null,
showQr: true,
memberList:[],
roomCode:null,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
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
})
}
},
toFamilyInfo(){
// 跳转新增页面
handleTo(){
wx.navigateTo({
url: '/subpages/family/pages/familyInfo/familyInfo',
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,
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
@ -27,12 +125,7 @@ Page({
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏

106
epdc-resident-mp-yushan/subpages/family/pages/index/index.wxml

@ -1,50 +1,82 @@
<view class="f-container">
<view class="f-top">
<view class="f-card">
<view class="card-left">
<view class="card-title">金色海岸3号楼2单元501户</view>
<view class="card-num">
<text >No.370252***00125</text>
<image />
<block wx:if="{{familyInfo.roomCode}}">
<view class="f-top">
<view class="f-card">
<view class="flex-view">
<view class="card-left">
<view class="card-title">{{ familyInfo.plotName + familyInfo.buildingName + familyInfo.unit + familyInfo.roomNo}}</view>
<view wx:if="{{familyInfo.roomCode.length <= 24}}" class="card-num">
<text>No.{{ familyInfo.roomCode }}</text>
<!-- <text >No.6666666666666666666666</text> -->
<image />
</view>
</view>
<view class="card-right">
<view class="card-qr {{ familyInfo.roomCode.length > 24 && 'card-qr-long'}}" bind:tap="handlePreview">
<!-- <image src="{{ familyInfo.qrCodeUrl }}" /> -->
<image mode="widthFix" src="../../images/family-qr.png" />
</view>
<view wx:if="{{familyInfo.roomCode.length <= 24}}" class="card-qr-name">我的"e家码"</view>
</view>
</view>
</view>
<view class="card-right">
<view class="card-qr">
<image />
<view wx:if="{{familyInfo.roomCode.length > 24}}" class="card-num mt16">
<text>No.{{ familyInfo.roomCode }}</text>
<!-- <text >No.666666666666666666666666666666666666</text> -->
<image />
</view>
<view class="card-qr-name">我的“e家码”</view>
</view>
</view>
</view>
<view class="f-wr">
<view class="title-wr">
<view class="title-label">家庭成员</view>
<view class="title-right">
<view class="title-right-label">明细</view>
<image class="right-icon" src="../../images/arrow-right.png" />
<view class="f-wr">
<view class="title-wr">
<view class="title-label">家庭成员</view>
<view class="title-right">
<!-- <view class="title-right-label">明细</view> -->
<image class="right-icon" src="../../images/arrow-right.png" />
</view>
</view>
</view>
<view class="f-table mt40">
<view class="table-cell table-header">
<view class="table-col">姓名</view>
<view class="table-col">成员关系</view>
<view class="table-col">手机号</view>
<view class="table-col">明细</view>
<view class="f-table mt40">
<view class="table-cell table-header">
<view class="table-col">姓名</view>
<view class="table-col">成员关系</view>
<view class="table-col">手机号</view>
<view class="table-col">明细</view>
</view>
<block wx:if="{{familyInfo.members.length > 0}}">
<view class="table-cell" wx:for="{{familyInfo.members}}" wx:key="userId" class="table-cell">
<view class="table-col">{{ item.userName }}</view>
<view class="table-col">{{ item.relation }}</view>
<view class="table-col">{{ item.mobile }}</view>
<view class="table-col table-col-4" data-type="edit" data-id="{{item.idCard}}"
bind:tap="toFamilyInfo">查看</view>
</view>
</block>
<view wx:else class="no-data">暂无成员</view>
</view>
<view class="table-cell" wx:for="{{6}}">
<view class="table-col">张三李四</view>
<view class="table-col">户主</view>
<view class="table-col">13388990099</view>
<view class="table-col table-col-4" bind:tap="toFamilyInfo">查看</view>
<view class="f-btns" data-type="add" data-id="{{ info.icResiUserId }}" bind:tap="handleTo">
<view class="f-btns-icon">+</view>
<view class="f-btns-label">添加家庭成员</view>
</view>
</view>
</block>
<view wx:else class="no-data">暂无家庭信息</view>
</view>
<view class="m-fm" hidden="{{ showQr }}">
<view class="fm">
<view class="btn-close" bind:tap="cancel">
<image mode="aspectFill" src="../../images/close.png"></image>
<!-- <image mode="aspectFill"
src="/assets/images/common/close.png"></image> -->
</view>
<view class="fm-header">我的e家码</view>
<view class="fm-qr">
<!-- <image src="../../images/qr1.png" mode="aspectFill" /> -->
<image src="{{ familyInfo.maUrl }}" mode="aspectFill" />
</view>
<view class="fm-btn" bind:tap="comfirmSave">保存到相册</view>
<!-- <view class="operate">
<view class="btn" bind:tap="confirm">保存到相册</view>
</view> -->
</view>
</view>

2
epdc-resident-mp-yushan/subpages/family/pages/index/index.wxss

@ -1 +1,3 @@
@import '../../wxss/family.wxss';
@import '../../wxss/c-popForm.wxss';

6
epdc-resident-mp-yushan/subpages/family/pages/noAccess/noAccess.js

@ -7,7 +7,11 @@ Page({
data: {
},
handleHome(){
wx.navigateTo({
url: '/pages/index/index',
})
},
/**
* 生命周期函数--监听页面加载
*/

6
epdc-resident-mp-yushan/subpages/family/pages/noAccess/noAccess.wxml

@ -1,2 +1,4 @@
<!--subpages/family/pages/noAccess/noAccess.wxml-->
<text>subpages/family/pages/noAccess/noAccess.wxml</text>
<view class="no-family">
<image src="../../images/no-family.png" mode="widthFix" />
<view class="no-btn" bind:tap="handleHome">返回首页</view>
</view>

24
epdc-resident-mp-yushan/subpages/family/pages/noAccess/noAccess.wxss

@ -1 +1,23 @@
/* subpages/family/pages/noAccess/noAccess.wxss */
.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;
}

30
epdc-resident-mp-yushan/subpages/family/utils/api.js

@ -4,54 +4,68 @@ const request = require('../../../utils/request')
* 绑定我的家庭房屋
*/
export function bindingFamily (param) {
return request.post('/api/custom/family/bindingFamily',param)
return request.post('custom/family/bindingFamily',param)
}
/**
* 获取小区下拉列表
*/
export function getPlotOption (param) {
return request.get('/api/custom/personroom/getPlotOption',param)
return request.get('custom/personroom/getPlotOption',param)
}
/**
* 获取楼栋下拉列表
*/
export function getBuildingOption (param) {
return request.get('/api/custom/personroom/getBuildingOption',param)
return request.get('custom/personroom/getBuildingOption',param)
}
/**
* 获取单元下拉列表
*/
export function getUnitOption (param) {
return request.get('/api/custom/personroom/getUnitOption',param)
return request.get('custom/personroom/getUnitOption',param)
}
/**
* 获取房屋下拉列表
*/
export function getHouseOption (param) {
return request.get('/api/custom/personroom/getHouseOption', param)
return request.get('custom/personroom/getHouseOption', param)
}
/**
* 添加成员信息
*/
export function addFamilyMember (param) {
return request.post('/api/custom/personroom/addFamilyMember', param)
return request.post('custom/personroom/addFamilyMember', param)
}
/**
* 修改成员信息
*/
export function updateFamilyMember (param) {
return request.post('/api/custom/personroom/updateFamilyMember',param)
return request.post('custom/personroom/updateFamilyMember',param)
}
/**
* 获取成员信息
*/
export function getFamilyMember (param) {
return request.get('/api/custom/personroom/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')
}

51
epdc-resident-mp-yushan/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;
}

123
epdc-resident-mp-yushan/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 === '';
}
}
};

1
epdc-resident-mp-yushan/subpages/family/wxss/c-popForm.wxss

File diff suppressed because one or more lines are too long

2
epdc-resident-mp-yushan/subpages/family/wxss/family.wxss

@ -1 +1 @@
page{background:#fff}.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 .f-card{position:absolute;left:50%;bottom:-64rpx;display:flex;justify-content:space-between;align-items:center;width:690rpx;height:200rpx;margin-left:-345rpx;box-sizing:border-box;padding:28rpx 30rpx 18rpx;background-color:#fff;box-shadow:0 5rpx 32rpx 0 rgba(184,184,184,.25);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:#020202;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}.f-top .f-card .card-num image{width:32rpx;height:18rpx}.f-top .f-card .card-qr{width:120rpx;height:120rpx;border:1rpx solid #eee}.f-top .f-card .card-qr image{display:block;width:100%;height:100%}.f-top .f-card .card-qr-name{margin-top:10rpx;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}.mt40{margin-top:40rpx}
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}

2
epdc-resident-mp-yushan/subpages/family/wxss/familyInfo.wxss

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save