|
|
@ -1,14 +1,15 @@ |
|
|
|
<script setup> |
|
|
|
<script setup> |
|
|
|
import { onMounted, ref, computed } from 'vue' |
|
|
|
import { onMounted, ref, computed, onUnmounted, onBeforeUnmount } from 'vue' |
|
|
|
import { |
|
|
|
import { |
|
|
|
userChangeService, |
|
|
|
userChangeService, |
|
|
|
userChangePasswordService, |
|
|
|
userChangePasswordService, |
|
|
|
|
|
|
|
userCodeRegisterService, |
|
|
|
} from '@/api/user/user.js' |
|
|
|
} from '@/api/user/user.js' |
|
|
|
// import { defineEmits } from 'vue' |
|
|
|
// import { defineEmits } from 'vue' |
|
|
|
import useUserStore from '@/store/modules/user' |
|
|
|
import useUserStore from '@/store/modules/user' |
|
|
|
import { useRouter } from 'vue-router' |
|
|
|
import { useRouter } from 'vue-router' |
|
|
|
import { ElMessage, dayjs } from 'element-plus' |
|
|
|
import { ElMessage, dayjs } from 'element-plus' |
|
|
|
|
|
|
|
import { Edit, Back } from '@element-plus/icons-vue' |
|
|
|
const props = defineProps({ |
|
|
|
const props = defineProps({ |
|
|
|
name: { |
|
|
|
name: { |
|
|
|
type: String, |
|
|
|
type: String, |
|
|
@ -33,23 +34,23 @@ const pwdForm = ref({ |
|
|
|
const dialogFormVisible = ref(false) |
|
|
|
const dialogFormVisible = ref(false) |
|
|
|
//密码 |
|
|
|
//密码 |
|
|
|
const passFormVisible = ref(false) |
|
|
|
const passFormVisible = ref(false) |
|
|
|
|
|
|
|
|
|
|
|
//dialog |
|
|
|
//dialog |
|
|
|
const form = ref({}) |
|
|
|
const form = ref({}) |
|
|
|
|
|
|
|
|
|
|
|
const formLabelWidth = '80px' |
|
|
|
const formLabelWidth = '80px' |
|
|
|
//打开dialog |
|
|
|
//打开dialog |
|
|
|
|
|
|
|
form.value = { ...props.userData, code: '', newphone: '' } |
|
|
|
const openInfo = () => { |
|
|
|
const openInfo = () => { |
|
|
|
dialogFormVisible.value = true |
|
|
|
dialogFormVisible.value = true |
|
|
|
form.value = { ...props.userData } |
|
|
|
change.value = true |
|
|
|
// console.log(form.value, 'form') |
|
|
|
// console.log(form.value, 'form') |
|
|
|
} |
|
|
|
} |
|
|
|
const openPass = () => { |
|
|
|
const openPass = () => { |
|
|
|
passFormVisible.value = true |
|
|
|
passFormVisible.value = true |
|
|
|
|
|
|
|
pwdForm.value = {} |
|
|
|
} |
|
|
|
} |
|
|
|
//校验规则 |
|
|
|
//校验规则 |
|
|
|
const checkOldSame = (rule, value, callback) => { |
|
|
|
const checkOldSame = (rule, value, callback) => { |
|
|
|
if (value === props.userData.password) { |
|
|
|
if (value === pwdForm.value.old_pwd) { |
|
|
|
callback(new Error('新密码不能与旧密码相同')) |
|
|
|
callback(new Error('新密码不能与旧密码相同')) |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
callback() |
|
|
|
callback() |
|
|
@ -57,28 +58,44 @@ const checkOldSame = (rule, value, callback) => { |
|
|
|
} |
|
|
|
} |
|
|
|
const checkNewSame = (rule, value, cb) => { |
|
|
|
const checkNewSame = (rule, value, cb) => { |
|
|
|
if (value !== pwdForm.value.new_pwd) { |
|
|
|
if (value !== pwdForm.value.new_pwd) { |
|
|
|
cb(new Error('新密码和确认再次输入的新密码不一样!')) |
|
|
|
cb(new Error('新密码和确认再次输入的新密码不一样')) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
cb() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
const checkOldPhone = (rule, value, cb) => { |
|
|
|
|
|
|
|
if (value === form.value.phone) { |
|
|
|
|
|
|
|
cb(new Error('新手机号与旧手机号相同')) |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
cb() |
|
|
|
cb() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//信息校验 |
|
|
|
//信息校验 |
|
|
|
const infoRules = { |
|
|
|
const infoRules = { |
|
|
|
|
|
|
|
nickName: [ |
|
|
|
|
|
|
|
{ required: true, message: '请输入昵称', trigger: 'blur' }, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
max: 10, |
|
|
|
|
|
|
|
min: 1, |
|
|
|
|
|
|
|
message: '昵称长度最小一位最大十位', |
|
|
|
|
|
|
|
trigger: ['change', 'blur'], |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
], |
|
|
|
phone: [ |
|
|
|
phone: [ |
|
|
|
{ required: true, message: '请输入手机号', trigger: 'blur' }, |
|
|
|
{ required: true, message: '请输入手机号', trigger: 'blur' }, |
|
|
|
{ |
|
|
|
{ |
|
|
|
pattern: /^1[3-9]\d{9}$/, |
|
|
|
pattern: /^1[3-9]\d{9}$/, |
|
|
|
message: '手机号格式不正确', |
|
|
|
message: '手机号格式不正确', |
|
|
|
trigger: 'blur', |
|
|
|
trigger: ['change', 'blur'], |
|
|
|
}, |
|
|
|
}, |
|
|
|
], |
|
|
|
], |
|
|
|
nickName: [ |
|
|
|
newphone: [ |
|
|
|
{ required: true, message: '请输入昵称', trigger: 'blur' }, |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
pattern: /^[\u4e00-\u9fa5a-zA-Z0-9_]{1,10}$/, |
|
|
|
pattern: /^1[3-9]\d{9}$/, |
|
|
|
message: '昵称格式不正确', |
|
|
|
message: '手机号格式不正确', |
|
|
|
trigger: 'blur', |
|
|
|
trigger: ['change', 'blur'], |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
{ validator: checkOldPhone, trigger: 'blur' }, |
|
|
|
], |
|
|
|
], |
|
|
|
} |
|
|
|
} |
|
|
|
//密码校验 |
|
|
|
//密码校验 |
|
|
@ -117,17 +134,86 @@ const rules = { |
|
|
|
const infoRef = ref() |
|
|
|
const infoRef = ref() |
|
|
|
//修改用户信息 |
|
|
|
//修改用户信息 |
|
|
|
const emit = defineEmits(['get-message']) |
|
|
|
const emit = defineEmits(['get-message']) |
|
|
|
|
|
|
|
const change = ref(true) |
|
|
|
|
|
|
|
//验证码倒计时 |
|
|
|
|
|
|
|
const countdown = ref(0) |
|
|
|
|
|
|
|
//修改手机号 |
|
|
|
|
|
|
|
//切换可见性 |
|
|
|
|
|
|
|
const phoneValue = form.value.phone |
|
|
|
|
|
|
|
const toggleVisibility = () => { |
|
|
|
|
|
|
|
// console.log('change') |
|
|
|
|
|
|
|
change.value = false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//验证码 |
|
|
|
|
|
|
|
const codecode = ref() |
|
|
|
|
|
|
|
const codeSubmit = async () => { |
|
|
|
|
|
|
|
await infoRef.value.validate() |
|
|
|
|
|
|
|
// console.log('开始发起注册验证码') |
|
|
|
|
|
|
|
const phoness = form.value.newphone |
|
|
|
|
|
|
|
userCodeRegisterService(phoness) |
|
|
|
|
|
|
|
.then((response) => { |
|
|
|
|
|
|
|
codecode.value = response.data |
|
|
|
|
|
|
|
console.log(codecode.value, 'codecode') |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.catch((error) => { |
|
|
|
|
|
|
|
console.log(error.message, 'error') |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// console.log(change.value == true, 'toggleVisibility.value == false') |
|
|
|
|
|
|
|
// if (toggleVisibility.value == 'false') { |
|
|
|
|
|
|
|
// console.log('值相等,为 false') |
|
|
|
|
|
|
|
// } else { |
|
|
|
|
|
|
|
// console.log('值不相等') |
|
|
|
|
|
|
|
// } |
|
|
|
const changeInfo = async () => { |
|
|
|
const changeInfo = async () => { |
|
|
|
await infoRef.value.validate() |
|
|
|
await infoRef.value.validate() |
|
|
|
const userInfo = { |
|
|
|
if (change.value === true) { |
|
|
|
|
|
|
|
// console.log(form.value.phone, '原手机号') |
|
|
|
|
|
|
|
await userChangeService({ |
|
|
|
phone: form.value.phone, |
|
|
|
phone: form.value.phone, |
|
|
|
id: form.value.id, |
|
|
|
id: form.value.id, |
|
|
|
nickName: form.value.nickName, |
|
|
|
nickName: form.value.nickName, |
|
|
|
|
|
|
|
}).then(() => { |
|
|
|
|
|
|
|
ElMessage.success('修改成功') |
|
|
|
|
|
|
|
emit('get-message', form.value.nickName) |
|
|
|
|
|
|
|
form.value.newphone = '' |
|
|
|
|
|
|
|
form.value.code = '' |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
dialogFormVisible.value = false |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
if (codecode.value === form.value.code) { |
|
|
|
|
|
|
|
// console.log(form.value.newphone, '新手机号') |
|
|
|
|
|
|
|
// console.log('验证码正确') |
|
|
|
|
|
|
|
await userChangeService({ |
|
|
|
|
|
|
|
phone: form.value.newphone, |
|
|
|
|
|
|
|
id: form.value.id, |
|
|
|
|
|
|
|
nickName: form.value.nickName, |
|
|
|
|
|
|
|
}).then(() => { |
|
|
|
|
|
|
|
ElMessage.success('修改成功') |
|
|
|
|
|
|
|
form.value.phone = form.value.newphone |
|
|
|
|
|
|
|
emit('get-phone', form.value.phone) |
|
|
|
|
|
|
|
form.value.newphone = '' |
|
|
|
|
|
|
|
form.value.code = '' |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
dialogFormVisible.value = false |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
ElMessage.error('验证码错误') |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
const jsonData = JSON.stringify(userInfo) |
|
|
|
//修改密码 |
|
|
|
await userChangeService(jsonData).then(() => { |
|
|
|
const pwdRef = ref() |
|
|
|
|
|
|
|
const changePassword = async () => { |
|
|
|
|
|
|
|
await pwdRef.value.validate() |
|
|
|
|
|
|
|
await userChangeService({ |
|
|
|
|
|
|
|
phone: form.value.phone, |
|
|
|
|
|
|
|
id: form.value.id, |
|
|
|
|
|
|
|
nickName: form.value.nickName, |
|
|
|
|
|
|
|
}).then(() => { |
|
|
|
ElMessage.success('修改成功') |
|
|
|
ElMessage.success('修改成功') |
|
|
|
emit('get-message', form.value.nickName) |
|
|
|
emit('get-message', form.value.nickName) |
|
|
|
|
|
|
|
form.value.newphone = '' |
|
|
|
|
|
|
|
form.value.code = '' |
|
|
|
}) |
|
|
|
}) |
|
|
|
dialogFormVisible.value = false |
|
|
|
dialogFormVisible.value = false |
|
|
|
} |
|
|
|
} |
|
|
@ -138,18 +224,17 @@ const cancleInfo = () => { |
|
|
|
const userStore = useUserStore() |
|
|
|
const userStore = useUserStore() |
|
|
|
const onSubmit = async () => { |
|
|
|
const onSubmit = async () => { |
|
|
|
await formRef.value.validate() |
|
|
|
await formRef.value.validate() |
|
|
|
const passData = ref({ |
|
|
|
await userChangePasswordService({ |
|
|
|
oldPassword: pwdForm.value.old_pwd, |
|
|
|
oldPassword: pwdForm.value.old_pwd, |
|
|
|
newPassword: pwdForm.value.new_pwd, |
|
|
|
newPassword: pwdForm.value.new_pwd, |
|
|
|
username: props.userData.username, |
|
|
|
username: props.userData.username, |
|
|
|
}) |
|
|
|
}) |
|
|
|
await userChangePasswordService(passData.value) |
|
|
|
|
|
|
|
.then(() => { |
|
|
|
.then(() => { |
|
|
|
ElMessage.success('密码修改成功') |
|
|
|
ElMessage.success('修改成功') |
|
|
|
passFormVisible.value = false |
|
|
|
passFormVisible.value = false |
|
|
|
}) |
|
|
|
}) |
|
|
|
.catch((error) => { |
|
|
|
.catch((error) => { |
|
|
|
console.log(error, 'error') |
|
|
|
// console.log(error, 'error') |
|
|
|
ElMessage.error(error.response.data.message) |
|
|
|
ElMessage.error(error.response.data.message) |
|
|
|
}) |
|
|
|
}) |
|
|
|
pwdForm.value = {} |
|
|
|
pwdForm.value = {} |
|
|
@ -173,8 +258,31 @@ const flagVisible = ref(true) |
|
|
|
|
|
|
|
|
|
|
|
//展示当前日期 |
|
|
|
//展示当前日期 |
|
|
|
const currentDate = new Date() |
|
|
|
const currentDate = new Date() |
|
|
|
const formattedDate = dayjs(currentDate).format('YYYY-MM-DD') |
|
|
|
const formattedDate = ref() |
|
|
|
|
|
|
|
let currentTime = ref(new Date().toLocaleString()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 使用 setInterval 每秒更新时间 |
|
|
|
|
|
|
|
let timer1 = setInterval(() => { |
|
|
|
|
|
|
|
currentTime.value = new Date().toLocaleString() |
|
|
|
|
|
|
|
}, 1000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 在组件卸载时清除定时器 |
|
|
|
|
|
|
|
onUnmounted(() => { |
|
|
|
|
|
|
|
clearInterval(timer1) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获取验证码 |
|
|
|
|
|
|
|
let timer |
|
|
|
|
|
|
|
const updateCountdown = () => { |
|
|
|
|
|
|
|
if (countdown.value > 0) { |
|
|
|
|
|
|
|
countdown.value-- |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
clearInterval(timer) // 清除计时器 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
onBeforeUnmount(() => { |
|
|
|
|
|
|
|
clearInterval(timer) // 组件销毁前清除计时器,避免内存泄漏 |
|
|
|
|
|
|
|
}) |
|
|
|
onMounted(() => { |
|
|
|
onMounted(() => { |
|
|
|
username.value = props.data.name |
|
|
|
username.value = props.data.name |
|
|
|
const hireDate = new Date(props.data.joinWorkTime) |
|
|
|
const hireDate = new Date(props.data.joinWorkTime) |
|
|
@ -182,6 +290,12 @@ onMounted(() => { |
|
|
|
// const currentDate = new Date() |
|
|
|
// const currentDate = new Date() |
|
|
|
const millisecondsPerDay = 1000 * 60 * 60 * 24 |
|
|
|
const millisecondsPerDay = 1000 * 60 * 60 * 24 |
|
|
|
daysOnJob.value = Math.floor((currentDate - hireDate) / millisecondsPerDay) |
|
|
|
daysOnJob.value = Math.floor((currentDate - hireDate) / millisecondsPerDay) |
|
|
|
|
|
|
|
let timer = setInterval(() => { |
|
|
|
|
|
|
|
formattedDate.value = dayjs(currentDate).format('YYYY-MM-DD HH:mm:ss') |
|
|
|
|
|
|
|
}, 1000) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
onUnmounted(() => { |
|
|
|
|
|
|
|
clearInterval(timer) |
|
|
|
}) |
|
|
|
}) |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
<template> |
|
|
|
<template> |
|
|
@ -205,14 +319,21 @@ onMounted(() => { |
|
|
|
修改密码 |
|
|
|
修改密码 |
|
|
|
</el-button> |
|
|
|
</el-button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="time">{{ formattedDate }}</div> |
|
|
|
<div class="time">{{ currentTime }}</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<el-dialog |
|
|
|
<el-dialog |
|
|
|
v-model="dialogFormVisible" |
|
|
|
v-model="dialogFormVisible" |
|
|
|
title="登录信息" |
|
|
|
title="登录信息" |
|
|
|
style="width: 800px; text-align: center" |
|
|
|
style="width: 800px; text-align: center" |
|
|
|
> |
|
|
|
> |
|
|
|
<el-form :rules="infoRules" ref="infoRef" :data="form"> |
|
|
|
<!-- <div v-if="change"> --> |
|
|
|
|
|
|
|
<el-form |
|
|
|
|
|
|
|
:model="form" |
|
|
|
|
|
|
|
:rules="infoRules" |
|
|
|
|
|
|
|
ref="infoRef" |
|
|
|
|
|
|
|
size="large" |
|
|
|
|
|
|
|
v-if="change" |
|
|
|
|
|
|
|
> |
|
|
|
<el-form-item label="用户名" :label-width="formLabelWidth"> |
|
|
|
<el-form-item label="用户名" :label-width="formLabelWidth"> |
|
|
|
<el-input :disabled="true" v-model="form.username" autocomplete="off" /> |
|
|
|
<el-input :disabled="true" v-model="form.username" autocomplete="off" /> |
|
|
|
</el-form-item> |
|
|
|
</el-form-item> |
|
|
@ -220,9 +341,60 @@ onMounted(() => { |
|
|
|
<el-input v-model="form.nickName" autocomplete="off" /> |
|
|
|
<el-input v-model="form.nickName" autocomplete="off" /> |
|
|
|
</el-form-item> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="手机" :label-width="formLabelWidth" prop="phone"> |
|
|
|
<el-form-item label="手机" :label-width="formLabelWidth" prop="phone"> |
|
|
|
<el-input v-model="form.phone" autocomplete="off" /> |
|
|
|
<el-input v-model="form.phone" autocomplete="off" style="width: 92%" /> |
|
|
|
|
|
|
|
<el-button |
|
|
|
|
|
|
|
type="primary" |
|
|
|
|
|
|
|
plain |
|
|
|
|
|
|
|
circle |
|
|
|
|
|
|
|
@click="toggleVisibility" |
|
|
|
|
|
|
|
style="margin-left: 2%" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
<el-icon> |
|
|
|
|
|
|
|
<Edit /> |
|
|
|
|
|
|
|
</el-icon> |
|
|
|
|
|
|
|
</el-button> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
</el-form> |
|
|
|
|
|
|
|
<el-form :model="form" :rules="infoRules" ref="infoRef" size="large" v-else> |
|
|
|
|
|
|
|
<el-form-item> |
|
|
|
|
|
|
|
<el-icon style="margin-left: 20px" size="large" @click="change = true"> |
|
|
|
|
|
|
|
<Back /> |
|
|
|
|
|
|
|
</el-icon> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item |
|
|
|
|
|
|
|
label="新手机号" |
|
|
|
|
|
|
|
:label-width="formLabelWidth" |
|
|
|
|
|
|
|
prop="newphone" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
<el-input |
|
|
|
|
|
|
|
v-model="form.newphone" |
|
|
|
|
|
|
|
autocomplete="off" |
|
|
|
|
|
|
|
placeholder="请输入新手机号" |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="验证码" :label-width="formLabelWidth" prop="code"> |
|
|
|
|
|
|
|
<el-input |
|
|
|
|
|
|
|
type="text" |
|
|
|
|
|
|
|
v-model="form.code" |
|
|
|
|
|
|
|
placeholder="请输入验证码" |
|
|
|
|
|
|
|
size="large" |
|
|
|
|
|
|
|
style="width: 84%" |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
<div class="p" v-if="countdown > 0"> |
|
|
|
|
|
|
|
<p>{{ countdown }} 秒</p> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<el-button |
|
|
|
|
|
|
|
type="primary" |
|
|
|
|
|
|
|
plain |
|
|
|
|
|
|
|
v-if="countdown <= 0" |
|
|
|
|
|
|
|
@click="codeSubmit" |
|
|
|
|
|
|
|
:disabled="countdown > 0" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
发送验证码 |
|
|
|
|
|
|
|
</el-button> |
|
|
|
</el-form-item> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
</el-form> |
|
|
|
|
|
|
|
<!-- </div> --> |
|
|
|
<template #footer> |
|
|
|
<template #footer> |
|
|
|
<div class="dialog-footer"> |
|
|
|
<div class="dialog-footer"> |
|
|
|
<el-button @click="cancleInfo">取消</el-button> |
|
|
|
<el-button @click="cancleInfo">取消</el-button> |
|
|
@ -235,7 +407,7 @@ onMounted(() => { |
|
|
|
title="修改密码" |
|
|
|
title="修改密码" |
|
|
|
style="width: 800px; text-align: center" |
|
|
|
style="width: 800px; text-align: center" |
|
|
|
> |
|
|
|
> |
|
|
|
<el-form :rules="rules" ref="formRef" :data="pwdForm"> |
|
|
|
<el-form :rules="rules" ref="formRef" :model="pwdForm"> |
|
|
|
<el-form-item label="原密码" prop="old_pwd" :label-width="formLabelWidth"> |
|
|
|
<el-form-item label="原密码" prop="old_pwd" :label-width="formLabelWidth"> |
|
|
|
<el-input |
|
|
|
<el-input |
|
|
|
type="password" |
|
|
|
type="password" |
|
|
@ -287,7 +459,7 @@ onMounted(() => { |
|
|
|
margin-right: 68px; |
|
|
|
margin-right: 68px; |
|
|
|
} |
|
|
|
} |
|
|
|
.intro { |
|
|
|
.intro { |
|
|
|
width: 60%; |
|
|
|
width: 50%; |
|
|
|
height: 22px; |
|
|
|
height: 22px; |
|
|
|
font-family: Inter, Inter; |
|
|
|
font-family: Inter, Inter; |
|
|
|
font-weight: bold; |
|
|
|
font-weight: bold; |
|
|
|