| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945 |
- <template>
- <div class="form">
- <div class="description-title">
- <span>基本信息</span>
- </div>
- <el-form :model="form" :rules="rules" ref="ruleForm" label-width="0px">
- <div class="description-view">
- <table class="description-table">
- <tbody>
- <tr class="description-tr">
- <th class="description-label">
- <i class="requiredStar">*</i>姓名
- </th>
- <td class="description-content">
- <el-form-item
- prop="realName"
- :rules="[
- { required: true, message: '请输入姓名', trigger: 'blur' },
- ]"
- >
- <el-input
- v-model="form.realName"
- placeholder="请输入姓名"
- />
- </el-form-item>
- </td>
- <th class="description-label">年龄</th>
- <td class="description-content">
- <el-form-item prop="age">
- <el-input
- v-model="form.age"
- type="number"
- min="1"
- step="1"
- placeholder="请输入年龄"
- />
- </el-form-item>
- </td>
- <th class="description-label">性别</th>
- <td class="description-content">
- <el-form-item prop="gender">
- <el-select
- v-model.trim="form.gender"
- clearable
- filterable
- placeholder="请选择性别"
- >
- <el-option label="男" :value="true"></el-option>
- <el-option label="女" :value="false"></el-option>
- </el-select>
- </el-form-item>
- </td>
- </tr>
- <tr class="description-tr">
- <th class="description-label">
- <i class="requiredStar">*</i>手机号
- </th>
- <td class="description-content">
- <el-form-item
- prop="mobileNo"
- :rules="[
- {
- required: true,
- message: '请输入手机号',
- trigger: 'blur',
- },
- {
- pattern: /^1\d{10}$/,
- message: '请输入正确的手机号',
- trigger: 'blur',
- },
- ]"
- >
- <el-input
- minlength="11"
- maxlength="11"
- v-model="form.mobileNo"
- placeholder="请输入手机号"
- type="tel"
- />
- <!-- @blur="mobileOrWechatValidate" -->
- </el-form-item>
- </td>
- <th class="description-label">微信号</th>
- <td class="description-content">
- <el-form-item prop="wechatNo">
- <el-input
- v-model="form.wechatNo"
- placeholder="请输入微信号"
- />
- </el-form-item>
- </td>
- <th class="description-label">身份证号</th>
- <td class="description-content">
- <el-form-item prop="idCard">
- <el-input
- v-model="form.idCard"
- placeholder="请输入身份证号"
- />
- </el-form-item>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="description-title" style="margin-top: 20px">
- <span>教育信息</span>
- </div>
- <div class="description-view">
- <table class="description-table">
- <tbody>
- <tr
- class="description-tr"
- v-for="(item, index) in form.educations"
- :key="index"
- >
- <th class="description-label desc-item">
- <span class="close">
- <i
- v-if="index === 0"
- @click="addEducation"
- class="el-icon-circle-plus-outline"
- />
- <i
- v-else
- @click="removeEducation(index)"
- class="el-icon-remove-outline"
- /> </span
- >学历
- </th>
- <td class="description-content">
- <el-form-item :prop="'educations.' + index + '.level'">
- <el-input
- v-model="form.educations[index].level"
- placeholder="请输入学历"
- />
- </el-form-item>
- </td>
- <th class="description-label">学校</th>
- <td class="description-content">
- <el-form-item :prop="'educations.' + index + '.school'">
- <el-input
- v-model="form.educations[index].school"
- placeholder="请输入学校"
- />
- </el-form-item>
- </td>
- <th class="description-label">专业</th>
- <td class="description-content">
- <el-form-item :prop="'educations.' + index + '.subject'">
- <el-input
- v-model="form.educations[index].subject"
- placeholder="请输入专业"
- />
- </el-form-item>
- </td>
- <th class="description-label">毕业时间</th>
- <td class="description-content">
- <el-form-item :prop="'educations.' + index + '.year'">
- <el-date-picker
- type="month"
- placeholder="请选择毕业时间"
- v-model="form.educations[index].year"
- />
- </el-form-item>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="description-title" style="margin-top: 20px">
- <span>招聘信息</span>
- </div>
- <div class="description-view">
- <table class="description-table">
- <tbody>
- <tr class="description-tr">
- <th class="description-label">所在城市</th>
- <td class="description-content">
- <el-form-item prop="liveCity">
- <el-input
- v-model.trim="form.liveCity"
- placeholder="请输入所在城市"
- />
- </el-form-item>
- </td>
- <th class="description-label">意向城市</th>
- <td class="description-content">
- <el-form-item prop="intentionCity">
- <el-input
- v-model.trim="form.intentionCity"
- placeholder="请输入意向城市"
- />
- </el-form-item>
- </td>
- <th class="description-label">意向合作模式</th>
- <td class="description-content">
- <el-form-item prop="jobNature">
- <el-select
- v-model.trim="form.jobNature"
- clearable
- filterable
- placeholder="请选择意向合作模式"
- >
- <el-option label="兼职" value="PART_TIME"></el-option>
- <el-option label="全职" value="FULL_TIME"></el-option>
- </el-select>
- </el-form-item>
- </td>
- </tr>
- <tr class="description-tr">
- <th class="description-label">岗位类别</th>
- <td class="description-content">
- <el-form-item prop="jobType">
- <el-select
- v-model.trim="form.jobType"
- clearable
- filterable
- placeholder="请选择岗位类别"
- >
- <el-option label="指导老师" value="ADVISER"></el-option>
- <el-option label="乐团主管" value="ACADEMIC"></el-option>
- <el-option label="乐队指导" value="TEACHING"></el-option>
- </el-select>
- </el-form-item>
- </td>
- <th class="description-label">声部</th>
- <td class="description-content" colspan="3">
- <el-form-item prop="subjectIdList">
- <el-select
- v-model.trim="form.subjectIdList"
- clearable
- filterable
- multiple
- collapse-tags
- placeholder="请选择声部"
- >
- <el-option
- v-for="(item, index) in subjectList"
- :key="index"
- :value="String(item.id)"
- :label="item.name"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </td>
- </tr>
- <tr class="description-tr">
- <th class="description-label">信息来源</th>
- <td class="description-content">
- <el-form-item prop="sourceFrom">
- <el-select
- v-model.trim="form.sourceFrom"
- clearable
- filterable
- placeholder="请选择信息来源"
- >
- <el-option label="BOSS" value="BOSS"></el-option>
- <el-option label="转介绍" value="转介绍"></el-option>
- <el-option label="其它" value="其它"></el-option>
- </el-select>
- </el-form-item>
- </td>
- <th class="description-label">人员状态</th>
- <td class="description-content">
- <el-form-item prop="status">
- <el-select
- v-model.trim="form.status"
- clearable
- filterable
- placeholder="请选择人员状态"
- >
- <el-option label="未录用" value="NOT_EMPLOYED"></el-option>
- <el-option label="面试中" value="INTERVIEWING"></el-option>
- <el-option label="储备" value="RESERVE"></el-option>
- <el-option label="兼职" value="PART_TIME"></el-option>
- <el-option label="全职" value="FULL_TIME"></el-option>
- <el-option label="离职" value="DIMISSION"></el-option>
- <el-option label="黑名单" value="BLACK_LIST"></el-option>
- </el-select>
- </el-form-item>
- </td>
- <th class="description-label">HRBP</th>
- <td class="description-content">
- <el-form-item prop="hrbp">
- <el-select
- v-model.trim="form.hrbp"
- clearable
- filterable
- placeholder="请选择HRBP"
- >
- <el-option
- v-for="(item, index) in roleList"
- :key="index"
- :value="String(item.userId)"
- :label="item.userName"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="description-title" style="margin-top: 20px">
- <span>在职信息</span>
- </div>
- <div class="description-view">
- <table class="description-table">
- <tbody>
- <tr class="description-tr">
- <th class="description-label">入职日期</th>
- <td class="description-content">
- <el-form-item prop="entryDate">
- <el-date-picker
- type="date"
- placeholder="选择入职日期"
- v-model="form.entryDate"
- />
- </el-form-item>
- </td>
- <th class="description-label">离职日期</th>
- <td class="description-content">
- <el-form-item prop="resignationDate">
- <el-date-picker
- type="date"
- placeholder="选择离职日期"
- v-model="form.resignationDate"
- />
- </el-form-item>
- </td>
- <th class="description-label">离职原因</th>
- <td class="description-content">
- <el-form-item prop="resignationReason">
- <el-input
- v-model.trim="form.resignationReason"
- placeholder="请输入离职原因"
- />
- </el-form-item>
- </td>
- </tr>
- <tr class="description-tr">
- <th class="description-label">分部</th>
- <td class="description-content">
- <el-form-item prop="organId">
- <el-select
- v-model.trim="form.organId"
- placeholder="请选择分部"
- clearable
- filterable
- >
- <el-option
- v-for="(item, index) in organList"
- :key="index"
- :value="item.id"
- :label="item.name"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </td>
- <th class="description-label">职位</th>
- <td class="description-content">
- <el-form-item prop="position">
- <el-select
- v-model.trim="form.position"
- clearable
- filterable
- placeholder="请选择职位"
- >
- <el-option label="指导老师" value="ADVISER"></el-option>
- <el-option label="乐团主管" value="ACADEMIC"></el-option>
- <el-option label="乐队指导" value="TEACHING"></el-option>
- </el-select>
- </el-form-item>
- </td>
- <th class="description-label">声部</th>
- <td class="description-content">
- <el-form-item prop="jobSubjectIdList">
- <el-select
- v-model.trim="form.jobSubjectIdList"
- clearable
- filterable
- multiple
- collapse-tags
- placeholder="请选择声部"
- >
- <el-option
- v-for="(item, index) in subjectList"
- :key="index"
- :value="String(item.id)"
- :label="item.name"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </td>
- </tr>
- <tr class="description-tr">
- <th class="description-label">紧急联系人姓名</th>
- <td class="description-content">
- <el-form-item prop="emergencyContactName">
- <el-input
- v-model.trim="form.emergencyContactName"
- placeholder="请输入紧急联系人姓名"
- />
- </el-form-item>
- </td>
- <th class="description-label">紧急联系人关系</th>
- <td class="description-content">
- <el-form-item
- prop="emergencyContactRelation"
- :rules="{
- required: propRequred,
- message: '请输入紧急联系人关系',
- trigger: 'blur',
- }"
- >
- <el-input
- v-model.trim="form.emergencyContactRelation"
- placeholder="请输入紧急联系人关系"
- />
- </el-form-item>
- </td>
- <th class="description-label">紧急联系人电话</th>
- <td class="description-content">
- <el-form-item
- prop="emergencyContactPhone"
- :rules="[
- {
- min: 11,
- max: 11,
- message: '请输入正确的手机号码',
- trigger: 'blur',
- },
- ]"
- >
- <el-input
- v-model.trim="form.emergencyContactPhone"
- minlength="11"
- maxlength="11"
- placeholder="请输入紧急联系人电话"
- />
- </el-form-item>
- </td>
- </tr>
- <tr class="description-tr">
- <th class="description-label">开户行</th>
- <td class="description-content">
- <el-form-item prop="bankAddress">
- <el-input
- v-model="form.bankAddress"
- placeholder="请输入开户行"
- />
- </el-form-item>
- </td>
- <th class="description-label">银行卡号</th>
- <td class="description-content" colspan="3">
- <el-form-item prop="bankCardNo">
- <el-input
- v-model="form.bankCardNo"
- placeholder="请输入银行卡号"
- />
- </el-form-item>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </el-form>
- <div
- class="tableWrap"
- style="margin-top: 20px"
- v-if="formActionTitle == 'update'"
- >
- <div class="description-title head_title">
- <span>在职信息</span>
- <span
- class="createRecord"
- @click="onCreateRecord"
- v-if="$helpers.permission('employeeInfo/insertVisit')"
- >新增沟通记录 >></span
- >
- </div>
- <el-table
- style="width: 100% !important"
- :data="tableList"
- :header-cell-style="{
- background: '#fafafa',
- color: '#444',
- borderTop: '1px solid #ebeef5',
- }"
- >
- <el-table-column
- align="center"
- prop="createTime"
- label="沟通时间"
- ></el-table-column>
- <el-table-column align="center" prop="operatorName" label="沟通人">
- </el-table-column>
- <el-table-column
- align="center"
- prop="content"
- label="沟通结论"
- show-overflow-tooltip
- >
- <template slot-scope="scope">
- <!-- <el-tooltip
- class="item"
- effect="dark"
- :content="scope.row.content"
- placement="top"
- > -->
- {{ scope.row.content }}
- <!-- </el-tooltip> -->
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="nextVisitDate"
- label="下次沟通时间"
- >
- <template slot-scope="scope">
- {{ scope.row.nextVisitDate | dayjsFormat }}
- </template>
- </el-table-column>
- </el-table>
- </div>
- <span class="dialog-footer">
- <el-button @click="close('ruleForm')">取 消</el-button>
- <el-button
- type="primary"
- class="main-button"
- @click="onTypeSubmit('ruleForm')"
- >确 定</el-button
- >
- </span>
- <el-dialog
- title="新增沟通记录"
- :visible.sync="recordStatus"
- :close-on-click-modal="false"
- width="500px"
- append-to-body
- v-if="recordStatus"
- >
- <create-record
- v-if="recordStatus"
- :employeeInfoId="detail.id"
- @close="recordStatus = false"
- @getList="getRecordList"
- ></create-record>
- </el-dialog>
- </div>
- </template>
- <script>
- // import Vue from 'vue'
- import {
- employeeCreate,
- employeeUpdate,
- employeeQueryDetail,
- } from "@/api/appTenant";
- import CreateRecord from "./createRecord.vue";
- export default {
- name: "hrform",
- props: [
- "detail",
- "subjectList",
- "organList",
- "close",
- "getList",
- "formActionTitle",
- "roleList",
- ],
- components: {
- CreateRecord,
- },
- data() {
- return {
- recordStatus: false,
- realName: "",
- form: {
- age: "",
- bankAddress: "",
- bankCardNo: "",
- birthdate: "",
- educationalBackground: "",
- emergencyContactName: "",
- emergencyContactPhone: "",
- emergencyContactRelation: "",
- entryDate: "",
- gender: "",
- idCard: "",
- intentionCity: "",
- assessmentResult: "",
- status: "",
- isProbationPeriod: "",
- liveCity: "",
- mobileNo: "",
- otherComment: "",
- position: "",
- realName: "",
- resignationDate: "",
- subjectIdList: [],
- jobSubjectIdList: [],
- wechatNo: "",
- organId: "",
- sourceFrom: "",
- educations: [{ level: "", school: "", year: "" }],
- },
- rules: {
- // birthdate: [
- // { required: true, message: '请输入生日', trigger: 'blur' },
- // ],
- // sourceFrom: [
- // { required: true, message: '请选择信息来源', trigger: 'change' },
- // ],
- // intentionCity: [
- // { required: true, message: '请输入工作意向', trigger: 'blur' },
- // ],
- // status: [
- // { required: true, message: '请选择员工状态', trigger: 'change' },
- // ],
- // liveCity: [
- // { required: true, message: '请输入所在城市', trigger: 'blur' },
- // ],
- // otherComment: [
- // { required: true, message: '请输入其他综合情况', trigger: 'blur' },
- // ],
- // position: [
- // { required: true, message: '请输入职位', trigger: 'blur' },
- // ],
- // realName: [
- // { required: true, message: '请输入姓名', trigger: 'blur' },
- // ],
- // subjectIdList: [
- // { required: true, message: '请选择声部', trigger: 'change' },
- // ],
- },
- tableList: [],
- };
- },
- watch: {
- detail() {
- this.updateData();
- },
- },
- async mounted() {
- this.updateData();
- if (this.formActionTitle == "update") {
- this.getRecordList();
- }
- },
- computed: {
- propRequred() {
- return (
- this.form.status === "PART_TIME" ||
- this.form.status === "FULL_TIME" ||
- this.form.status === "DIMISSION"
- );
- },
- },
- methods: {
- updateData() {
- if (this.detail) {
- try {
- this.detail.subjectIdList = this.detail.subjectIdList
- ? this.detail.subjectIdList.split(",")
- : [];
- this.detail.jobSubjectIdList = this.detail.jobSubjectIdList
- ? this.detail.jobSubjectIdList.split(",")
- : [];
- } catch (error) {}
- if (this.detail.organId === 0) {
- this.detail.organId = "";
- }
- if (this.detail.age === 0) {
- this.detail.age = "";
- }
- this.form = Object.assign(
- {
- educations: [{ level: "", school: "", year: "", subject: "" }],
- },
- this.detail
- );
- try {
- this.form.educations = JSON.parse(this.detail.educationalBackground);
- if (this.form.educations.length < 1) {
- this.form.educations = [
- { level: "", school: "", year: "", subject: "" },
- ];
- }
- this.form = { ...this.form };
- } catch (error) {}
- // console.log(this.form);
- } else {
- this.form.educations = [
- { level: "", school: "", year: "", subject: "" },
- ];
- this.form = { ...this.form };
- }
- this.$refs["ruleForm"].resetFields();
- },
- addEducation() {
- this.form.educations = [
- ...this.form.educations,
- { level: "", school: "", year: "", subject: "" },
- ];
- this.form = { ...this.form };
- },
- removeEducation(index) {
- this.form.educations[index] = null;
- this.form.educations = this.form.educations.filter((item) => !!item);
- this.form = { ...this.form };
- },
- onTypeSubmit() {
- this.$refs["ruleForm"].validate((valid) => {
- if (valid) {
- const { $message } = this;
- this.form.educationalBackground = JSON.stringify(
- this.form.educations
- );
- const { educations, subjectIdList, jobSubjectIdList, ...rest } =
- this.form;
- if (this.detail && this.detail.id) {
- employeeUpdate(
- Object.assign(
- {
- id: this.detail.id,
- subjectIdList: (subjectIdList || []).join(","),
- jobSubjectIdList: (jobSubjectIdList || []).join(","),
- },
- rest
- )
- ).then((res) => {
- if (res.code === 200) {
- $message.success("修改成功");
- this.close("ruleForm");
- // this.getList()
- }
- });
- } else {
- employeeCreate({
- subjectIdList: (subjectIdList || []).join(","),
- ...rest,
- }).then((res) => {
- if (res.code === 200) {
- $message.success("创建成功");
- this.close("ruleForm");
- // this.getList()
- } else if (res.code == 206) {
- this.$confirm(res.msg, "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then((res) => {
- employeeCreate({
- subjectIdList: (subjectIdList || []).join(","),
- ...rest,
- cover: true,
- }).then((res) => {
- if (res.code == 200) {
- $message.success("提交成功");
- this.close("ruleForm");
- }
- });
- });
- }
- });
- }
- }
- });
- },
- mobileOrWechatValidate() {
- this.$refs["ruleForm"].validateField("mobileNo");
- },
- onCreateRecord() {
- // 新增沟通记录
- this.recordStatus = true;
- },
- getRecordList() {
- employeeQueryDetail({ id: this.detail.id }).then((res) => {
- let result = res.data.employeeVisitList || [];
- this.tableList = result;
- });
- },
- },
- };
- </script>
- <style lang="less" scoped>
- .desc-item {
- position: relative;
- .close {
- position: absolute;
- left: 10px;
- cursor: pointer;
- }
- }
- .main-button {
- background-color: var(--color-primary);
- border-color: var(--color-primary);
- }
- .dialog-footer {
- display: block;
- text-align: right;
- margin-top: 20px;
- }
- .description-title {
- margin-bottom: 10px;
- color: rgba(0, 0, 0, 0.85);
- font-weight: 700;
- font-size: 16px;
- line-height: 1.5;
- }
- .description-view {
- width: 100%;
- border: 1px solid #e8e8e8;
- }
- .description-view .description-table {
- width: 100%;
- /* border: 1px solid #e8e8e8; */
- border-collapse: collapse;
- table-layout: fixed;
- }
- .description-view .description-tr {
- border-bottom: 1px solid #e8e8e8;
- width: 100%;
- }
- .description-view .description-tr:last-child {
- border-bottom: none;
- }
- .description-view .description-label {
- border-right: 1px solid #e8e8e8;
- background-color: #fafafa;
- color: #000;
- font-weight: 400;
- font-size: 14px;
- line-height: 22px;
- /* margin-right: 8px; */
- // padding: 0 16px;
- width: 140px;
- white-space: nowrap;
- display: table-cell;
- }
- // .description-view .description-label:after {
- // content: ""; /** content: ":" */
- // margin: 0 8px 0 2px;
- // position: relative;
- // top: -0.5px;
- // }
- .description-view .description-content {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- border-right: 1px solid #e8e8e8;
- font-size: 14px;
- line-height: 1.5;
- // padding: 12px 16px;
- // padding-bottom: 0;
- color: rgba(0, 0, 0, 0.65);
- display: table-cell;
- }
- .description-tr .description-content:last-child {
- border-right: none;
- }
- .form {
- /deep/ .el-form-item {
- margin-bottom: 0;
- &.is-error {
- border: 1px solid red;
- .el-input__inner {
- color: red;
- }
- input::-webkit-input-placeholder {
- color: red;
- }
- input::-moz-placeholde {
- color: red;
- }
- input::-ms-input-placeholder {
- color: red;
- }
- }
- }
- /deep/ .el-form-item__error {
- display: none;
- }
- /deep/.el-input__inner {
- border: 0;
- }
- }
- .requiredStar {
- padding-right: 3px;
- font-style: normal;
- color: red;
- }
- .head_title {
- display: flex;
- align-items: center;
- justify-content: space-between;
- .createRecord {
- font-size: 14px;
- font-weight: 400;
- color: var(--color-primary);
- cursor: pointer;
- }
- }
- </style>
|