feat: user

This commit is contained in:
wangdan-fit2cloud 2025-06-13 11:40:07 +08:00
parent 54578eff33
commit d9dc3db242
16 changed files with 142 additions and 176 deletions

View File

@ -8,20 +8,20 @@ import { numberFormat } from '@/utils/utils'
const props = defineProps({
id: {
type: String,
default: 'lineChartId'
default: 'lineChartId',
},
width: {
type: String,
default: '100%'
default: '100%',
},
height: {
type: String,
default: '200px'
default: '200px',
},
option: {
type: Object,
required: true
} // option: { title , data }
required: true,
}, // option: { title , data }
})
const color = ['rgba(82, 133, 255, 1)', 'rgba(255, 207, 47, 1)']
@ -38,14 +38,14 @@ function initChart() {
props.option?.yData.forEach((item: any, index: number) => {
series.push({
itemStyle: {
color: color[index]
color: color[index],
},
areaStyle: item.area
? {
color: areaColor[index]
color: areaColor[index],
}
: null,
...item
...item,
})
})
}
@ -53,12 +53,12 @@ function initChart() {
title: {
text: props.option?.title,
textStyle: {
fontSize: '16px'
}
fontSize: '16px',
},
},
tooltip: {
trigger: 'axis',
valueFormatter: (value: any) => numberFormat(value)
valueFormatter: (value: any) => numberFormat(value),
// axisPointer: {
// type: 'cross',
// label: {
@ -70,35 +70,35 @@ function initChart() {
right: 0,
itemWidth: 8,
textStyle: {
color: '#646A73'
color: '#646A73',
},
icon: 'circle'
icon: 'circle',
},
grid: {
left: '1%',
right: '1%',
bottom: '0',
top: '18%',
containLabel: true
containLabel: true,
},
xAxis: {
type: 'category',
data: props.option.xData
data: props.option.xData,
},
yAxis: {
type: 'value',
splitLine: {
lineStyle: {
color: '#EFF0F1'
}
color: '#EFF0F1',
},
},
axisLabel: {
formatter: (value: any) => {
return numberFormat(value)
}
}
},
},
},
series: series
series: series,
}
//
@ -117,7 +117,7 @@ watch(
initChart()
})
}
}
},
)
onMounted(() => {
@ -128,7 +128,8 @@ onMounted(() => {
})
onBeforeUnmount(() => {
echarts.getInstanceByDom(document.getElementById(props.id)!)?.dispose()
console.log(document.getElementById(props.id))
echarts?.getInstanceByDom(document.getElementById(props.id)!)?.dispose()
window.removeEventListener('resize', changeChartSize)
})
</script>

View File

@ -19,6 +19,17 @@ export default {
requiredMessage: 'Please enter verification code',
validatorMessage: 'Verification code is incorrect',
},
new_password: {
label: 'New Password',
placeholder: 'Please enter new password',
requiredMessage: 'Please enter new password',
},
re_password: {
label: 'Confirm Password',
placeholder: 'Please enter confirm password',
requiredMessage: 'Please enter confirm password',
validatorMessage: 'Password does not match',
},
},
jump_tip: 'You will be redirected to the authentication source page for authentication',
jump: 'Redirect',

View File

@ -17,37 +17,23 @@ export default {
'Deleting this user will also delete all resources (APP, knowledge, models) created by this user. Please proceed with caution.',
},
disabled: {
confirmTitle: 'Confirm disable function:',
confirmTitle: 'Confirm disable tool:',
confirmMessage:
'Disabling this function will cause errors when APP that reference it are queried. Please proceed with caution.',
'Disabling this tool will cause errors when APP that reference it are queried. Please proceed with caution.',
},
userForm: {
form: {
nick_name: {
label: 'Name',
placeholder: 'Please enter name',
},
email: {
label: 'Email',
placeholder: 'Please enter email',
requiredMessage: 'Please enter email',
},
phone: {
label: 'Phone',
placeholder: 'Please enter phone',
},
new_password: {
label: 'New Password',
placeholder: 'Please enter new password',
requiredMessage: 'Please enter new password',
},
re_password: {
label: 'Confirm Password',
placeholder: 'Please enter confirm password',
requiredMessage: 'Please enter confirm password',
validatorMessage: 'Passwords do not match',
},
nick_name: {
label: 'Name',
placeholder: 'Please enter name',
},
email: {
label: 'Email',
placeholder: 'Please enter email',
requiredMessage: 'Please enter email',
},
phone: {
label: 'Phone',
placeholder: 'Please enter phone',
},
},
source: {

View File

@ -19,6 +19,17 @@ export default {
requiredMessage: '请输入验证码',
validatorMessage: '验证码不正确',
},
new_password: {
label: '新密码',
placeholder: '请输入新密码',
requiredMessage: '请输入新密码',
},
re_password: {
label: '确认密码',
placeholder: '请输入确认密码',
requiredMessage: '请输入确认密码',
validatorMessage: '密码不一致',
},
},
jump_tip: '即将跳转至认证源页面进行认证',
jump: '跳转',

View File

@ -15,21 +15,10 @@ export default {
confirmMessage: '删除用户,该用户创建的资源(应用、知识库、模型)都会删除,请谨慎操作。',
},
disabled: {
confirmTitle: '是否禁用函数',
confirmMessage: '禁用后,引用了该函数的应用提问时会报错 ,请谨慎操作。',
confirmTitle: '是否禁用工具',
confirmMessage: '禁用后,引用了该工具的应用提问时会报错 ,请谨慎操作。',
},
form: {
username: {
label: '用户名',
placeholder: '请输入用户名',
requiredMessage: '请输入用户名',
lengthMessage: '长度在 6 到 20 个字符',
},
captcha: {
label: '验证码',
placeholder: '请输入验证码',
},
userForm: {
nick_name: {
label: '姓名',
placeholder: '请输入姓名',
@ -44,25 +33,7 @@ export default {
label: '手机号',
placeholder: '请输入手机号',
},
password: {
label: '登录密码',
placeholder: '请输入密码',
requiredMessage: '请输入密码',
lengthMessage: '长度在 6 到 20 个字符',
},
new_password: {
label: '新密码',
placeholder: '请输入新密码',
requiredMessage: '请输入新密码',
},
re_password: {
label: '确认密码',
placeholder: '请输入确认密码',
requiredMessage: '请输入确认密码',
validatorMessage: '密码不一致',
},
},
source: {
label: '用户来源',
local: '系统用户',

View File

@ -5,13 +5,13 @@ export default {
label: '使用者名稱',
placeholder: '請輸入使用者名稱',
requiredMessage: '請輸入使用者名稱',
lengthMessage: '長度須介於 6 到 20 個字元之間'
lengthMessage: '長度須介於 6 到 20 個字元之間',
},
password: {
label: '登入密碼',
placeholder: '請輸入密碼',
requiredMessage: '請輸入密碼',
lengthMessage: '長度須介於 6 到 20 個字元之間'
lengthMessage: '長度須介於 6 到 20 個字元之間',
},
captcha: {
label: '驗證碼',
@ -19,6 +19,17 @@ export default {
requiredMessage: '請輸入驗證碼',
validatorMessage: '驗證碼不正確',
},
new_password: {
label: '新密碼',
placeholder: '請輸入新密碼',
requiredMessage: '請輸入新密碼',
},
re_password: {
label: '確認密碼',
placeholder: '請輸入確認密碼',
requiredMessage: '請輸入確認密碼',
validatorMessage: '密碼不一致',
},
},
jump_tip: '即將跳轉至認證源頁面進行認證',
jump: '跳轉',
@ -29,7 +40,7 @@ export default {
login: '登錄',
register: '註冊',
backLogin: '返回登錄',
checkCode: '立即驗證'
checkCode: '立即驗證',
},
newPassword: '新密碼',
enterPassword: '請輸入新密碼',
@ -39,6 +50,6 @@ export default {
placeholder: '請輸入驗證碼',
getVerificationCode: '獲取驗證碼',
successMessage: '驗證碼發送成功',
resend: '重新發送'
}
resend: '重新發送',
},
}

View File

@ -16,47 +16,22 @@ export default {
'刪除該使用者後,該使用者建立的所有資源(應用、知識庫、模型)都會被刪除,請謹慎操作。',
},
disabled: {
confirmTitle: '是否停用函數',
confirmMessage: '停用後,引用該函數的應用在查詢時會報錯,請謹慎操作。',
confirmTitle: '是否停用工具',
confirmMessage: '停用後,引用該工具的應用在查詢時會報錯,請謹慎操作。',
},
userForm: {
form: {
username: {
label: '使用者名稱',
placeholder: '請輸入使用者名稱',
requiredMessage: '請輸入使用者名稱',
lengthMessage: '長度須介於 6 到 20 個字元之間',
},
nick_name: {
label: '姓名',
placeholder: '請輸入姓名',
},
email: {
label: '電子信箱',
placeholder: '請輸入電子信箱',
requiredMessage: '請輸入電子信箱',
},
phone: {
label: '手機號碼',
placeholder: '請輸入手機號碼',
},
password: {
label: '登入密碼',
placeholder: '請輸入密碼',
requiredMessage: '請輸入密碼',
lengthMessage: '長度須介於 6 到 20 個字元之間',
},
new_password: {
label: '新密碼',
placeholder: '請輸入新密碼',
requiredMessage: '請輸入新密碼',
},
re_password: {
label: '確認密碼',
placeholder: '請輸入確認密碼',
requiredMessage: '請輸入確認密碼',
validatorMessage: '密碼不一致',
},
nick_name: {
label: '姓名',
placeholder: '請輸入姓名',
},
email: {
label: '電子信箱',
placeholder: '請輸入電子信箱',
requiredMessage: '請輸入電子信箱',
},
phone: {
label: '手機號碼',
placeholder: '請輸入手機號碼',
},
},
source: {

View File

@ -525,7 +525,7 @@
<ImportDocumentDialog ref="ImportDocumentDialogRef" :title="title" @refresh="refresh" />
<SyncWebDialog ref="SyncWebDialogRef" @refresh="refresh" />
<!-- 选择知识库 -->
<selectKnowledgeDialog ref="selectKnowledgeDialogRef" @refresh="refreshMigrate" />
<SelectKnowledgeDialog ref="selectKnowledgeDialogRef" @refresh="refreshMigrate" />
<GenerateRelatedDialog ref="GenerateRelatedDialogRef" @refresh="getList" />
</div>
</template>
@ -536,7 +536,7 @@ import { ElTable } from 'element-plus'
import documentApi from '@/api/knowledge/document'
import ImportDocumentDialog from './component/ImportDocumentDialog.vue'
import SyncWebDialog from '@/views/knowledge/component/SyncWebDialog.vue'
import selectKnowledgeDialog from './component/selectKnowledgeDialog.vue'
import SelectKnowledgeDialog from './component/SelectKnowledgeDialog.vue'
import { numberFormat } from '@/utils/common'
import { datetimeFormat } from '@/utils/time'
import { hitHandlingMethod } from '@/enums/document'

View File

@ -16,38 +16,38 @@
>
<el-form-item
:prop="isEdit ? '' : 'username'"
:label="$t('views.userManage.form.username.label')"
:label="$t('views.login.loginForm.username.label')"
>
<el-input
v-model="userForm.username"
:placeholder="$t('views.userManage.form.username.placeholder')"
:placeholder="$t('views.login.loginForm.username.placeholder')"
maxlength="20"
show-word-limit
:disabled="isEdit"
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.nick_name.label')">
<el-form-item :label="$t('views.userManage.userForm.nick_name.label')">
<el-input
v-model="userForm.nick_name"
:placeholder="$t('views.userManage.form.nick_name.placeholder')"
:placeholder="$t('views.userManage.userForm.nick_name.placeholder')"
maxlength="64"
show-word-limit
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.email.label')" prop="email">
<el-form-item :label="$t('views.userManage.userForm.email.label')" prop="email">
<el-input
type="email"
v-model="userForm.email"
:placeholder="$t('views.userManage.form.email.placeholder')"
:placeholder="$t('views.userManage.userForm.email.placeholder')"
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.phone.label')">
<el-form-item :label="$t('views.userManage.userForm.phone.label')">
<el-input
v-model="userForm.phone"
:placeholder="$t('views.userManage.form.phone.placeholder')"
:placeholder="$t('views.userManage.userForm.phone.placeholder')"
>
</el-input>
</el-form-item>

View File

@ -10,20 +10,20 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form-item :label="$t('views.userManage.form.new_password.label')" prop="password">
<el-form-item :label="$t('views.login.loginForm.new_password.label')" prop="password">
<el-input
type="password"
v-model="userForm.password"
:placeholder="$t('views.userManage.form.new_password.placeholder')"
:placeholder="$t('views.login.loginForm.new_password.placeholder')"
show-password
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.re_password.label')" prop="re_password">
<el-form-item :label="$t('views.login.loginForm.re_password.label')" prop="re_password">
<el-input
type="password"
v-model="userForm.re_password"
:placeholder="$t('views.userManage.form.re_password.placeholder')"
:placeholder="$t('views.login.loginForm.re_password.placeholder')"
show-password
>
</el-input>
@ -61,32 +61,32 @@ const rules = reactive<FormRules<ResetPasswordRequest>>({
password: [
{
required: true,
message: t('views.userManage.form.new_password.requiredMessage'),
message: t('views.login.loginForm.new_password.requiredMessage'),
trigger: 'blur'
},
{
min: 6,
max: 20,
message: t('views.userManage.form.password.lengthMessage'),
message: t('views.login.loginForm.password.lengthMessage'),
trigger: 'blur'
}
],
re_password: [
{
required: true,
message: t('views.userManage.form.re_password.requiredMessage'),
message: t('views.login.loginForm.re_password.requiredMessage'),
trigger: 'blur'
},
{
min: 6,
max: 20,
message: t('views.userManage.form.password.lengthMessage'),
message: t('views.login.loginForm.password.lengthMessage'),
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (userFormRef.value.password != userFormRef.value.re_password) {
callback(new Error(t('views.userManage.form.re_password.validatorMessage')))
callback(new Error(t('views.login.loginForm.re_password.validatorMessage')))
} else {
callback()
}

View File

@ -33,8 +33,8 @@
@changePage="getList"
v-loading="loading"
>
<el-table-column prop="nick_name" :label="$t('views.userManage.form.nick_name.label')" />
<el-table-column prop="username" :label="$t('views.userManage.form.username.label')" />
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" />
<el-table-column prop="username" :label="$t('views.userManage.userForm.username.label')" />
<el-table-column prop="is_active" :label="$t('common.status.label')">
<template #default="{ row }">
<div v-if="row.is_active" class="flex align-center">
@ -56,14 +56,14 @@
<el-table-column
prop="email"
:label="$t('views.userManage.form.email.label')"
:label="$t('views.userManage.userForm.email.label')"
show-overflow-tooltip
>
<template #default="{ row }">
{{ row.email || '-' }}
</template>
</el-table-column>
<el-table-column prop="phone" :label="$t('views.userManage.form.phone.label')">
<el-table-column prop="phone" :label="$t('views.userManage.userForm.phone.label')">
<template #default="{ row }">
{{ row.phone || '-' }}
</template>

View File

@ -20,7 +20,7 @@
<el-input
size="large"
class="input-item"
:placeholder="$t('views.userManage.form.username.placeholder')"
:placeholder="$t('views.login.loginForm.username.placeholder')"
>
</el-input>
</el-form-item>
@ -31,7 +31,7 @@
type="password"
size="large"
class="input-item"
:placeholder="$t('views.userManage.form.password.placeholder')"
:placeholder="$t('views.login.loginForm.password.placeholder')"
show-password
>
</el-input>

View File

@ -16,38 +16,38 @@
>
<el-form-item
:prop="isEdit ? '' : 'username'"
:label="$t('views.userManage.form.username.label')"
:label="$t('views.login.loginForm.username.label')"
>
<el-input
v-model="userForm.username"
:placeholder="$t('views.userManage.form.username.placeholder')"
:placeholder="$t('views.login.loginForm.username.placeholder')"
maxlength="20"
show-word-limit
:disabled="isEdit"
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.nick_name.label')">
<el-form-item :label="$t('views.userManage.userForm.nick_name.label')">
<el-input
v-model="userForm.nick_name"
:placeholder="$t('views.userManage.form.nick_name.placeholder')"
:placeholder="$t('views.userManage.userForm.nick_name.placeholder')"
maxlength="64"
show-word-limit
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.email.label')" prop="email">
<el-form-item :label="$t('views.userManage.userForm.email.label')" prop="email">
<el-input
type="email"
v-model="userForm.email"
:placeholder="$t('views.userManage.form.email.placeholder')"
:placeholder="$t('views.userManage.userForm.email.placeholder')"
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.phone.label')">
<el-form-item :label="$t('views.userManage.userForm.phone.label')">
<el-input
v-model="userForm.phone"
:placeholder="$t('views.userManage.form.phone.placeholder')"
:placeholder="$t('views.userManage.userForm.phone.placeholder')"
>
</el-input>
</el-form-item>
@ -88,13 +88,13 @@ const rules = reactive({
username: [
{
required: true,
message: t('views.userManage.form.username.requiredMessage'),
message: t('views.login.loginForm.username.requiredMessage'),
trigger: 'blur',
},
{
min: 6,
max: 20,
message: t('views.userManage.form.username.lengthMessage'),
message: t('views.login.loginForm.username.lengthMessage'),
trigger: 'blur',
},
],
@ -108,13 +108,13 @@ const rules = reactive({
password: [
{
required: true,
message: t('views.userManage.form.password.requiredMessage'),
message: t('views.login.loginForm.password.requiredMessage'),
trigger: 'blur',
},
{
min: 6,
max: 20,
message: t('views.userManage.form.password.lengthMessage'),
message: t('views.login.loginForm.password.lengthMessage'),
trigger: 'blur',
},
],

View File

@ -10,20 +10,20 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form-item :label="$t('views.userManage.form.new_password.label')" prop="password">
<el-form-item :label="$t('views.login.loginForm.new_password.label')" prop="password">
<el-input
type="password"
v-model="userForm.password"
:placeholder="$t('views.userManage.form.new_password.placeholder')"
:placeholder="$t('views.login.loginForm.new_password.placeholder')"
show-password
>
</el-input>
</el-form-item>
<el-form-item :label="$t('views.userManage.form.re_password.label')" prop="re_password">
<el-form-item :label="$t('views.login.loginForm.re_password.label')" prop="re_password">
<el-input
type="password"
v-model="userForm.re_password"
:placeholder="$t('views.userManage.form.re_password.placeholder')"
:placeholder="$t('views.login.loginForm.re_password.placeholder')"
show-password
>
</el-input>
@ -61,32 +61,32 @@ const rules = reactive<FormRules<ResetPasswordRequest>>({
password: [
{
required: true,
message: t('views.userManage.form.new_password.requiredMessage'),
message: t('views.login.loginForm.new_password.requiredMessage'),
trigger: 'blur'
},
{
min: 6,
max: 20,
message: t('views.userManage.form.password.lengthMessage'),
message: t('views.login.loginForm.password.lengthMessage'),
trigger: 'blur'
}
],
re_password: [
{
required: true,
message: t('views.userManage.form.re_password.requiredMessage'),
message: t('views.login.loginForm.re_password.requiredMessage'),
trigger: 'blur'
},
{
min: 6,
max: 20,
message: t('views.userManage.form.password.lengthMessage'),
message: t('views.login.loginForm.password.lengthMessage'),
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (userFormRef.value.password != userFormRef.value.re_password) {
callback(new Error(t('views.userManage.form.re_password.validatorMessage')))
callback(new Error(t('views.login.loginForm.re_password.validatorMessage')))
} else {
callback()
}

View File

@ -33,8 +33,8 @@
@changePage="getList"
v-loading="loading"
>
<el-table-column prop="nick_name" :label="$t('views.userManage.form.nick_name.label')" />
<el-table-column prop="username" :label="$t('views.userManage.form.username.label')" />
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" />
<el-table-column prop="username" :label="$t('views.login.loginForm.username.label')" />
<el-table-column prop="is_active" :label="$t('common.status.label')">
<template #default="{ row }">
<div v-if="row.is_active" class="flex align-center">
@ -56,14 +56,14 @@
<el-table-column
prop="email"
:label="$t('views.userManage.form.email.label')"
:label="$t('views.userManage.userForm.email.label')"
show-overflow-tooltip
>
<template #default="{ row }">
{{ row.email || '-' }}
</template>
</el-table-column>
<el-table-column prop="phone" :label="$t('views.userManage.form.phone.label')">
<el-table-column prop="phone" :label="$t('views.userManage.userForm.phone.label')">
<template #default="{ row }">
{{ row.phone || '-' }}
</template>