Browse Source

Merge branch 'test' of http://120.79.166.78:19005/zhongzheng-edu/zz-admin into test

Tang 4 năm trước cách đây
mục cha
commit
68db2ee4c4

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 16156 - 1
package-lock.json


+ 4 - 2
src/api/api.js

@@ -20,6 +20,7 @@ import appuser from './appuser'//客户端用户管理
 
 import recruitmentTemplate from './recruitmentTemplate'//招聘模板管理
 import recruitmentManagem from './recruitmentManagem'//招聘需求管理
+import recruitmentCalendar from './recruitmentCalendar'
 import companyMsg from './companyMsg'//公司管理列表
 import advertising from './advertising'//广告发布储存管理
 import operationLog from './operationLog'//操作日志记录
@@ -72,5 +73,6 @@ export default {
     ...taskManagement,
     ...recruitmentTemplate,
     ...recruitmentManagem,
-    ...companyMsg
-}
+    ...companyMsg,
+    ...recruitmentCalendar
+}

+ 26 - 0
src/api/recruitmentCalendar.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request' //引入axios请求及拦截器
+export default {
+    //查询招聘面试日历列表
+    recruitinterviewlist(data) {
+        return request({
+            url: '/recruit/interview/list',
+            method: 'get',
+            params: data
+        })
+    },
+  recruitinterviewlistAll(data) {
+    return request({
+      url: '/recruit/interview/listAll',
+      method: 'get',
+      params: data
+    })
+  },
+  //修改投递状态
+  editrecruitinterview(data) {
+    return request({
+      url: '/recruit/interview',
+      method: 'post',
+      data
+    })
+  },
+}

+ 6 - 5
src/components/tableList.vue

@@ -79,6 +79,7 @@
       @select="select"
       :row-key="rowKey"
       :load="load"
+      :cell-style="timeStyle"
       lazy
       ref="pagerset"
       v-loading="loading"
@@ -452,13 +453,13 @@ export default {
     this.initTR();
   },
   mounted(){
-    var lis = document.getElementsByClassName("el-table__expand-icon")
-    console.log(lis)
-  for(let i = 0; i < lis.length; i++){
-    lis[i].parentNode.style.cssText = 'text-align:left!important;'
-  }
   },
   methods: {
+    timeStyle(column) {
+      if(column.columnIndex === 0&&this.navText.firstColLeft) {
+        return "text-align:left!important;  padding-left: 40px;"
+      }
+    },
     //初始化
     initTR() {
       this.cities = [];

+ 5 - 2
src/view/courseQuestionBank/professionalManagement/index.vue

@@ -128,12 +128,13 @@ export default {
           status: false,
           title: "未定义",
         },
+        firstColLeft:true
       },
       formList: [
         {
           label: "分类名称",
           prop: "categoryName",
-          placeholder: "输入分类名称",
+          placeholder: "输入分类名称"
         },
         {
           label: "启用状态",
@@ -215,6 +216,7 @@ export default {
           categoryName: "主类型",
         });
         this.optionsCascader = this.arrayChangeType(setObj);
+        console.log(this.optionsCascader ,66)
       });
     },
     // 表单列添加下级
@@ -413,11 +415,12 @@ export default {
             item.hasChildren = true;
           });
           self.tableData = res.rows;
+          console.log(self.tableData,33)
           self.tableData.sort(self.sortBy("sort", true));
           self.navText.index = res.total;
           self.total = res.total;
           self.loading = false;
