v1.9 优化员工没有岗位问题

This commit is contained in:
wuxw 2025-08-07 12:51:33 +08:00
parent 8edcdb9960
commit 702baeaeaf
6 changed files with 69 additions and 63 deletions

View File

@ -1,66 +1,42 @@
<!-- components/staff/editStaff.vue --> <!-- components/staff/editStaff.vue -->
<template> <template>
<el-dialog <el-dialog :title="$t('staff.modifyStaff')" :visible.sync="visible" width="50%" @close="handleClose">
:title="$t('staff.modifyStaff')"
:visible.sync="visible"
width="50%"
@close="handleClose"
>
<el-form ref="form" :model="editStaffInfo" label-width="120px"> <el-form ref="form" :model="editStaffInfo" label-width="120px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('staff.name')" prop="username"> <el-form-item :label="$t('staff.name')" prop="username">
<el-input <el-input v-model="editStaffInfo.username" :placeholder="$t('staff.requiredName')" />
v-model="editStaffInfo.username"
:placeholder="$t('staff.requiredName')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('email')" prop="email"> <el-form-item :label="$t('email')" prop="email">
<el-input <el-input v-model="editStaffInfo.email" :placeholder="$t('staff.optionalEmail')" />
v-model="editStaffInfo.email"
:placeholder="$t('staff.optionalEmail')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('staff.phone')" prop="tel"> <el-form-item :label="$t('staff.phone')" prop="tel">
<el-input <el-input v-model="editStaffInfo.tel" :placeholder="$t('staff.requiredPhone')" />
v-model="editStaffInfo.tel"
:placeholder="$t('staff.requiredPhone')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('staff.gender')" prop="sex"> <el-form-item :label="$t('staff.gender')" prop="sex">
<el-select <el-select v-model="editStaffInfo.sex" :placeholder="$t('staff.requiredGender')" style="width: 100%">
v-model="editStaffInfo.sex" <el-option value="0" :label="$t('staff.male')" />
:placeholder="$t('staff.requiredGender')" <el-option value="1" :label="$t('staff.female')" />
style="width: 100%" </el-select>
> </el-form-item>
<el-option :value="0" :label="$t('staff.male')" /> <el-form-item :label="$t('staff.relCd')" prop="relCd">
<el-option :value="1" :label="$t('staff.female')" /> <el-select v-model="editStaffInfo.relCd" :placeholder="$t('staff.relCdPlaceholder')" style="width: 100%">
<el-option v-for="(item,index) in editStaffInfo.relCds" :key="index" :label="item.name"
:value="item.statusCd" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('staff.address')" prop="address"> <el-form-item :label="$t('staff.address')" prop="address">
<el-input <el-input v-model="editStaffInfo.address" :placeholder="$t('staff.requiredAddress')" />
v-model="editStaffInfo.address"
:placeholder="$t('staff.requiredAddress')"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" style="text-align: center"> <el-col :span="12" style="text-align: center">
<el-image <el-image style="width: 200px; height: 200px" :src="editStaffInfo.photoUrl" fit="cover">
style="width: 200px; height: 200px"
:src="editStaffInfo.photoUrl"
fit="cover"
>
<div slot="error" class="image-slot"> <div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i> <i class="el-icon-picture-outline"></i>
</div> </div>
</el-image> </el-image>
<div style="margin-top: 20px"> <div style="margin-top: 20px">
<el-upload <el-upload action="" :auto-upload="false" :show-file-list="false" :on-change="handlePhotoChange">
action=""
:auto-upload="false"
:show-file-list="false"
:on-change="handlePhotoChange"
>
<el-button type="primary">{{ $t('staff.uploadPhoto') }}</el-button> <el-button type="primary">{{ $t('staff.uploadPhoto') }}</el-button>
</el-upload> </el-upload>
</div> </div>
@ -76,14 +52,11 @@
<script> <script>
import { modifyStaff } from '@/api/staff/staffApi' import { modifyStaff } from '@/api/staff/staffApi'
import { getDict } from '../../api/community/communityApi'
export default { export default {
name: 'EditStaff', name: 'EditStaff',
props: { props: {
visible: {
type: Boolean,
default: false
},
staffInfo: { staffInfo: {
type: Object, type: Object,
default: () => ({}) default: () => ({})
@ -91,6 +64,7 @@ export default {
}, },
data() { data() {
return { return {
visible: false,
loading: false, loading: false,
editStaffInfo: { editStaffInfo: {
userId: '', userId: '',
@ -128,23 +102,30 @@ export default {
} }
}, },
methods: { methods: {
open(row){ open(row) {
this.editStaffInfo = { this.editStaffInfo = {
...row, ...row,
username: row.name, username: row.name,
photoUrl: row.faceUrl || '/img/noPhoto.jpg' photoUrl: row.faceUrl || '/img/noPhoto.jpg'
} }
this.getRelCd()
this.visible = true this.visible = true
},
async getRelCd() {
const data = await getDict('u_org_staff_rel', "rel_cd")
this.editStaffInfo.relCds = data
this.$forceUpdate()
}, },
handleClose() { handleClose() {
this.$emit('update:visible', false) this.visible = false
}, },
handlePhotoChange(file) { handlePhotoChange(file) {
if (file.size > 2 * 1024 * 1024) { if (file.size > 2 * 1024 * 1024) {
this.$message.error(this.$t('staff.photoSizeLimit')) this.$message.error(this.$t('staff.photoSizeLimit'))
return false return false
} }
const reader = new FileReader() const reader = new FileReader()
reader.onload = (e) => { reader.onload = (e) => {
this.editStaffInfo.photoUrl = e.target.result this.editStaffInfo.photoUrl = e.target.result
@ -175,7 +156,7 @@ export default {
}, },
async editStaffSubmit() { async editStaffSubmit() {
if (!this.validateForm()) return if (!this.validateForm()) return
try { try {
this.loading = true this.loading = true
const data = { const data = {
@ -183,10 +164,10 @@ export default {
name: this.editStaffInfo.username, name: this.editStaffInfo.username,
staffId: this.editStaffInfo.userId staffId: this.editStaffInfo.userId
} }
await modifyStaff(data) await modifyStaff(data)
this.visible =false this.visible = false
this.$message.success(this.$t('staff.modifySuccess')) this.$message.success(this.$t('common.submitSuccess'))
this.$emit('success') this.$emit('success')
this.handleClose() this.handleClose()
} catch (error) { } catch (error) {

View File

@ -64,7 +64,8 @@ export const messages = {
hide:'Hide', hide:'Hide',
viewDetail:'View Detail', viewDetail:'View Detail',
yuan:'yuan', yuan:'yuan',
process:'Process' process:'Process',
} }
}, },
zh: { zh: {
@ -132,7 +133,8 @@ export const messages = {
hide:'隐藏', hide:'隐藏',
viewDetail:'查看详情', viewDetail:'查看详情',
yuan:'元', yuan:'元',
process:'处理' process:'处理',
} }
} }
} }

View File

@ -19,6 +19,12 @@
<el-option :label="$t('addStaff.female')" value="1" /> <el-option :label="$t('addStaff.female')" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('addStaff.relCd')">
<el-select v-model="addStaffInfo.relCd" :placeholder="$t('addStaff.relCdPlaceholder')"
style="width: 100%">
<el-option v-for="item in addStaffInfo.relCds" :key="item.value" :label="item.name" :value="item.statusCd" />
</el-select>
</el-form-item>
<el-form-item :label="$t('addStaff.phone')"> <el-form-item :label="$t('addStaff.phone')">
<el-input v-model="addStaffInfo.tel" :placeholder="$t('addStaff.phonePlaceholder')" maxlength="11" /> <el-input v-model="addStaffInfo.tel" :placeholder="$t('addStaff.phonePlaceholder')" maxlength="11" />
</el-form-item> </el-form-item>
@ -59,6 +65,7 @@
import { addStaff } from '@/api/staff/addStaffApi' import { addStaff } from '@/api/staff/addStaffApi'
import UploadImageUrl from '@/components/upload/UploadImageUrl' import UploadImageUrl from '@/components/upload/UploadImageUrl'
import ChooseOrgTree from '@/components/org/ChooseOrgTree' import ChooseOrgTree from '@/components/org/ChooseOrgTree'
import {getDict} from '@/api/community/communityApi'
export default { export default {
name: 'AddStaff', name: 'AddStaff',
@ -78,11 +85,19 @@ export default {
tel: '', tel: '',
address: '', address: '',
photo: '', photo: '',
adminFlag: 'N' adminFlag: 'N',
relCds:[]
} }
} }
}, },
mounted() {
this.getRelCd()
},
methods: { methods: {
async getRelCd() {
const data = await getDict('u_org_staff_rel', "rel_cd")
this.addStaffInfo.relCds = data
},
handleUploadImage(data) { handleUploadImage(data) {
if (data.length > 0) { if (data.length > 0) {
this.addStaffInfo.photo = data[0].fileId this.addStaffInfo.photo = data[0].fileId

View File

@ -23,7 +23,9 @@ export const messages = {
save: 'Save', save: 'Save',
cancel: 'Cancel', cancel: 'Cancel',
chooseOrg: 'Choose Organization', chooseOrg: 'Choose Organization',
confirm: 'Confirm' confirm: 'Confirm',
relCd: 'Relationship',
relCdPlaceholder: 'Please select relationship'
} }
}, },
zh: { zh: {
@ -49,7 +51,9 @@ export const messages = {
save: '保存', save: '保存',
cancel: '取消', cancel: '取消',
chooseOrg: '选择组织', chooseOrg: '选择组织',
confirm: '确认' confirm: '确认',
relCd: '岗位',
relCdPlaceholder: '请选择岗位'
} }
} }
} }

View File

@ -40,7 +40,8 @@ export const messages = {
uploadPhoto: 'Upload Photo', uploadPhoto: 'Upload Photo',
cancel: 'Cancel', cancel: 'Cancel',
confirmDelete: 'Are you sure to delete? Before deleting staff, please confirm that the staff has completed the relevant approval process. After deletion, the relevant process will not be able to continue. Please operate carefully!', confirmDelete: 'Are you sure to delete? Before deleting staff, please confirm that the staff has completed the relevant approval process. After deletion, the relevant process will not be able to continue. Please operate carefully!',
confirmDeleteAction: 'Confirm Delete' confirmDeleteAction: 'Confirm Delete',
relCd: 'Relationship'
}, },
selectStaff: { selectStaff: {
title: 'Select Staff', title: 'Select Staff',
@ -91,7 +92,8 @@ export const messages = {
uploadPhoto: '上传照片', uploadPhoto: '上传照片',
cancel: '取消', cancel: '取消',
confirmDelete: '确认是否删除,删除员工前请确认员工已完成相关审批流程,删除后相关流程将无法继续进行,请慎重操作!', confirmDelete: '确认是否删除,删除员工前请确认员工已完成相关审批流程,删除后相关流程将无法继续进行,请慎重操作!',
confirmDeleteAction: '确认删除' confirmDeleteAction: '确认删除',
relCd: '岗位'
}, },
selectStaff: { selectStaff: {
title: '选择员工', title: '选择员工',

View File

@ -49,6 +49,7 @@
<el-table-column prop="orgName" :label="$t('staff.relatedOrg')" align="center" /> <el-table-column prop="orgName" :label="$t('staff.relatedOrg')" align="center" />
<el-table-column prop="email" :label="$t('staff.email')" align="center" /> <el-table-column prop="email" :label="$t('staff.email')" align="center" />
<el-table-column prop="address" :label="$t('staff.address')" align="center" /> <el-table-column prop="address" :label="$t('staff.address')" align="center" />
<el-table-column prop="relCdName" :label="$t('staff.relCd')" align="center" />
<el-table-column prop="sex" :label="$t('staff.gender')" align="center"> <el-table-column prop="sex" :label="$t('staff.gender')" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.sex == 0 ? $t('staff.male') : $t('staff.female') }} {{ scope.row.sex == 0 ? $t('staff.male') : $t('staff.female') }}
@ -84,7 +85,7 @@
<reset-staff-pwd :visible.sync="resetPwdVisible" :staff-info="currentStaff" @success="handleSuccess" /> <reset-staff-pwd :visible.sync="resetPwdVisible" :staff-info="currentStaff" @success="handleSuccess" />
<edit-staff :visible.sync="editStaffVisible" :staff-info="currentStaff" @success="handleSuccess" /> <edit-staff ref="editStaff" :staff-info="currentStaff" @success="handleSuccess" />
<delete-staff :visible.sync="deleteStaffVisible" :staff-info="currentStaff" @success="handleSuccess" /> <delete-staff :visible.sync="deleteStaffVisible" :staff-info="currentStaff" @success="handleSuccess" />
</div> </div>
@ -181,6 +182,7 @@ export default {
openEditStaff(staff) { openEditStaff(staff) {
this.currentStaff = { ...staff } this.currentStaff = { ...staff }
this.editStaffVisible = true this.editStaffVisible = true
this.$refs.editStaff.open(staff)
}, },
openDeleteStaff(staff) { openDeleteStaff(staff) {
this.currentStaff = { ...staff } this.currentStaff = { ...staff }