支持中文姓名生成英文姓名
This commit is contained in:
parent
7717a1b1a7
commit
6f2ea8a209
|
@ -34,6 +34,7 @@
|
|||
"moment": "^2.30.1",
|
||||
"nprogress": "0.2.0",
|
||||
"pinia": "2.1.7",
|
||||
"pinyin-pro": "^3.27.0",
|
||||
"splitpanes": "3.1.5",
|
||||
"tinymce": "^7.9.1",
|
||||
"vue": "3.4.31",
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
</div>
|
||||
</el-dialog>
|
||||
<el-dialog :title="title" v-model="open" width="800px" append-to-body>
|
||||
<el-form ref="postRef" :model="form" :rules="rules" label-width="160px">
|
||||
<el-form ref="postRef" :model="form" :rules="rules" label-width="200px">
|
||||
<el-form-item label="证书名称" prop="factoryArea">
|
||||
<el-input v-model="form.qualificationName" disabled />
|
||||
</el-form-item>
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
</div>
|
||||
</el-dialog>
|
||||
<el-dialog :title="title" v-model="open" width="800px" append-to-body>
|
||||
<el-form ref="postRef" :model="form" :rules="rules" label-width="160px">
|
||||
<el-form ref="postRef" :model="form" :rules="rules" label-width="200px">
|
||||
<el-form-item label="证书名称" prop="factoryArea">
|
||||
<el-input v-model="form.qualificationName" disabled />
|
||||
</el-form-item>
|
||||
|
@ -124,7 +124,7 @@ const hasFilesList = [
|
|||
]
|
||||
|
||||
// 选择是否复审
|
||||
const handleCheckedHasFileChange = (value) => {
|
||||
const handleCheckedHasFileChange = (value) => {
|
||||
if (value.length > 0) {
|
||||
// 选中状态
|
||||
checkedFs.value = true
|
||||
|
|
|
@ -35,7 +35,8 @@
|
|||
<el-input v-model="registerForm.email"> </el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="中文姓名:" prop="nickName">
|
||||
<el-input v-model="registerForm.nickName" @keyup.enter="convertToEnglishName"> </el-input>
|
||||
<el-input v-model="registerForm.nickName" @input="handleInputNickName">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="英文姓名:" prop="englishName">
|
||||
<el-input v-model="registerForm.englishName"> </el-input>
|
||||
|
@ -81,6 +82,7 @@ import systemlogo from '@/assets/logo/systemLogo.png'
|
|||
import { getCustomerBusDependencyPage } from "@/api/system/dependency"
|
||||
import { customerDeptTreeSelect } from "@/api/system/user"
|
||||
import { getCustomerSysSectionPage } from "@/api/system/section"
|
||||
import { pinyin } from 'pinyin-pro';
|
||||
|
||||
const router = useRouter()
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
@ -99,6 +101,15 @@ const registerForm = ref({
|
|||
escEmail: null,
|
||||
isHasEmail: 1
|
||||
})
|
||||
const isCompoundSurname = ref(false);
|
||||
// 常见复姓列表
|
||||
const compoundSurnames = [
|
||||
'欧阳', '司马', '上官', '诸葛', '司徒', '司空',
|
||||
'夏侯', '皇甫', '慕容', '端木', '东方', '南宫',
|
||||
'万俟', '闻人', '澹台', '公冶', '宗政', '濮阳',
|
||||
'单于', '太史', '申屠', '公孙', '仲孙', '轩辕',
|
||||
'令狐', '钟离', '宇文', '长孙', '鲜于', '闾丘'
|
||||
];
|
||||
|
||||
const registerRules = {
|
||||
isHasEmail: [{ required: true, message: "请选择是否有邮箱", trigger: ["change"] }],
|
||||
|
@ -117,6 +128,11 @@ const registerRules = {
|
|||
const handleInput = (value) => {
|
||||
registerForm.value.username = value
|
||||
}
|
||||
// 中文姓名输入后 自动生成英文姓名
|
||||
const handleInputNickName = (value) => {
|
||||
registerForm.value.nickName = value
|
||||
convertToEnglishName()
|
||||
}
|
||||
// 属地选择切换
|
||||
const selectChanged = (value) => {
|
||||
if (value) {
|
||||
|
@ -184,49 +200,73 @@ const filterDisabledDept = (deptList) => {
|
|||
return true
|
||||
})
|
||||
}
|
||||
|
||||
// 首字母大写函数
|
||||
const capitalizeFirst = (str) => {
|
||||
if (!str) return '';
|
||||
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
||||
};
|
||||
// 检测是否为复姓
|
||||
const detectCompoundSurname = (name) => {
|
||||
for (const surname of compoundSurnames) {
|
||||
if (name.startsWith(surname)) {
|
||||
return surname;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
// 中文姓名转英文姓名
|
||||
const convertToEnglishName = () => {
|
||||
if (!registerForm.value.nickName.trim()) {
|
||||
registerForm.value.englishName = '';
|
||||
isCompoundSurname.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// 去除前后空格
|
||||
let name = form.value.nickName.trim();
|
||||
try {
|
||||
const name = registerForm.value.nickName.trim();
|
||||
|
||||
// 检查是否是复姓
|
||||
let isCompound = false;
|
||||
let surnameParts = [];
|
||||
// 检测复姓
|
||||
const compoundSurname = detectCompoundSurname(name);
|
||||
isCompoundSurname.value = compoundSurname !== null;
|
||||
|
||||
for (const sn of compoundSurnames) {
|
||||
if (name.startsWith(sn)) {
|
||||
isCompound = true;
|
||||
surnameParts = [sn];
|
||||
name = name.slice(sn.length);
|
||||
break;
|
||||
// 获取拼音数组
|
||||
const pinyinArray = pinyin(name, {
|
||||
toneType: 'none',
|
||||
type: 'array'
|
||||
});
|
||||
|
||||
if (pinyinArray.length === 0) {
|
||||
registerForm.value.englishName = '转换失败';
|
||||
return;
|
||||
}
|
||||
|
||||
let lastNamePart, firstNamePart;
|
||||
|
||||
if (compoundSurname) {
|
||||
// 复姓:前N个字合并为姓氏
|
||||
const surnameLength = compoundSurname.length;
|
||||
lastNamePart = pinyinArray.slice(0, surnameLength).join('');
|
||||
firstNamePart = pinyinArray.slice(surnameLength).join('');
|
||||
} else {
|
||||
// 单姓:第一个字为姓氏
|
||||
lastNamePart = pinyinArray[0];
|
||||
firstNamePart = pinyinArray.slice(1).join('');
|
||||
}
|
||||
|
||||
// 格式化输出
|
||||
const formattedLastName = capitalizeFirst(lastNamePart);
|
||||
const formattedFirstName = firstNamePart
|
||||
.split(' ')
|
||||
.map(word => capitalizeFirst(word))
|
||||
.join(' ');
|
||||
// 姓在前
|
||||
registerForm.value.englishName = `${formattedLastName} ${formattedFirstName}`;
|
||||
// 名在前
|
||||
// registerForm.value.englishName = `${capitalizeFirst(formattedFirstName)} ${capitalizeFirst(formattedLastName)}`;
|
||||
} catch (error) {
|
||||
console.error('转换错误:', error);
|
||||
registerForm.value.englishName = '转换失败,请检查输入';
|
||||
}
|
||||
|
||||
// 如果不是复姓,则取第一个字作为姓
|
||||
if (!isCompound && name.length > 0) {
|
||||
surnameParts = [name[0]];
|
||||
name = name.slice(1);
|
||||
}
|
||||
|
||||
// 处理剩余的名字部分
|
||||
const givenNameParts = name.split('');
|
||||
|
||||
// 构建英文姓氏 (全部大写)
|
||||
const engSurname = surnameParts.join('').toUpperCase();
|
||||
|
||||
// 构建英文名字 (每个字首字母大写)
|
||||
const engGivenName = givenNameParts
|
||||
.map(char => char.charAt(0).toUpperCase() + char.slice(1).toLowerCase())
|
||||
.join('');
|
||||
|
||||
// 组合结果
|
||||
registerForm.value.englishName = `${engSurname} ${engGivenName}`;
|
||||
};
|
||||
|
||||
const handleRegister = () => {
|
||||
|
@ -235,7 +275,6 @@ const handleRegister = () => {
|
|||
loading.value = true
|
||||
if (registerForm.value.isHasEmail == 0) registerForm.value.email = undefined
|
||||
register(registerForm.value).then(res => {
|
||||
console.log('注册结果', res)
|
||||
const username = registerForm.value.username
|
||||
const escName = registerForm.value.escUserName
|
||||
const _email = registerForm.value.email
|
||||
|
|
|
@ -177,8 +177,7 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="中文姓名" prop="nickName">
|
||||
<el-input v-model="form.nickName" placeholder="请输入中文姓名" maxlength="30"
|
||||
@keyup.enter="convertToEnglishName" />
|
||||
<el-input v-model="form.nickName" placeholder="请输入中文姓名" maxlength="30" @input="handleInputNickName" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
@ -329,6 +328,7 @@ import { getSysSectionPage } from "@/api/system/section"
|
|||
import { getBusDependencyPage } from "@/api/system/dependency"
|
||||
import { Splitpanes, Pane } from "splitpanes"
|
||||
import "splitpanes/dist/splitpanes.css"
|
||||
import { pinyin } from 'pinyin-pro';
|
||||
|
||||
const router = useRouter()
|
||||
const appStore = useAppStore()
|
||||
|
@ -376,12 +376,14 @@ const columns = ref([
|
|||
{ key: 5, label: `状态`, visible: true },
|
||||
{ key: 6, label: `创建时间`, visible: true }
|
||||
])
|
||||
// 常见的复姓列表
|
||||
const isCompoundSurname = ref(false);
|
||||
// 常见复姓列表
|
||||
const compoundSurnames = [
|
||||
'欧阳', '太史', '端木', '上官', '司马',
|
||||
'东方', '公孙', '尉迟', '公羊', '澹台',
|
||||
'宗政', '濮阳', '闾丘', '子车', '亓官',
|
||||
'南宫', '墨夷', '恰喇', '阏氏', '竺联'
|
||||
'欧阳', '司马', '上官', '诸葛', '司徒', '司空',
|
||||
'夏侯', '皇甫', '慕容', '端木', '东方', '南宫',
|
||||
'万俟', '闻人', '澹台', '公冶', '宗政', '濮阳',
|
||||
'单于', '太史', '申屠', '公孙', '仲孙', '轩辕',
|
||||
'令狐', '钟离', '宇文', '长孙', '鲜于', '闾丘'
|
||||
];
|
||||
const validateRoles = (rule, value, callback) => {
|
||||
console.log('选择值', value)
|
||||
|
@ -425,6 +427,11 @@ const { queryParams, form, rules } = toRefs(data)
|
|||
const handleInput = (value) => {
|
||||
form.value.userName = value
|
||||
}
|
||||
// 中文姓名输入后 自动生成英文姓名
|
||||
const handleInputNickName = (value) => {
|
||||
form.value.nickName = value
|
||||
convertToEnglishName()
|
||||
}
|
||||
// 科室数据
|
||||
const sectionData = ref([])
|
||||
// 获取科室数据
|
||||
|
@ -702,49 +709,73 @@ function submitForm() {
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 首字母大写函数
|
||||
const capitalizeFirst = (str) => {
|
||||
if (!str) return '';
|
||||
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
||||
};
|
||||
// 检测是否为复姓
|
||||
const detectCompoundSurname = (name) => {
|
||||
for (const surname of compoundSurnames) {
|
||||
if (name.startsWith(surname)) {
|
||||
return surname;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
// 中文姓名转英文姓名
|
||||
const convertToEnglishName = () => {
|
||||
if (!form.value.nickName.trim()) {
|
||||
form.value.englishName = '';
|
||||
isCompoundSurname.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// 去除前后空格
|
||||
let name = form.value.nickName.trim();
|
||||
try {
|
||||
const name = form.value.nickName.trim();
|
||||
|
||||
// 检查是否是复姓
|
||||
let isCompound = false;
|
||||
let surnameParts = [];
|
||||
// 检测复姓
|
||||
const compoundSurname = detectCompoundSurname(name);
|
||||
isCompoundSurname.value = compoundSurname !== null;
|
||||
|
||||
for (const sn of compoundSurnames) {
|
||||
if (name.startsWith(sn)) {
|
||||
isCompound = true;
|
||||
surnameParts = [sn];
|
||||
name = name.slice(sn.length);
|
||||
break;
|
||||
// 获取拼音数组
|
||||
const pinyinArray = pinyin(name, {
|
||||
toneType: 'none',
|
||||
type: 'array'
|
||||
});
|
||||
|
||||
if (pinyinArray.length === 0) {
|
||||
form.value.englishName = '转换失败';
|
||||
return;
|
||||
}
|
||||
|
||||
let lastNamePart, firstNamePart;
|
||||
|
||||
if (compoundSurname) {
|
||||
// 复姓:前N个字合并为姓氏
|
||||
const surnameLength = compoundSurname.length;
|
||||
lastNamePart = pinyinArray.slice(0, surnameLength).join('');
|
||||
firstNamePart = pinyinArray.slice(surnameLength).join('');
|
||||
} else {
|
||||
// 单姓:第一个字为姓氏
|
||||
lastNamePart = pinyinArray[0];
|
||||
firstNamePart = pinyinArray.slice(1).join('');
|
||||
}
|
||||
|
||||
// 格式化输出
|
||||
const formattedLastName = capitalizeFirst(lastNamePart);
|
||||
const formattedFirstName = firstNamePart
|
||||
.split(' ')
|
||||
.map(word => capitalizeFirst(word))
|
||||
.join(' ');
|
||||
// 姓在前
|
||||
form.value.englishName = `${formattedLastName} ${formattedFirstName}`;
|
||||
// 名在前
|
||||
// form.value.englishName = `${capitalizeFirst(formattedFirstName)} ${capitalizeFirst(formattedLastName)}`;
|
||||
} catch (error) {
|
||||
console.error('转换错误:', error);
|
||||
form.value.englishName = '转换失败,请检查输入';
|
||||
}
|
||||
|
||||
// 如果不是复姓,则取第一个字作为姓
|
||||
if (!isCompound && name.length > 0) {
|
||||
surnameParts = [name[0]];
|
||||
name = name.slice(1);
|
||||
}
|
||||
|
||||
// 处理剩余的名字部分
|
||||
const givenNameParts = name.split('');
|
||||
|
||||
// 构建英文姓氏 (全部大写)
|
||||
const engSurname = surnameParts.join('').toUpperCase();
|
||||
|
||||
// 构建英文名字 (每个字首字母大写)
|
||||
const engGivenName = givenNameParts
|
||||
.map(char => char.charAt(0).toUpperCase() + char.slice(1).toLowerCase())
|
||||
.join('');
|
||||
|
||||
// 组合结果
|
||||
form.value.englishName = `${engSurname} ${engGivenName}`;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
|
|
Loading…
Reference in New Issue
Block a user