-          self.getCascader();
+  //        self.getCascader();
         })
         .catch((err) => {
           this.loading = false;

+ 413 - 14
src/view/jobSearchManagement/interviewCalendar/index.vue

@@ -1,30 +1,429 @@
 <template>
   <!-- 面试日历 -->
-  <div id="interviewCalendar">
-    <full-calendar :events="fcEvents" locale="en"></full-calendar>
+  <div id="interviewCalendar" class="box">
+   <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">
+        <div><i class="el-icon-arrow-left" style="cursor: pointer"  @click="changeWeek(-1)"></i>{{weekDay1.getFullYear()}}年{{weekDay1.getMonth()+1}}月{{weekDay1.getDate()}}日-{{weekDay2.getMonth()+1}}月{{weekDay2.getDate()}}日
+          <i class="el-icon-arrow-right" style="cursor: pointer" @click="changeWeek(1)"></i></div>
+      </div>
+      <div class="week_box" >
+        <div v-if="weekDayList.length>0" v-for="(item, index) in weekDay" :key="index" :class="dayValue.getDate()==weekDayList[index].num?'selColor card_date':'card_date'">
+          <div>{{ item }}</div>
+          <div  :class="dayValue.getDate()==weekDayList[index].num?'selCircle':'selNone'">{{ weekDayList[index].num }}</div>
+        </div>
+      </div>
+      <div class="week_box week_container" id="weekContainer">
+        <div v-if="dayInterviewVos.length>0" v-for="(item, index) in dayInterviewVos" :key="index" class="day_row">
+          <div  v-for="(item_c, index_c) in item.quantumList" :key="index_c" :class="index==0?'day_col day_row0':'day_col'">
+            <div v-if="index==0" class="timeLine">
+              {{timeline[index_c]}}
+            </div>
+
+            <el-popover
+              width="450"
+              v-if="item_c.recruitInterviewList.length>0"
+              trigger="hover">
+                <div>
+                  <div  v-for="(val, key,i) in item_c.mergeObj" :key="i" >
+                    <div>
+                      {{key}}:
+                      <div  v-for="(item_val, index_val) in val" :key="index_val" style="padding-left: 60px;display:flex ;justify-content: space-between;padding-bottom: 5px;align-items: center;">
+                        <div> {{item_val.recruitResumeVo.realname}} - {{item_val.recruitResumeVo.telphone}} - {{statusList[item_val.status]}}</div>
+                        <div>
+                          <el-button size="mini" type="primary" @click="updateStatue(item_val)">标注</el-button>
+                          <el-button size="mini" type="primary" @click="updateDate(item_val)">改期</el-button>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+                <div slot="reference" style="cursor: pointer;">
+                  <div style="font-size: 12px;text-align: left;">待面试:</div>
+                  <div  v-for="(val, key,i) in item_c.mergeObj" :key="i" class="day_col_item">
+                    <div> <span class="color1">{{key}}*{{val.length}}</span></div>
+                  </div>
+                </div>
+            </el-popover>
+          </div>
+        </div>
+      </div>
+
+
+    </div>
+    <el-dialog
+      :visible.sync="dateDialogVisible"
+      width="30%"
+      center>
+      <div style="margin-top: 30px">
+        <div style="text-align: center"> {{dateForm.recruitResumeVo.realname}} - {{dateForm.job}}</div>
+        <div style="text-align: center;margin-top: 20px">
+          <el-date-picker type="datetime" placeholder="选择时间" v-model="dateForm.resumeTime" value-format="timestamp"></el-date-picker>
+        </div>
+      </div>
+          <span slot="footer" class="dialog-footer">
+        <el-button @click="dateDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm(1)">确认</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="statusDialogVisible"
+      width="30%"
+      center>
+      <div style="margin-top: 30px">
+        <div style="text-align: center"> {{statusForm.recruitResumeVo.realname}} - {{statusForm.job}}</div>
+        <div style="text-align: center;margin-top: 20px">
+          <el-select v-model="value" placeholder="请选择">
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="statusDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm(0)">确认</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 export default {
-  components: { 
-    'full-calendar': require('vue-fullcalendar')
-   },
   data() {
     return {
-      fcEvents: [
-        {
-          title: "Sunny Out of Office",
-          start: "2021-08-11",
-          end: "2021-08-13",
-        },
-      ],
-      
+      options: [{
+        value: 0,
+        label: '已投递'
+      }, {
+        value: 1,
+        label: '已发邀请'
+      }, {
+        value: 2,
+        label: '已确定'
+      }, {
+        value: 3,
+        label: '已谢绝'
+      }, {
+        value: 4,
+        label: '初试通过'
+      }, {
+        value: 5,
+        label: '初试不通过'
+      }, {
+        value: 6,
+        label: '复试通过'
+      }, {
+        value: 7,
+        label: '复试不通过'
+      }, {
+        value: 8,
+        label: '已发offer'
+      }, {
+        value: 9,
+        label: '爽约'
+      }, {
+        value: 10,
+        label: '淘汰'
+      }, {
+        value: 11,
+        label: '放弃'
+      }, {
+        value: 12,
+        label: '转正'
+      }],
+      statusForm:{
+        recruitResumeVo:''
+      },
+      value:'',
+      statusDialogVisible:false,
+      dateForm:{
+        recruitResumeVo:''
+      },
+      dateDialogVisible:false,
+      isIndeterminate: false,
+      checkAll: true,
+      checkList:[0,1,2,3,4,5,6,7,8,9,10,11,12],
+      dayValue: new Date(),
+      loading: false, //当前表单加载是否加载动画
+      weekDay:['周一','周二','周三','周四','周五','周六','周日'],
+      weekDayList:[],
+      date_num: [],
+      currIndex:0,
+      dayInterviewVos:[],
+      timeline:['凌晨0点','凌晨1点','凌晨2点','凌晨3点','凌晨4点','凌晨5点','上午6点','上午7点','上午8点','上午9点','上午10点','上午11点','中午12点','下午1点',
+        '下午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
     };
   },
-  methods: {},
+  mounted() {
+    this.search();
+  },
+  methods: {
+    editrecruitinterviewStatus(){
+      let data = {}
+      data.status = this.value
+      data.interviewId = this.statusForm.interviewId
+      let that = this
+      this.$api.editrecruitinterview(data).then((res) => {
+        if(res.code==200){
+          that.statusDialogVisible = false
+          that.search();
+        }
+      });
+    },
+    editrecruitinterview(){
+      let data = {}
+      data.resumeTime = parseInt(this.dateForm.resumeTime/1000)
+      data.interviewId = this.dateForm.interviewId
+      let that = this
+      this.$api.editrecruitinterview(data).then((res) => {
+        if(res.code==200){
+          that.dateDialogVisible = false
+          that.search();
+        }
+      });
+    },
+    submitForm(type){
+      if(type==0){
+        this.editrecruitinterviewStatus()
+      }
+      if(type==1){
+        this.editrecruitinterview()
+      }
+    },
+    updateStatue(val){
+      this.statusDialogVisible = true
+      this.statusForm = JSON.parse(JSON.stringify(val));
+      this.value = this.statusForm.status
+    },
+    updateDate(val){
+      this.dateDialogVisible = true
+      this.dateForm = JSON.parse(JSON.stringify(val));
+      this.dateForm.resumeTime = this.dateForm.resumeTime*1000
+    },
+    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)
+      }
+      if(index==1){
+        this.dayValue.setTime(this.dayValue.getTime()+7*24*60*60*1000)
+      }
+      let d = new Date()
+      d.setTime(this.dayValue.getTime())
+      this.dayValue = d
+      this.search()
+
+    },
+    search() {
+      let that = this
+      this.loading = true;
+      var data = {
+        year: this.dayValue.getFullYear(),
+        month: this.dayValue.getMonth()+1,
+        day: this.dayValue.getDate(),
+        statusIds:this.checkList.toString()
+      };
+
+      this.$api.recruitinterviewlist(data).then((res) => {
+        if(res.code==200){
+          that.dayInterviewVos = res.data.dayInterviewVos
+          that.weekDayList = []
+          for(let i = 0; i < that.dayInterviewVos.length; i++) {
+            if(res.data.dayInterviewVos[i].date==that.dayValue.getDate()){
+              that.currIndex = i
+            }
+            let weekDay = {
+              num:that.dayInterviewVos[i].date
+            }
+            that.weekDayList.push(weekDay)
+            that.dealDayList(that.dayInterviewVos[i].quantumList)
+          }
+          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)
+            that.weekDayList[i].day = d
+            if(i==0){
+              that.weekDay1 = d
+            }
+            if(i==6){
+              that.weekDay2 = d
+            }
+          }
+          that.$nextTick(function(){
+            document.getElementById('weekContainer').scrollTop = 479
+          });
+
+        }
+      });
+      this.loading = false;
+    },
+    dealDayList(quantumList){
+      for(let i =0;i<quantumList.length;i++){
+        let item = quantumList[i]
+        let mergeObj = {}
+        for(let j =0;j<item.recruitInterviewList.length;j++){
+          let dayItem = item.recruitInterviewList[j]
+          if(mergeObj.hasOwnProperty(dayItem.job)){
+            let valueList = mergeObj[dayItem.job]
+            valueList.push(dayItem)
+          }else{
+            let valueList = []
+            valueList.push(dayItem)
+            mergeObj[dayItem.job] = valueList
+          }
+        }
+        item.mergeObj = mergeObj
+      }
+
+    },
+  },
+  watch:{
+    dayValue(val, oldVal){//普通的watch监听
+      this.search()
+    }
+  }
 };
 </script>
