Преглед на файлове

fix 面试日历,邀约日历

he2802 преди 4 години
родител
ревизия
9c32e2cbf0
променени са 3 файла, в които са добавени 195 реда и са изтрити 142 реда
  1. 9 1
      src/api/recruitmentCalendar.js
  2. 34 2
      src/view/jobSearchManagement/interviewCalendar/index.vue
  3. 152 139
      src/view/jobSearchManagement/resumeCenter/index.vue

+ 9 - 1
src/api/recruitmentCalendar.js

@@ -14,5 +14,13 @@ export default {
       method: 'get',
       params: data
     })
-  }
+  },
+  //修改投递状态
+  editrecruitinterview(data) {
+    return request({
+      url: '/recruit/interview',
+      method: 'post',
+      data
+    })
+  },
 }

+ 34 - 2
src/view/jobSearchManagement/interviewCalendar/index.vue

@@ -4,6 +4,17 @@
    <div  class="interviewCalendar">
      <el-calendar v-model="dayValue">
      </el-calendar>
+     <div style="padding-left: 20px">
+       <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
+       <el-checkbox-group v-model="checkList" @change="statusChange">
+       <div  v-for="(item, index) in statusIndexList" :key="index" >
+         <div style="padding: 5px 20px;font-size: 14px"><el-checkbox :key="index" :label="item">{{ statusList[index] }}</el-checkbox></div>
+       </div>
+       </el-checkbox-group>
+     </div>
+     <div style="padding: 20px">
+       <el-button size="medium" type="primary">导出报表</el-button>
+     </div>
    </div>
     <div style="min-width: 1050px">
       <div style="display: flex;justify-content: center;font-weight: bold;padding: 25px;font-size: 18px;letter-spacing: 5px">
