lugang hace 4 años
padre
commit
096d180186

+ 39 - 25
src/views/candidateManage/candidateList.vue

@@ -22,7 +22,9 @@
             <el-form-item label-width="0">
                 <div class="title">通知群发列表</div>
                 <div class="content">
-                    <el-tag v-for="(item, index) in copyPickList" :key="item" closable @close="copyPickList.splice(index, 1)" type="success">{{tableList.some(i => i.id === item) ? tableList.find(i => i.id === item).delivererName : ''}}</el-tag>
+                    <el-tag v-for="(item, index) in copyPickList" :key="item" closable @close="copyPickList.splice(index, 1)" :type="errorlist.includes(item)?'danger':'success'">
+                      {{tableList.some(i => i.id === item) ? tableList.find(i => i.id === item).delivererName + (tableList.find(i => i.id === item).delivererMail || '(无邮箱)') : ''}}
+                    </el-tag>
                 </div>
             </el-form-item>
             <el-form-item label="选择群发模板" prop="templateId">
@@ -61,9 +63,9 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="简历投递职位" prop="positionApplied">
+            <!-- <el-form-item label="简历投递职位" prop="positionApplied">
                 <el-input placeholder="请输入投递职位" v-model="uform.positionApplied"></el-input>
-            </el-form-item>
+            </el-form-item> -->
             <el-form-item label="工作年限" prop="delivererWorkExp">
                 <el-input placeholder="请输入工作年限" v-model="uform.delivererWorkExp"></el-input>
             </el-form-item>