+<style >
 
+.interviewCalendar .el-calendar-table .el-calendar-day{
+  height: auto;
+}
+.interviewCalendar .el-calendar-table tr:first-child td{
+  border-top: none;
+}
+.interviewCalendar .el-calendar-table td{
+  border-bottom: none;
+  border-right: none;
+}
+.interviewCalendar .el-calendar-table tr td:first-child{
+  border-left: none;
+}
+.interviewCalendar .el-button--mini, .el-button--mini.is-round{
+  padding: 7px;
+}
+</style>
 <style lang="less" scoped>
+.color1{
+  color: #ffffff;
+  background-color: #E6A23C;
+  padding: 2px 5px;
+  border-radius: 4px;
+}
+.day_col_item{
+  color: #666666;
+  font-size: 12px;
+  padding: 5px;
+  overflow: hidden;
+}
+.timeLine{
+  position: absolute;
+  left: -55px;
+  top: 20px;
+  color: #666666;
+  font-size: 12px;
+}
+.day_row0{
+  border-left: 1px solid #EBEEF5;
+}
+
+
+.day_col:first-child{
+  border-top: 1px solid #EBEEF5;
+}
+.day_col{
+  width: 100%;
+  height: 60px;
+  border-bottom: 1px solid #EBEEF5;
+  border-right: 1px solid #EBEEF5;
+  position: relative;
+}
+.day_row{
+  width: 14%;
+  text-align: center;
+}
+.selNone {
+  margin-top: 20px
+}
+.selCircle {
+  border-radius: 50%;
+  width: 50px;
+  height: 50px;
+  color: #ffffff !important;
+  background-color: #3494F7;
+  text-align: center;
+  line-height: 50px;
+  margin: 0 auto;
+}
+.selColor{
+  color: #3494F7 !important;
+}
+.week_container{
+  height: 600px;
+  overflow-y: auto;
+  margin-bottom: 50px;
+}
+.week_container::-webkit-scrollbar {
+  display: none; /* Chrome Safari */
+}
+.week_box{
+  min-width: 1050px;
+  display: flex;
+  justify-content:center;
+  margin-top: 20px;
+  padding-left: 50px;
+
+}
+.card_date {
+  width: 14%;
+  text-align: center;
+  color: #000;
+
+}
+.box{
+  display: flex;
+  width: 100%;
+  min-width: 1350px;
+
+}
+.interviewCalendar{
+  width: 300px;
+  height: 350px;
+}
 </style>

