-
+
-
+
重置保存并重新登录
diff --git a/src/modules/auth/views/AuthViews.test.mjs b/src/modules/auth/views/AuthViews.test.mjs
index 00167c9..a41ff01 100644
--- a/src/modules/auth/views/AuthViews.test.mjs
+++ b/src/modules/auth/views/AuthViews.test.mjs
@@ -53,6 +53,8 @@ test('implements every backend registration field and real submission', () => {
for (const field of ['username', 'companyName', 'displayName', 'legalPerson', 'legalPhone', 'contactEmail', 'countryCode', 'address', 'password', 'agreement']) {
assert.match(registerSource, new RegExp(`prop="${field}"`))
}
+ assert.match(registerSource, /label="登录手机号" prop="legalPhone"/)
+ assert.match(registerSource, /注册时同时初始化公司联系电话;注册后两者可分别修改,互不联动/)
assert.match(registerSource, /registerMerchant\(/)
assert.match(registerSource, /4–64 位/)
assert.match(registerSource, /8–72 位/)
diff --git a/src/modules/auth/views/RegisterView.vue b/src/modules/auth/views/RegisterView.vue
index 3b07e2b..3e683e0 100644
--- a/src/modules/auth/views/RegisterView.vue
+++ b/src/modules/auth/views/RegisterView.vue
@@ -131,7 +131,7 @@ async function submit() {
-
+ 注册时同时初始化公司联系电话;注册后两者可分别修改,互不联动。
diff --git a/src/modules/tenant-management/api/merchantIam.test.mjs b/src/modules/tenant-management/api/merchantIam.test.mjs
index db73402..bb0cb5f 100644
--- a/src/modules/tenant-management/api/merchantIam.test.mjs
+++ b/src/modules/tenant-management/api/merchantIam.test.mjs
@@ -78,6 +78,8 @@ test('starts empty and only loads server role and member records', () => {
assert.match(storeSource, /await resetMerchantMemberPassword/)
assert.match(source, /username: string/)
assert.match(source, /lastLoginAt: string \| null/)
+ assert.match(source, /phone: string \| null/)
+ assert.match(storeSource, /phone: payload\.phone\.trim\(\) \|\| null/)
assert.match(source, /memberCount: number/)
assert.match(storeSource, /account: member\.username/)
assert.match(storeSource, /lastLoginAt: formatLastLoginAt\(member\.lastLoginAt\)/)
diff --git a/src/modules/tenant-management/api/merchantIam.ts b/src/modules/tenant-management/api/merchantIam.ts
index 2a06f58..6a1b2cc 100644
--- a/src/modules/tenant-management/api/merchantIam.ts
+++ b/src/modules/tenant-management/api/merchantIam.ts
@@ -129,8 +129,8 @@ export interface CreateMerchantMemberRequest {
username: string
password: string
displayName: string
- phone: string
- email: string
+ phone: string | null
+ email: string | null
memberType: 'EMPLOYEE'
memberNo: string
roleIds: Array
@@ -138,8 +138,8 @@ export interface CreateMerchantMemberRequest {
export interface UpdateMerchantMemberRequest {
displayName: string
- phone: string
- email: string
+ phone: string | null
+ email: string | null
memberType: string
memberNo: string
roleIds: Array
diff --git a/src/modules/tenant-management/store/tenantAdministration.ts b/src/modules/tenant-management/store/tenantAdministration.ts
index c1e17e1..5331a45 100644
--- a/src/modules/tenant-management/store/tenantAdministration.ts
+++ b/src/modules/tenant-management/store/tenantAdministration.ts
@@ -234,8 +234,8 @@ export const useTenantAdministrationStore = defineStore('tenant-administration',
username: payload.account.trim(),
password: payload.password,
displayName: payload.name.trim(),
- phone: payload.phone.trim(),
- email: payload.email.trim(),
+ phone: payload.phone.trim() || null,
+ email: payload.email.trim() || null,
memberType: 'EMPLOYEE',
memberNo: payload.memberNo.trim(),
roleIds: payload.roleIds,
@@ -248,8 +248,8 @@ export const useTenantAdministrationStore = defineStore('tenant-administration',
if (!member) throw new Error('成员不存在')
const updated = await updateMerchantMember(id, {
displayName: payload.name.trim(),
- phone: payload.phone.trim(),
- email: payload.email.trim(),
+ phone: payload.phone.trim() || null,
+ email: payload.email.trim() || null,
memberType: member.isAdministrator ? 'OWNER' : 'EMPLOYEE',
memberNo: payload.memberNo.trim(),
roleIds: payload.roleIds,
diff --git a/src/modules/tenant-management/views/CompanyProfileView.vue b/src/modules/tenant-management/views/CompanyProfileView.vue
index f49f27c..a1a1227 100644
--- a/src/modules/tenant-management/views/CompanyProfileView.vue
+++ b/src/modules/tenant-management/views/CompanyProfileView.vue
@@ -150,7 +150,7 @@ const profileFormRules: FormRules = {
companyName: [{ required: true, whitespace: true, message: '请输入公司名称', trigger: 'blur' }],
legalRepresentative: [{ required: true, whitespace: true, message: '请输入法人姓名', trigger: 'blur' }],
contactName: [{ required: true, whitespace: true, message: '请输入联系人姓名', trigger: 'blur' }],
- contactPhone: [{ required: true, whitespace: true, message: '请输入联系电话', trigger: 'blur' }],
+ contactPhone: [{ required: true, whitespace: true, message: '请输入公司联系电话', trigger: 'blur' }],
contactEmail: [{ type: 'email', message: '请输入正确的联系邮箱', trigger: 'blur' }],
}
const qualificationColumns: DataTableColumn[] = [
@@ -516,7 +516,7 @@ function closeQualificationPreview() {
- 联系人
- {{ store.company.contactName || '-' }}
- - 联系电话
- {{ store.company.contactPhone || '-' }}
+ - 公司联系电话
- {{ store.company.contactPhone || '-' }}
- 联系邮箱
- {{ store.company.contactEmail || '-' }}
- 联系微信
- {{ store.company.contactWechat || '-' }}
@@ -571,7 +571,7 @@ function closeQualificationPreview() {
联系信息
-
+ 仅用于公司业务联系,不会修改任何成员的登录手机号。
@@ -684,6 +684,7 @@ function closeQualificationPreview() {
.mobile-qualification-list { display: none; }
.profile-form h3 { margin: 4px 0 18px; padding-bottom: 10px; border-bottom: 1px solid var(--border); font-size: 15px; }
.profile-form h3:not(:first-child) { margin-top: 22px; }
+.profile-field-hint { display: block; margin-top: 5px; color: var(--muted); font-size: 10px; line-height: 1.5; }
.form-grid-two { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px; }
.form-grid-two .full-row { grid-column: 1 / -1; }
.drawer-actions { display: flex; justify-content: flex-end; gap: 8px; }
diff --git a/src/modules/tenant-management/views/MembersView.vue b/src/modules/tenant-management/views/MembersView.vue
index 4dc0154..4d09626 100644
--- a/src/modules/tenant-management/views/MembersView.vue
+++ b/src/modules/tenant-management/views/MembersView.vue
@@ -30,19 +30,19 @@ const memberRules: FormRules = {
{ required: true, message: '请输入初始密码', trigger: 'blur' },
{ pattern: /^(?=.*[A-Za-z])(?=.*\d).{8,64}$/, message: '密码需为 8–64 位,并同时包含字母和数字', trigger: 'blur' },
],
- phone: [{ max: 32, message: '联系电话不能超过 32 个字符', trigger: 'blur' }],
+ phone: [{ pattern: /^1[3-9]\d{9}$/, message: '请输入有效的中国大陆登录手机号', trigger: 'blur' }],
email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' }],
roleIds: [{ type: 'array', required: true, min: 1, message: '请至少选择一个成员角色', trigger: 'change' }],
}
const memberQueryFields: QueryField[] = [
- { key: 'keyword', type: 'input', placeholder: '姓名、账号、手机或邮箱' },
+ { key: 'keyword', type: 'input', placeholder: '姓名、账号、登录手机号或邮箱' },
{ key: 'status', type: 'select', placeholder: '全部状态', options: [{ label: '正常', value: 'ACTIVE' }, { label: '已停用', value: 'INACTIVE' }] },
]
const memberTableColumns: DataTableColumn[] = [
{ key: 'actions', label: '操作', fixed: 'left', width: 230, slotName: 'actions' },
{ key: 'member', label: '成员', minWidth: 170, slotName: 'member' },
- { key: 'contact', label: '联系方式', minWidth: 200, slotName: 'contact' },
+ { key: 'contact', label: '登录手机号 / 邮箱', minWidth: 200, slotName: 'contact' },
{ key: 'roles', label: '角色', minWidth: 130, slotName: 'roles' },
{ key: 'lastLoginAt', prop: 'lastLoginAt', label: '登录记录', minWidth: 130 },
{ key: 'status', label: '状态', width: 90, slotName: 'status' },
@@ -176,7 +176,7 @@ async function resetPassword(member: TenantMember) {
编辑重置密码{{ (row as TenantMember).status === 'ACTIVE' ? '停用' : '启用' }}仅查看
{{ (row as TenantMember).name.slice(0, 1) }}{{ (row as TenantMember).name }}{{ (row as TenantMember).account }}
- {{ (row as TenantMember).phone }}{{ (row as TenantMember).email || '-' }}
+ {{ (row as TenantMember).phone || '-' }}{{ (row as TenantMember).email || '-' }}
{{ name }}未分配
{{ (row as TenantMember).status === 'ACTIVE' ? '正常' : '已停用' }}
没有匹配的企业成员,请调整筛选条件。
@@ -186,7 +186,7 @@ async function resetPassword(member: TenantMember) {
- - 手机
- {{ member.phone }}
- 最近登录
- {{ member.lastLoginAt }}
- 角色
- {{ store.roleNames(member.roleIds).join('、') }}
+ - 登录手机号
- {{ member.phone || '-' }}
- 最近登录
- {{ member.lastLoginAt }}
- 角色
- {{ store.roleNames(member.roleIds).join('、') }}
@@ -199,7 +199,7 @@ async function resetPassword(member: TenantMember) {
-
+ 用于该成员手机号登录;修改后会同步认证账号。
请通过安全渠道将初始密码交给成员;前端不会保存或再次展示该密码。
@@ -225,6 +225,7 @@ async function resetPassword(member: TenantMember) {
.mobile-member-list, .mobile-member-empty { display: none; }
.member-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.member-form-tip { display: flex; gap: 10px; padding: 13px; border: 1px solid #cfe1dc; background: #f2f7f6; color: var(--muted); font-size: 11px; line-height: 1.6; }
+.member-field-help { margin-top: 5px; color: var(--muted); font-size: 10px; line-height: 1.5; }
.member-form-tip svg { flex: 0 0 17px; color: var(--primary); }
.drawer-actions { display: flex; justify-content: flex-end; gap: 8px; }
.members-page :deep(.el-form-item__error) { line-height: 1.45; overflow-wrap: anywhere; }
diff --git a/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs b/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs
index c7815e4..a0d53f1 100644
--- a/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs
+++ b/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs
@@ -94,6 +94,10 @@ test('implements company details, contact information and qualification workflow
assert.match(profileSource, /成立日期<\/dt>\{\{ store\.company\.establishedDate/)
assert.match(profileSource, /注册资本<\/dt>\{\{ store\.company\.registeredCapital/)
assert.match(profileSource, /联系微信<\/dt>\{\{ store\.company\.contactWechat/)
+ assert.match(profileSource, /公司联系电话<\/dt>\{\{ store\.company\.contactPhone/)
+ assert.match(profileSource, /label="公司联系电话" prop="contactPhone" required/)
+ assert.match(profileSource, /不会修改任何成员的登录手机号/)
+ assert.doesNotMatch(profileSource, /联系电话<\/dt>\{\{ store\.company\.contactPhone/)
assert.match(storeSource, /expiresAt: item\.validTo \|\| '长期有效'/)
})
@@ -135,6 +139,11 @@ test('implements member list, role assignment, password reset and status control
assert.match(membersSource, /canChangeMemberStatus.*company:member:status/)
assert.doesNotMatch(membersSource, /company:member:write/)
assert.doesNotMatch(membersSource, /member-metrics/)
+ assert.match(membersSource, /label="登录手机号" prop="phone"/)
+ assert.match(membersSource, /登录手机号 \/ 邮箱/)
+ assert.match(membersSource, /用于该成员手机号登录;修改后会同步认证账号/)
+ assert.match(membersSource, /phone: \[\{ pattern: \/\^1\[3-9\]\\d\{9\}\$\//)
+ assert.doesNotMatch(membersSource, /label="联系电话" prop="phone"/)
})
test('protects built-in roles and exposes role permission assignment', () => {
From 6dcea387d35b9b0823e066d39f6bdc46aef926de Mon Sep 17 00:00:00 2001
From: ouyangxq <775153912@qq.com>
Date: Wed, 2 Sep 2026 10:05:46 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/modules/auth/api/auth.ts | 2 +-
src/modules/auth/views/AuthViews.test.mjs | 7 +++++--
src/modules/auth/views/RegisterView.vue | 10 +++++-----
3 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/modules/auth/api/auth.ts b/src/modules/auth/api/auth.ts
index 564968a..cb3cdec 100644
--- a/src/modules/auth/api/auth.ts
+++ b/src/modules/auth/api/auth.ts
@@ -7,7 +7,7 @@ export interface RegisterMerchantRequest {
displayName: string
companyName: string
legalPerson: string
- legalPhone: string
+ phone: string
contactEmail?: string
countryCode?: string
address?: string
diff --git a/src/modules/auth/views/AuthViews.test.mjs b/src/modules/auth/views/AuthViews.test.mjs
index a41ff01..6adc8fb 100644
--- a/src/modules/auth/views/AuthViews.test.mjs
+++ b/src/modules/auth/views/AuthViews.test.mjs
@@ -50,10 +50,13 @@ test('persists both rotating tokens according to the remember choice', () => {
})
test('implements every backend registration field and real submission', () => {
- for (const field of ['username', 'companyName', 'displayName', 'legalPerson', 'legalPhone', 'contactEmail', 'countryCode', 'address', 'password', 'agreement']) {
+ for (const field of ['username', 'companyName', 'displayName', 'legalPerson', 'phone', 'contactEmail', 'countryCode', 'address', 'password', 'agreement']) {
assert.match(registerSource, new RegExp(`prop="${field}"`))
}
- assert.match(registerSource, /label="登录手机号" prop="legalPhone"/)
+ assert.match(registerSource, /label="登录手机号" prop="phone"/)
+ assert.doesNotMatch(registerSource, /legalPhone/)
+ assert.match(authApiSource, /phone: string/)
+ assert.doesNotMatch(authApiSource, /legalPhone/)
assert.match(registerSource, /注册时同时初始化公司联系电话;注册后两者可分别修改,互不联动/)
assert.match(registerSource, /registerMerchant\(/)
assert.match(registerSource, /4–64 位/)
diff --git a/src/modules/auth/views/RegisterView.vue b/src/modules/auth/views/RegisterView.vue
index 3e683e0..4068b5e 100644
--- a/src/modules/auth/views/RegisterView.vue
+++ b/src/modules/auth/views/RegisterView.vue
@@ -11,7 +11,7 @@ interface RegisterForm {
companyName: string
displayName: string
legalPerson: string
- legalPhone: string
+ phone: string
contactEmail: string
countryCode: string
address: string
@@ -24,7 +24,7 @@ const formRef = ref()
const submitting = ref(false)
const submitted = ref(false)
const submittedAt = ref('')
-const form = reactive({ username: '', companyName: '', displayName: '', legalPerson: '', legalPhone: '', contactEmail: '', countryCode: 'CN', address: '', password: '', agreement: false })
+const form = reactive({ username: '', companyName: '', displayName: '', legalPerson: '', phone: '', contactEmail: '', countryCode: 'CN', address: '', password: '', agreement: false })
const rules: FormRules = {
username: [
@@ -46,7 +46,7 @@ const rules: FormRules = {
contactEmail: [
{ type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' },
],
- legalPhone: [
+ phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入有效的中国大陆手机号', trigger: 'blur' },
],
@@ -74,7 +74,7 @@ async function submit() {
displayName: form.displayName.trim(),
companyName: form.companyName.trim(),
legalPerson: form.legalPerson.trim(),
- legalPhone: form.legalPhone.trim(),
+ phone: form.phone.trim(),
contactEmail: form.contactEmail.trim() || undefined,
countryCode: form.countryCode,
address: form.address.trim() || undefined,
@@ -131,7 +131,7 @@ async function submit() {
- 注册时同时初始化公司联系电话;注册后两者可分别修改,互不联动。
+ 注册时同时初始化公司联系电话;注册后两者可分别修改,互不联动。
From 7d97be64500c9b1715735cd62a0c0deebc7e589b Mon Sep 17 00:00:00 2001
From: ouyangxq <775153912@qq.com>
Date: Wed, 2 Sep 2026 10:15:51 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../views/CompanyProfileView.vue | 20 ++++++++++++++-----
.../tenant-management/views/MembersView.vue | 2 +-
.../views/TenantAdministrationViews.test.mjs | 6 +++++-
3 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/src/modules/tenant-management/views/CompanyProfileView.vue b/src/modules/tenant-management/views/CompanyProfileView.vue
index a1a1227..e9ea571 100644
--- a/src/modules/tenant-management/views/CompanyProfileView.vue
+++ b/src/modules/tenant-management/views/CompanyProfileView.vue
@@ -83,6 +83,7 @@ const normalizedQualificationCertificateNo = computed(() => qualificationCertifi
const draftCreditCodeValid = computed(() => unifiedSocialCreditCodePattern.test(normalizedQualificationCertificateNo.value))
const businessLicenseFileSelected = computed(() => Boolean(qualificationDraftItem('BUSINESS_LICENSE')?.file))
const legalPersonIdFileSelected = computed(() => Boolean(qualificationDraftItem('LEGAL_PERSON_ID')?.file))
+const standaloneLegalPersonIdUnsupported = computed(() => legalPersonIdFileSelected.value && !businessLicenseFileSelected.value)
const requiredPackageChangeSelected = computed(() => businessLicenseFileSelected.value)
const requiredPackageFilesSelected = computed(() => businessLicenseFileSelected.value)
const qualificationCreditCodeReady = computed(() => requiredPackageChangeSelected.value
@@ -90,7 +91,6 @@ const qualificationCreditCodeReady = computed(() => requiredPackageChangeSelecte
: companyCreditCodeValid.value)
const qualificationCreditCodeError = computed(() => {
if (qualificationCreditCodeReady.value) return ''
- if (legalPersonIdFileSelected.value && !businessLicenseFileSelected.value) return '法人身份证需与本次营业执照一起保存'
if (draftCreditCodeValid.value && !requiredPackageFilesSelected.value) return '统一社会信用代码必须随营业执照共同保存'
return '请输入18位字母或数字组成的统一社会信用代码'
})
@@ -122,11 +122,11 @@ const qualificationUploadDisabledReason = computed(() => {
const selectedQualificationCount = computed(() => qualificationDrafts.filter((item) => Boolean(item.file)).length)
const canSaveQualificationBatch = computed(() => canUploadQualification.value
&& selectedQualificationCount.value > 0
- && (!legalPersonIdFileSelected.value || businessLicenseFileSelected.value)
+ && !standaloneLegalPersonIdUnsupported.value
&& requiredPackageComplete.value)
const qualificationSaveDisabledReason = computed(() => {
if (!canUploadQualification.value) return qualificationUploadDisabledReason.value
- if (legalPersonIdFileSelected.value && !businessLicenseFileSelected.value) return '法人身份证需与本次营业执照一起保存'
+ if (standaloneLegalPersonIdUnsupported.value) return '法人身份证为选填项;当前文件服务尚未开放单独保存,请取消本次选择后保存其他资质。'
if (!requiredPackageComplete.value) return `请完整保存必填业务项:${missingRequiredPackageItems.value.join('、')}`
if (!selectedQualificationCount.value) return '当前没有需要保存的变更'
return ''
@@ -150,7 +150,10 @@ const profileFormRules: FormRules = {
companyName: [{ required: true, whitespace: true, message: '请输入公司名称', trigger: 'blur' }],
legalRepresentative: [{ required: true, whitespace: true, message: '请输入法人姓名', trigger: 'blur' }],
contactName: [{ required: true, whitespace: true, message: '请输入联系人姓名', trigger: 'blur' }],
- contactPhone: [{ required: true, whitespace: true, message: '请输入公司联系电话', trigger: 'blur' }],
+ contactPhone: [
+ { required: true, whitespace: true, message: '请输入公司联系电话', trigger: 'blur' },
+ { pattern: /^[0-9-]{4,32}$/, message: '公司联系电话仅支持 4–32 位数字或连字符', trigger: 'blur' },
+ ],
contactEmail: [{ type: 'email', message: '请输入正确的联系邮箱', trigger: 'blur' }],
}
const qualificationColumns: DataTableColumn[] = [
@@ -337,6 +340,13 @@ async function submitQualification() {
ElMessage.warning(qualificationUploadDisabledReason.value)
return
}
+ if (standaloneLegalPersonIdUnsupported.value) {
+ const legalPersonId = qualificationDraftItem('LEGAL_PERSON_ID')
+ const message = '当前文件服务尚未开放法人身份证单独上传或替换,该选填文件未提交。'
+ if (legalPersonId) { legalPersonId.error = message; legalPersonId.uploadState = 'error' }
+ ElMessage.warning(message)
+ return
+ }
if (!requiredPackageComplete.value) {
const businessLicense = qualificationDraftItem('BUSINESS_LICENSE')
if (businessLicense && !qualificationCreditCodeReady.value) businessLicense.error = qualificationCreditCodeError.value
@@ -571,7 +581,7 @@ function closeQualificationPreview() {
联系信息
- 仅用于公司业务联系,不会修改任何成员的登录手机号。
+ 仅用于公司业务联系,不会修改任何成员的登录手机号。
diff --git a/src/modules/tenant-management/views/MembersView.vue b/src/modules/tenant-management/views/MembersView.vue
index 4d09626..ff9d29a 100644
--- a/src/modules/tenant-management/views/MembersView.vue
+++ b/src/modules/tenant-management/views/MembersView.vue
@@ -199,7 +199,7 @@ async function resetPassword(member: TenantMember) {
- 用于该成员手机号登录;修改后会同步认证账号。
+ 用于该成员手机号登录;修改后会同步认证账号并退出该成员现有会话。
请通过安全渠道将初始密码交给成员;前端不会保存或再次展示该密码。
diff --git a/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs b/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs
index a0d53f1..2816e3d 100644
--- a/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs
+++ b/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs
@@ -72,6 +72,9 @@ test('implements company details, contact information and qualification workflow
assert.match(profileSource, /银行开户许可证'.*required: false/)
assert.match(profileSource, /requiredQualificationTypes\.every/)
assert.doesNotMatch(profileSource, /四类必填资质/)
+ assert.doesNotMatch(profileSource, /法人身份证需与本次营业执照一起保存/)
+ assert.match(profileSource, /const standaloneLegalPersonIdUnsupported = computed/)
+ assert.match(profileSource, /当前文件服务尚未开放法人身份证单独上传或替换,该选填文件未提交/)
assert.match(profileSource, /qualificationUploadErrorMessage\(error\)/)
assert.match(profileSource, /submitTenantQualificationReview/)
assert.match(profileSource, /提交企业审核/)
@@ -97,6 +100,7 @@ test('implements company details, contact information and qualification workflow
assert.match(profileSource, /公司联系电话<\/dt>\{\{ store\.company\.contactPhone/)
assert.match(profileSource, /label="公司联系电话" prop="contactPhone" required/)
assert.match(profileSource, /不会修改任何成员的登录手机号/)
+ assert.match(profileSource, /pattern: \/\^\[0-9-\]\{4,32\}\$\//)
assert.doesNotMatch(profileSource, /联系电话<\/dt>\{\{ store\.company\.contactPhone/)
assert.match(storeSource, /expiresAt: item\.validTo \|\| '长期有效'/)
})
@@ -141,7 +145,7 @@ test('implements member list, role assignment, password reset and status control
assert.doesNotMatch(membersSource, /member-metrics/)
assert.match(membersSource, /label="登录手机号" prop="phone"/)
assert.match(membersSource, /登录手机号 \/ 邮箱/)
- assert.match(membersSource, /用于该成员手机号登录;修改后会同步认证账号/)
+ assert.match(membersSource, /用于该成员手机号登录;修改后会同步认证账号并退出该成员现有会话/)
assert.match(membersSource, /phone: \[\{ pattern: \/\^1\[3-9\]\\d\{9\}\$\//)
assert.doesNotMatch(membersSource, /label="联系电话" prop="phone"/)
})