@@ -144,10 +144,12 @@
icon="plus"
ghost
/>
- 批量导入
+
+ {{ $t('cs.companyStructure.batchImport') }}
+
- 创建子部门
+ {{ $t('cs.companyStructure.createSubDepartment') }}
- 编辑部门
+ {{ $t('cs.companyStructure.editDepartment') }}
- 删除部门
+ {{ $t('cs.companyStructure.deleteDepartment') }}
@@ -168,25 +170,26 @@
-
下载全部
-
-
下载选中
-
-
编辑部门
-
-
编辑上级
-
-
编辑岗位
-
-
编辑年假
-
-
重置密码
-
-
禁用
-
-
恢复
-
-
选取: {{ selectedRowKeys.length }} 项
+
{{ $t('cs.companyStructure.downloadAll') }}
+
+
{{ $t('cs.companyStructure.downloadSelected') }}
+
+
{{ $t('cs.companyStructure.editDepartment') }}
+
+
{{ $t('cs.companyStructure.editDirectSupervisor') }}
+
+
{{ $t('cs.companyStructure.editPosition') }}
+
+
{{ $t('cs.companyStructure.editAnnualLeave') }}
+
+
{{ $t('cs.companyStructure.resetPassword') }}
+
+
{{ $t('cs.companyStructure.block') }}
+
+
{{ $t('cs.companyStructure.recover') }}
+
+
{{ $t('selectRows', {rows: selectedRowKeys.length}) }}
-
+
-
+
-
+
- {{ props.value }}条/页
- 全部
+ {{ props.value }}{{ $t('itemsPerPage') }}
+ {{ $t('all') }}
@@ -288,74 +292,16 @@ export default {
SearchForm
},
data() {
- const canSearchPreferenceAttrList = [
- { label: '姓名', value: 'nickname' },
- { label: '用户名', value: 'username' },
- { label: '邮箱', value: 'email' },
- { label: '性别', value: 'sex', is_choice: true, choice_value: [{ label: '男', value: '男' }, { label: '女', value: '女' }] },
- { label: '手机号', value: 'mobile' },
- { label: '部门', value: 'department_name' },
- { label: '岗位', value: 'position_name' },
- { label: '直接上级', value: 'direct_supervisor_id' },
- { label: '年假', value: 'annual_leave' },
- { label: '目前所属主体', value: 'current_company' },
- { label: '初始入职日期', value: 'dfc_entry_date' },
- { label: '目前主体入职日期', value: 'entry_date' },
- { label: '正式/实习生', value: 'is_internship', is_choice: true, choice_value: [{ label: '正式', value: 0 }, { label: '实习生', value: 1 }] },
- { label: '离职日期', value: 'leave_date' },
- { label: '身份证号码', value: 'id_card' },
- { label: '民族', value: 'nation' },
- { label: '籍贯', value: 'id_place' },
- { label: '组织关系', value: 'party', is_choice: true, choice_value: [{ label: '党员', value: '党员' }, { label: '团员', value: '团员' }, { label: '群众', value: '群众' }] },
- { label: '户籍类型', value: 'household_registration_type', is_choice: true, choice_value: [{ label: '城镇', value: '城镇' }, { label: '农业', value: '农业' }] },
- { label: '户口所在地', value: 'hometown' },
- { label: '婚姻情况', value: 'marry', is_choice: true, choice_value: [{ label: '未婚', value: '未婚' }, { label: '已婚', value: '已婚' }] },
- { label: '最高学历', value: 'max_degree', is_choice: true, choice_value: [{ label: '博士', value: '博士' }, { label: '硕士', value: '硕士' }, { label: '本科', value: '本科' }, { label: '专科', value: '专科' }, { label: '高中', value: '高中' }] },
- { label: '紧急联系人', value: 'emergency_person' },
- { label: '紧急联系电话', value: 'emergency_phone' },
- { label: '卡号', value: 'bank_card_number' },
- { label: '银行', value: 'bank_card_name' },
- { label: '开户行', value: 'opening_bank' },
- { label: '开户地', value: 'account_opening_location' },
- { label: '上次登录时间', value: 'last_login' },
- ]
-
return {
isActive: '',
visible: true,
- sceneList: [
- {
- label: '全部',
- value: -1,
- },
- {
- label: '在职员工',
- value: 0,
- },
- {
- label: '停用员工',
- value: 1,
- },
- ],
- localStorageKey: 'setting-company-strcutre',
+ localStorageKey: 'itsm-company-strcutre',
localStoragePaneLengthPixel: 'setting-structure-paneLengthPixel',
displayTimeIcon: 'down',
currentScene: '',
// historySceneitemSelected: 'history-scene-item-selected',
// historySceneItem: 'history-scene-item',
paneLengthPixel: 204,
- groupData: [
- {
- id: 0,
- title: '员工',
- icon: 'user',
- },
- {
- id: 1,
- title: '部门',
- icon: 'apartment',
- },
- ],
tableData: [],
activeEmployeeCount: 0,
deactiveEmployeeCount: 0,
@@ -378,7 +324,6 @@ export default {
allTreeDepartment: [],
allTreeDepAndEmp: [],
isFolder: false,
- canSearchPreferenceAttrList,
attributes: [],
pageSizeOptions: ['50', '100', '200', '9999'],
expression: [],
@@ -413,6 +358,115 @@ export default {
isEditable() {
return this.hasDetailPermission('backend', '公司架构', ['update'])
},
+ canSearchPreferenceAttrList() {
+ return [
+ { label: this.$t('cs.companyStructure.nickname'), value: 'nickname' },
+ { label: this.$t('cs.companyStructure.username'), value: 'username' },
+ { label: this.$t('cs.companyStructure.email'), value: 'email' },
+ {
+ label: this.$t('cs.companyStructure.sex'),
+ value: 'sex',
+ is_choice: true,
+ choice_value: [
+ { label: this.$t('cs.companyStructure.male'), value: '男' },
+ { label: this.$t('cs.companyStructure.female'), value: '女' }]
+ },
+ { label: this.$t('cs.companyStructure.mobile'), value: 'mobile' },
+ { label: this.$t('cs.companyStructure.departmentName'), value: 'department_name' },
+ { label: this.$t('cs.companyStructure.positionName'), value: 'position_name' },
+ { label: this.$t('cs.companyStructure.departmentDirector'), value: 'direct_supervisor_id' },
+ { label: this.$t('cs.companyStructure.annualLeave'), value: 'annual_leave' },
+ { label: this.$t('cs.companyStructure.currentCompany'), value: 'current_company' },
+ { label: this.$t('cs.companyStructure.dfcEntryDate'), value: 'dfc_entry_date' },
+ { label: this.$t('cs.companyStructure.entryDate'), value: 'entry_date' },
+ {
+ label: this.$t('cs.companyStructure.isInternship'),
+ value: 'is_internship',
+ is_choice: true,
+ choice_value: [{ label: this.$t('cs.companyStructure.fullTime'), value: 0 },
+ { label: this.$t('cs.companyStructure.internship'), value: 1 }]
+ },
+ { label: this.$t('cs.companyStructure.leaveDate'), value: 'leave_date' },
+ { label: this.$t('cs.companyStructure.idCard'), value: 'id_card' },
+ { label: this.$t('cs.companyStructure.nation'), value: 'nation' },
+ { label: this.$t('cs.companyStructure.idPlace'), value: 'id_place' },
+ {
+ label: this.$t('cs.companyStructure.party'),
+ value: 'party',
+ is_choice: true,
+ choice_value: [
+ { label: this.$t('cs.companyStructure.partyMember'), value: '党员' },
+ { label: this.$t('cs.companyStructure.member'), value: '团员' },
+ { label: this.$t('cs.companyStructure.masses'), value: '群众' }]
+ },
+ {
+ label: this.$t('cs.companyStructure.householdRegistrationType'),
+ value: 'household_registration_type',
+ is_choice: true,
+ choice_value: [{ label: this.$t('cs.companyStructure.town'), value: '城镇' }, { label: this.$t('cs.companyStructure.agriculture'), value: '农业' }]
+ },
+ { label: this.$t('cs.companyStructure.hometown'), value: 'hometown' },
+ {
+ label: this.$t('cs.companyStructure.marry'),
+ value: 'marry',
+ is_choice: true,
+ choice_value: [{ label: this.$t('cs.companyStructure.unmarried'), value: '未婚' }, { label: this.$t('cs.companyStructure.married'), value: '已婚' }]
+ },
+ {
+ label: this.$t('cs.companyStructure.maxDegree'),
+ value: 'max_degree',
+ is_choice: true,
+ choice_value: [{ label: this.$t('cs.companyStructure.phd'), value: '博士' }, { label: this.$t('cs.companyStructure.master'), value: '硕士' }, {
+ label: this.$t('cs.companyStructure.undergraduate'),
+ value: '本科'
+ }, { label: this.$t('cs.companyStructure.specialist'), value: '专科' }, { label: this.$t('cs.companyStructure.highSchool'), value: '高中' }]
+ },
+ { label: this.$t('cs.companyStructure.emergencyPerson'), value: 'emergency_person' },
+ { label: this.$t('cs.companyStructure.emergencyPhone'), value: 'emergency_phone' },
+ { label: this.$t('cs.companyStructure.bankCardNumber'), value: 'bank_card_number' },
+ { label: this.$t('cs.companyStructure.bankCardName'), value: 'bank_card_name' },
+ { label: this.$t('cs.companyStructure.openingBank'), value: 'opening_bank' },
+ { label: this.$t('cs.companyStructure.accountOpeningLocation'), value: 'account_opening_location' },
+ { label: this.$t('cs.companyStructure.birthDate'), value: 'birth_date' },
+ { label: this.$t('cs.companyStructure.nationalityRegion'), value: 'nationality_region' },
+ { label: this.$t('cs.companyStructure.birthPlace'), value: 'birth_place' },
+ { label: this.$t('cs.companyStructure.firstEntryDate'), value: 'first_entry_date' },
+ { label: this.$t('cs.companyStructure.estimatedDepartureDate'), value: 'estimated_departure_date' },
+ // { label: '角色', value: 'roles' },
+ { label: this.$t('cs.companyStructure.lastLogin'), value: 'last_login' },
+
+ ]
+ },
+ sceneList () {
+ return [
+ {
+ label: this.$t('all'),
+ value: -1,
+ },
+ {
+ label: this.$t('cs.companyStructure.activeEmployee'),
+ value: 0,
+ },
+ {
+ label: this.$t('cs.companyStructure.blockEmployee'),
+ value: 1,
+ },
+ ]
+ },
+ groupData () {
+ return [
+ {
+ id: 0,
+ title: this.$t('cs.companyStructure.employee'),
+ icon: 'user',
+ },
+ {
+ id: 1,
+ title: this.$t('cs.companyStructure.departmentName'),
+ icon: 'apartment',
+ },
+ ]
+ }
},
provide() {
return {
@@ -470,6 +524,9 @@ export default {
Bus.$on('clickSelectGroup', async (index) => {
this.clickSelectGroup(index)
})
+ Bus.$on('changeSelectedRowKeys', (selectedRowKeys) => {
+ this.selectedRowKeys = selectedRowKeys
+ })
this.getAllFlatEmployees()
this.getAllFlatDepartment()
this.getAllTreeDepartment()
@@ -480,6 +537,7 @@ export default {
Bus.$off('updateAllIncludeDepartment')
Bus.$off('selectDepartment')
Bus.$off('reqChildren')
+ Bus.$off('changeSelectedRowKeys')
},
methods: {
// mouseOver: function() {
@@ -579,55 +637,7 @@ export default {
order: this.tableSortData || 'direct_supervisor_id',
})
}
- // console.log(this.activeGroupIndex, reqEmployeeData)
- this.tableData = reqEmployeeData.data_list
- if (reqEmployeeData.data_list.length) {
- // 筛选教育经历数组中学历最高的一条记录
- if (reqEmployeeData.data_list[0].educational_experience) {
- reqEmployeeData.data_list.forEach((row, row_index) => {
- const educational_experience = row.educational_experience
- if (educational_experience.length > 1) {
- let max_index = 0
- educational_experience.forEach((item, index) => {
- if (index < educational_experience.length - 1) {
- max_index = item.graduation_year > educational_experience[index + 1].graduation_year ? index : index + 1
- }
- })
- this.tableData[row_index].school = educational_experience[max_index].school
- this.tableData[row_index].major = educational_experience[max_index].major
- this.tableData[row_index].education = educational_experience[max_index].education
- this.tableData[row_index].graduation_year = educational_experience[max_index].graduation_year
- } else if (educational_experience.length === 1) {
- this.tableData[row_index].school = educational_experience[0].school
- this.tableData[row_index].major = educational_experience[0].major
- this.tableData[row_index].education = educational_experience[0].education
- this.tableData[row_index].graduation_year = educational_experience[0].graduation_year
- } else {
- this.tableData[row_index].school = ''
- this.tableData[row_index].major = ''
- this.tableData[row_index].education = ''
- this.tableData[row_index].graduation_year = ''
- }
- })
- }
- // 筛选子女信息中第一位展示在employeeTable
- if (reqEmployeeData.data_list[0].children_information) {
- reqEmployeeData.data_list.forEach((row, row_index) => {
- const children_information = row.children_information
- if (children_information.length) {
- this.tableData[row_index].name = children_information[0].name
- this.tableData[row_index].gender = children_information[0].gender
- this.tableData[row_index].birthday = children_information[0].birthday
- this.tableData[row_index].parental_leave_left = children_information[0].parental_leave_left
- } else {
- this.tableData[row_index].name = ''
- this.tableData[row_index].gender = ''
- this.tableData[row_index].birthday = ''
- this.tableData[row_index].parental_leave_left = ''
- }
- })
- }
- }
+ this.tableData = this.FilterTableData(reqEmployeeData)
this.tablePage = {
...this.tablePage,
currentPage: reqEmployeeData.page,
@@ -661,57 +671,7 @@ export default {
order: this.tableSortData || 'direct_supervisor_id',
})
}
- const tableData = reqEmployeeData.data_list
- // 筛选教育经历数组中学历最高的一条记录
- if (reqEmployeeData.data_list.length) {
- if (reqEmployeeData.data_list[0].educational_experience) {
- // reqEmployeeData.data_list.forEach((row, row_index) => {
- for (let index = 0, len = reqEmployeeData.data_list.length; index < len; index++) {
- const educational_experience = reqEmployeeData.data_list[index].educational_experience
- if (educational_experience.length > 1) {
- let max_index = 0
- educational_experience.forEach((item, index) => {
- if (index < educational_experience.length - 1) {
- max_index = item.graduation_year > educational_experience[index + 1].graduation_year ? index : index + 1
- }
- })
- tableData[index].school = educational_experience[max_index].school
- tableData[index].major = educational_experience[max_index].major
- tableData[index].education = educational_experience[max_index].education
- tableData[index].graduation_year = educational_experience[max_index].graduation_year
- } else if (educational_experience.length === 1) {
- tableData[index].school = educational_experience[0].school
- tableData[index].major = educational_experience[0].major
- tableData[index].education = educational_experience[0].education
- tableData[index].graduation_year = educational_experience[0].graduation_year
- } else {
- tableData[index].school = ''
- tableData[index].major = ''
- tableData[index].education = ''
- tableData[index].graduation_year = ''
- }
- }
- }
- // 筛选子女信息中第一位展示在employeeTable
- if (reqEmployeeData.data_list[0].children_information) {
- // reqEmployeeData.data_list.forEach((row, row_index) => {
- for (let row_index = 0, len = reqEmployeeData.data_list.length; row_index < len; row_index++) {
- const children_information = reqEmployeeData.data_list[row_index].children_information
- if (children_information.length) {
- tableData[row_index].name = children_information[0].name
- tableData[row_index].gender = children_information[0].gender
- tableData[row_index].birthday = children_information[0].birthday
- tableData[row_index].parental_leave_left = children_information[0].parental_leave_left
- } else {
- tableData[row_index].name = ''
- tableData[row_index].gender = ''
- tableData[row_index].birthday = ''
- tableData[row_index].parental_leave_left = ''
- }
- }
- }
- }
- this.tableData = tableData
+ this.tableData = this.FilterTableData(reqEmployeeData)
this.tablePage = {
...this.tablePage,
currentPage: reqEmployeeData.page,
@@ -720,6 +680,63 @@ export default {
}
this.loading = false
},
+ FilterTableData(reqEmployeeData) {
+ const tableData = reqEmployeeData.data_list
+ // 筛选教育经历数组中学历最高的一条记录
+ if (reqEmployeeData.data_list.length) {
+ if (reqEmployeeData.data_list[0].educational_experience) {
+ // reqEmployeeData.data_list.forEach((row, row_index) => {
+ for (let index = 0, len = reqEmployeeData.data_list.length; index < len; index++) {
+ const educational_experience = reqEmployeeData.data_list[index].educational_experience
+ if (educational_experience) {
+ if (educational_experience.length > 1) {
+ let max_index = 0
+ educational_experience.forEach((item, index) => {
+ if (index < educational_experience.length - 1) {
+ max_index = item.graduation_year > educational_experience[index + 1].graduation_year ? index : index + 1
+ }
+ })
+ tableData[index].school = educational_experience[max_index].school
+ tableData[index].major = educational_experience[max_index].major
+ tableData[index].education = educational_experience[max_index].education
+ tableData[index].graduation_year = educational_experience[max_index].graduation_year
+ } else if (educational_experience.length === 1) {
+ tableData[index].school = educational_experience[0].school
+ tableData[index].major = educational_experience[0].major
+ tableData[index].education = educational_experience[0].education
+ tableData[index].graduation_year = educational_experience[0].graduation_year
+ } else {
+ tableData[index].school = ''
+ tableData[index].major = ''
+ tableData[index].education = ''
+ tableData[index].graduation_year = ''
+ }
+ }
+ }
+ }
+ // 筛选子女信息中第一位展示在employeeTable
+ if (reqEmployeeData.data_list[0].children_information) {
+ // reqEmployeeData.data_list.forEach((row, row_index) => {
+ for (let row_index = 0, len = reqEmployeeData.data_list.length; row_index < len; row_index++) {
+ const children_information = reqEmployeeData.data_list[row_index].children_information
+ if (children_information) {
+ if (children_information.length) {
+ tableData[row_index].name = children_information[0].name
+ tableData[row_index].gender = children_information[0].gender
+ tableData[row_index].birthday = children_information[0].birthday
+ tableData[row_index].parental_leave_left = children_information[0].parental_leave_left
+ } else {
+ tableData[row_index].name = ''
+ tableData[row_index].gender = ''
+ tableData[row_index].birthday = ''
+ tableData[row_index].parental_leave_left = ''
+ }
+ }
+ }
+ }
+ }
+ return tableData
+ },
updateAll() {
// this.expression = []
this.updateCount()
@@ -771,6 +788,11 @@ export default {
a.click()
window.URL.revokeObjectURL(url)
})
+ this.$refs.employeeTable.getVxetableRef().clearCheckboxRow()
+ this.$refs.employeeTable.getVxetableRef().clearCheckboxReserve()
+ this.$refs.employeeTable.getVxetableRef().clearSort()
+ this.tableSortData = undefined
+ this.selectedRowKeys = []
},
reset() {
this.filterName = ''
@@ -842,18 +864,18 @@ export default {
if (this.selectDepartment.hasOwnProperty('id')) {
this.$refs.DepartmentModal.open({ type, selectDepartment: this.selectDepartment })
} else {
- this.$message.error('请选择部门')
+ this.$message.error(this.$t('cs.companyStructure.selectDepartment'))
}
},
async deleteDepartment() {
const that = this
this.$confirm({
- title: '警告',
- content: `确认删除 【${this.selectDepartment.title}】?`,
+ title: this.$t('warning'),
+ content: this.$t('confirmDelete2', { name: this.selectDepartment.title }),
onOk() {
deleteDepartmentById(that.selectDepartment.id).then((res) => {
that.clickSelectGroup(1)
- that.$message.success('删除成功!')
+ that.$message.success(that.$t('deleteSuccess'))
Bus.$emit('updateAllIncludeDepartment')
})
},
@@ -876,14 +898,20 @@ export default {
},
sortChangeEvent({ sortList }) {
this.tableSortData = sortList
- .map((item) => {
- return `${item.order === 'asc' ? '' : '-'}${item.property}`
- })
- .join(',')
+ .map((item) => {
+ return `${item.order === 'asc' ? '' : '-'}${item.property}`
+ })
+ .join(',')
this.updateTableDataByFilter()
},
filterChangeEvent({ column, property, values, datas, filterList, $event }) {
- if (property === 'is_internship') {
+ if (property === 'roles') {
+ this.tableFilterData = {
+ ...this.tableFilterData,
+ // role_id_list: values && values.length ? values.join(',') : undefined,
+ role_id_list: values && values.length ? values : undefined,
+ }
+ } else if (property === 'is_internship') {
this.tableFilterData = {
...this.tableFilterData,
is_internship: values && values.length ? values[0] : undefined,
@@ -1098,7 +1126,8 @@ export default {
}
}
}
- .ops-setting-batch{
+
+ .ops-setting-batch {
width: 100%;
display: flex;
justify-content: space-between;
diff --git a/cmdb-ui/src/views/setting/components/EditImage.vue b/cmdb-ui/src/views/setting/components/EditImage.vue
index e17b4a4..d5481e5 100644
--- a/cmdb-ui/src/views/setting/components/EditImage.vue
+++ b/cmdb-ui/src/views/setting/components/EditImage.vue
@@ -18,14 +18,13 @@
:img="cropperImg"
output-type="png"
@realTime="realTime"
- v-bind="eidtImageOption"
/>
-
预览
+
{{ $t('cs.components.preview') }}
![]()
@@ -50,7 +49,7 @@ export default {
props: {
title: {
type: String,
- default: '编辑头像',
+ default: () => this.$t('cs.components.editAvatar'),
},
show: {
type: Boolean,
@@ -60,9 +59,13 @@ export default {
type: String,
default: '',
},
- eidtImageOption: {
- type: Object,
- default: () => {},
+ previewWidth: {
+ type: String,
+ default: '60px',
+ },
+ previewHeight: {
+ type: String,
+ default: '60px',
},
},
data() {
diff --git a/cmdb-ui/src/views/setting/components/SearchForm.vue b/cmdb-ui/src/views/setting/components/SearchForm.vue
index 174d2e5..188b6bb 100644
--- a/cmdb-ui/src/views/setting/components/SearchForm.vue
+++ b/cmdb-ui/src/views/setting/components/SearchForm.vue
@@ -9,7 +9,7 @@
>
diff --git a/cmdb-ui/src/views/setting/components/departmentTreeSelect.vue b/cmdb-ui/src/views/setting/components/departmentTreeSelect.vue
index 8532497..ba76362 100644
--- a/cmdb-ui/src/views/setting/components/departmentTreeSelect.vue
+++ b/cmdb-ui/src/views/setting/components/departmentTreeSelect.vue
@@ -2,12 +2,12 @@
- 用户名
+ {{ $t('cs.companyStructure.username') }}
- 邮箱
+ {{ $t('cs.companyStructure.email') }}
- 性别
+ {{ $t('cs.companyStructure.sex') }}
- 手机号
+ {{ $t('cs.companyStructure.mobile') }}
- 部门
+ {{ $t('cs.companyStructure.departmentName') }}
@@ -132,7 +132,7 @@
- 岗位
+ {{ $t('cs.companyStructure.positionName') }}
- 直接上级
+ {{ $t('cs.companyStructure.supervisor') }}
@@ -173,7 +173,7 @@
- 年假
+ {{ $t('cs.companyStructure.annualLeave') }}
- 虚拟年假
+ {{ $t('cs.companyStructure.virtualAnnualLeave') }}
- 育儿假
+ {{ $t('cs.companyStructure.parentingLeave') }}
- 目前主体入职日期
+ {{ $t('cs.companyStructure.entryDate') }}
- 正式/实习生
+ {{ $t('cs.companyStructure.isInternship') }}
@@ -272,7 +272,7 @@
>I
- 离职日期
+ {{ $t('cs.companyStructure.leaveDate') }}
- 身份证号码
+ {{ $t('cs.companyStructure.idCard') }}
- 民族
+ {{ $t('cs.companyStructure.idPlace') }}
- 籍贯
+ {{ $t('cs.companyStructure.idPlace') }}
- 组织关系
+ {{ $t('cs.companyStructure.party') }}
- 户籍类型
+ {{ $t('cs.companyStructure.hometown') }}
- 户口所在地
+ {{ $t('cs.companyStructure.hometown') }}
- 婚姻情况
+ {{ $t('cs.companyStructure.marry') }}
- 最高学历
+ {{ $t('cs.companyStructure.maxDegree') }}
- 紧急联系人
+ {{ $t('cs.companyStructure.emergencyPerson') }}
- 紧急联系电话
+ {{ $t('cs.companyStructure.emergencyPhone') }}
- 卡号
+ {{ $t('cs.companyStructure.bankCardNumber') }}
- 银行
+ {{ $t('cs.companyStructure.bankCardName') }}
- 开户行
+ {{ $t('cs.companyStructure.openingBank') }}
- 开户地
+ {{ $t('cs.companyStructure.accountOpeningLocation') }}
- 学校
+ {{ $t('cs.companyStructure.school') }}
- 专业
+ {{ $t('cs.companyStructure.major') }}
- 学历
+ {{ $t('cs.companyStructure.education') }}
- 毕业年份
+ {{ $t('cs.companyStructure.graduationYear') }}
- 子女姓名
+ {{ $t('cs.companyStructure.childrenName') }}
- 子女性别
+ {{ $t('cs.companyStructure.sex') }}
- 子女出生日期
+ {{ $t('cs.companyStructure.birthDate') }}
- 剩余育儿假
+ {{ $t('cs.companyStructure.leftParentingLeave') }}
+
+
+
+
+
+
+
+ {{ $t('cs.companyStructure.birthDate') }}
+
+
+
+
+
+
+
+ {{ $t('cs.companyStructure.birthPlace') }}
+
+
+
+
+
+
+
+ {{ $t('cs.companyStructure.nationalityRegion') }}
+
+
+
+
+
+
+
+ {{ $t('cs.companyStructure.firstEntryDate') }}
+
+
+
+
+
+
+
+ {{ $t('cs.companyStructure.estimatedDepartureDate') }}
- 上次登录时间
+ {{ $t('cs.companyStructure.lastLogin') }}
@@ -728,10 +818,10 @@
key="control"
>
- 操作
+ {{ $t('operation') }}
-
取消
-
确定
+
{{ $t('cancel') }}
+
{{ $t('confirm') }}
-
+
-
+
- 重置密码
-
+
+ {{ $t('cs.companyStructure.resetPassword') }}
+
+
- 禁用
+
+ {{ $t('cs.companyStructure.block') }}
+
- 恢复
+
+ {{ $t('cs.companyStructure.recover') }}
+
- 移除
+
+ {{ $t('cs.role.remove') }}
+
@@ -792,7 +890,7 @@
![]()
-
暂无数据
+
{{ $t('noData') }}
@@ -833,46 +931,49 @@ export default {
},
data() {
const options = [
- { label: '姓名', value: 'nickname' },
- { label: '用户名', value: 'username' },
- { label: '邮箱', value: 'email' },
- { label: '性别', value: 'sex' },
- { label: '手机号', value: 'mobile' },
- { label: '部门', value: 'department_name' },
- { label: '岗位', value: 'position_name' },
- { label: '直接上级', value: 'direct_supervisor_id' },
- { label: '年假', value: 'annual_leave' },
- { label: '虚拟年假', value: 'virtual_annual_leave' },
- { label: '育儿假', value: 'parenting_leave' },
- { label: '目前所属主体', value: 'current_company' },
- { label: '初始入职日期', value: 'dfc_entry_date' },
- { label: '目前主体入职日期', value: 'entry_date' },
- { label: '正式/实习生', value: 'is_internship' },
- { label: '离职日期', value: 'leave_date' },
- { label: '身份证号码', value: 'id_card' },
- { label: '民族', value: 'nation' },
- { label: '籍贯', value: 'id_place' },
- { label: '组织关系', value: 'party' },
- { label: '户籍类型', value: 'household_registration_type' },
- { label: '户口所在地', value: 'hometown' },
- { label: '婚姻情况', value: 'marry' },
- { label: '最高学历', value: 'max_degree' },
- { label: '紧急联系人', value: 'emergency_person' },
- { label: '紧急联系电话', value: 'emergency_phone' },
- { label: '卡号', value: 'bank_card_number' },
- { label: '银行', value: 'bank_card_name' },
- { label: '开户行', value: 'opening_bank' },
- { label: '开户地', value: 'account_opening_location' },
- { label: '学校', value: 'school' },
- { label: '专业', value: 'major' },
- { label: '学历', value: 'education' },
- { label: '毕业年份', value: 'graduation_year' },
- { label: '子女姓名', value: 'name' },
- { label: '子女性别', value: 'gender' },
- { label: '子女出生日期', value: 'birthday' },
- { label: '剩余育儿假', value: 'parental_leave_left' },
- { label: '角色', value: 'roles' },
- { label: '上次登录时间', value: 'last_login' },
+ { label: this.$t('cs.companyStructure.nickname'), value: 'nickname' },
+ { label: this.$t('cs.companyStructure.username'), value: 'username' },
+ { label: this.$t('cs.companyStructure.email'), value: 'email' },
+ { label: this.$t('cs.companyStructure.sex'), value: 'sex' },
+ { label: this.$t('cs.companyStructure.mobile'), value: 'mobile' },
+ { label: this.$t('cs.companyStructure.departmentName'), value: 'department_name' },
+ { label: this.$t('cs.companyStructure.positionName'), value: 'position_name' },
+ { label: this.$t('cs.companyStructure.supervisor'), value: 'direct_supervisor_id' },
+ { label: this.$t('cs.companyStructure.annualLeave'), value: 'annual_leave' },
+ { label: this.$t('cs.companyStructure.virtualAnnualLeave'), value: 'virtual_annual_leave' },
+ { label: this.$t('cs.companyStructure.parentingLeave'), value: 'parenting_leave' },
+ { label: this.$t('cs.companyStructure.entryDate'), value: 'entry_date' },
+ { label: this.$t('cs.companyStructure.isInternship'), value: 'is_internship' },
+ { label: this.$t('cs.companyStructure.leaveDate'), value: 'leave_date' },
+ { label: this.$t('cs.companyStructure.idCard'), value: 'id_card' },
+ { label: this.$t('cs.companyStructure.nation'), value: 'nation' },
+ { label: this.$t('cs.companyStructure.idPlace'), value: 'id_place' },
+ { label: this.$t('cs.companyStructure.party'), value: 'party' },
+ { label: this.$t('cs.companyStructure.householdRegistrationType'), value: 'household_registration_type' },
+ { label: this.$t('cs.companyStructure.hometown'), value: 'hometown' },
+ { label: this.$t('cs.companyStructure.marry'), value: 'marry' },
+ { label: this.$t('cs.companyStructure.maxDegree'), value: 'max_degree' },
+ { label: this.$t('cs.companyStructure.emergencyPerson'), value: 'emergency_person' },
+ { label: this.$t('cs.companyStructure.emergencyPhone'), value: 'emergency_phone' },
+ { label: this.$t('cs.companyStructure.bankCardNumber'), value: 'bank_card_number' },
+ { label: this.$t('cs.companyStructure.bankCardName'), value: 'bank_card_name' },
+ { label: this.$t('cs.companyStructure.openingBank'), value: 'opening_bank' },
+ { label: this.$t('cs.companyStructure.accountOpeningLocation'), value: 'account_opening_location' },
+ { label: this.$t('cs.companyStructure.school'), value: 'school' },
+ { label: this.$t('cs.companyStructure.major'), value: 'major' },
+ { label: this.$t('cs.companyStructure.education'), value: 'education' },
+ { label: this.$t('cs.companyStructure.graduationYear'), value: 'graduation_year' },
+ { label: this.$t('cs.companyStructure.childrenName'), value: 'name' },
+ { label: this.$t('cs.companyStructure.childrenGender'), value: 'gender' },
+ { label: this.$t('cs.companyStructure.childrenBirthday'), value: 'birthday' },
+ { label: this.$t('cs.companyStructure.leftParentingLeave'), value: 'parental_leave_left' },
+ { label: this.$t('cs.companyStructure.birthDate'), value: 'birth_date' },
+ { label: this.$t('cs.companyStructure.nationalityRegion'), value: 'nationality_region' },
+ { label: this.$t('cs.companyStructure.birthPlace'), value: 'birth_place' },
+ { label: this.$t('cs.companyStructure.firstEntryDate'), value: 'first_entry_date' },
+ { label: this.$t('cs.companyStructure.estimatedDepartureDate'), value: 'estimated_departure_date' },
+ { label: this.$t('cs.companyStructure.role'), value: 'roles' },
+ { label: this.$t('cs.companyStructure.lastLogin'), value: 'last_login' },
]
const checkedCols = JSON.parse(localStorage.getItem('setting-table-CheckedCols')) || [
'nickname',
@@ -889,7 +990,6 @@ export default {
'roles',
'last_login',
'current_company',
- 'dfc_entry_date',
'is_internship',
'entry_date',
'leave_date',
@@ -924,24 +1024,28 @@ export default {
visible: false,
tableDragClassName: [], // 表格拖拽的参数
attributes: [],
- internMap: [
- {
- id: 0,
- label: '正式',
- },
- {
- id: 1,
- label: '实习生',
- },
- ],
- internOptions: [
- { label: '正式', value: 0 },
- { label: '实习生', value: 1 },
- ],
}
},
inject: ['provide_allFlatEmployees', 'provide_allFlatDepartments'],
computed: {
+ internOptions() {
+ return [
+ { label: this.$t('cs.companyStructure.fullTime'), value: 0 },
+ { label: this.$t('cs.companyStructure.internship'), value: 1 },
+ ]
+ },
+ internMap() {
+ return [
+ {
+ id: 0,
+ label: this.$t('cs.companyStructure.fullTime'),
+ },
+ {
+ id: 1,
+ label: this.$t('cs.companyStructure.internship'),
+ },
+ ]
+ },
allFlatEmployees() {
return this.provide_allFlatEmployees()
},
@@ -956,9 +1060,6 @@ export default {
Bus.$on('reqExportSelectEvent', () => {
this.exportExcel()
})
- this.options = this.options
- .filter((item) => item.label !== '目前所属主体')
- .filter((item) => item.label !== '初始入职日期')
this.unsbmitCheckedCols = this.checkedCols
},
beforeDestroy() {
@@ -1064,8 +1165,8 @@ export default {
removeEmployee(row) {
const that = this
this.$confirm({
- title: '提示',
- content: '确认移除该员工?',
+ title: that.$t('warning'),
+ content: that.$t('cs.role.confirmRemoveEmployee'),
onOk() {
that.$emit('removeEmployee', row)
},
@@ -1140,7 +1241,7 @@ export default {
useStyle: true, // 是否导出样式
isFooter: false, // 是否导出表尾(比如合计)
// 过滤那个字段导出
- columnFilterMethod: function (column, $columnIndex) {
+ columnFilterMethod: function(column, $columnIndex) {
return !(column.$columnIndex === 0)
// 0是复选框 不导出
},
diff --git a/cmdb-ui/src/views/setting/components/employeeTreeSelect.vue b/cmdb-ui/src/views/setting/components/employeeTreeSelect.vue
index 0aad668..ee39b78 100644
--- a/cmdb-ui/src/views/setting/components/employeeTreeSelect.vue
+++ b/cmdb-ui/src/views/setting/components/employeeTreeSelect.vue
@@ -3,12 +3,12 @@
:disable-branch-nodes="multiple ? false : true"
:multiple="multiple"
:options="employeeTreeSelectOption"
- placeholder="请选择员工"
+ :placeholder="readOnly ? '' : placeholder || $t('cs.components.selectEmployee')"
v-model="treeValue"
:max-height="200"
- noChildrenText="空"
- noOptionsText="空"
- :class="className ? className: 'ops-setting-treeselect'"
+ :noChildrenText="$t('cs.components.empty')"
+ :noOptionsText="$t('cs.components.empty')"
+ :class="className ? className : 'ops-setting-treeselect'"
value-consists-of="LEAF_PRIORITY"
:limit="20"
:limitText="(count) => `+ ${count}`"
@@ -42,13 +42,37 @@ export default {
},
className: {
type: String,
- default: 'ops-setting-treeselect'
- }
+ default: 'ops-setting-treeselect',
+ },
+ placeholder: {
+ type: String,
+ default: '',
+ },
+ idType: {
+ type: Number,
+ default: 1,
+ },
+ departmentKey: {
+ type: String,
+ default: 'department_id',
+ },
+ employeeKey: {
+ type: String,
+ default: 'employee_id',
+ },
},
data() {
return {}
},
- inject: ['provide_allTreeDepAndEmp'],
+ inject: {
+ provide_allTreeDepAndEmp: {
+ from: 'provide_allTreeDepAndEmp',
+ },
+ readOnly: {
+ from: 'readOnly',
+ default: false,
+ },
+ },
computed: {
treeValue: {
get() {
@@ -63,12 +87,11 @@ export default {
return this.provide_allTreeDepAndEmp()
},
employeeTreeSelectOption() {
- return formatOption(this.allTreeDepAndEmp)
+ return formatOption(this.allTreeDepAndEmp, this.idType, false, this.departmentKey, this.employeeKey)
},
},
methods: {},
}
-
+
diff --git a/cmdb-ui/src/views/setting/components/relateEmployee.vue b/cmdb-ui/src/views/setting/components/relateEmployee.vue
index c92c68f..b86111d 100644
--- a/cmdb-ui/src/views/setting/components/relateEmployee.vue
+++ b/cmdb-ui/src/views/setting/components/relateEmployee.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/cmdb-ui/src/views/setting/components/settingFilterComp/constants.js b/cmdb-ui/src/views/setting/components/settingFilterComp/constants.js
index fa8a0be..6942364 100644
--- a/cmdb-ui/src/views/setting/components/settingFilterComp/constants.js
+++ b/cmdb-ui/src/views/setting/components/settingFilterComp/constants.js
@@ -1,20 +1,22 @@
+import i18n from '@/lang'
+
export const ruleTypeList = [
- { value: '&', label: '与' },
- { value: '|', label: '或' },
+ { value: '&', label: i18n.t('cs.components.and') },
+ { value: '|', label: i18n.t('cs.components.or') },
// { value: 'not', label: '非' },
]
export const expList = [
- { value: 1, label: '等于' },
- { value: 2, label: '不等于' },
+ { value: 1, label: i18n.t('cs.components.equal') },
+ { value: 2, label: i18n.t('cs.components.notEqual') },
// { value: 'contain', label: '包含' },
// { value: '~contain', label: '不包含' },
// { value: 'start_with', label: '以...开始' },
// { value: '~start_with', label: '不以...开始' },
// { value: 'end_with', label: '以...结束' },
// { value: '~end_with', label: '不以...结束' },
- { value: 7, label: '为空' }, // 为空的定义有点绕
- { value: 8, label: '不为空' },
+ { value: 7, label: i18n.t('cs.components.isEmpty') }, // 为空的定义有点绕
+ { value: 8, label: i18n.t('cs.components.isNotEmpty') },
]
export const advancedExpList = [
@@ -22,12 +24,12 @@ export const advancedExpList = [
// { value: '~in', label: '非in查询' },
// { value: 'range', label: '范围' },
// { value: '~range', label: '范围外' },
- { value: 'compare', label: '比较' },
+ { value: 'compare', label: i18n.t('cs.components.compare') },
]
export const compareTypeList = [
- { value: 5, label: '大于' },
+ { value: 5, label: i18n.t('cs.components.moreThan') },
// { value: '2', label: '>=' },
- { value: 6, label: '小于' },
+ { value: 6, label: i18n.t('cs.components.lessThan') },
// { value: '4', label: '<=' },
]
diff --git a/cmdb-ui/src/views/setting/components/settingFilterComp/index.vue b/cmdb-ui/src/views/setting/components/settingFilterComp/index.vue
index 74ea7a8..8ff2bad 100644
--- a/cmdb-ui/src/views/setting/components/settingFilterComp/index.vue
+++ b/cmdb-ui/src/views/setting/components/settingFilterComp/index.vue
@@ -7,7 +7,7 @@
@visibleChange="visibleChange"
>
- 条件过滤
+ {{ $t('cs.components.conditionFilter') }}
diff --git a/cmdb-ui/src/views/setting/lang/en.js b/cmdb-ui/src/views/setting/lang/en.js
new file mode 100644
index 0000000..226422f
--- /dev/null
+++ b/cmdb-ui/src/views/setting/lang/en.js
@@ -0,0 +1,443 @@
+const cs_en = {
+ menu: {
+ person: 'Personal Center',
+ companyInfo: 'Company Info',
+ companyStructure: 'Company Structure',
+ notice: 'Notification Settings',
+ email: 'Email Settings',
+ wx: 'WeChat Work',
+ dingding: 'DingTalk',
+ feishu: 'Feishu',
+ auth: 'Auth Settings',
+ role: 'Role Management',
+ sys: 'System Role',
+ technician: 'Technician Role',
+ user: 'User Role',
+ group: 'User Group',
+ duty: 'Duty Management',
+ },
+ companyInfo: {
+ spanCompany: 'Description',
+ name: 'Company Name',
+ nameValidate: 'Please enter name',
+ description: 'Description',
+ spanAddress: 'Address',
+ country: 'Country/Region',
+ city: 'City',
+ address: 'Address',
+ postcode: 'Postal Code',
+ spanContract: 'Contact Information',
+ spanLogo: 'Company Logo',
+ website: 'Website',
+ phone: 'Phone Number',
+ phoneValidate: 'Please enter a valid phone number',
+ faxCode: 'Fax Number',
+ faxCodeValidate: 'Please enter a valid fax number',
+ email: 'Email',
+ emailValidate: 'Please enter a valid email address',
+ messenger: 'Messenger Address',
+ domainName: 'Deployment Domain',
+ logo: 'Company Logo',
+ upload: 'Upload',
+ editCompanyLogo: 'Edit Company Logo',
+ editCompanyLogoSmall: 'Edit Company Logo Thumbnail',
+ imageSizeLimit2MB: 'Image size does not exceed 2MB',
+ checkInputCorrect: 'Please check if the input content is correct',
+ },
+ companyStructure: {
+ batchImport: 'Batch Import',
+ batchEdit: 'Batch Edit',
+ selectFile: 'Select File',
+ clickDownloadImportTemplate: 'Click to download Employee Import Template',
+ importSuccess: 'Imported total {allCount} items, imported successfully',
+ importFailed: 'Import failed',
+ count: 'items',
+ email: 'Email',
+ emailPlaceholder: 'Please enter email',
+ emailFormatErr: 'Email format error',
+ username: 'Username',
+ usernamePlaceholder: 'Please enter username',
+ nickname: 'Full Name',
+ nicknamePlaceholder: 'Please enter full name',
+ password: 'Password',
+ passwordPlaceholder: 'Please enter password',
+ sex: 'Gender',
+ sexPlaceholder: 'Please select gender',
+ male: 'Male',
+ female: 'Female',
+ mobile: 'Mobile Number',
+ mobilePlaceholder: 'Please enter mobile number',
+ mobileFormatErr: 'Please enter a valid mobile number',
+ positionName: 'Position',
+ positionNamePlaceholder: 'Please enter position',
+ employee: 'Employee',
+ departmentName: 'Department',
+ currentCompany: 'Current Company',
+ currentCompanyPlaceholder: 'Please select current company',
+ dfcEntryDate: 'Initial Entry Date',
+ dfcEntryDatePlaceholder: 'Please select initial entry date',
+ entryDate: 'Current Company Entry Date',
+ entryDatePlaceholder: 'Please select current company entry date',
+ isInternship: 'Full-time/Intern',
+ isInternshipPlaceholder: 'Please select full-time/intern',
+ internship: 'Intern',
+ fullTime: 'Full-time',
+ leaveDate: 'Resignation Date',
+ leaveDatePlaceholder: 'Please select resignation date',
+ idCard: 'ID Card Number',
+ idCardPlaceholder: 'Please enter ID card number',
+ nation: 'Ethnicity',
+ nationPlaceholder: 'Please select ethnicity',
+ idPlace: 'Native Place',
+ idPlacePlaceholder: 'Please enter native place',
+ party: 'Political Affiliation',
+ partyPlaceholder: 'Please select political affiliation',
+ partyMember: 'Party Member',
+ member: 'League Member',
+ masses: 'Masses',
+ householdRegistrationType: 'Residency Type',
+ householdRegistrationTypePlaceholder: 'Please select residency type',
+ town: 'Urban',
+ agriculture: 'Rural',
+ hometown: 'Residence Location',
+ hometownPlaceholder: 'Please enter residence location',
+ marry: 'Marital Status',
+ unmarried: 'Unmarried',
+ married: 'Married',
+ marryPlaceholder: 'Please select marital status',
+ maxDegree: 'Highest Degree',
+ maxDegreePlaceholder: 'Please select highest degree',
+ phd: 'PhD',
+ master: 'Master',
+ undergraduate: 'Bachelor',
+ specialist: 'Associate',
+ highSchool: 'High School',
+ technicalSecondaryOrHighSchool: 'Technical/High School',
+ juniorHighSchool: 'Junior High School',
+ primarySchool: 'Primary School',
+ emergencyPerson: 'Emergency Contact',
+ emergencyPersonPlaceholder: 'Please enter emergency contact',
+ emergencyPhone: 'Emergency Contact Number',
+ emergencyPhonePlaceholder: 'Please enter emergency contact number',
+ bankCardInfo: 'Bank Card',
+ bankCardNumber: 'Bank Card Number',
+ bankCardNumberPlaceholder: 'Please enter bank card number',
+ bankCardName: 'Bank',
+ bankCardNamePlaceholder: 'Please enter bank',
+ openingBank: 'Issuing Bank',
+ openingBankPlaceholder: 'Please enter issuing bank',
+ accountOpeningLocation: 'Account Opening Location',
+ accountOpeningLocationPlaceholder: 'Please enter account opening location',
+ school: 'Graduated School',
+ schoolPlaceholder: 'Please enter graduated school',
+ major: 'Major',
+ majorPlaceholder: 'Please enter major',
+ education: 'Education',
+ educationPlaceholder: 'Please select education',
+ educationalExperience: 'Education History',
+ graduationYear: 'Graduation Year',
+ graduationYearPlaceholder: 'Please select graduation year',
+ birthDate: 'Date of Birth',
+ birthDatePlaceholder: 'Please select date of birth',
+ birthPlace: 'Place of Birth',
+ birthPlacePlaceholder: 'Please enter place of birth',
+ nationalityRegion: 'Nationality/Region',
+ nationalityRegionPlaceholder: 'Please select nationality/region',
+ firstEntryDate: 'First Entry Date',
+ firstEntryDatePlaceholder: 'Please select first entry date',
+ estimatedDepartureDate: 'Estimated Departure Date',
+ estimatedDepartureDatePlaceholder: 'Please select estimated departure date',
+ lastLogin: 'Last Login Time',
+ importFailedReason: 'Failure Reason',
+ selectDepartment: 'Select Department',
+ supervisor: 'Supervisor',
+ editDirectSupervisor: 'Edit Supervisor',
+ selectDirectSupervisor: 'Select Supervisor',
+ annualLeave: 'Annual Leave',
+ editPosition: 'Edit Position',
+ editAnnualLeave: 'Edit Annual Leave',
+ annualLeavePlaceholder: 'Please enter annual leave',
+ virtualAnnualLeave: 'Virtual Annual Leave',
+ virtualAnnualLeavePlaceholder: 'Please enter virtual annual leave',
+ parentingLeave: 'Parenting Leave',
+ leftParentingLeave: 'Remaining Parenting Leave',
+ parentingLeavePlaceholder: 'Please enter parenting leave',
+ day: 'day(s)',
+ resetPassword: 'Reset Password',
+ confirmPassword: 'Confirm Password',
+ block: 'Disable',
+ blockUserConfirm: 'This user will be disabled, continue?',
+ batchBlockUserConfirm: 'These users will be disabled, continue?',
+ recover: 'Recover',
+ recoverUserConfirm: 'This user will be recovered, continue?',
+ batchRecoverUserConfirm: 'These users will be recovered, continue?',
+ opFailed: 'Operation failed',
+ opSuccess: 'Operation successful',
+ createSubDepartment: 'Create Sub-department',
+ editDepartment: 'Edit Department',
+ deleteDepartment: 'Delete Department',
+ downloadAll: 'Download All',
+ downloadSelected: 'Download Selected',
+ departmentLabel: 'Department Name',
+ departmentLabelPlaceholder: 'Please enter department name',
+ parentDepartment: 'Parent Department',
+ parentDepartmentPlaceholder: 'Please select parent department',
+ departmentDirector: 'Department Director',
+ childrenInformation: 'Children Information',
+ childrenName: 'Children Name',
+ childrenGender: 'Children Gender',
+ childrenBirthday: 'Children Birthday',
+ allEmployee: 'All Employees',
+ activeEmployee: 'Active',
+ blockEmployee: 'Disabled',
+ prevStep: 'Previous',
+ nextStep: 'Next',
+ done: 'Done',
+ uploadFile: 'Upload File',
+ confirmData: 'Confirm Data',
+ uploadDone: 'Upload Done',
+ dataErr: 'Data Error',
+ createEmployee: 'Create Employee',
+ editEmployee: 'Edit Employee',
+ role: 'Role',
+ selectDisplayColumn: 'Please select columns to display'
+ },
+ auth: {
+ basic: 'Basic',
+ other: 'Other',
+ isEnable: 'Is Enabled',
+ common: 'Common',
+ testConnect: 'Test Connection',
+ testLogin: 'Test Login',
+ testSuccess: 'Test Successful',
+ ldap: {
+ serverAddress: 'Server Address',
+ serverAddressHelp: 'E.g. 192.168.1.6 or ldap://192.168.1.6 or ldap://192.168.1.6:389',
+ serverAddressPlaceholder: 'Please enter server address',
+ domain: 'Domain',
+ domainPlaceholder: 'Please enter domain',
+ user: 'User',
+ username: 'Username',
+ userPlaceholder: 'Please enter username',
+ userHelp: 'User DN: cn={},ou=users,dc=xxx,dc=com {} will be replaced by username'
+ },
+ cas: {
+ server: 'Server Address',
+ serverHelp: 'Without url path, e.g. https://xxx.com',
+ serverPlaceholder: 'Please enter CAS server address',
+ validateServer: 'Validation Server Address',
+ validateServerHelp: 'Without url path, e.g. https://xxx.com',
+ validateServerPlaceholder: 'Please enter validation server address',
+ loginRoute: 'Login Route',
+ loginRoutePlaceholder: 'Please enter login route',
+ logoutRoute: 'Logout Route',
+ logoutRoutePlaceholder: 'Please enter logout route',
+ validateRoute: 'Validate Route',
+ validateRoutePlaceholder: 'Please enter validate route',
+ afterLoginRoute: 'Redirect Route',
+ afterLoginRoutePlaceholder: 'Please enter redirect route',
+ userMap: 'User Attribute Mapping'
+ },
+ autoRedirectLogin: 'Auto Redirect to Third-party Login Page',
+ autoRedirectLoginHelp: 'If disabled, a confirmation will be displayed to redirect to third-party login page. Click the Cancel button will go to the built-in login page',
+ usernameOrEmail: 'Username/Email',
+ usernameOrEmailPlaceholder: 'Please enter username/email',
+ password: 'Password',
+ passwordPlaceholder: 'Please enter password',
+ oauth2: {
+ clientId: 'Client ID',
+ clientIdPlaceholder: 'Please enter client ID',
+ clientSecret: 'Client Secret',
+ clientSecretPlaceholder: 'Please enter client secret',
+ authorizeUrl: 'Authorize URL',
+ authorizeUrlPlaceholder: 'Please enter authorize URL',
+ tokenUrl: 'Token URL',
+ tokenUrlPlaceholder: 'Please enter token URL',
+ userInfo: 'User Info',
+ scopes: 'Scopes',
+ scopesPlaceholder: 'Please enter scopes',
+ }
+ },
+ duty: {
+ basicSetting: 'Basic Settings',
+ ruleName: 'Title',
+ ruleNamePlaceholder: 'Please enter title',
+ principalId: 'Person in Charge',
+ specifyId: 'Appointee',
+ principalIdPlaceholder: 'Please select person in charge/single select',
+ remark: 'Remark',
+ remarkPlaceholder: 'Please enter remark',
+ remindTime: 'Duty Remind Time',
+ remindWay: 'Remind Way',
+ remindPeople: 'Remind People',
+ mainDutyPeople: 'Main Duty Person',
+ deputyDutyPeople: 'Deputy Duty Person',
+ dutyRule: 'Duty Rule',
+ '一': 'Mon',
+ '二': 'Tue',
+ '三': 'Wed',
+ '四': 'Thu',
+ '五': 'Fri',
+ '六': 'Sat',
+ '日': 'Sun',
+ searchPlaceholder: 'Please search',
+ dutyTable: 'Duty Schedule',
+ dutyMember: 'Duty Member',
+ dutyMemberPlaceholder: 'Please select duty member',
+ startDutyMember: 'Start Duty Member',
+ startEndDate: 'Start End Date',
+ startEndDatePlaceholder: 'Please select start end date',
+ dutyPeriod: 'Duty Period',
+ dutyFrequency: 'Duty Frequency',
+ fullDay: 'Full Day',
+ specifyTime: 'Specify Time',
+ monthDayFormat: 'MM/DD',
+ week: 'Week',
+ month: 'Month',
+ hour: 'Hour',
+ min: 'min',
+ before: 'Before',
+ fixed: 'Fixed Time',
+ removeHolidays: 'Remove Holidays',
+ offDutyReceiver: 'Off-duty Receiver',
+ offDutyReceiverPlaceholder: 'Please select off-duty receiver',
+ titleLimit: 'Please enter title (20 characters)',
+ remarkLimit: 'Remark 150 characters max',
+ frequencyLimit: 'Please enter duty frequency (positive integer)'
+ },
+ group: {
+ groupName: 'User Group',
+ groupNamePlaceholder: 'Please enter user group',
+ addGroup: 'Add Group',
+ editGroup: 'Edit Group',
+ },
+ components: {
+ preview: 'Preview',
+ copy: 'Copy',
+ editAvatar: 'Edit Avatar',
+ conditionFilter: 'Condition Filter',
+ selectPlaceholder: 'Please select',
+ empty: 'Empty',
+ and: 'And',
+ or: 'Or',
+ equal: 'Equal',
+ notEqual: 'Not Equal',
+ isEmpty: 'Is Empty',
+ isNotEmpty: 'Is Not Empty',
+ compare: 'Compare',
+ moreThan: 'More Than',
+ lessThan: 'Less Than',
+ operatorInPlaceholder: 'Separate by ;',
+ selectEmployee: 'Select Employee'
+ },
+ notice: {
+ corpid: 'Corp ID',
+ agentid: 'Self-built App ID',
+ corpsecret: 'Self-built App Secret',
+ itsmAppId: 'ITSM App ID',
+ robot: 'Robot',
+ selectRobot: 'Please select robot',
+ robotConfigErrorTips: 'Please fill out robot configuration completely',
+ webhookAddress: 'Webhook Address',
+ appKey: 'App Key',
+ appSecret: 'App Secret',
+ robotCode: 'Robot Code',
+ sendServer: 'Outgoing Server',
+ connectProtocol: 'Connection Protocol',
+ ews: 'EWS(Exchange Web Services)',
+ authType: 'Auth Type',
+ base: 'Base',
+ oauth: 'OAuth',
+ ip: 'Server Name/IP Address',
+ username: 'Username',
+ password: 'Password',
+ email: 'Email Address',
+ emailType: 'Email Type',
+ port: 'Port',
+ testEmailConfig: 'Test Email Settings',
+ testRecyclingBin: 'Test Recycle Bin',
+ receiveEmailFailed: 'Receive email failed',
+ emailServiceNotConfig: 'Email server is not configured, please configure one email server',
+ troubleshooting: 'Troubleshooting',
+ emailConfig: 'Email Settings',
+ receiveEmailInterval: 'Get Email Interval',
+ startProxyServer: 'Start Proxy Server',
+ configProxyServer: 'Config Proxy Server',
+ startEmailTest: 'Start Email Test',
+ disableCreationOfRequestsViaEmail: 'Disable Creation of Requests Via Email',
+ specifyAllowedEmails: 'Specify Allowed Emails/Domains, Separate Multiple Values By Comma',
+ specifyAllowedEmailsExample: 'E.g. user@domain.com,*@domain.com',
+ specifyAllowedEmailsLimit: 'Limit cannot apply to requests already in sessions, it will aggregate to its parent ticket',
+ messageConfig: 'Message Settings',
+ moveWrongMessagesToFolder: 'Move Messages to Wrong Folder',
+ knowMore: 'Learn More',
+ configProxySettings: 'Config Proxy Settings',
+ host: 'Host',
+ isEncrypted: 'Is Encrypted',
+ emailTest: 'Email Test',
+ testSendAddress: 'Test Send Email Address',
+ testMailSend: 'Test Mail Send',
+ portPlaceholder: 'Please enter port',
+ testSendAddressPlaceholder: 'Please enter test send email address',
+ emailSendSuccess: 'Email Send Success',
+ title: 'Title',
+ },
+ person: {
+ spanTitle: 'Personal Info',
+ accountAndPassword: 'Account Password',
+ avatar: 'Avatar',
+ changeAvatar: 'Change Avatar',
+ email: 'Email',
+ wechatApp: 'WeChat Work',
+ feishuApp: 'Feishu',
+ dingdingApp: 'DingTalk',
+ bindInfo: 'Bind Info',
+ newPassword: 'New Password',
+ confirmPassword: 'Confirm Password',
+ pleaseConfirmNewPasswordSecondTime: 'Please confirm new password again',
+ thePasswordEnteredTwiceIsInconsistent: 'The password entered twice is inconsistent',
+ inputStrCountLimit20: 'Character count must be less than 20',
+ inputStrCountLimit: 'Character count must be less than {limit}',
+ alert: 'Warning',
+ confirmUnbind: 'Confirm unbind?',
+ unbindSuccess: 'Unbind successful',
+ bindSuccess: 'Bind successful',
+ },
+ role: {
+ systemRole: 'System Role',
+ technicianRole: 'Technician Role',
+ userRole: 'User Role',
+ authorizedByTheCreator: 'Authorized By The Creator',
+ authorizeAccordingToRules: 'Authorize According To Rules',
+ expression: 'Expression',
+ matchResults: 'Match Results',
+ matchResultEmpty: 'Empty',
+ pleaseFillInTheCompleteRules: 'Please fill in the complete rules',
+ roleName: 'Role Name',
+ pleaseEnterRoleName: 'Please enter role name',
+ appName: 'App Name',
+ pleaseEnterAppName: 'Please enter app name',
+ createRole: 'Create Role',
+ editRole: 'Edit Role',
+ copyRole: 'Copy Role From {roleName}',
+ associatedEmployees: 'Associated Employees',
+ inputNameOrEmail: 'Enter Name/Email',
+ remove: 'Remove',
+ confirmRemoveEmployee: 'Confirm remove this employee?',
+ removeSuccess: 'Remove successful',
+ associatedSuccess: 'Associate successful',
+ roleEmployee: 'Role Employee',
+ operationPermission: 'Operation Permission',
+ dataPermission: 'Data Permission',
+ confirmDeleteRole: 'Confirm delete role [{roleName}]?',
+ deleteRoleSuccess: 'Delete successful',
+ mySelf: 'My self',
+ mySubordinates: 'My Subordinates',
+ myDepartment: 'My Department',
+ myDepartmentAndSubordinateDepartments: 'My Department And Subordinate Departments',
+ test: 'Test',
+ selectApp: 'Select App',
+ }
+}
+
+export default cs_en
diff --git a/cmdb-ui/src/views/setting/lang/zh.js b/cmdb-ui/src/views/setting/lang/zh.js
new file mode 100644
index 0000000..98f043b
--- /dev/null
+++ b/cmdb-ui/src/views/setting/lang/zh.js
@@ -0,0 +1,442 @@
+const cs_zh = {
+ menu: {
+ person: '个人中心',
+ companyInfo: '公司信息',
+ companyStructure: '公司架构',
+ notice: '通知设置',
+ email: '邮件设置',
+ wx: '企业微信',
+ dingding: '钉钉',
+ feishu: '飞书',
+ auth: '认证设置',
+ role: '角色管理',
+ sys: '系统角色',
+ technician: '技术员角色',
+ user: '用户角色',
+ group: '用户分组',
+ duty: '值班管理',
+ },
+ companyInfo: {
+ spanCompany: '公司描述',
+ name: '公司名称',
+ nameValidate: '请输入名称',
+ description: '描述',
+ spanAddress: '公司地址',
+ country: '国家/地区',
+ city: '城市',
+ address: '地址',
+ postcode: '邮政编码',
+ spanContract: '联系方式',
+ spanLogo: '公司标识',
+ website: '网站',
+ phone: '电话号码',
+ phoneValidate: '请输入正确的电话号码',
+ faxCode: '传真号码',
+ faxCodeValidate: '请输入正确的传真号码',
+ email: '邮箱',
+ emailValidate: '请输入正确的邮箱地址',
+ messenger: 'Messenger地址',
+ domainName: '部署域名',
+ logo: '公司logo',
+ upload: '上传',
+ editCompanyLogo: '编辑公司logo',
+ editCompanyLogoSmall: '编辑公司logo缩略图',
+ imageSizeLimit2MB: '图片大小不超过2MB',
+ checkInputCorrect: '请检查输入内容是否正确',
+ },
+ companyStructure: {
+ batchImport: '批量导入',
+ batchEdit: '批量编辑',
+ selectFile: '选择文件',
+ clickDownloadImportTemplate: '点击下载《员工导入模板》',
+ importSuccess: '导入总数据 {allCount} 条, 导入成功',
+ importFailed: '导入失败',
+ count: '条',
+ email: '邮箱',
+ emailPlaceholder: '请输入邮箱',
+ emailFormatErr: '邮箱格式错误',
+ username: '用户名',
+ usernamePlaceholder: '请输入用户名',
+ nickname: '姓名',
+ nicknamePlaceholder: '请输入姓名',
+ password: '密码',
+ passwordPlaceholder: '请输入密码',
+ sex: '性别',
+ sexPlaceholder: '请选择性别',
+ male: '男',
+ female: '女',
+ mobile: '手机号',
+ mobilePlaceholder: '请输入手机号',
+ mobileFormatErr: '请输入正确的手机号',
+ positionName: '岗位',
+ positionNamePlaceholder: '请输入岗位',
+ employee: '员工',
+ departmentName: '部门',
+ currentCompany: '目前所属主体',
+ currentCompanyPlaceholder: '请选择目前所属主体',
+ dfcEntryDate: '初始入职日期',
+ dfcEntryDatePlaceholder: '请选择初始入职日期',
+ entryDate: '目前主体入职日期',
+ entryDatePlaceholder: '请选择目前主体入职日期',
+ isInternship: '正式/实习生',
+ isInternshipPlaceholder: '请选择正式/实习生',
+ internship: '实习生',
+ fullTime: '正式',
+ leaveDate: '离职日期',
+ leaveDatePlaceholder: '请选择离职日期',
+ idCard: '身份证号',
+ idCardPlaceholder: '请输入身份证号',
+ nation: '民族',
+ nationPlaceholder: '请选择民族',
+ idPlace: '籍贯',
+ idPlacePlaceholder: '请输入籍贯',
+ party: '组织关系',
+ partyPlaceholder: '请选择组织关系',
+ partyMember: '党员',
+ member: '团员',
+ masses: '群众',
+ householdRegistrationType: '户籍类型',
+ householdRegistrationTypePlaceholder: '请选择户籍类型',
+ town: '城镇',
+ agriculture: '农业',
+ hometown: '户口所在地',
+ hometownPlaceholder: '请输入户口所在地',
+ marry: '婚姻状况',
+ unmarried: '未婚',
+ married: '已婚',
+ marryPlaceholder: '请选择婚姻状况',
+ maxDegree: '最高学历',
+ maxDegreePlaceholder: '请选择最高学历',
+ phd: '博士',
+ master: '硕士',
+ undergraduate: '本科',
+ specialist: '专科',
+ highSchool: '高中',
+ technicalSecondaryOrHighSchool: '中专/高中',
+ juniorHighSchool: '初中',
+ primarySchool: '小学',
+ emergencyPerson: '紧急联系人',
+ emergencyPersonPlaceholder: '请输入紧急联系人',
+ emergencyPhone: '紧急联系人电话',
+ emergencyPhonePlaceholder: '请输入紧急联系人电话',
+ bankCardInfo: '银行卡',
+ bankCardNumber: '银行卡号',
+ bankCardNumberPlaceholder: '请输入银行卡号',
+ bankCardName: '银行',
+ bankCardNamePlaceholder: '请输入银行',
+ openingBank: '开户行',
+ openingBankPlaceholder: '请输入开户行',
+ accountOpeningLocation: '开户地',
+ accountOpeningLocationPlaceholder: '请输入开户地',
+ school: '毕业学校',
+ schoolPlaceholder: '请输入毕业学校',
+ major: '专业',
+ majorPlaceholder: '请输入专业',
+ education: '学历',
+ educationPlaceholder: '请选择学历',
+ educationalExperience: '教育经历',
+ graduationYear: '毕业年份',
+ graduationYearPlaceholder: '请选择毕业年份',
+ birthDate: '出生日期',
+ birthDatePlaceholder: '请选择出生日期',
+ birthPlace: '出生地',
+ birthPlacePlaceholder: '请输入出生地',
+ nationalityRegion: '国籍/地区',
+ nationalityRegionPlaceholder: '请选择国籍/地区',
+ firstEntryDate: '首次入境日期',
+ firstEntryDatePlaceholder: '请选择首次入境日期',
+ estimatedDepartureDate: '预计离境日期',
+ estimatedDepartureDatePlaceholder: '请选择预计离境日期',
+ lastLogin: '上次登录时间',
+ importFailedReason: '失败原因',
+ selectDepartment: '选择部门',
+ supervisor: '上级',
+ editDirectSupervisor: '编辑上级',
+ selectDirectSupervisor: '选择上级',
+ annualLeave: '年假',
+ editPosition: '编辑岗位',
+ editAnnualLeave: '编辑年假',
+ annualLeavePlaceholder: '请输入年假',
+ virtualAnnualLeave: '虚拟年假',
+ virtualAnnualLeavePlaceholder: '请输入虚拟年假',
+ parentingLeave: '育儿假',
+ leftParentingLeave: '剩余育儿假',
+ parentingLeavePlaceholder: '请输入育儿假',
+ day: '天',
+ resetPassword: '重置密码',
+ confirmPassword: '确认密码',
+ block: '禁用',
+ blockUserConfirm: '该用户将会被禁用,是否继续?',
+ batchBlockUserConfirm: '这些用户将会被禁用,是否继续?',
+ recover: '恢复',
+ recoverUserConfirm: '该用户将会被恢复,是否继续?',
+ batchRecoverUserConfirm: '这些用户将会被恢复,是否继续?',
+ opFailed: '操作失败',
+ opSuccess: '操作成功',
+ createSubDepartment: '创建子部门',
+ editDepartment: '编辑部门',
+ deleteDepartment: '删除部门',
+ downloadAll: '下载全部',
+ downloadSelected: '下载选中',
+ departmentLabel: '部门名称',
+ departmentLabelPlaceholder: '请输入部门名称',
+ parentDepartment: '上级部门',
+ parentDepartmentPlaceholder: '请选择上级部门',
+ departmentDirector: '部门负责人',
+ childrenInformation: '子女信息',
+ childrenName: '子女姓名',
+ childrenGender: '子女性别',
+ childrenBirthday: '子女出生日期',
+ allEmployee: '全部',
+ activeEmployee: '在职员工',
+ blockEmployee: '停用员工',
+ prevStep: '上一步',
+ nextStep: '下一步',
+ done: '完成',
+ uploadFile: '上传文件',
+ confirmData: '确认数据',
+ uploadDone: '上传完成',
+ dataErr: '数据有误',
+ createEmployee: '新建员工',
+ editEmployee: '编辑员工',
+ role: '角色',
+ selectDisplayColumn: '请选择需要展示的列'
+ },
+ auth: {
+ basic: '基本',
+ other: '其他',
+ isEnable: '是否启用',
+ common: '通用',
+ testConnect: '测试连接',
+ testLogin: '测试登录',
+ testSuccess: '测试成功',
+ ldap: {
+ serverAddress: '服务器地址',
+ serverAddressHelp: '例如: 192.168.1.6 或者 ldap://192.168.1.6 或者 ldap://192.168.1.6:389',
+ serverAddressPlaceholder: '请输入服务器地址',
+ domain: '域',
+ domainPlaceholder: '请输入域',
+ user: '用户',
+ username: '用户名称',
+ userPlaceholder: '请输入用户名称',
+ userHelp: '用户dn: cn={},ou=users,dc=xxx,dc=com {}会替换成用户名'
+ },
+ cas: {
+ server: '服务端地址',
+ serverHelp: '不包括url path,例如https://xxx.com',
+ serverPlaceholder: '请输入cas服务器地址',
+ validateServer: '验证服务端地址',
+ validateServerHelp: '不包括url path,例如https://xxx.com',
+ validateServerPlaceholder: '请输入验证服务端地址',
+ loginRoute: '登录路由',
+ loginRoutePlaceholder: '请输入登录路由',
+ logoutRoute: '注销路由',
+ logoutRoutePlaceholder: '请输入注销路由',
+ validateRoute: '验证路由',
+ validateRoutePlaceholder: '请输入验证路由',
+ afterLoginRoute: '重定向路由',
+ afterLoginRoutePlaceholder: '请输入重定向路由',
+ userMap: '用户属性映射'
+ },
+ autoRedirectLogin: '自动跳转到第三方登录页',
+ autoRedirectLoginHelp: '如果关闭,则会弹出跳转到第三方登录页的确认,点取消按钮会进入系统内置的登录页',
+ usernameOrEmail: '用户名/邮箱',
+ usernameOrEmailPlaceholder: '请输入用户名/邮箱',
+ password: '密码',
+ passwordPlaceholder: '请输入密码',
+ oauth2: {
+ clientId: '客户端ID',
+ clientIdPlaceholder: '请输入客户端ID',
+ clientSecret: '客户端密钥',
+ clientSecretPlaceholder: '请输入客户端密钥',
+ authorizeUrl: '授权链接',
+ authorizeUrlPlaceholder: '请输入授权链接',
+ tokenUrl: '令牌链接',
+ tokenUrlPlaceholder: '请输入令牌链接',
+ userInfo: '用户信息',
+ scopes: '授权范围',
+ scopesPlaceholder: '请输入授权范围',
+ }
+ },
+ duty: {
+ basicSetting: '基础设置',
+ ruleName: '标题',
+ ruleNamePlaceholder: '请输入标题',
+ principalId: '负责人',
+ specifyId: '指定人',
+ principalIdPlaceholder: '请选择负责人/单选',
+ remark: '备注',
+ remarkPlaceholder: '请输入备注',
+ remindTime: '值班提醒时间',
+ remindWay: '提醒方式',
+ remindPeople: '提醒人',
+ mainDutyPeople: '主值班人',
+ deputyDutyPeople: '副值班人',
+ dutyRule: '排班规则',
+ '一': '一',
+ '二': '二',
+ '三': '三',
+ '四': '四',
+ '五': '五',
+ '六': '六',
+ '日': '日',
+ searchPlaceholder: '请查找',
+ dutyTable: '值班表',
+ dutyMember: '值班人员',
+ dutyMemberPlaceholder: '请选择值班人员',
+ startDutyMember: '开始值班人员',
+ startEndDate: '起止日期',
+ startEndDatePlaceholder: '请选择起止日期',
+ dutyPeriod: '值班时段',
+ dutyFrequency: '值班频次',
+ fullDay: '全天',
+ specifyTime: '指定时间',
+ monthDayFormat: 'MM月DD日',
+ week: '周',
+ month: '月',
+ hour: '小时',
+ min: '分',
+ before: '提前',
+ fixed: '固定时间',
+ removeHolidays: '是否去除节假日',
+ offDutyReceiver: '非值班时间接收人',
+ offDutyReceiverPlaceholder: '请选择非值班时间接收人',
+ titleLimit: '请输入标题(20个字符)',
+ remarkLimit: '备注150个字符以内',
+ frequencyLimit: '请输入值班频次(正整数)'
+ },
+ group: {
+ groupName: '用户分组',
+ groupNamePlaceholder: '请输入用户分组',
+ addGroup: '新增分组',
+ editGroup: '编辑分组',
+ },
+ components: {
+ preview: '预览',
+ copy: '复制',
+ editAvatar: '编辑头像',
+ conditionFilter: '条件过滤',
+ selectPlaceholder: '请选择',
+ empty: '空',
+ and: '与',
+ or: '或',
+ equal: '等于',
+ notEqual: '不等于',
+ isEmpty: '为空',
+ isNotEmpty: '不为空',
+ compare: '比较',
+ moreThan: '大于',
+ lessThan: '小于',
+ operatorInPlaceholder: '以 ; 分隔',
+ selectEmployee: '选择员工'
+ },
+ notice: {
+ corpid: '企业ID',
+ agentid: '自建应用ID',
+ corpsecret: '自建应用密钥',
+ itsmAppId: 'ITSM应用ID',
+ robot: '机器人',
+ selectRobot: '请选择机器人',
+ robotConfigErrorTips: '请完整填写机器人配置',
+ webhookAddress: 'Webhook地址',
+ appKey: '应用Key',
+ appSecret: '应用密码',
+ robotCode: '机器人码',
+ sendServer: '发送服务器',
+ connectProtocol: '连接协议',
+ ews: 'EWS(Exchange Web服务)',
+ authType: '认证类型',
+ base: '基本',
+ oauth: 'OAuth',
+ ip: '服务器名/IP地址',
+ username: '用户名',
+ password: '密码',
+ email: '邮件地址',
+ emailType: '邮件类型',
+ port: '端口',
+ testEmailConfig: '测试邮件设置',
+ testRecyclingBin: '测试回收箱',
+ receiveEmailFailed: '接收邮件失败',
+ emailServiceNotConfig: '邮箱服务器未配置,请配置一个邮箱服务器',
+ troubleshooting: '故障诊断',
+ emailConfig: '邮件设置',
+ receiveEmailInterval: '获取邮件间隔',
+ startProxyServer: '启动代理服务器',
+ configProxyServer: '配置代理服务器',
+ startEmailTest: '启动邮件测试',
+ disableCreationOfRequestsViaEmail: '禁用通过邮件创建请求',
+ specifyAllowedEmails: '指定允许的邮件/域名,逗号分隔多个值',
+ specifyAllowedEmailsExample: '例如:user@domain.com,*@domain.com',
+ specifyAllowedEmailsLimit: '限制不能适用于已在会话中的请求,它将聚集到它的上级工单中',
+ messageConfig: '消息设置',
+ moveWrongMessagesToFolder: '将消息移动到错误的文件夹',
+ knowMore: '了解更多',
+ configProxySettings: '配置代理设置',
+ host: '主机',
+ isEncrypted: '是否加密',
+ emailTest: '邮件测试',
+ testSendAddress: '测试发送邮件地址',
+ testMailSend: '测试邮件发送',
+ portPlaceholder: '请输入端口',
+ testSendAddressPlaceholder: '请输入测试发送邮件地址',
+ emailSendSuccess: '已发送邮件,请查收',
+ title: '名称',
+ },
+ person: {
+ spanTitle: '个人信息',
+ accountAndPassword: '账号密码',
+ avatar: '头像',
+ changeAvatar: '更换头像',
+ email: '邮件',
+ wechatApp: '企业微信',
+ feishuApp: '飞书',
+ dingdingApp: '钉钉',
+ bindInfo: '绑定信息',
+ newPassword: '新密码',
+ confirmPassword: '确认密码',
+ pleaseConfirmNewPasswordSecondTime: '请再次确认新密码',
+ thePasswordEnteredTwiceIsInconsistent: '两次输入的密码不一致',
+ inputStrCountLimit20: '字符数须小于20',
+ inputStrCountLimit: '字符数须小于{limit}',
+ alert: '警告',
+ confirmUnbind: '确认解绑?',
+ unbindSuccess: '解绑成功',
+ bindSuccess: '绑定成功',
+ },
+ role: {
+ systemRole: '系统角色',
+ technicianRole: '技术员角色',
+ userRole: '用户角色',
+ authorizedByTheCreator: '按照创建人授权',
+ authorizeAccordingToRules: '按照规则授权',
+ expression: '表达式',
+ matchResults: '匹配结果',
+ matchResultEmpty: '无',
+ pleaseFillInTheCompleteRules: '请填写完整的规则',
+ roleName: '角色名称',
+ pleaseEnterRoleName: '请输入角色名称',
+ appName: '应用名称',
+ pleaseEnterAppName: '请输入应用名称',
+ createRole: '新建角色',
+ editRole: '编辑角色',
+ copyRole: '从 {roleName} 复制角色',
+ associatedEmployees: '关联员工',
+ inputNameOrEmail: '请输入姓名/邮箱',
+ remove: '移除',
+ confirmRemoveEmployee: '确认移除该员工?',
+ removeSuccess: '移除成功',
+ associatedSuccess: '关联成功',
+ roleEmployee: '角色员工',
+ operationPermission: '操作权限',
+ dataPermission: '数据权限',
+ confirmDeleteRole: '确认删除角色 [{roleName}]?',
+ deleteRoleSuccess: '删除成功',
+ mySelf: '本人', // Myself
+ mySubordinates: '本人及下属', // my subordinates
+ myDepartment: '本部门', // my department
+ myDepartmentAndSubordinateDepartments: '本部门及下属部门',
+ test: '测试',
+ selectApp: '选择应用',
+ }
+}
+export default cs_zh
diff --git a/cmdb-ui/src/views/setting/notice/bot.vue b/cmdb-ui/src/views/setting/notice/bot.vue
index 3d48023..3a9b8a5 100644
--- a/cmdb-ui/src/views/setting/notice/bot.vue
+++ b/cmdb-ui/src/views/setting/notice/bot.vue
@@ -1,122 +1,106 @@
-
-
-
-
- * {{ col.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
请完整填写机器人配置
-
添加
-
-
-
-
-
-
+
+
+
+
+ * {{ col.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('cs.notice.robotConfigErrorTips') }}
+
{{
+ $t('add')
+ }}
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/notice/dingding.vue b/cmdb-ui/src/views/setting/notice/dingding.vue
index debed25..c02a72a 100644
--- a/cmdb-ui/src/views/setting/notice/dingding.vue
+++ b/cmdb-ui/src/views/setting/notice/dingding.vue
@@ -1,151 +1,151 @@
-
-
-
- 基础设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 保存
- 重置
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ $t('cs.duty.basicSetting') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('save') }}
+ {{ $t('reset') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/notice/email/index.less b/cmdb-ui/src/views/setting/notice/email/index.less
index 0419b3b..c60ee3f 100644
--- a/cmdb-ui/src/views/setting/notice/email/index.less
+++ b/cmdb-ui/src/views/setting/notice/email/index.less
@@ -1,17 +1,17 @@
-.notice-email-wrapper {
- background-color: #fff;
- padding-top: 24px;
- overflow: auto;
- .notice-email-error-tips {
- display: inline-block;
- background-color: #ffdfdf;
- border-radius: 4px;
- padding: 0 12px;
- width: 300px;
- color: #000000;
- margin-top: 8px;
- }
- .ant-form-item {
- margin-bottom: 10px;
- }
-}
+.notice-email-wrapper {
+ background-color: #fff;
+ padding-top: 24px;
+ overflow: auto;
+ .notice-email-error-tips {
+ display: inline-block;
+ background-color: #ffdfdf;
+ border-radius: 4px;
+ padding: 0 12px;
+ width: 300px;
+ color: #000000;
+ margin-top: 8px;
+ }
+ .ant-form-item {
+ margin-bottom: 10px;
+ }
+}
diff --git a/cmdb-ui/src/views/setting/notice/email/index.vue b/cmdb-ui/src/views/setting/notice/email/index.vue
index 8d70986..22a0211 100644
--- a/cmdb-ui/src/views/setting/notice/email/index.vue
+++ b/cmdb-ui/src/views/setting/notice/email/index.vue
@@ -1,33 +1,33 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/notice/email/receive.vue b/cmdb-ui/src/views/setting/notice/email/receive.vue
index a6c48c2..3180610 100644
--- a/cmdb-ui/src/views/setting/notice/email/receive.vue
+++ b/cmdb-ui/src/views/setting/notice/email/receive.vue
@@ -1,196 +1,196 @@
-
-
-
- 基础设置
-
-
- POP/IMAP/POPS/IMAPS
- EWS(Exchange Web服务)
-
-
-
-
- 基本
- OAuth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- POP
- IMAP
- POPS
- IMAPS
-
-
-
-
-
-
-
- 测试回收箱
-
-
-
- 邮件接收失败
-
-
- 邮箱服务器未配置,请配置一个邮箱服务器
- 故障诊断
-
- 邮件设置
-
-
- 分
-
-
-
- 启动代理服务器
-
-
- 配置代理设置
-
- 启动邮件测试
-
- 禁用通过邮件创建请求
-
-
- 指定允许的邮件/域名,逗号分隔多个值
-
- 例如:user@domain.com,*@domain.com
- 限制不能适用于已在会话中的请求,它将聚集到它的上级工单中
-
-
-
- 消息设置
-
-
- 将消息移动到错误的文件夹
-
-
- 了解更多
-
-
-
-
-
-
- 保存
- 重置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ $t('cs.duty.basicSetting') }}
+
+
+ POP/IMAP/POPS/IMAPS
+ {{ $t('cs.notice.ews') }}
+
+
+
+
+ {{ $t('cs.notice.base') }}
+ {{ $t('cs.notice.oauth') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ POP
+ IMAP
+ POPS
+ IMAPS
+
+
+
+
+
+
+
+ {{ $t('cs.notice.testRecyclingBin') }}
+
+
+
+ {{ $t('cs.notice.receiveEmailFailed') }}
+
+
+ {{ $('cs.notice.emailServiceNotConfig') }}
+ {{ $('cs.notice.troubleshooting') }}
+
+ {{ $('cs.notice.emailConfig') }}
+
+
+ {{ $t('cs.duty.min') }}
+
+
+
+ {{ $('cs.notice.startProxyServer') }}
+
+
+ {{ $('cs.notice.configProxyServer') }}
+
+ {{ $('cs.notice.startEmailTest') }}
+
+ {{ $('cs.notice.disableCreationOfRequestsViaEmail') }}
+
+
+ {{ $('cs.notice.specifyAllowedEmails') }}
+
+ {{ $('cs.notice.specifyAllowedEmailsExample') }}
+ {{ $('cs.notice.specifyAllowedEmailsLimit') }}
+
+
+
+ {{ $('cs.notice.messageConfig') }}
+
+
+ {{ $('cs.notice.moveWrongMessagesToFolder') }}
+
+
+ {{ $('cs.notice.knowMore') }}
+
+
+
+
+
+
+ {{ $('save') }}
+ {{ $('reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/notice/email/send.vue b/cmdb-ui/src/views/setting/notice/email/send.vue
index 0978439..3742399 100644
--- a/cmdb-ui/src/views/setting/notice/email/send.vue
+++ b/cmdb-ui/src/views/setting/notice/email/send.vue
@@ -1,169 +1,171 @@
-
-
-
- 基础设置
-
-
-
- 是
-
-
- 否
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 邮件测试
-
-
- 测试邮件发送
-
-
-
-
-
- 保存
- 重置
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ $t('cs.duty.basicSetting') }}
+
+
+
+ {{ $t('yes') }}
+
+
+ {{ $t('no') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('cs.notice.emailTest') }}
+
+
+ {{ $t('cs.notice.testMailSend') }}
+
+
+
+
+
+ {{ $t('save') }}
+ {{ $t('reset') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/notice/feishu.vue b/cmdb-ui/src/views/setting/notice/feishu.vue
index 45de4ac..f297329 100644
--- a/cmdb-ui/src/views/setting/notice/feishu.vue
+++ b/cmdb-ui/src/views/setting/notice/feishu.vue
@@ -1,131 +1,131 @@
-
-
-
- 基础设置
-
-
-
-
-
-
-
-
-
-
-
-
- 保存
- 重置
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ $t('cs.duty.basicSetting') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('save') }}
+ {{ $t('reset') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/notice/wx.vue b/cmdb-ui/src/views/setting/notice/wx.vue
index 31e1470..246dd54 100644
--- a/cmdb-ui/src/views/setting/notice/wx.vue
+++ b/cmdb-ui/src/views/setting/notice/wx.vue
@@ -1,135 +1,152 @@
-
-
-
- 基础设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 保存
- 重置
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ $t('cs.duty.basicSetting') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('save') }}
+ {{ $t('reset') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/cmdb-ui/src/views/setting/person/index.vue b/cmdb-ui/src/views/setting/person/index.vue
index d24ac17..c02eca1 100644
--- a/cmdb-ui/src/views/setting/person/index.vue
+++ b/cmdb-ui/src/views/setting/person/index.vue
@@ -1,405 +1,425 @@
-
-
-
-
{
- $refs.personForm.clearValidate()
- $nextTick(() => {
- current = '1'
- })
- }
- "
- :class="{ 'setting-person-left-item': true, 'setting-person-left-item-selected': current === '1' }"
- >
- 个人信息
-
-
{
- $refs.personForm.clearValidate()
- $nextTick(() => {
- current = '2'
- })
- }
- "
- :class="{ 'setting-person-left-item': true, 'setting-person-left-item-selected': current === '2' }"
- >
-
账号密码
-
-
-
-
-
-
-
-
-
-
-
-
- 更换头像
-
-
-
-
-
-
-
- {{ form.username }}
-
-
- {{ form.email }}
-
-
-
- {{ getDirectorName(allFlatEmployees, form.direct_supervisor_id) }}
-
-
-
-
- 男
- 女
-
-
-
-
-
-
-
- {{ getDepartmentName(allFlatDepartments, form.department_id) }}
-
-
-
- {{ form.position_name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
{
+ $refs.personForm.clearValidate()
+ $nextTick(() => {
+ current = '1'
+ })
+ }
+ "
+ :class="{ 'setting-person-left-item': true, 'setting-person-left-item-selected': current === '1' }"
+ >
+ {{ $t('cs.person.spanTitle') }}
+
+
{
+ $refs.personForm.clearValidate()
+ $nextTick(() => {
+ current = '2'
+ })
+ }
+ "
+ :class="{ 'setting-person-left-item': true, 'setting-person-left-item-selected': current === '2' }"
+ >
+
{{ $t('cs.person.accountAndPassword') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('cs.person.changeAvatar') }}
+
+
+
+
+
+
+
+ {{ form.username }}
+
+
+ {{ form.email }}
+
+
+
+ {{ getDirectorName(allFlatEmployees, form.direct_supervisor_id) }}
+
+
+
+
+ {{ $t('cs.companyStructure.male') }}
+ {{ $t('cs.companyStructure.female') }}
+
+
+
+
+
+
+
+ {{ getDepartmentName(allFlatDepartments, form.department_id) }}
+
+
+
+ {{ form.position_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+