+ 377 - 199
src/view/jobSearchManagement/resumeCenter/index.vue

@@ -12,82 +12,109 @@
         <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
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="searchPamam.pageSize"
+      :currentPage="searchPamam.currentPage"
       @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 ? "修改" : "详情" }}
+      :visible.sync="calendarDialogVisible"
+      width="30%"
+      custom-class="inviteDialog"
+      center>
+     <div style="min-width: 360px">
+        <div class="d_title">
+          <div>当前共有 {{peopleNum}}  人需要面试</div>
+          <div class="d_title_r">查看全部</div>
         </div>
-        <div class="rightBoxs">
-          <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
+       <div class="week_box">
+         <i class="el-icon-arrow-left" style="cursor: pointer;margin-top: 5px"  @click="changeWeek(-1)"></i>
+         <div  v-for="(item, index) in weekDay" :key="index" class="card_date">
+           <div>{{ item }}</div>
+           <div v-if="weekDayList.length>0" :class="dayValue.getDate()==weekDayList[index].num?'selCircle':'selNone'" @click="selDay(weekDayList[index],index)">{{ weekDayList[index].num }}</div>
+         </div>
+         <i class="el-icon-arrow-right" style="cursor: pointer;margin-top: 5px" @click="changeWeek(1)"></i>
+       </div>
+       <div v-for="(item, index) in recruitList" style="display: flex;padding: 20px">
+         <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.recruitResumeVo.realname}}<span v-if="index_c<item.list.length-1">,</span>
+           </div>
+         </div>
+       </div>
+       <div>
+         <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="时间" 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="地点" prop="address">
+             <el-input v-model="form.address" ></el-input>
+           </el-form-item>
+           <el-form-item label="电话" prop="linkTel">
+             <el-input v-model="form.linkTel"></el-input>
+           </el-form-item>
+           <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="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>
-      <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>
+       <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>
 </template>
