| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- <template>
- <div class="formWrap">
- <el-form :model="form" :rules="rules" ref="userRef" label-width="8em">
- <el-card header="基本身份信息" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="12">
- <el-form-item label="用户昵称" prop="nickName">
- <el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="归属部门" prop="deptId">
- <el-tree-select v-model="form.deptId" :data="enabledDeptOptions"
- :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属部门"
- check-strictly />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="手机号码" prop="phonenumber">
- <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="邮箱" prop="email">
- <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
- <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
- <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="身份证号" prop="cardNumber">
- <el-input v-model="form.cardNumber" placeholder="请输入身份证号码" maxlength="18" minlength="15" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="籍贯" prop="nativePlace">
- <el-input v-model="form.nativePlace" placeholder="请输入籍贯" maxlength="128" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="用户性别" prop="sex">
- <el-select v-model="form.sex" placeholder="请选择用户性别">
- <el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label"
- :value="dict.value"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="民族" prop="nation">
- <el-input v-model="form.nation" placeholder="请输入民族" maxlength="128" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="生肖" prop="zodiac">
- <el-select v-model="form.zodiac" placeholder="请选择生肖">
- <el-option v-for="item in sys_user_zodiac" :key="item.value" :label="item.label" :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="星座" prop="constellation">
- <el-select v-model="form.constellation" placeholder="请选择星座">
- <el-option v-for="item in sys_user_constellation" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="血型" prop="blooGroup">
- <el-select v-model="form.blooGroup" placeholder="请选择血型">
- <el-option v-for="item in sys_user_blood_group" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="角色" prop="roleIds">
- <el-select v-model="form.roleIds" multiple placeholder="请选择角色" @change="roleChange">
- <el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId"
- :disabled="item.status == 1"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="标签" prop="tags">
- <el-input v-model="form.tags" placeholder="请输入标签" maxlength="50" />
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card header="状态管理信息" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="12">
- <el-form-item label="账号状态" prop="status">
- <el-radio-group v-model="form.status">
- <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">
- {{ dict.label }}
- </el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="培训合规状态" prop="trainingComplianceStatus">
- <el-radio-group v-model="form.trainingComplianceStatus">
- <el-radio v-for="dict in sys_user_training_compliance_status" :key="dict.value" :value="dict.value">
- {{ dict.label }}
- </el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card header="资质能力" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="12">
- <el-form-item label="资质等级" prop="qualificationLevel"
- :rules="(form.roleIds || []).includes(101) || (form.roleIds || []).includes(102) ? [{ required: true, message: '请选择资质等级', trigger: 'blur' }] : []">
- <el-select v-model="form.qualificationLevel" placeholder="请选择资质等级" @change="handleQualificationLevelChange">
- <el-option v-for="item in sys_user_qualification_level" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="岗位类型" prop="postIds"
- :rules="(form.roleIds || []).includes(101) || (form.roleIds || []).includes(102) ? [{ required: true, message: '请选择岗位类型', trigger: 'blur' }] : []">
- <el-cascader v-model="form.postIds" :options="filteredTreeData" :props="treeNodeProps" filterable
- style="width: 100%" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="是否通过政审" prop="politicalReviewSituation">
- <el-radio-group v-model="form.politicalReviewSituation">
- <el-radio :value="'1'">是</el-radio>
- <el-radio :value="'0'">否</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="政治面貌" prop="politicalStatus">
- <el-select v-model="form.politicalStatus" placeholder="请选择政治面貌">
- <el-option v-for="item in sys_user_political_status" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="学历" prop="schooling">
- <el-select v-model="form.schooling" placeholder="请选择学历">
- <el-option v-for="item in sys_user_schooling" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="专业" prop="professional">
- <el-input v-model="form.professional" placeholder="请输入专业" />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="行政处罚情况" prop="administrativeStatus">
- <el-input v-model="form.administrativeStatus" type="textarea" placeholder="请输入行政处罚情况"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="健康异常情况" prop="physicalHealthStatus">
- <el-input v-model="form.physicalHealthStatus" type="textarea" placeholder="请输入内容"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card header="工作履历/经验" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="12">
- <el-form-item label="开始工作时间" prop="startWorkingDate">
- <el-date-picker v-model="form.startWorkingDate" type="date" placeholder="请选择开始工作时间"
- value-format="YYYY-MM-DD" style="width: 100%;" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="开始安检工作时间" prop="securityCheckStartDate" label-width="140px">
- <el-date-picker v-model="form.securityCheckStartDate" type="date" placeholder="请选择开始安检工作时间"
- value-format="YYYY-MM-DD" style="width: 100%;" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="入职时间" prop="entryDate" label-width="140px">
- <el-date-picker v-model="form.entryDate" type="date" placeholder="请选择入职时间"
- value-format="YYYY-MM-DD" style="width: 100%;" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="曾在安检工作中担任的最高职务" prop="securityInspectionPosition" label-width="220px">
- <el-select v-model="form.securityInspectionPosition" placeholder="请选择曾在安检工作中担任的最高职务">
- <el-option label="安检员" value="安检员" />
- <el-option label="班组长" value="班组长" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="接受奖励次数" prop="workRewardsNumber">
- <el-input v-model="form.workRewardsNumber" type="number" placeholder="请输入接受奖励次数" min="0" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="接受处罚次数" prop="workPenaltiesNumber">
- <el-input v-model="form.workPenaltiesNumber" type="number" placeholder="请输入接受处罚次数" min="0" />
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card header="评价类指标" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="12">
- <el-form-item label="性格特征" prop="characterCharacteristics">
- <el-select v-model="form.characterCharacteristics" placeholder="请选择性格特征">
- <el-option v-for="item in sys_user_character_characteristics" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="工作风格" prop="workingStyle">
- <el-select v-model="form.workingStyle" placeholder="请选择工作风格">
- <el-option v-for="item in sys_user_working_style" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="团队配合人员" prop="teamCooperation">
- <UserSelect v-model="form.teamCooperation" :multiple="true" :max="3" :placeholder="'请选择团队配合人员(最多3人)'"
- width="100%" />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="自我关键词评价" prop="selfKeywords">
- <el-row :gutter="8" style="width: 100%;">
- <el-col :span="6">
- <el-select v-model="form.selfAssessmentPersonalityTrait" placeholder="请选择性格特质">
- <el-option v-for="item in sys_user_personality_trait" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.selfAssessmentCapabilityPerformance" placeholder="请选择能力表现">
- <el-option v-for="item in sys_user_capability_performance" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.selfAssessmentInterpersonalInteraction" placeholder="请选择人际互动">
- <el-option v-for="item in sys_user_interpersonal_interaction" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.selfAssessmentGrowthPotential" placeholder="请选择成长潜力">
- <el-option v-for="item in sys_user_growth_potential" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- </el-row>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="同事关键词评价" prop="colleagueKeywords">
- <el-row :gutter="8" style="width: 100%;">
- <el-col :span="6">
- <el-select v-model="form.colleagueCommentsPersonalityTrait" placeholder="请选择性格特质">
- <el-option v-for="item in sys_user_personality_trait" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.colleagueCommentsCapabilityPerformance" placeholder="请选择能力表现">
- <el-option v-for="item in sys_user_capability_performance" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.colleagueCommentsInterpersonalInteraction" placeholder="请选择人际互动">
- <el-option v-for="item in sys_user_interpersonal_interaction" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.colleagueCommentsGrowthPotential" placeholder="请选择成长潜力">
- <el-option v-for="item in sys_user_growth_potential" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- </el-row>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="上级关键词评价" prop="superiorKeywords">
- <el-row :gutter="8" style="width: 100%;">
- <el-col :span="6">
- <el-select v-model="form.superiorEvaluationPersonalityTrait" placeholder="请选择性格特质">
- <el-option v-for="item in sys_user_personality_trait" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.superiorEvaluationCapabilityPerformance" placeholder="请选择能力表现">
- <el-option v-for="item in sys_user_capability_performance" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.superiorEvaluationInterpersonalInteraction" placeholder="请选择人际互动">
- <el-option v-for="item in sys_user_interpersonal_interaction" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.superiorEvaluationGrowthPotential" placeholder="请选择成长潜力">
- <el-option v-for="item in sys_user_growth_potential" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- </el-row>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="下级关键词评价" prop="subordinateKeywords">
- <el-row :gutter="8" style="width: 100%;">
- <el-col :span="6">
- <el-select v-model="form.subordinateEvaluationPersonalityTrait" placeholder="请选择性格特质">
- <el-option v-for="item in sys_user_personality_trait" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.subordinateEvaluationCapabilityPerformance" placeholder="请选择能力表现">
- <el-option v-for="item in sys_user_capability_performance" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.subordinateEvaluationInterpersonalInteraction" placeholder="请选择人际互动">
- <el-option v-for="item in sys_user_interpersonal_interaction" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- <el-col :span="6">
- <el-select v-model="form.subordinateEvaluationGrowthPotential" placeholder="请选择成长潜力">
- <el-option v-for="item in sys_user_growth_potential" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-col>
- </el-row>
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card header="应急联络信息" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="12">
- <el-form-item label="紧急联系人姓名" prop="emergencyContactName">
- <el-input v-model="form.emergencyContactName" type="text" placeholder="请输入紧急联系人姓名"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="紧急联系人电话" prop="emergencyContactPhone">
- <el-input v-model="form.emergencyContactPhone" type="text" placeholder="请输入紧急联系人电话"
- maxlength="11"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="紧急联系人关系" prop="emergencyContactRelationship">
- <el-select v-model="form.emergencyContactRelationship" placeholder="请选择联系人关系">
- <el-option v-for="item in sys_user_emergency_contact_relationship" :key="item.value" :label="item.label"
- :value="item.value" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card header="其他信息" style="margin-bottom: 10px;">
- <el-row :gutter="16">
- <el-col :span="24">
- <el-form-item label="备注">
- <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- </el-form>
- </div>
- </template>
- <script setup>
- import { onMounted, reactive, computed, watch, nextTick, ref } from 'vue';
- import { useDict } from '@/utils/dict'
- import { listAllTree } from '@/api/system/post'
- import UserSelect from '@/components/UserSelect/index.vue'
- // 重父页面迁移过来的代码 2处公用选择框数据 选择使用父组件传入
- defineProps({
- sys_user_sex: {
- type: Array,
- default: []
- },
- enabledDeptOptions: {
- type: Array,
- default: []
- },
- sys_normal_disable: {
- type: Array,
- default: []
- },
- postOptions: {
- type: Array,
- default: []
- },
- roleOptions: {
- type: Array,
- default: []
- },
- })
- const userRef = ref(null)
- const form = defineModel('form', ref({}))
- // 政治面貌、资质等级、紧急联系人关系、生肖、星座、血型、是否通过政审、学历、性格特征、工作风格、团队配合、关键词、能力表现、人际互动、成长潜力
- const {
- sys_user_political_status,
- sys_user_qualification_level,
- sys_user_emergency_contact_relationship,
- sys_user_training_compliance_status,
- sys_user_zodiac,
- sys_user_constellation,
- sys_user_blood_group,
- sys_user_personality_trait,
- sys_user_schooling,
- sys_user_character_characteristics,
- sys_user_working_style,
- sys_user_capability_performance,
- sys_user_interpersonal_interaction,
- sys_user_growth_potential
- } = useDict('sys_user_personality_trait', 'sys_user_political_status', 'sys_user_qualification_level', 'sys_user_emergency_contact_relationship', 'sys_user_training_compliance_status', 'sys_user_zodiac', 'sys_user_constellation', 'sys_user_blood_group', 'sys_user_schooling', 'sys_user_character_characteristics', 'sys_user_working_style', 'sys_user_capability_performance', 'sys_user_interpersonal_interaction', 'sys_user_growth_potential')
- const rules = computed(() => ({
- userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
- deptId: [{ required: true, message: '请选择归属部门', trigger: "blur" }],
- nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
- password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }],
- email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
- phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
- emergencyContactPhone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
- roleIds: [{ required: true, message: '请选择角色', trigger: "blur" }],
- status: [{ required: true, message: '请选择账号状态', trigger: "blur" }]
- }))
- const treeNodeProps = { multiple: true, expandTrigger: 'hover', label: 'postName', value: 'postId', emitPath: false, checkOnClickNode: true }
- const treeData = ref([])
- // 过滤后的岗位类型选项
- const filteredTreeData = computed(() => {
- if (!treeData.value || treeData.value.length === 0) {
- return []
- }
- // 如果资质等级为五级,过滤掉value为9或10的选项
- // 其他级别显示完整的选项列表
- if (form.value.qualificationLevel === 'LEVEL_FIVE') {
- return filterTreeData(JSON.parse(JSON.stringify(treeData.value)))
- }
- // 其他级别返回完整的选项列表
- return treeData.value
- })
- // 递归过滤树形数据
- const filterTreeData = (data) => {
- return data.filter(item => {
- // 过滤掉value为9或10的选项
- if (item.postId == 9 || item.postId == 10) {
- return false
- }
- // 如果有子节点,递归过滤
- if (item.children && item.children.length > 0) {
- item.children = filterTreeData(item.children)
- }
- return true
- })
- }
- // 资质等级变化处理函数
- const handleQualificationLevelChange = (newVal) => {
- console.log('资质等级变化', newVal)
- form.value.postIds = []
- // 触发验证
- nextTick(() => {
- userRef.value && userRef.value.validateField('postIds')
- })
- }
- onMounted(() => {
- listAllTree().then(res => {
- treeData.value = res.data || []
- })
- })
- const roleChange = () => {
- userRef.value && userRef.value.clearValidate('qualificationLevel')
- userRef.value && userRef.value.clearValidate('postIds')
- }
- defineExpose({
- submit: () => {
- return userRef.value.validate()
- },
- resetForm: () => {
- return userRef.value && userRef.value.resetFields()
- }
- })
- </script>
- <style lang="less" scoped>
- .formWrap {
- max-height: 75vh;
- overflow-y: auto;
- overflow-x: hidden;
- padding: 0 15px;
- box-sizing: border-box;
- :deep(.el-card) {
- .el-card__header {
- font-weight: 600;
- font-size: 16px;
- color: #000;
- }
- }
- }
- </style>
|