@@ -122,6 +124,7 @@ export default {
       copyPickList: [],
       downList: [],
       positionList: [],
+      errorlist: [],
       searchForm: {},
       form: {},
       uform: {},
@@ -314,10 +317,10 @@ export default {
           props: 'recruitType',
           options: ['社招', '校招', '直接校招']
         },
-        {
-          label: '简历投递职位',
-          props: 'positionApplied'
-        },
+        // {
+        //   label: '简历投递职位',
+        //   props: 'positionApplied'
+        // },
         {
           label: '面试应聘职位',
           props: 'positionName'
@@ -400,10 +403,10 @@ export default {
           props: 'resumeFrom',
           options: ['51job', '智联招聘', '58同城', '平台']
         },
-        {
-          label: '简历投递职位',
-          props: 'positionApplied'
-        },
+        // {
+        //   label: '简历投递职位',
+        //   props: 'positionApplied'
+        // },
         {
           label: '面试应聘职位',
           props: 'positionName'
@@ -435,7 +438,7 @@ export default {
         ],
         width: 360,
         handle: [{
-          title: '查看简历',
+          title: '查看',
           method: 'details',
           type: 'info'
         },
@@ -476,10 +479,10 @@ export default {
           props: 'resumeFrom',
           options: ['51job', '智联招聘', '58同城', '平台']
         },
-        {
-          label: '简历投递职位',
-          props: 'positionApplied'
-        },
+        // {
+        //   label: '简历投递职位',
+        //   props: 'positionApplied'
+        // },
         {
           label: '面试应聘职位',
           props: 'positionName'
@@ -619,16 +622,18 @@ export default {
             }
           })
           .then((res) => {
-            this.$message({
-              message: '通知成功',
-              type: 'success'
+            this.$alert(`${res.object.successTotal}条发送成功,${res.object.failTotal}条发送失败!`, '发送结果', {
+              confirmButtonText: '确定',
+              callback: action => {
+              }
+            })
+            this.errorlist = res.object.sendMailFailList.map(item => {
+              return item.id
             })
-            this.close()
-            this.queryData(this.searchForm)
           })
         : this.$message({
           type: 'info',
-          message: '请添加需要通知的对象'
+          message: '请添加需要通知的对象!'
         })
     },
     notice (row) {
@@ -640,7 +645,7 @@ export default {
         ? this.open()
         : this.$message({
           type: 'info',
-          message: '请选择需要通知的对象'
+          message: '请选择需要通知的对象!'
         })
     },
     through (row, type = false) {
@@ -664,7 +669,7 @@ export default {
         ? this.through(this.pickList, true)
         : this.$message({
           type: 'info',
-          message: '请选择通过的应聘者'
+          message: '请选择通过的应聘者!'
         })
     },
     eliminate (row, type = false) {
@@ -688,7 +693,7 @@ export default {
         ? this.eliminate(this.pickList, true)
         : this.$message({
           type: 'info',
-          message: '请选择被淘汰的应聘者'
+          message: '请选择被淘汰的应聘者!'
         })
     },
     del (row, type = false) {
@@ -794,6 +799,7 @@ export default {
     close () {
       this.dialogFormVisible = false
       this.form = {}
+      this.queryData(this.searchForm)
       this.copyPickList = Array.from(this.pickList)
     },
     closeDia () {
@@ -926,4 +932,12 @@ export default {
         margin-top: 7px;
     }
 }
+
+.content {
+    min-height: 50px;
+
+    >span {
+        margin: 5px;
+    }
+}
 </style>

+ 6 - 6
src/views/candidateManage/mailManage.vue

@@ -19,8 +19,8 @@
             <el-form-item label="邮箱类型" prop="cmpMailType">
                 <el-radio-group v-model="form51.cmpMailType">
                     <el-radio :label="0">阿里</el-radio>
-                    <!-- <el-radio :label="1">网易</el-radio>
-                    <el-radio :label="2">QQ</el-radio> -->
+                    <el-radio :label="1">网易</el-radio>
+                    <el-radio :label="2">QQ</el-radio>
                 </el-radio-group>
             </el-form-item>
             <el-form-item class="button-grounp">
@@ -37,8 +37,8 @@
             <el-form-item label="邮箱类型" prop="cmpMailType">
                 <el-radio-group v-model="formzl.cmpMailType">
                     <el-radio :label="0">阿里</el-radio>
-                    <!-- <el-radio :label="1">网易</el-radio>
-                    <el-radio :label="2">QQ</el-radio> -->
+                    <el-radio :label="1">网易</el-radio>
+                    <el-radio :label="2">QQ</el-radio>
                 </el-radio-group>
             </el-form-item>
             <el-form-item class="button-grounp">
@@ -55,8 +55,8 @@
             <el-form-item label="邮箱类型" prop="cmpMailType">
                 <el-radio-group v-model="form58.cmpMailType">
                     <el-radio :label="0">阿里</el-radio>
-                    <!-- <el-radio :label="1">网易</el-radio>
-                    <el-radio :label="2">QQ</el-radio> -->
+                    <el-radio :label="1">网易</el-radio>
+                    <el-radio :label="2">QQ</el-radio>
                 </el-radio-group>
             </el-form-item>
             <el-form-item class="button-grounp">

+ 59 - 30
src/views/candidateManage/resumeList.vue

@@ -23,7 +23,9 @@
             <el-form-item label-width="0">
                 <div class="title">通知群发列表</div>
                 <div class="content">
-                    <el-tag v-for="(item, index) in copyPickList" :key="item" closable @close="copyPickList.splice(index, 1)" type="success">{{tableList.some(i => i.id === item) ? tableList.find(i => i.id === item).delivererName : ''}}</el-tag>
+                    <el-tag v-for="(item, index) in copyPickList" :key="item" closable @close="copyPickList.splice(index, 1)" :type="errorlist.includes(item)?'danger':'success'">
+                      {{tableList.some(i => i.id === item) ? tableList.find(i => i.id === item).delivererName + (tableList.find(i => i.id === item).delivererMail || '(无邮箱)') : ''}}
+                    </el-tag>
                 </div>
             </el-form-item>
             <el-form-item label="选择群发模板" prop="templateId">
@@ -74,6 +76,23 @@
             </el-form-item>
         </el-form>
     </el-dialog>
+    <el-dialog :visible.sync="visible" width="600px" :before-close="closeVisible" :close-on-click-modal="false">
+        <el-form label-width="140px" label-position="right">
+            <el-form-item v-for="item in formConfig" :key="item" :label="item.configName">
+                <!-- {{item.type === 2 ? ['女', '男'][info[item.fieldName]] : item.type === 8 ? ['女', '男'][info[item.fieldName]] : info[item.fieldName]}} -->
+                <div v-if="item.type === 2">{{['女', '男'][info[item.fieldName]]}}</div>
+                <el-link type="primary" v-else-if="item.type === 8" :link=" $img + info[item.fieldName]">{{item.configName + '文件'}}</el-link>
+                <div v-else>{{info[item.fieldName]}}</div>
+            </el-form-item>
+            <el-form-item label="简历">
+                <!-- {{['女', '男'][info.delivererSex]}} -->
+                <el-link type="primary" :link=" $img + info.filePath">简历文件</el-link>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="closeVisible">取 消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
 </div>
 </template>
 
@@ -94,14 +113,18 @@ export default {
       tableList: [],
       dialogFormVisible: false,
       dialogVisible: false,
+      visible: false,
       page: 1,
       isCollapse: 0,
       totalrecords: 0,
       pickList: [],
       copyPickList: [],
       downList: [],
+      errorlist: [],
+      formConfig: [],
       form: {},
       uform: {},
+      info: {},
       email: '',
       searchForm: {},
       rules: {
@@ -272,7 +295,7 @@ export default {
         ],
         width: 500,
         handle: [{
-          title: '查看简历',
+          title: '查看',
           method: 'details',
           type: 'info'
         },
@@ -355,14 +378,14 @@ export default {
         ],
         width: 360,
         handle: [{
-          title: '查看简历',
+          title: '查看',
           method: 'details',
           type: 'info'
         },
         {
           title: '查看视频',
           method: 'toVedio',
-          type: 'warning',
+          type: 'info',
           props: 'interviewStatus',
           key: 1
         },
@@ -432,16 +455,6 @@ export default {
         .then((res) => {
           this.downList = res.list
         })
-      // this.$api
-      //   .post('/position/queryPositionList', {
-      //     reqdata: {}
-      //   })
-      //   .then((res) => {
-      //     this.list[3].options = res.list.map((item) => ({
-      //       value: item.id,
-      //       label: item.positionName
-      //     }))
-      //   })
     },
     queryEmail () {
       this.$api
@@ -454,9 +467,7 @@ export default {
     search (form) {
       this.queryData(form)
     },
-    details ({
-      id
-    }) {
+    details ({ id, resumeFrom }) {
       this.$api
         .post('/resumeInfo/queryResumeInfoDetail', {
           reqdata: {
@@ -464,10 +475,18 @@ export default {
           }
         })
         .then((res) => {
-          res.object.filePath ? window.open(this.$img + res.object.filePath) : this.$message({
-            type: 'info',
-            message: '无此人简历'
-          })
+          resumeFrom === 3
+            ? (() => {
+              this.openVisible()
+              this.formConfig = JSON.parse(res.object.formConfig)
+              this.info = res.object
+            })()
+            : res.object.filePath
+              ? window.open(this.$img + res.object.filePath)
+              : this.$message({
+                type: 'info',
+                message: '无此人简历!'
+              })
         })
     },
     launch () {
@@ -488,12 +507,15 @@ export default {
             }
           })
           .then((res) => {
-            this.$message({
-              message: '通知成功',
-              type: 'success'
-            })
-            this.close()
             this.queryData(this.searchForm)
+            this.$alert(`${res.object.successTotal}条发送成功,${res.object.failTotal}条发送失败!`, '发送结果', {
+              confirmButtonText: '确定',
+              callback: action => {
+              }
+            })
+            this.errorlist = res.object.sendMailFailList.map(item => {
+              return item.id
+            })
           })
         : this.$message({
           type: 'info',
@@ -670,6 +692,13 @@ export default {
       this.form = {}
       this.copyPickList = Array.from(this.pickList)
     },
+    openVisible () {
+      this.visible = true
+    },
+    closeVisible () {
+      this.visible = false
+      this.info = {}
+    },
     callPage (val) {
       this.page = val
       this.queryData(this.searchForm)
@@ -685,7 +714,7 @@ export default {
         this.table,
         'handle',
         this.isCollapse === 0 ? [{
-          title: '查看简历',
+          title: '查看',
           method: 'details',
           type: 'info'
         },
@@ -716,7 +745,7 @@ export default {
         }
         ]
           : this.isCollapse === 1 ? [{
-            title: '查看简历',
+            title: '查看',
             method: 'details',
             type: 'info'
           },
@@ -737,7 +766,7 @@ export default {
           }
           ]
             : this.isCollapse === 2 ? [{
-              title: '查看简历',
+              title: '查看',
               method: 'details',
               type: 'info'
             },
@@ -757,7 +786,7 @@ export default {
               type: 'warning'
             }
             ] : [{
-              title: '查看简历',
+              title: '查看',
               method: 'details',
               type: 'info'
             },

+ 3 - 2
src/views/companyManage/basicInfo.vue

@@ -25,12 +25,13 @@
             <el-form-item :label="$t('title.mailboxType')">
                 <el-radio-group v-model="form.cmpMailType">
                     <el-radio :label="0">阿里</el-radio>
-                    <!-- <el-radio :label="1">网易</el-radio>
-                    <el-radio :label="2">QQ</el-radio> -->
+                    <el-radio :label="1">网易</el-radio>
+                    <el-radio :label="2">QQ</el-radio>
                 </el-radio-group>
             </el-form-item>
             <el-form-item :label="$t('title.companyProfile')">
                 <editor-bar class="editor" v-model.trim="form.companyIntroduce"></editor-bar>
+                <div style="color: #666">提示: 1000字以内为佳</div>
             </el-form-item>
             <el-form-item v-if="show" class="button-grounp">
                 <el-button type="primary" @click="determine">{{$t('button.confirmTheChanges')}}</el-button>

+ 15 - 1
src/views/companyManage/formManage.vue

@@ -55,6 +55,13 @@
                         <el-select class="p10" v-else-if="item.type === 9" v-model="info[item.fieldName]" :placeholder="$t('message.pleaseChoose') + item.configName">
                           <el-option v-for="item in educationList" :key="item.name" :label="item.name" :value="item.name"></el-option>
                         </el-select>
+                        <el-cascader class="p10" v-else-if="item.type === 10" :props="{label: 'value'}" v-model="info[item.fieldName]" :options="languageList" :placeholder="$t('message.pleaseChoose') + item.configName"></el-cascader>
+                        <el-input class="p10" v-if="item.type === 11" v-model="info[item.fieldName]" :placeholder="$t('message.pleaseEnter') + item.configName"></el-input>
+                        <el-input class="p10" v-if="item.type === 12" v-model="info[item.fieldName]" :placeholder="$t('message.pleaseEnter') + item.configName"></el-input>
+                        <el-date-picker class="p10" v-else-if="item.type === 13" v-model="info[item.fieldName]" type="date" :placeholder="$t('message.pleaseChoose') + item.configName"></el-date-picker>
+                        <el-date-picker class="p10" v-else-if="item.type === 14" v-model="info[item.fieldName]" type="date" :placeholder="$t('message.pleaseChoose') + item.configName"></el-date-picker>
+                        <el-date-picker class="p10" v-else-if="item.type === 15" v-model="info[item.fieldName]" type="date" :placeholder="$t('message.pleaseChoose') + item.configName"></el-date-picker>
+                        <el-date-picker class="p10" v-else-if="item.type === 16" v-model="info[item.fieldName]" type="date" :placeholder="$t('message.pleaseChoose') + item.configName"></el-date-picker>
                     </div>
                 </div>
             </el-form-item>
@@ -80,7 +87,7 @@ export default {
     }
     return {
       tableList: [],
-      educationList: [{ name: this.$t('button.juniorCollege') }, { name: this.$t('button.undergraduate') }, { name: this.$t('button.masterSDegree') }, { name: this.$t('button.phD') }, { name: this.$t('button.other') }],
+      educationList: [{ name: this.$t('info.juniorCollege') }, { name: this.$t('info.undergraduate') }, { name: this.$t('info.masterSDegree') }, { name: this.$t('info.phD') }, { name: this.$t('info.other') }],
       dialogFormVisible: false,
       page: 1,
       state: 0,
@@ -161,12 +168,19 @@ export default {
         })
         return item
       })
+    },
+    languageList () {
+      let list = ['不限', '英语', '日语', '俄语', '阿拉伯语', '法语', '德语', '西班牙语', '葡萄牙语', '意大利语', '韩语/朝鲜语', '普通话', '粤语', '闽南话', '上海话', '其他']
+      let children = ['一般', '良好', '熟练', '精通']
+      children = children.map(item => ({ value: item }))
+      return list.map(item => ({ children, value: item }))
     }
   },
   created () {
     console.log(this.options)
     this.queryData()
     this.queryFormConfigList()
+    console.log(this.languageList)
   },
   methods: {
     queryData (form = {}) {

+ 23 - 9
src/views/companyManage/procedureManage.vue

@@ -15,14 +15,14 @@
     <el-dialog :visible.sync="dialogFormVisible" width="660px" :before-close="close" :close-on-click-modal="false">
         <el-form :model="form" ref="form" label-width="140px" label-position="left">
             <el-form-item label="岗位名称" prop="processName" :rules="{
-            required: true, message: '请输入岗位名称', trigger: 'blur'
-          }">
+              required: true, message: '请输入岗位名称', trigger: 'blur'
+            }">
                 <el-input v-model.trim="form.processName" placeholder="请输入岗位名称" v-if="state!=2" autocomplete="off"></el-input>
                 <div v-else>{{form.processName}}</div>
             </el-form-item>
             <el-form-item v-for="(item, index) in form.questionList" :label="'面试问题' + (index + 1)" :key="item.key" :prop="'questionList.' + index" :rules="{
-            required: true, validator: validatePass, trigger: 'change'
-          }">
+              required: true, validator: validatePass, trigger: 'change'
+            }">
                 <div v-if="state!=2">
                     <div class="flex">
                         <el-input v-model.trim="item.questionName" placeholder="请输入面试问题"></el-input>
@@ -43,6 +43,23 @@
                     </div>
                 </div>
             </el-form-item>
+            <el-form-item label="结束视频设置" prop="processName" :rules="{
+              required: true, message: '请输入岗位名称', trigger: 'blur'
+            }">
+                <div v-if="state!=2">
+                    <el-input v-model.trim="form.ending" placeholder="请输入结束语" autocomplete="off"  style="padding-bottom: 5px"></el-input>
+                    <el-select v-model="form.endVideoId " filterable :disabled="state === 2" default-first-option placeholder="请选择结束视频">
+                        <el-option v-for="item in downList" :key="item.key || item.id" :label="item.videoName" :value="item.id">
+                        </el-option>
+                    </el-select>
+                </div>
+                <div v-else>
+                    <div>
+                        {{form.ending}}
+                    </div>
+                    <video width="100%" v-if="form.endVideoId" :src="downList.some(i => i.id === form.endVideoId) ? $img + downList.find(i => i.id === form.endVideoId).videoPath : ''" controls></video>
+                </div>
+            </el-form-item>
         </el-form>
         <div slot="footer" class="dialog-footer">
             <el-button @click="close">取 消</el-button>
@@ -57,12 +74,9 @@
 export default {
   data () {
     let validatePass = function (rule, value, callback) {
-      if (!value.questionName || !value.questionName.length) {
-        callback(new Error('请输入面试问题'))
+      if ((!value.questionName || !value.questionName.length) && (!value.videoIdList || !value.videoIdList.length)) {
+        callback(new Error('请输入面试问题或选择面试视频'))
       } else {
-        if (!value.videoIdList || !value.videoIdList.length) {
-          callback(new Error('请选择面试视频'))
-        }
         callback()
       }
     }

+ 3 - 1
src/views/companyManage/templateManage.vue

@@ -387,12 +387,14 @@ export default {
         templateId,
         time,
         qrcodeName,
-        id
+        id,
+        status
       } = this.codeForm
       let url = this.codeForm.qrcodePath ? '/qrCode/updateQrCodeInfo' : '/qrCode/createQrCodeByTemplate'
       this.$api
         .post(url, {
           reqdata: {
+            status,
             qrcodeName,
             templateId,
             id: id,

+ 15 - 2
src/views/companyManage/videoManage.vue

@@ -77,6 +77,18 @@ export default {
         {
           label: '视频名称',
           props: 'videoName'
+        },
+        {
+          label: '上传时间',
+          props: 'createTime'
+        },
+        {
+          label: '视频大小',
+          props: 'videoSize'
+        },
+        {
+          label: '视频时长',
+          props: ''
         }
         ],
         handle: [{
@@ -113,7 +125,7 @@ export default {
         .then((res) => {
           this.totalrecords = res.totalrecords
           this.tableList = res.list.map((item, index) => {
-            item.serialNumber = index + 1
+            item.serialNumber = (this.page - 1) * 10 + index + 1
             return item
           })
         })
@@ -186,7 +198,8 @@ export default {
         })
     },
     handleAvatarSuccess (res, file) {
-      this.$set(this.form, 'videoPath', res)
+      this.$set(this.form, 'videoPath', res.object.filePath)
+      this.$set(this.form, 'videoSize', res.object.fileSize)
     },
     beforeAvatarUpload (file) {
       return file.type === 'video/mp4'