@@ -100,7 +127,35 @@ export default {
   components: { searchBox, tableList, pagination },
   data() {
     return {
+      radio:'1',
+      refuseText1:'您的简历已经纳入我们公司的人才储备库,如果有适合您的岗位,我们会第一时间通知您,祝您求职成功,心想事成。',
+      refuseText2:'',
+      refuseForm:{
+        refuse:''
+      },
+      refuseDialogVisible: false,
+      dayValue: new Date(),
+      calendarDialogVisible: false,
+      weekDay:['一','二','三','四','五','六','日'],
+      weekDayList:[],
+      weekDay1:new Date(),
+      weekDay2:new Date(),
+      recruitList:[],
+      dayInterviewVos:[],
+      form:{
+        companyName:'',
+        linkMan:'',
+        linkTel:'',
+        address:'',
+        resumeTime:''
+      },
+      peopleNum:0,
       loading: false, //当前表单加载是否加载动画
+      searchPamam:{
+        pageSize: 10, //每页多少条数据
+        currentPage: 1, //当前页码
+        statusArray: "0,1",
+      },
       navText: {
         title: "简历中心",
         index: 0,
@@ -150,55 +205,56 @@ export default {
       tableSet: [
         {
           label: "姓名",
-          prop: "dictId",
+          prop: "resumeRealName",
           hidden: true,
         },
         {
           label: "性别",
-          prop: "dictName",
+          prop: "sexLabel",
           hidden: true,
         },
         {
           label: "工作年限",
-          prop: "dictType",
+          prop: "workYear",
           hidden: true,
         },
         {
           label: "年龄",
-          prop: "status",
+          prop: "age",
           hidden: true,
         },
         {
           label: "邮箱",
-          prop: "remark",
+          prop: "email",
           hidden: true,
         },
         {
           label: "联系电话",
-          prop: "dictType",
+          prop: "telphone",
           hidden: true,
           width:"200px"
         },
         {
           label: "期望薪资",
-          prop: "status",
+          prop: "wantIncomeLabel",
           hidden: true,
+          width:"200px"
         },
         {
           label: "地点",
-          prop: "remark",
+          prop: "district",
           hidden: true,
           width:"240px"
         },
         {
           label: "应聘岗位",
-          prop: "dictType",
+          prop: "job",
           hidden: true,
           width:"300px"
         },
         {
           label: "工作类型",
-          prop: "remark",
+          prop: "jobType",
           hidden: true,
           width:"240px"
         },
@@ -210,7 +266,7 @@ export default {
         },
         {
           label: "简历完成度",
-          prop: "remark",
+          prop: "completenessLabel",
           hidden: true,
           width:"240px"
         },
@@ -229,8 +285,6 @@ export default {
       ],
       tableData: [], //表单数据
       total: 0, //一共多少条
-      pageSize: 10, //每页多少条数据
-      currentPage: 1, //当前页码
       // 弹窗字段
       listitem: [
         {
@@ -268,151 +322,226 @@ 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:[],//公司类型
     };
   },
   created(){
-    this.companyGM()
-    this.companyLX()
+
   },
   mounted() {
     this.search();
+    this.searchCalendar()
+    this.getNowTime()
   },
   methods: {
-    companyGM(){
-      var arays = []
-      var newArrays = []
-      arays = this.$store.state.UserDict.filter((item,index) => {
-        return item.dictType == "company_size"
-      })
-      arays.forEach((item,index) => {
-        let arrayList = {
-          label: item.dictLabel,
-          value: item.dictValue
+    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();
         }
-        newArrays.push(arrayList)
-      })
-      for(let i = 0; i < this.formList.length; i++){
-        if(this.formList[i].label === '公司规模'){
-          this.formList[i].options = newArrays
+      });
+    },
+    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();
         }
-      }
-      this.companyGMdata = newArrays
+      });
     },
-    companyLX(){
-      var arays = []
-      var newArrays = []
-      arays = this.$store.state.UserDict.filter((item,index) => {
-        return item.dictType == "company_type"
-      })
-      arays.forEach((item,index) => {
-        let arrayList = {
-          label: item.dictLabel,
-          value: item.dictValue
+    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'
+            });
+            return
+          }
+          refuse = this.refuseText1
         }
-        newArrays.push(arrayList)
-      })
-      for(let i = 0; i < this.formList.length; i++){
-        if(this.formList[i].label === '公司类型'){
-          this.formList[i].options = newArrays
+        if(this.radio=='2'){
+          if(this.refuseText2==''){
+            this.$message({
+              message: '请输入拒绝原因',
+              type: 'warning'
+            });
+            return
+          }
+          refuse = this.refuseText2
         }
+        this.editrecruitinterviewRefuse(refuse)
       }
-      this.companyLXdata = newArrays
     },