@@ -61,6 +72,9 @@
 export default {
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: true,
+      checkList:[0,1,2,3,4,5,6,7,8,9,10,11,12],
       dayValue: new Date(),
       loading: false, //当前表单加载是否加载动画
       weekDay:['周一','周二','周三','周四','周五','周六','周日'],
@@ -72,12 +86,29 @@ export default {
         '下午2点','下午3点','下午4点','下午5点','下午6点','晚上7点','晚上8点','晚上9点','晚上10点','晚上11点'],
       weekDay1:new Date(),
       weekDay2:new Date(),
+      statusList:['已投递','已发邀请','已确认','已谢绝','初试通过','初试不通过','复试通过','复试不通过','已发Offer','爽约','淘汰(试用公司辞退)','放弃(试用期个人离职)','转正'],
+      statusIndexList:[0,1,2,3,4,5,6,7,8,9,10,11,12],
+      statusRadio: 0
     };
   },
   mounted() {
     this.search();
   },
   methods: {
+    handleCheckAllChange(val){
+
+      this.checkList = val ? this.statusIndexList : [];
+      this.isIndeterminate = false;
+      console.log(this.checkList)
+      this.search();
+    },
+    statusChange(value){
+      let checkedCount = value.length;
+      this.checkAll = checkedCount === this.statusList.length;
+      this.isIndeterminate = checkedCount > 0 && checkedCount < this.statusList.length;
+      this.search();
+      console.log(this.checkList,99)
+    },
     changeWeek(index){
       if(index==-1){
         this.dayValue.setTime(this.dayValue.getTime()-7*24*60*60*1000)
@@ -97,8 +128,10 @@ export default {
       var data = {
         year: this.dayValue.getFullYear(),
         month: this.dayValue.getMonth()+1,
-        day: this.dayValue.getDate()
+        day: this.dayValue.getDate(),
+        statusIds:this.checkList.toString()
       };
+
       this.$api.recruitinterviewlist(data).then((res) => {
         if(res.code==200){
           that.dayInterviewVos = res.data.dayInterviewVos
@@ -113,7 +146,6 @@ export default {
             that.weekDayList.push(weekDay)
             that.dealDayList(that.dayInterviewVos[i].quantumList)
           }
-          console.log(that.dayInterviewVos,33)
           for(let i = 0; i < that.weekDayList.length; i++) {
             var d=new Date();
             d.setTime(that.dayValue.getTime()+(i-that.currIndex)*24*60*60*1000)

+ 152 - 139
src/view/jobSearchManagement/resumeCenter/index.vue

@@ -12,10 +12,11 @@
         <el-button type="text" @click="addClick(props.scope.row, 2)"
           >详情</el-button
         >
-        <el-button type="text" @click="addClick(props.scope.row, 0)"
-          >邀请</el-button
-        >
-        <el-button type="text" @click="del(props.scope.row)">删除</el-button>
+        <el-button type="text" v-if="props.scope.row.status==0" @click="addClick(props.scope.row, 0)">邀请</el-button>
+        <el-button type="text" v-if="props.scope.row.status==0" @click="addClick(props.scope.row, 1)">拒绝</el-button>
+        <el-button type="text" v-if="props.scope.row.status==1" >已邀请</el-button>
+        <el-button type="text" v-if="props.scope.row.status==3" >已谢绝</el-button>
+        <el-button type="text" v-if="props.scope.row.status==2" >已确定</el-button>
       </template>
     </table-list>
     <pagination
@@ -25,70 +26,7 @@
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
-    <el-dialog
-      :visible.sync="dialogVisible"
-      width="560px"
-      :show-close="false"
-      :before-close="close"
-    >
-      <div slot="title" class="hearders">
-        <div class="leftTitle">
-          {{ statusPop === 1 ? "添加" : statusPop === 0 ? "修改" : "详情" }}
-        </div>
-        <div class="rightBoxs">
-          <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
-        </div>
-      </div>
-      <div>
-        <el-form
-          label-position="right"
-          label-width="80px"
-          :model="listData"
-          :rules="rules"
-          ref="listData"
-        >
-          <el-form-item
-            v-for="(items, indexs) in listitem"
-            :key="indexs"
-            :label="items.label"
-            :prop="items.prop"
-          >
-            <el-radio-group
-              v-if="items.scope === 'status'"
-              v-model="listData[items.prop]"
-            >
-              <el-radio
-                v-for="(item, index) in items.options"
-                :key="index"
-                :label="item.value"
-                :disabled="statusPop === 2"
-                >{{ item.label }}</el-radio
-              >
-            </el-radio-group>
-            <el-input
-              :disabled="statusPop === 2"
-              v-else-if="items.scope === 'textarea'"
-              type="textarea"
-              v-model="listData[items.prop]"
-            ></el-input>
-            <el-input
-              :disabled="statusPop === 2"
-              v-else
-              v-model="listData[items.prop]"
-            ></el-input>
-          </el-form-item>
-        </el-form>
-      </div>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="close">取 消</el-button>
-        <el-button
-          type="primary"
-          v-if="statusPop !== 2"
-          @click="submit('listData')"
-          >确 定</el-button
-        >
-      </span>
-    </el-dialog>
+
     <el-dialog
       :visible.sync="calendarDialogVisible"
       width="30%"
@@ -111,33 +49,71 @@
          <div>{{item.timeStr}}</div>
          <div style="display: flex;margin-left: 30px">
            <div v-for="(item_c, index_c) in item.list">
-             {{item_c.job}}-{{item_c.realName}}<span v-if="index_c<item.list.length-1">,</span>
+             {{item_c.job}}-{{item_c.recruitResumeVo.realname}}<span v-if="index_c<item.list.length-1">,</span>
            </div>
          </div>
        </div>
        <div>
-         <el-form ref="form" :model="form" label-width="80px">
-           <el-form-item label="公司">
-             <el-input v-model="form.company_name"></el-input>
+         <el-form  :model="form"  :rules="rules" label-width="80px" ref="inviteForm">
+           <el-form-item label="公司" prop="companyName">
+             <el-input v-model="form.companyName"></el-input>
            </el-form-item>
-           <el-form-item label="时间">
-             <el-date-picker type="datetime" placeholder="选择时间" v-model="form.date" value-format="timestamp"></el-date-picker>
+           <el-form-item label="时间" prop="resumeTime">
+             <el-date-picker type="datetime" placeholder="选择时间" v-model="form.resumeTime" value-format="timestamp"></el-date-picker>
            </el-form-item>
-           <el-form-item label="地点">
-             <el-input v-model="form.company_name"></el-input>
+           <el-form-item label="地点" prop="address">
+             <el-input v-model="form.address" ></el-input>
            </el-form-item>
-           <el-form-item label="电话">
-             <el-input v-model="form.company_name"></el-input>
+           <el-form-item label="电话" prop="linkTel">
+             <el-input v-model="form.linkTel"></el-input>
            </el-form-item>
-           <el-form-item label="联系人">
-             <el-input v-model="form.company_name"></el-input>
+           <el-form-item label="联系人" prop="linkMan">
+             <el-input v-model="form.linkMan"></el-input>
            </el-form-item>
          </el-form>
        </div>
      </div>
       <span slot="footer" class="dialog-footer">
     <el-button @click="calendarDialogVisible = false">取 消</el-button>
-    <el-button type="primary" @click="calendarDialogVisible = false">发送邀请</el-button>
+    <el-button type="primary" @click="submitForm(0)">发送邀请</el-button>
+  </span>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="refuseDialogVisible"
+      width="30%"
+      center>
+      <div style="min-width: 360px">
+        <div style="margin-top: 30px">
+          <div style="width: 100%">
+            <el-radio v-model="radio" label="1">
+              <el-input
+                type="textarea"
+                :rows="2"
+                placeholder="请输入内容"
+                :disabled="radio=='2'"
+                v-model="refuseText1">
+              </el-input>
+            </el-radio>
+          </div>
+          <div style="margin-top: 30px">
+            <el-radio v-model="radio" label="2">
+              自定义原因
+            </el-radio>
+            <div style="margin-left: 25px;margin-top: 10px;width: 90%">
+              <el-input
+                type="textarea"
+                :rows="2"
+                :disabled="radio=='1'"
+                placeholder="请输入内容"
+                v-model="refuseText2">
+              </el-input>
+            </div>
+          </div>
+        </div>
+      </div>
+       <span slot="footer" class="dialog-footer">
+    <el-button @click="refuseDialogVisible = false">取 消</el-button>
+    <el-button type="primary" @click="submitForm(1)">确认</el-button>
   </span>
     </el-dialog>
   </div>
@@ -151,6 +127,13 @@ export default {
   components: { searchBox, tableList, pagination },
   data() {
     return {
+      radio:'1',
+      refuseText1:'您的简历已经纳入我们公司的人才储备库,如果有适合您的岗位,我们会第一时间通知您,祝您求职成功,心想事成。',
+      refuseText2:'',
+      refuseForm:{
+        refuse:''
+      },
+      refuseDialogVisible: false,
       dayValue: new Date(),
       calendarDialogVisible: false,
       weekDay:['一','二','三','四','五','六','日'],
@@ -160,8 +143,11 @@ export default {
       recruitList:[],
       dayInterviewVos:[],
       form:{
-        company_name:'',
-        date:''
+        companyName:'',
+        linkMan:'',
+        linkTel:'',
+        address:'',
+        resumeTime:''
       },
       peopleNum:0,
       loading: false, //当前表单加载是否加载动画
@@ -219,7 +205,7 @@ export default {
       tableSet: [
         {
           label: "姓名",
-          prop: "realName",
+          prop: "resumeRealName",
           hidden: true,
         },
         {
@@ -335,20 +321,11 @@ export default {
       dialogVisible: false,
       //表单验证
       rules: {
-        dictName: [
-          { required: true, message: "请输入字典名称", trigger: "blur" },
-          {
-            min: 2,
-            max: 10,
-            message: "长度在 2 到 10 个字符",
-            trigger: "blur",
-          },
-        ],
-        dictType: [
-          { required: true, message: "请输入字典类型", trigger: "blur" },
-        ],
-        status: [{ required: true, message: "请选择状态", trigger: "change" }],
-        remark: [{ required: true, message: "请填写备注", trigger: "blur" }],
+        linkTel: [{ required: true, message: "请填写联系电话", trigger: "blur" }],
+        address: [{ required: true, message: "请填写面试地址", trigger: "blur" }],
+        companyName: [{ required: true, message: "请填写公司名称", trigger: "blur" }],
+        linkMan: [{ required: true, message: "请填写联系人", trigger: "blur" }],
+        resumeTime: [{ required: true, message: "请选择面试时间", trigger: "blur" }],
       },
       companyGMdata:[],//公司规模
       companyLXdata:[],//公司类型
@@ -363,6 +340,65 @@ export default {
     this.getNowTime()
   },
   methods: {
+    editrecruitinterviewRefuse(refuse){
+      let data = JSON.parse(JSON.stringify(this.refuseForm));
+      data.status = 3
+      data.refuse = refuse
+      let that = this
+      this.$api.editrecruitinterview(data).then((res) => {
+        if(res.code==200){
+          that.calendarDialogVisible = false
+          that.refuseDialogVisible = false
+          that.search();
+        }
+      });
+    },
+    editrecruitinterview(){
+      let data = JSON.parse(JSON.stringify(this.form));
+      data.status = 1
+      data.resumeTime = parseInt(data.resumeTime/1000)
+      let that = this
+      this.$api.editrecruitinterview(data).then((res) => {
+        if(res.code==200){
+          that.calendarDialogVisible = false
+          that.search();
+        }
+      });
+    },
+    submitForm(type){
+      if(type==0){
+        this.$refs['inviteForm'].validate((valid) => {
+          if (valid) {
+            this.editrecruitinterview()
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        });
+      }
+      if(type==1){
+        let refuse = ''
+        if(this.radio=='1'){
+          if(this.refuseText1==''){
+            this.$message({
+              message: '请输入拒绝原因',
+              type: 'warning'
+            });
+          }
+          refuse = this.refuseText1
+        }
+        if(this.radio=='2'){
+          if(this.refuseText2==''){
+            this.$message({
+              message: '请输入拒绝原因',
+              type: 'warning'
+            });
+          }
+          refuse = this.refuseText2
+        }
+        this.editrecruitinterviewRefuse(refuse)
+      }
+    },
     getNowTime(){
       let t = new Date();
       let newTime = t.getTime()-(t.getMinutes()*60+t.getSeconds())*1000+3600*1000
@@ -370,7 +406,7 @@ export default {
       this.dayValue = t
     },
     makeRecruitList(quantumList){
-      this.form.date = this.dayValue.getTime()
+      this.form.resumeTime = this.dayValue.getTime()
       this.recruitList = []
       this.peopleNum = 0
       for(let i =0;i<quantumList.length;i++){
@@ -446,6 +482,7 @@ export default {
             let item = that.tableData[i]
             item.sexLabel = item.sex==1?'男':'女'
             item.wantIncomeLabel = item.recruitResumeVo.wantIncomeStart+'-'+item.recruitResumeVo.wantIncomeEnd
+            item.resumeRealName = item.recruitResumeVo.realname
           }
         }
       });
@@ -455,48 +492,21 @@ export default {
     init() {
       this.search();
     },
-    del(v) {
-      this.$confirm("此操作将删除该字典类型, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          this.$message.success("删除成功");
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
-    },
     addClick(v, int) {
-      this.calendarDialogVisible = true
-      return
-      if (v === undefined) {
-        this.statusPop = 1;
-        this.listData = {};
-      } else {
-        this.statusPop = int;
-        var data = v.dictId;
-        this.listData = {
-          createBy: "admin",
-          createTime: "2021-05-08 14:45:46",
-          dictId: 1,
-          dictName: "用户性别",
-          dictType: "sys_user_sex",
-          pageNum: null,
-          pageSize: null,
-          params: {},
-          remark: "用户性别列表",
-          status: "1",
-          statusArray: null,
-          updateBy: "admin",
-          updateTime: "2021-06-09 15:55:04",
-        };
+      if(int==0){
+        this.calendarDialogVisible = true
+        this.form.companyName = v.companyName
+        this.form.address = v.city+' '+v.district+' '+v.companyAddress
+        this.form.linkMan = v.linkMan
+        this.form.linkTel = v.linkTel
+        this.form.interviewId = v.interviewId
+        return
+      }
+      if(int==1){
+        this.refuseDialogVisible = true
+        this.refuseForm.interviewId = v.interviewId
+        return
       }
-      this.dialogVisible = true;
     },
     submit(formName) {
       this.$refs[formName].validate((valid) => {
@@ -545,6 +555,9 @@ export default {
 };
 </script>
 <style>
+.el-cascader-node>.el-radio, .el-radio:last-child{
+  width: 90%;
+}
 #resumeCenter .el-dialog{
   min-width: 400px !important;
 }