|
|
@@ -0,0 +1,396 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <div class="count-list" v-if="auditData">
|
|
|
+ <div class="count-item">全部:0</div>
|
|
|
+ <div class="count-item">开放中:0</div>
|
|
|
+ <div class="count-item">累计新增下载量:0</div>
|
|
|
+ <div>
|
|
|
+ <el-button size="small" @click="onAdd">新建岗位</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-table :data="auditData" @row-click="clickRow" border style="width: 100%">
|
|
|
+ <el-table-column prop="id" label="岗位ID" width="70"></el-table-column>
|
|
|
+ <el-table-column prop="occupationName" label="职位类型"></el-table-column>
|
|
|
+ <el-table-column prop="workTypeName" label="工作方式"></el-table-column>
|
|
|
+ <el-table-column label="工作周期">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{scope.row.month}}个月</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="驻场地区">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{scope.row.cityName || '-'}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="salaryName" label="薪酬范围"></el-table-column>
|
|
|
+ <el-table-column label="公司名称">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{scope.row.companyInfo && scope.row.companyInfo.shortName ? scope.row.companyInfo.shortName : (scope.row.companyInfo && scope.row.companyInfo.name ? scope.row.companyInfo.name : '')}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="createdAt" label="发布时间">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{formatDate(scope.row.createdAt,'Y-m-d H:i')}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="statusName" label="当前状态"></el-table-column>
|
|
|
+ <el-table-column prop="countApplied" label="投递人数"></el-table-column>
|
|
|
+ <el-table-column prop="recuitResult" label="是否激活">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span v-if="scope.row.isActivation == 1">是</span>
|
|
|
+ <span v-else>否</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="recuitResult" label="是否退订">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span v-if="scope.row.isUnsubscribe == 1">是</span>
|
|
|
+ <span v-else>否</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div>
|
|
|
+ <el-pagination
|
|
|
+ class="order-footer"
|
|
|
+ background
|
|
|
+ layout="total, prev, pager, next"
|
|
|
+ :page-size="20"
|
|
|
+ :total="total"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <el-dialog title="新建岗位" :visible.sync="agencyPost" :closeOnClickModal="false" :closeOnPressEscape="false">
|
|
|
+ <el-form :model="agencyPostForm" :rules="rules" ref="agencyPostForm" label-width="100px" class="demo-ruleForm">
|
|
|
+ <el-form-item label="目标邮箱" prop="email">
|
|
|
+ <el-input v-model="agencyPostForm.email"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="企业名称" prop="name">
|
|
|
+ <el-input v-model="agencyPostForm.name"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工作方式">
|
|
|
+ <el-radio-group v-model="agencyPostForm.workType">
|
|
|
+ <el-radio :label="1">兼职</el-radio>
|
|
|
+ <el-radio :label="2">驻场</el-radio>
|
|
|
+ <el-radio :label="3">全职</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工作地点" v-show="agencyPostForm.workType != 1">
|
|
|
+ <el-cascader
|
|
|
+ v-model="agencyPostForm.provIdcity"
|
|
|
+ :options="areas"
|
|
|
+ @change="cityChange"></el-cascader>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="职位类型">
|
|
|
+ <el-cascader
|
|
|
+ v-model="agencyPostForm.positionType"
|
|
|
+ :options="positionType"
|
|
|
+ @change="positionChange"></el-cascader>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="薪资范围">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-select v-model="agencyPostForm.minSalary" placeholder="请选择">
|
|
|
+ <el-option
|
|
|
+ v-for="item in minSalary"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="10" :offset="2">
|
|
|
+ <el-select v-model="agencyPostForm.maxSalary" placeholder="请选择">
|
|
|
+ <el-option
|
|
|
+ v-for="item in maxSalary"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工作周期">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-select v-model="agencyPostForm.minSalary" placeholder="请选择">
|
|
|
+ <el-option
|
|
|
+ v-for="item in minSalary"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="10" :offset="2">
|
|
|
+ <el-select v-model="agencyPostForm.maxSalary" placeholder="请选择">
|
|
|
+ <el-option
|
|
|
+ v-for="item in maxSalary"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="技能要求">
|
|
|
+ <el-cascader
|
|
|
+ v-model="agencyPostForm.provIdcity"
|
|
|
+ :options="areas"
|
|
|
+ @change="cityChange"></el-cascader>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="经验要求">
|
|
|
+ <el-radio-group v-model="agencyPostForm.workType">
|
|
|
+ <el-radio :label="0">不限</el-radio>
|
|
|
+ <el-radio :label="1">兼职</el-radio>
|
|
|
+ <el-radio :label="2">驻场</el-radio>
|
|
|
+ <el-radio :label="3">全职</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工作说明">
|
|
|
+ <el-input type="textarea" v-model="agencyPostForm.description"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="agencyPost = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="editAu">确认发布</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ page: 1,
|
|
|
+ total: 0,
|
|
|
+ auditData: [],
|
|
|
+ agencyPost: false,
|
|
|
+ agencyPostForm: {
|
|
|
+ workType: 2
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ email: [
|
|
|
+ {required: true, message: '请输入目标邮箱', trigger: 'blur'},
|
|
|
+ {type: 'email', message: '邮箱格式不正确', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ name: [
|
|
|
+ {required: true, message: '请输入企业名称', trigger: 'blur'},
|
|
|
+ {min: 3, max: 50, message: '长度在 3 到 50 个字符', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ minSalary:[
|
|
|
+ {
|
|
|
+ value: '选项1',
|
|
|
+ label: '黄金糕'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ maxSalary:[
|
|
|
+ {
|
|
|
+ value: '选项1',
|
|
|
+ label: '黄金糕'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+
|
|
|
+ //配置
|
|
|
+ options: [],
|
|
|
+ areas: [], //工作地点
|
|
|
+ positionType: [] //职位类型
|
|
|
+ };
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.getAuditList();
|
|
|
+ this.getOptions();
|
|
|
+
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ formatDate(time, format = '') {
|
|
|
+ if (time === "0") {
|
|
|
+ return "--";
|
|
|
+ }
|
|
|
+ let now = new Date(time * 1000);
|
|
|
+ let year = now.getFullYear();
|
|
|
+ let month = now.getMonth() + 1;
|
|
|
+ let date = now.getDate();
|
|
|
+ let hour = now.getHours();
|
|
|
+ let minute = now.getMinutes();
|
|
|
+ let second = now.getSeconds();
|
|
|
+ if (hour < 10) {
|
|
|
+ hour = "0" + hour;
|
|
|
+ }
|
|
|
+ if (minute < 10) {
|
|
|
+ minute = "0" + minute;
|
|
|
+ }
|
|
|
+ if (second < 10) {
|
|
|
+ second = "0" + second;
|
|
|
+ }
|
|
|
+ return (format == '' ?
|
|
|
+ year +
|
|
|
+ "-" +
|
|
|
+ month +
|
|
|
+ "-" +
|
|
|
+ date +
|
|
|
+ " " +
|
|
|
+ hour +
|
|
|
+ ":" +
|
|
|
+ minute +
|
|
|
+ ":" +
|
|
|
+ second
|
|
|
+ :
|
|
|
+ year +
|
|
|
+ "-" +
|
|
|
+ month +
|
|
|
+ "-" +
|
|
|
+ date +
|
|
|
+ " " +
|
|
|
+ hour +
|
|
|
+ ":" +
|
|
|
+ minute
|
|
|
+ );
|
|
|
+ },
|
|
|
+ async getOptions() {
|
|
|
+ let res = await this.$post("/api/recruit/getOptions");
|
|
|
+ if (res && res.status === 1) {
|
|
|
+ this.options = res.data || [];
|
|
|
+ this.getAreas();
|
|
|
+ this.getPositionType();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getAreas() {
|
|
|
+ let provinces = this.options.provinces;
|
|
|
+ let cities = this.options.cities;
|
|
|
+ let data = [];
|
|
|
+ let id, dd, c;
|
|
|
+ for (let i = 0; i < provinces.length; i++) {
|
|
|
+ id = provinces[i].id;
|
|
|
+ let arr = {
|
|
|
+ value: id,
|
|
|
+ label: provinces[i].name,
|
|
|
+ children: (function () {
|
|
|
+ c = 0;
|
|
|
+ dd = [];
|
|
|
+ for (let j = 0; j < cities.length; j++) {
|
|
|
+ if (cities[j].prov_id == id) {
|
|
|
+ let arr1 = {
|
|
|
+ value: cities[j].id,
|
|
|
+ label: cities[j].name
|
|
|
+ };
|
|
|
+ dd[c] = arr1;
|
|
|
+ c++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dd;
|
|
|
+ })()
|
|
|
+ };
|
|
|
+ data[i] = arr;
|
|
|
+ }
|
|
|
+ this.areas = data;
|
|
|
+ },
|
|
|
+ getPositionType() {
|
|
|
+ let positionType = this.options.direction;
|
|
|
+ let arr = [];
|
|
|
+ for (let i = 0; i < positionType.length; i++) {
|
|
|
+ let d = {
|
|
|
+ value: positionType[i].occupation_id,
|
|
|
+ label: positionType[i].occupation_name,
|
|
|
+ children: (function () {
|
|
|
+ if (positionType[i].children.length > 0) {
|
|
|
+ let a = [];
|
|
|
+ for (let j = 0; j < positionType[i].children.length; j++) {
|
|
|
+ a[j] = {
|
|
|
+ value: positionType[i].children[j].direction_id,
|
|
|
+ label: positionType[i].children[j].direction_name,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return a;
|
|
|
+ }
|
|
|
+ })()
|
|
|
+ };
|
|
|
+ arr[i] = d;
|
|
|
+ }
|
|
|
+ this.positionType = arr;
|
|
|
+ },
|
|
|
+ cityChange(value) {
|
|
|
+ alert(value);
|
|
|
+ },
|
|
|
+ positionChange(value) {
|
|
|
+ alert(value);
|
|
|
+ },
|
|
|
+ async getAuditList() {
|
|
|
+ const page = this.page;
|
|
|
+ const data = {
|
|
|
+ page
|
|
|
+ };
|
|
|
+ let res = await this.$post("/api/admin/recruit/getAuditAgencyPostList", data);
|
|
|
+ if (res && res.status === 1) {
|
|
|
+ this.auditData = res.data.list || [];
|
|
|
+ this.total = res.data.total * 1;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async handleApproveClick(recruitId) {
|
|
|
+ const action = "approve";
|
|
|
+ const data = {
|
|
|
+ recruitId,
|
|
|
+ action
|
|
|
+ };
|
|
|
+ let res = await this.$post("/api/admin/recruit/audit", data);
|
|
|
+ if (res && res.status === 1) {
|
|
|
+ console.log(res);
|
|
|
+ this.$message({
|
|
|
+ message: res.info,
|
|
|
+ type: "success"
|
|
|
+ });
|
|
|
+ this.getAuditList();
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ handleCurrentChange(val) {
|
|
|
+ this.page = val;
|
|
|
+ this.getAuditList();
|
|
|
+ },
|
|
|
+ clickRow(row) {
|
|
|
+ const id = row.id;
|
|
|
+ this.$router.push({
|
|
|
+ path: "/main/job",
|
|
|
+ query: {
|
|
|
+ id
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ onAdd() {
|
|
|
+ this.agencyPost = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .count-list {
|
|
|
+ padding-bottom: 10px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .count-item {
|
|
|
+ margin-right: 20px;
|
|
|
+ font-size: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .content {
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow-x: scroll;
|
|
|
+ height: calc(100% - 150px);
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn {
|
|
|
+ width: 80px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .order-footer {
|
|
|
+ margin-top: 10px;
|
|
|
+ }
|
|
|
+</style>
|