-    search(v) {
-      this.loading = true;
-      if (v === undefined) {
-        v = {
-          statusArray: "0,1",
-          pageSize: this.pageSize,
-          pageNum: this.currentPage,
-        };
+    getNowTime(){
+      let t = new Date();
+      let newTime = t.getTime()-(t.getMinutes()*60+t.getSeconds())*1000+3600*1000
+      t.setTime(newTime);
+      this.dayValue = t
+    },
+    makeRecruitList(quantumList){
+      this.form.resumeTime = this.dayValue.getTime()
+      this.recruitList = []
+      this.peopleNum = 0
+      for(let i =0;i<quantumList.length;i++){
+        let item = quantumList[i]
+        if(item.recruitInterviewList.length>0){
+          this.peopleNum+=item.recruitInterviewList.length
+          let timeStr = item.timingStart+"点 ~ "+item.timingEnd+"点"
+          let newItem = {timeStr:timeStr,list:item.recruitInterviewList}
+          this.recruitList.push(newItem)
+        }
+      }
+    },
+    changeWeek(index){
+      if(index==-1){
+        this.dayValue.setTime(this.dayValue.getTime()-7*24*60*60*1000)
+      }
+      if(index==1){
+        this.dayValue.setTime(this.dayValue.getTime()+7*24*60*60*1000)
       }
+      this.searchCalendar()
+    },
+    selDay(day,index){
+      this.dayValue = day.day
+      this.makeRecruitList(this.dayInterviewVos[index].quantumList)
+    },
+    searchCalendar() {
+      let that = this
+      this.loading = true;
       var data = {
-        dictName: v.dictName || "",
-        dictType: v.dictType || "",
-        statusArray: v.status === undefined ? "0,1" : v.status,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
+        year: this.dayValue.getFullYear(),
+        month: this.dayValue.getMonth()+1,
+        day: this.dayValue.getDate()
       };
-      this.tableData = [
-        {
-          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",
-        },
-      ];
+      this.$api.recruitinterviewlist(data).then((res) => {
+        if(res.code==200){
+          that.dayInterviewVos = res.data.dayInterviewVos
+          that.weekDayList = []
+          for(let i = 0; i < that.dayInterviewVos.length; i++) {
+            if(res.data.dayInterviewVos[i].date==that.dayValue.getDate()){
+              that.currIndex = i
+              that.makeRecruitList(res.data.dayInterviewVos[i].quantumList)
+            }
+            let weekDay = {
+              num:that.dayInterviewVos[i].date
+            }
+            that.weekDayList.push(weekDay)
+          }
+          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)
+            that.weekDayList[i].day = d
+            if(i==0){
+              that.weekDay1 = d
+            }
+            if(i==6){
+              that.weekDay2 = d
+            }
+          }
+
+        }
+      });
       this.loading = false;
     },
