diff --git a/miniprogram/pages/addMember/addMember.less b/miniprogram/pages/addMember/addMember.less index e6f235a..a311686 100644 --- a/miniprogram/pages/addMember/addMember.less +++ b/miniprogram/pages/addMember/addMember.less @@ -46,16 +46,127 @@ width: 100%; padding: 0 30rpx; box-sizing: border-box; - } - /* 表单卡片 */ - .form-card { - width: 100%; - padding: 40rpx 30rpx; - border-radius: 16rpx; - box-sizing: border-box; - margin-bottom: 40rpx; - background-color: #FFFFFF; + /* 顶部 tabs - 圆角卡片样式 */ + .tabsDom { + width: 100%; + box-sizing: border-box; + padding: 30rpx 30rpx 40rpx; + border-radius: 16rpx 16rpx 0 0; + background-color: #ffffff; + + .tabs { + width: 100%; + height: 80rpx; + padding: 4rpx; + display: flex; + flex-wrap: nowrap; + box-sizing: border-box; + border-radius: 16rpx; + background-color: #F3F5F8; + + .tab-item { + color: #808080; + flex: 1; + height: 72rpx; + font-size: 32rpx; + text-align: center; + line-height: 72rpx; + box-sizing: border-box; + border-radius: 16rpx; + + &.active { + color: #1385FA; + font-weight: bold; + background-color: #FFFFFF; + } + } + } + } + + .selectWorkNo { + width: 100%; + margin-bottom: 30rpx; + box-sizing: border-box; + padding: 0 30rpx 40rpx; + border-radius: 0 0 16rpx 16rpx; + background-color: #ffffff; + + .selectWorkNoBtn { + color: #FFFFFF; + width: 580rpx; + height: 88rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 88rpx; + border-radius: 44rpx; + text-align: center; + margin: 0 auto; + background-color: #1385FA; + } + } + + .workNoDesc { + color: #B6B6B6; + width: 100%; + height: 24rpx; + font-size: 24rpx; + text-align: center; + line-height: 24rpx; + } + + .workNoNull { + color: #F24439; + margin: 56rpx auto 0; + width: 640rpx; + height: 88rpx; + font-size: 28rpx; + line-height: 88rpx; + border-radius: 16rpx; + text-align: center; + background: rgba(242,68,57,0.12); + } + + .workNoInfo { + width: 100%; + padding-bottom: 100rpx; + + .workNoInfo_ { + width: 100%; + margin-bottom: 20rpx; + + .workNoInfoTitle { + color: #808080; + width: 100%; + height: 64rpx; + font-size: 24rpx; + line-height: 64rpx; + } + + .workNoInfoContent { + width: 100%; + border-radius: 16rpx; + box-sizing: border-box; + padding: 40rpx 30rpx 30rpx; + background-color: #FFFFFF; + + > view { + width: 100%; + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + + .form-row { + width: 300rpx; + } + } + } + } + } + + .familyInfo { + + } .form-row { width: 100%; @@ -113,10 +224,28 @@ font-size: 26rpx; } - /* 输入框 + 后缀容器(身高 cm) */ + /* 日期选择器 */ + .form-picker { + width: 100%; + height: 88rpx; + padding: 0 30rpx; + color: #252535; + font-size: 26rpx; + line-height: 88rpx; + border-radius: 16rpx; + box-sizing: border-box; + background-color: #FFFFFF; + border: 2rpx solid #E6E6EA; + } + + .form-picker-placeholder { + color: #B6B6B6; + } + + /* 输入框 + 后缀容器(身高 cm / 体重 kg) */ .form-input-wrap { position: relative; - width: 630rpx; + width: 100%; .form-input-with-suffix { padding-right: 80rpx; @@ -133,9 +262,9 @@ } } - /* 只读区域(性别 / 年龄) */ + /* 只读区域(单位 / 性别 / 年龄 / 出生年月) */ .form-readonly { - width: 630rpx; + width: 100%; height: 88rpx; box-sizing: border-box; padding: 0 24rpx; @@ -143,16 +272,12 @@ border-radius: 16rpx; display: flex; align-items: center; + border: 2rpx solid #E6E6EA; .readonly-text { color: #252535; font-size: 26rpx; } - - .readonly-placeholder { - color: #B6B6B6; - font-size: 26rpx; - } } .form-readonly-with-suffix { @@ -165,22 +290,48 @@ line-height: 88rpx; } } + + /* 性别切换按钮(家庭用户) */ + .gender-toggle { + display: flex; + gap: 24rpx; + + .gender-option { + width: 300rpx; + height: 88rpx; + font-size: 28rpx; + text-align: center; + line-height: 88rpx; + border-radius: 16rpx; + box-sizing: border-box; + color: #77849E; + background-color: #FFFFFF; + border: 2rpx solid #E6E6EA; + } + + .gender-option-active { + color: #FFFFFF; + font-weight: bold; + background-color: #1385FA; + border-color: #1385FA; + } + } } /* 从已有用户中选择(蓝色描边幽灵按钮) */ - .ghost-btn { - color: #1385FA; - width: 580rpx; - height: 88rpx; - font-size: 32rpx; - font-weight: bold; - text-align: center; - line-height: 84rpx; - border-radius: 44rpx; - box-sizing: border-box; - border: 2rpx solid #1385FA; - margin: 0 auto; - } + // .ghost-btn { + // color: #1385FA; + // width: 580rpx; + // height: 88rpx; + // font-size: 32rpx; + // font-weight: bold; + // text-align: center; + // line-height: 84rpx; + // border-radius: 44rpx; + // box-sizing: border-box; + // border: 2rpx solid #1385FA; + // margin: 0 auto; + // } } /* 底部双按钮 */ diff --git a/miniprogram/pages/addMember/addMember.ts b/miniprogram/pages/addMember/addMember.ts index 4808516..13302b0 100644 --- a/miniprogram/pages/addMember/addMember.ts +++ b/miniprogram/pages/addMember/addMember.ts @@ -42,6 +42,8 @@ interface UserInfoFromServer { /** 表单数据模型 */ interface MemberForm { + /** 员工编号 */ + workNo: string /** 姓名 */ name: string /** 身份证号 */ @@ -83,12 +85,15 @@ interface ExistingMember { */ Page({ data: { + /** tabs 当前选中:employee | family */ + userType: 'employee' as 'employee' | 'family', /** 编辑模式标记 */ isEdit: false, /** 编辑时的用户 ID */ userId: '', form: { + workNo: '', name: '', idCard: '', gender: '', @@ -122,6 +127,7 @@ Page({ if (!u) return const parsed = this.parseIdCard(u.idCard ?? '') this.setData({ + 'form.workNo': u.workNo ?? '', 'form.name': u.realname ?? '', 'form.idCard': u.idCard ?? '', 'form.gender': parsed.gender, @@ -135,6 +141,26 @@ Page({ }) }, + /** tabs 切换 */ + onTabTap(e: WechatMiniprogram.TouchEvent) { + const tab = e.currentTarget.dataset.value as string + this.setData({ userType: tab as 'employee' | 'family' }) + }, + + onWorkNoInput(e: WechatMiniprogram.Input) { + this.setData({ 'form.workNo': e.detail.value }) + }, + + onQueryEmployee() { + const workNo = this.data.form.workNo.trim() + if (!workNo) { + wx.showToast({ title: '请填写员工编号', icon: 'none' }) + return + } + // TODO: 调用员工编号查询接口 + wx.showToast({ title: '员工编号查询功能待实现', icon: 'none' }) + }, + onNameInput(e: WechatMiniprogram.Input) { const name = e.detail.value this.setData({ @@ -292,6 +318,7 @@ Page({ this.setData({ showSelectDrawer: false, selectedMember: member, + 'form.workNo': member.workNo || '', 'form.name': member.name, 'form.idCard': member.idCard, 'form.gender': parsed.gender, @@ -316,6 +343,7 @@ Page({ showConfirmModal: false, readonly: false, form: { + workNo: '', name: '', idCard: '', gender: '', @@ -372,6 +400,7 @@ Page({ parentUserId: userInfo?.userId ?? '', sn: lefuService.deviceInfo?.serialNumber ?? '', scaleDeviceId: lefuService.deviceInfo?.serialNumber ?? '', + workNo: this.data.form.workNo.trim(), realname: name.trim(), idCard, sex: parsed.sex, diff --git a/miniprogram/pages/addMember/addMember.wxml b/miniprogram/pages/addMember/addMember.wxml index f397051..751719b 100644 --- a/miniprogram/pages/addMember/addMember.wxml +++ b/miniprogram/pages/addMember/addMember.wxml @@ -1,157 +1,134 @@ - - - ! - 最多支持 10 位用户 - + + + ! + 最多支持 10 位用户 + - - - - - + + + + + + 员工 + 家庭用户 + + + + + + 员工编号 + * + + + + + + + - - - - 姓名 - * - - - - - + 确认查询 + + + + + 用户信息 + + + + + 姓名 + + + + {{ form.name }} + + + + + + 单位 + + + + {{ form.name }} + + + + + + + + 性别 + + + + {{ form.name }} + + + + + + 年龄 + + + + {{ form.name }} + + + + + + + + 补充信息 + + + + + 身高 + * + + + + + cm + + + + + + 体重 + + + + + kg + + + + + + + + + + + - - - - 身份证号 - * - - - - - + + + 取消 + 保存用户信息 + - - - - 性别 - - - - - {{ form.gender }} - - - 自动生成,无需填写 - - - - + + + - - - - 年龄 - - - - - {{ form.age }} - - - 自动生成,无需填写 - - - - - - - - - - 身高 - * - - - - - cm - - - - - - - - 体重 - * - - - - - kg - - - - - - - - 从已有用户中选择 - - - - - - - - 取消 - 保存用户信息 - - - - - - - - - - + + + + \ No newline at end of file diff --git a/miniprogram/pages/editMember/editMember.less b/miniprogram/pages/editMember/editMember.less index 4068476..86c84f5 100644 --- a/miniprogram/pages/editMember/editMember.less +++ b/miniprogram/pages/editMember/editMember.less @@ -134,7 +134,7 @@ /* 输入框 + 后缀容器(身高 cm / 体重 kg) */ .form-input-wrap { position: relative; - width: 630rpx; + width: 100%; .form-input-with-suffix { padding-right: 80rpx; @@ -153,7 +153,7 @@ /* 只读区域(单位 / 性别 / 年龄 / 出生年月) */ .form-readonly { - width: 630rpx; + width: 100%; height: 88rpx; box-sizing: border-box; padding: 0 24rpx;