添加前端国际化框架

This commit is contained in:
2024-12-18 16:41:06 +08:00
parent 41b9914090
commit 219108b6bd
351 changed files with 25091 additions and 840 deletions

View File

@@ -202,24 +202,24 @@ export default {
</script>
<style rel="stylesheet/scss" lang="scss">
.avatar {
width: 120px;
height: 120px;
border-radius: 50%;
}
.user-info {
padding-left: 0;
list-style: none;
li{
border-bottom: 1px solid #F0F3F4;
padding: 11px 0;
font-size: 13px;
.avatar {
width: 120px;
height: 120px;
border-radius: 50%;
}
.user-right {
float: right;
a{
color: #317EF3;
.user-info {
padding-left: 0;
list-style: none;
li{
border-bottom: 1px solid #F0F3F4;
padding: 11px 0;
font-size: 13px;
}
.user-right {
float: right;
a{
color: #317EF3;
}
}
}
}
</style>

View File

@@ -67,7 +67,7 @@
<script>
import crudDept from '../../dept/dept'
import crudDept from '@/api/system/dept'
import CRUD, { header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
@@ -119,7 +119,7 @@ export default {
this.$nextTick(function() {
for (var k = 0; k < this.depts.length; k++) {
for (var i = 0; i < this.crud.data.length; i++) {
if (this.crud.data[i].deptId == this.depts[k].deptId) {
if (this.crud.data[i].dept_id == this.depts[k]) {
this.$refs.table.toggleRowSelection(this.crud.data[i], true)
break
}
@@ -157,7 +157,6 @@ export default {
this.crud.resetQuery(false)
this.$emit('update:dialogShow', false)
this.$emit('selectDepts', this.rows)
// console.log(this.rows)
},
getDeptDatas(tree, treeNode, resolve) {
const params = { pid: tree.deptId }
@@ -174,8 +173,8 @@ export default {
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-dialog__body {
padding-top: 0px;
}
::v-deep .el-dialog__body {
padding-top: 0px;
}
</style>

View File

@@ -54,7 +54,7 @@
<el-table-column show-overflow-tooltip prop="deptnames" label="部门" />
<el-table-column label="状态" align="center" prop="enabled">
<template slot-scope="scope">
{{scope.row.isUsed==1?'启用':'禁用'}}
{{ scope.row.isUsed==1?'启用':'禁用' }}
</template>
</el-table-column>
</el-table>
@@ -78,7 +78,7 @@ export default {
name: 'RelevanceUserDialog',
components: { rrOperation, pagination },
cruds() {
return CRUD({ title: '用户', idField: 'userId', url: 'api/users', crudMethod: { ...crudUser }, query: {isUsed: '1'}})
return CRUD({ title: '用户', idField: 'userId', url: 'api/users', crudMethod: { ...crudUser }, query: { isUsed: '1' }})
},
mixins: [presenter(), header()],
dicts: ['product_series'],
@@ -118,10 +118,9 @@ export default {
},
open() {
this.$nextTick(function() {
console.log(this.crud.data)
for (var k = 0; k < this.users.length; k++) {
for (var i = 0; i < this.crud.data.length; i++) {
if (this.crud.data[i].userId == this.users[k].userId) {
if (this.crud.data[i].user_id == this.users[k].user_id) {
this.$refs.table.toggleRowSelection(this.crud.data[i], true)
break
}
@@ -168,8 +167,8 @@ export default {
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-dialog__body {
padding-top: 0px;
}
::v-deep .el-dialog__body {
padding-top: 0px;
}
</style>

View File

@@ -42,7 +42,7 @@ export default {
name: 'ShowDataPermissionDialog',
components: { rrOperation, pagination },
cruds() {
return CRUD({ title: '权限明细', idField: 'userId', url: 'api/dataPermission/dataDetail'})
return CRUD({ title: '权限明细', idField: 'userId', url: 'api/dataPermission/dataDetail' })
},
mixins: [presenter(), header()],
dicts: ['product_series'],

View File

@@ -8,7 +8,7 @@
v-model="deptName"
clearable
size="mini"
placeholder="请输入部门名称"
:placeholder="$t('user.table_title.enter_department_name')"
prefix-icon="el-icon-search"
class="filter-item"
@input="getDeptDatas"
@@ -30,7 +30,7 @@
v-model="query.blurry"
clearable
size="mini"
placeholder="输入账号或者名称"
:placeholder="$t('user.table_title.Enter_Account_Number (Name)')"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
@@ -39,7 +39,7 @@
v-model="query.is_used"
clearable
size="mini"
placeholder="状态"
:placeholder="$t('user.table_title.State')"
class="filter-item"
style="width: 90px"
@change="crud.toQuery"
@@ -65,20 +65,20 @@
width="700px"
>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="100px">
<el-form-item label="用户名" prop="username">
<el-form-item :label="$t('user.table_value.Username')" prop="username">
<el-input v-model="form.username" style="width: 200px;" />
</el-form-item>
<el-form-item label="电话" prop="phone">
<el-form-item :label="$t('user.table_value.Phone')" prop="phone">
<el-input v-model.number="form.phone" style="width: 200px;" />
</el-form-item>
<el-form-item label="姓名" prop="preson_name">
<el-form-item :label="$t('user.table_value.Name')" prop="preson_name">
<el-input v-model="form.person_name" style="width: 200px;" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-form-item :label="$t('user.table_value.Mailbox')" prop="email">
<el-input v-model="form.email" style="width: 200px;" />
</el-form-item>
<br v-if="!crud.status.edit">
<el-form-item v-if="crud.status.add" label="部门" prop="depts" :rules="[{ required: true, message: '请选择部门', trigger: 'change' }]">
<el-form-item v-if="crud.status.add" :label="$t('user.table_value.Department')" prop="depts" :rules="[{ required: true, message: $t('user.rules.department'), trigger: 'change' }]">
<treeselect
v-model="form.depts"
:load-options="loadDepts"
@@ -87,20 +87,20 @@
:multiple="true"
:flat="true"
:normalizer="normalizer"
placeholder="选择部门类目"
:placeholder="$t('user.table_value.Select_Sector_Categories')"
/>
</el-form-item>
<br v-if="!crud.status.add">
<el-form-item v-if="crud.status.add" label="密码" prop="password">
<el-form-item v-if="crud.status.add" :label="$t('user.table_value.Password')" prop="password">
<el-input v-model="form.password" style="width: 200px;" show-password auto-complete="new-password" />
</el-form-item>
<el-form-item label="性别">
<el-form-item :label="$t('user.table_value.Sex')">
<el-radio-group v-model="form.gender" style="width: 178px">
<el-radio label="">男</el-radio>
<el-radio label="">女</el-radio>
<el-radio :label="$t('user.table_value.boy')">{{ $t('user.table_value.boy') }}</el-radio>
<el-radio :label="$t('user.table_value.girl')">{{ $t('user.table_value.girl') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" prop="is_uesd">
<el-form-item :label="$t('user.table_value.State')" prop="is_uesd">
<el-switch
v-model="form.is_used"
active-color="#409EFF"
@@ -108,14 +108,14 @@
/>
</el-form-item>
<br v-if="!crud.status.edit">
<el-form-item v-if="crud.status.add" style="margin-bottom: 0;" label="角色" prop="roles">
<el-form-item v-if="crud.status.add" style="margin-bottom: 0;" :label="$t('role.table_value.Role')" prop="roles">
<el-select
v-model="roleDatas"
style="width: 512px"
multiple
active-value="1"
inactive-value="0"
placeholder="请选择"
:placeholder="$t('auto.common.please')"
@remove-tag="deleteTag"
@change="changeRole"
>
@@ -130,8 +130,8 @@
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
<el-button type="text" @click="crud.cancelCU">{{ $t('auto.common.Cancel') }}</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">{{ $t('auto.common.Confirm') }}</el-button>
</div>
</el-dialog>
<!--表格渲染-->
@@ -143,50 +143,50 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column :selectable="checkboxT" type="selection" width="55" />
<el-table-column prop="username" label="用户名" :min-width="flexWidth('username',crud.data,'用户名')" />
<el-table-column prop="username" :label="$t('user.table_value.Username')" :min-width="flexWidth('username',crud.data,$t('user.table_value.Username'))" />
<el-table-column
prop="person_name"
label="姓名"
:min-width="flexWidth('person_name',crud.data,'姓名')"
:label="$t('user.table_value.Name')"
:min-width="flexWidth('person_name',crud.data,$t('user.table_value.Name'))"
/>
<el-table-column prop="gender" label="性别" :min-width="flexWidth('gender',crud.data,'性别')" />
<el-table-column prop="phone" label="电话" :min-width="flexWidth('phone',crud.data,'电话')" />
<el-table-column prop="email" label="邮箱" :min-width="flexWidth('email',crud.data,'邮箱')" />
<el-table-column show-overflow-tooltip prop="depts" label="部门" :min-width="flexWidth('depts',crud.data,'邮箱')">
<el-table-column prop="gender" :label="$t('user.table_value.Sex')" :min-width="flexWidth('gender',crud.data,$t('user.table_value.Sex'))" />
<el-table-column prop="phone" :label="$t('user.table_value.Phone')" :min-width="flexWidth('phone',crud.data,$t('user.table_value.Phone'))" />
<el-table-column prop="email" :label="$t('user.table_value.Mailbox')" :min-width="flexWidth('email',crud.data,$t('user.table_value.Mailbox'))" />
<el-table-column show-overflow-tooltip prop="depts" :label="$t('user.table_value.Department')" :min-width="flexWidth('depts',crud.data,$t('user.table_value.Department'))">
<template slot-scope="scope">
<span v-for="(item, index) in scope.row.depts" :key="index">
{{ item.name }}<span v-if="index !== scope.row.depts.length - 1">、</span>
</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="enabled">
<el-table-column :label="$t('user.table_value.State')" align="center" prop="enabled">
<template slot-scope="scope">
<span :style="{'color': caseStatusColorFilter(scope.row.is_used)}">{{ enabledTypeOptions.find(item => {return item.key == scope.row.is_used}).display_name }}</span>
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建日期" :min-width="flexWidth('create_time',crud.data,'创建日期')" />
<el-table-column prop="create_time" :label="$t('user.table_value.create_Date')" :min-width="flexWidth('create_time',crud.data,$t('user.table_value.create_Date'))" />
<el-table-column
label="操作"
:label="$t('user.table_value.Operate')"
fixed="right"
align="center"
width="200"
>
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="crud.toEdit(scope.row)">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handdeleted(scope.row)">删除</el-button>
<el-dropdown v-hasPermi="['system:user:resetPwd', 'system:user:edit']" size="mini">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="crud.toEdit(scope.row)">{{ $t('user.other.Revise') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handdeleted(scope.row)">{{ $t('user.other.Delete') }}</el-button>
<el-dropdown size="mini">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">{{ $t('user.other.More') }}</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item icon="el-icon-refresh-right"><span @click="resetPassword(scope.row)">重置密码</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-refresh-right"><span @click="resetPassword(scope.row)">{{ $t('user.other.Reset') }}</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-key">
<span @click="openDeptDrawer(scope.row)">部门权限</span>
<span @click="openDeptDrawer(scope.row)">{{ $t('user.other.Department_permissions') }}</span>
</el-dropdown-item>
<el-dropdown-item icon="el-icon-key">
<span @click="openDataDialog(scope.row)">数据权限</span>
<span @click="openDataDialog(scope.row)">{{ $t('user.other.Data_Permissions') }}</span>
</el-dropdown-item>
<el-dropdown-item icon="el-icon-lock"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.is_used}).display_name }}账号</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-lock"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.is_used}).display_name }}{{ $t('user.other.Lock_account') }}</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-circle-check">
<span @click="openRoleDrawer(scope.row)">分配角色</span>
<span @click="openRoleDrawer(scope.row)">{{ $t('user.other.Assign_roles') }}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
@@ -323,7 +323,7 @@
<script>
import crudUser from '@/views/system/user/user'
import crudDept from '../dept/dept'
import crudDept from '@/api/system/dept'
import crudDataPermission from '@/views/system/dataPermission/dataPermission'
import { getAll, getLevel } from '@/views/system/role/role'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
@@ -336,6 +336,7 @@ import { mapGetters } from 'vuex'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import RelevanceUserDialog from '@/views/system/user/dialog/relevanceUserDialog'
import RelevanceDeptDialog from '@/views/system/user/dialog/relevanceDeptDialog'
import i18n from "@/i18n";
let userRoles = []
const defaultForm = {
@@ -354,7 +355,7 @@ export default {
name: 'User',
components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, udOperation, pagination },
cruds() {
return CRUD({ title: '用户', idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
return CRUD({ title: i18n.t('user.table_value.User'), idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
// 数据字典
@@ -372,21 +373,17 @@ export default {
del: ['admin', 'user:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '激活' },
{ key: '0', display_name: '锁定' }
{ key: true, display_name: i18n.t('user.table_value.activation') },
{ key: false, display_name: i18n.t('user.table_value.lock') }
],
rules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
{ required: true, message: i18n.t('user.rules.username1'), trigger: 'blur' },
{ min: 2, max: 20, message: i18n.t('user.rules.username2'), trigger: 'blur' }
],
person_name: [
{ required: true, message: '请输入用户姓名', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入用户密码', trigger: 'blur' },
{ pattern: /^(?=.*\d)(?=.*[A-z])[\da-zA-Z]{6,12}$/, message: '长度6位以上数字+密码', trigger: 'blur' }
{ required: true, message: i18n.t('user.rules.person_name1'), trigger: 'blur' },
{ min: 2, max: 20, message: i18n.t('user.rules.person_name2'), trigger: 'blur' }
]
},
syncDrawer: false,
@@ -473,7 +470,7 @@ export default {
},
// 新增前将多选的值设置为空
[CRUD.HOOK.beforeToAdd]() {
this.form.password = 'HL123456'
this.form.password = '123456'
this.roleDatas = []
},
// 初始化编辑时候的角色与岗位
@@ -631,10 +628,10 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
row.password = 'HL123456'
row.password = '123456'
crudUser.edit(row).then(res => {
this.crud.toQuery()
this.crud.notify('密码重置成功,密码:HL123456', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.notify('密码重置成功,密码:123456', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
})
},
@@ -684,11 +681,9 @@ export default {
this.multipleSelection = []
// 获取权限范围
crudDataPermission.getDataScopeType().then(res => {
console.log('权限范围', res)
this.dataDialog.dataScopeType = res
// permissions
crudDataPermission.getDataPermissionOption().then(res => {
console.log('数据权限', res)
this.permissions = res
this.dataDialog.person_name = row.person_name
this.dataDialog.username = row.username
@@ -697,7 +692,6 @@ export default {
this.dataPerm = true
// 回显数据
crudDataPermission.getDataShow(row.user_id).then(res => {
console.log('要回显的数据', res)
this.$nextTick(function() {
for (var index = 0; index < res.length; index++) {
for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) {
@@ -845,7 +839,6 @@ export default {
},
checkChange(data, checked, indeterminate) {
const _this = this
// console.log(data, checked, indeterminate);
// 选中全部子节点,父节点也默认选中,但是子节点再次取消勾选或者全部子节点取消勾选也不会影响父节点勾选状态
const checkNode = _this.$refs.deptUser.getNode(data)// 获取当前节点
// 勾选部分子节点,父节点变为半选状态

View File

@@ -33,14 +33,6 @@ export function editUser(data) {
})
}
export function getUserList(data) {
return request({
url: 'api/users/getUserList',
method: 'post',
data
})
}
export function updatePass(user) {
const data = {
oldPass: encrypt(user.oldPass),
@@ -65,5 +57,5 @@ export function updateEmail(form) {
})
}
export default { add, edit, del, updatePass, getUserList }
export default { add, edit, del }