-    init() {
-      this.search();
+    search() {
+      this.loading = true;
+      let that = this
+      this.$api.recruitinterviewlistAll(this.searchPamam).then((res) => {
+        if(res.code==200){
+          that.tableData = res.rows
+          that.total = res.total
+          that.navText.index = res.total;
+          let nowYear = (new Date()).getFullYear()
+          for(let i=0;i<that.tableData.length;i++){
+            let item = that.tableData[i]
+            item.sexLabel = item.sex==1?'男':'女'
+            item.wantIncomeLabel = item.recruitResumeVo.wantIncomeStart+'-'+item.recruitResumeVo.wantIncomeEnd
+            item.resumeRealName = item.recruitResumeVo.realname
+            item.telphone = item.recruitResumeVo.telphone
+            item.email = item.recruitResumeVo.email
+            item.workYear = item.recruitResumeVo.startYear?(nowYear-item.recruitResumeVo.startYear) +'年':'暂无数据'
+            item.jobType = item.recruitResumeVo.jobType
+            item.completenessLabel = item.recruitResumeVo.completeness+'%'
+            let userBirth = new Date(item.recruitResumeVo.userBirth);
+            let birthday = [userBirth.getFullYear(),userBirth.getMonth()+1,userBirth.getDate()]
+            item.age = item.recruitResumeVo.userBirth==null?'暂无数据':this.getAge(birthday)[0]+'岁'
+          }
+        }
+      });
+
+      this.loading = false;
     },
-    del(v) {
-      this.$confirm("此操作将删除该字典类型, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
+    getAge(birthday) {
+      // 新建日期对象
+      let date = new Date()
+      // 今天日期,数组,同 birthday
+      let today = [date.getFullYear(), date.getMonth() + 1, date.getDate()]
+      // 分别计算年月日差值
+      let age = today.map((value, index) => {
+        return value - birthday[index]
       })
-        .then(() => {
-          this.$message.success("删除成功");
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
+      // 当天数为负数时,月减 1,天数加上月总天数
+      if (age[2] < 0) {
+        // 简单获取上个月总天数的方法,不会错
+        let lastMonth = new Date(today[0], today[1], 0)
+        age[1]--
+        age[2] += lastMonth.getDate()
+      }
+      // 当月数为负数时,年减 1,月数加上 12
+      if (age[1] < 0) {
+        age[0]--
+        age[1] += 12
+      }
+      return age
+    },
+    init() {
+      this.search();
     },
     addClick(v, int) {
-      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) => {
@@ -449,19 +578,68 @@ export default {
         .catch(() => {});
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.searchPamam.pageSize = v;
+      this.searchPamam.currentPage = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.searchPamam.currentPage = v;
       this.search();
     },
   },
 };
 </script>
-
+<style>
+.el-cascader-node>.el-radio, .el-radio:last-child{
+  width: 90%;
+}
+#resumeCenter .el-dialog{
+  min-width: 400px !important;
+}
+</style>
 <style lang="less" scoped>
+
+.selNone {
+  margin: 13px auto;
+  cursor: pointer;
+  border-radius: 50%;
+  border:1px solid #000000;
+  width: 30px;
+  height: 30px;
+  text-align: center;
+  line-height: 30px;
+}
+.selCircle {
+  border-radius: 50%;
+  width: 30px;
+  height: 30px;
+  color: #ffffff !important;
+  background-color: #3494F7;
+  text-align: center;
+  line-height: 30px;
+  margin: 13px auto;
+  cursor: pointer;
+}
+.card_date {
+  width: 14%;
+  text-align: center;
+  color: #000;
+}
+.week_box{
+  width: 100%;
+  display: flex;
+  justify-content:center;
+  margin-top: 20px;
+}
+.d_title_r{
+  color: #3494F7;
+  cursor: pointer;
+}
+.d_title{
+  display: flex;
+  justify-content: space-between;
+  margin-top: 30px;
+}
 /deep/.el-button {
   border-radius: 8px;
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác