diff --git a/src/checkers/index.ts b/src/checkers/index.ts index beb214853..9c80fe50e 100644 --- a/src/checkers/index.ts +++ b/src/checkers/index.ts @@ -1,4 +1,5 @@ import addressCheckers from './address'; import tokenCheckers from './token'; +import userCheckers from './user'; -export default [...addressCheckers, ...tokenCheckers]; \ No newline at end of file +export default [...addressCheckers, ...tokenCheckers, ...userCheckers]; \ No newline at end of file diff --git a/src/checkers/user.ts b/src/checkers/user.ts new file mode 100644 index 000000000..4d89d28e4 --- /dev/null +++ b/src/checkers/user.ts @@ -0,0 +1,29 @@ +import { isMobile } from 'oak-domain/lib/utils/validator'; +import { OakInputIllegalException, Checker } from "oak-domain/lib/types"; +import { EntityDict } from 'oak-app-domain'; +import { checkAttributesNotNull } from '../utils/check'; +import { GeneralRuntimeContext } from '../RuntimeContext'; + +const checkers: Checker> [] = [ + { + type: 'data', + action: 'create', + entity: 'user', + checker: async ({ operation }) => { + const { action, data } = operation; + if (data instanceof Array) { + data.forEach( + ele => { + checkAttributesNotNull(ele, ['nickname']); + } + ); + } + else { + checkAttributesNotNull(data, ['nickname']); + } + return 0; + }, + } +]; + +export default checkers; \ No newline at end of file diff --git a/wechatMp/pages/user/manage/index.ts b/wechatMp/pages/user/manage/index.ts index 63de100ce..b0fbd4131 100644 --- a/wechatMp/pages/user/manage/index.ts +++ b/wechatMp/pages/user/manage/index.ts @@ -61,9 +61,14 @@ OakPage({ goUserManageDetail(options: WechatMiniprogram.Touch) { const { id } = options.currentTarget.dataset; this.navigateTo({ - url: `detail/index`, + url: 'detail/index', oakId: id, }); - } + }, + goNewUser() { + this.navigateTo({ + url: 'upsert/index', + }); + }, } }); \ No newline at end of file diff --git a/wechatMp/pages/user/manage/upsert/index.json b/wechatMp/pages/user/manage/upsert/index.json new file mode 100644 index 000000000..39e6d1e73 --- /dev/null +++ b/wechatMp/pages/user/manage/upsert/index.json @@ -0,0 +1,9 @@ +{ + "navigationBarTitleText": "修改用户信息", + "usingComponents": { + "g-btn": "../../../../components/UI/g-btn/index", + "g-input": "../../../../components/UI/g-input/index", + "g-icon": "../../../../components/UI/g-icon/index", + "g-panel": "../../../../components/UI/g-panel/index" + } +} \ No newline at end of file diff --git a/wechatMp/pages/user/manage/upsert/index.less b/wechatMp/pages/user/manage/upsert/index.less new file mode 100644 index 000000000..1048dce76 --- /dev/null +++ b/wechatMp/pages/user/manage/upsert/index.less @@ -0,0 +1,18 @@ +/** index.wxss **/ +@import "../../../../styles/cell.less"; + +.page-body { + height: 100vh; + display: flex; + flex: 1; + flex-direction: column; + background-color: @background-color-base; +} + +.g-cell-hover:extend(.g-cell) { + background-color: gainsboro; +} + +.focused { + background-color: pink; +} diff --git a/wechatMp/pages/user/manage/upsert/index.ts b/wechatMp/pages/user/manage/upsert/index.ts new file mode 100644 index 000000000..9fcd149ac --- /dev/null +++ b/wechatMp/pages/user/manage/upsert/index.ts @@ -0,0 +1,106 @@ +import { assign } from "lodash"; + +const GenderOptions = [ + { + value: 'male', label: '男', + }, + { + value: 'female', label: '女', + } +]; + +const IDCardTypeOptions = [ + { + value: 'ID-Card', label: '身份证', + }, + { + value: 'passport', label: '护照', + }, + { + value: 'Mainland-passport', label: '港澳通行证', + } +]; + +OakPage({ + path: 'user:manage:upsert', + entity: 'user', + projection: { + id: 1, + name: 1, + nickname: 1, + birth: 1, + gender: 1, + avatar: 1, + idCardType: 1, + idNumber: 1, + }, + isList: false, + formData: async ([user]) => { + const { birth, gender, idCardType } = user || {}; + const birthText = birth && (new Date(birth)).toLocaleDateString(); + const GenderDict = { + male: '男', + female: '女', + }; + const genderText = gender && GenderDict[gender]; + const genderIndex = gender && GenderOptions.find( + ele => ele.value === gender + ); + const IdCardTypeDict = { + 'ID-Card': '身份证', + 'passport': '护照', + 'Mainland-passport': '港澳通行证', + }; + const idCardTypeText = idCardType && IdCardTypeDict[idCardType]; + const idCardTypeIndex = idCardType && IDCardTypeOptions.find( + ele => ele.value === gender + ); + const now = new Date(); + return assign({}, user, { + birthText, + genderText, + idCardTypeText, + oldestBirthday: `${now.getFullYear() - 120}-01-01`, + today: `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`, + genderIndex, + idCardTypeIndex, + }); + }, +}, { + data: { + GenderOptions, + IDCardTypeOptions, + }, + methods: { + setValue(input: WechatMiniprogram.Input) { + const { target, detail } = input; + const { dataset: { attr } } = target; + const { value } = detail; + this.setUpdateData(attr, value); + }, + onBirthChange(e: WechatMiniprogram.PickerChange) { + const { value } = e.detail; + const birth = new Date(value as string); + birth.setHours(0); + birth.setMinutes(0); + birth.setSeconds(0); + birth.setMilliseconds(0); + this.setUpdateData('birth', birth); + }, + onGenderChange(e: WechatMiniprogram.PickerChange) { + const { value } = e.detail; + this.setUpdateData('gender', GenderOptions[value as unknown as number].value) + }, + onIdCardTypeChange(e: WechatMiniprogram.PickerChange) { + const { value } = e.detail; + this.setUpdateData('idCardType', IDCardTypeOptions[value as unknown as number].value) + }, + async confirm() { + await this.execute(this.data.oakId ? 'update': 'create', () => { + if (this.data.oakFrom === 'user:manage:list') { + wx.navigateBack(); + } + }); + } + } +}); \ No newline at end of file diff --git a/wechatMp/pages/user/manage/upsert/index.wxml b/wechatMp/pages/user/manage/upsert/index.wxml new file mode 100644 index 000000000..3856770f3 --- /dev/null +++ b/wechatMp/pages/user/manage/upsert/index.wxml @@ -0,0 +1,40 @@ + + + + + + + + 出生日期 + + {{birthText || '请选择'}} + + + + + + + 性别 + + {{genderText || '请选择'}} + + + + + + + 证件类别 + + {{idCardTypeText || '请选择'}} + + + + + + + + + + 确定 + + \ No newline at end of file