This commit is contained in:
18500206848
2024-02-16 15:02:17 +08:00
parent 47e18b6b25
commit 8dcecb78f2
38 changed files with 9982 additions and 70 deletions

View File

@@ -0,0 +1,303 @@
<template>
<div>
<basic-container>
<el-radio-group v-model="search.status" size="small" @change="radioGroup">
<el-radio-button
v-for="(item,key,index) in missionTypes"
:key="index"
:label="item.value"
>{{item.label}}</el-radio-button>
</el-radio-group>
</basic-container>
<basic-container >
<div class="taskTip">
<p class="title">{{search.status | searchStatus}}</p>
<div style="height: 30px;"></div>
<div v-if="search.status === 1" style="display: flex;flex-wrap: wrap;">
<span class="name">任务总数&nbsp;&nbsp;&nbsp;{{taskGather.totalCount}}</span>
<span class="name" style="margin-left: 30px;">
任务阶段
<span class="smallTitle">招聘中</span>{{taskGather.recruitCount}}
<span class="smallTitle">任务中</span>{{taskGather.startCount}}
<span class="smallTitle">已完成</span>{{taskGather.completCount}}
<span class="smallTitle">已失效</span>{{taskGather.invalidCount}}
<span class="smallTitle">审核未通过</span>{{taskGather.rejectCount}}
</span>
</div>
<div v-if="search.status === 2" style="display: flex;flex-wrap: wrap;">
<span class="name" style="margin-right: 40px;">任务总数&nbsp;&nbsp;&nbsp;{{taskDetail.totalCount}}</span>
<span class="name">
人员情况
<span class="smallTitle">招聘总人数</span>{{taskDetail.enListCount}}
<span class="smallTitle">申请总人数</span>{{taskDetail.applyCount}}
<span class="smallTitle">录用总人数</span>{{taskDetail.employedCount}}
</span>
</div>
</div>
</basic-container>
<basic-container>
<!-- 搜索栏 -->
<el-form
size="small"
label-position="right"
:inline="true"
>
<el-row :span="24" v-if="search.status === 1">
<el-form-item label="公司名称:">
<el-input v-model="search.companyName" placeholder="公司名称"></el-input>
</el-form-item>
<el-form-item label="联系电话:">
<el-input v-model="search.callTel" placeholder="联系电话"></el-input>
</el-form-item>
<!-- <el-form-item label="距离最后发任务时间:">-->
<!-- <el-radio-group v-model="search.status" size="small" @change="radioGroup">-->
<!-- <el-radio-button-->
<!-- v-for="(item,key,index) in missionTypes"-->
<!-- :key="index"-->
<!-- :label="item.value"-->
<!-- >{{item.label}}</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<div class="searchBtn">
<el-button type="primary" size="small" icon="el-icon-search" @click="handleSearch"> </el-button>
<el-button size="small" icon="el-icon-delete" @click="handleClear"> </el-button>
</div>
</el-row>
<el-row :span="24" v-if="search.status === 2">
<el-form-item label="公司名称:">
<el-input v-model="search.companyName" placeholder="公司名称"></el-input>
</el-form-item>
<el-form-item label="任务编号:">
<el-input v-model="search.missionNo" placeholder="任务编号" ></el-input>
</el-form-item>
<el-form-item label="任务标题:">
<el-input v-model="search.missionTitle" placeholder="任务标题" ></el-input>
</el-form-item>
<br>
<el-form-item>
<el-select v-model="search.reviewState" placeholder="请选择搜索时间类型" style="width:100%">
<el-option
v-for="(item,key,index) in timeStatus"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker
:disabled="search.reviewState === ''"
v-model="search.taskTime"
type="daterange"
range-separator=""
start-placeholder="开始时间"
end-placeholder="完成时间"
format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd"
@change="dateChangeSubTime">
</el-date-picker>
</el-form-item>
<tool-tip></tool-tip>
<el-form-item label="任务状态:">
<el-select v-model="search.jobStatus" placeholder="任务状态" style="width:100%">
<el-option
v-for="(item,key,index) in jobStatus"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<div class="searchBtn">
<el-button type="primary" size="small" icon="el-icon-search" @click="handleSearch"> </el-button>
<el-button size="small" icon="el-icon-delete" @click="handleClear"> </el-button>
<el-button size="small" icon="el-icon-delete" @click="taskOut"> </el-button>
</div>
</el-row>
</el-form>
<!-- table -->
<gather v-if="search.status === 1" ref="gather" @searchCompanyName="searchCompanyName"></gather>
<detail v-if="search.status === 2" ref="detail"></detail>
</basic-container>
</div>
</template>
<script>
import { taskState, jobStatus, timeStatus } from '@/common/dic'
import {gatherInfo, detailInfo} from '@/api/workstation/task'
import gather from "./table/gather";
import detail from "./table/detail";
import {setStore, getStore} from '@/util/store'
export default {
name: "index",
components: {gather, detail},
data() {
return {
disabled: true,
missionTypes: taskState,
jobStatus: jobStatus,
timeStatus: timeStatus,
activeName: 'first',
taskTime: '',
taskGather: {},
taskDetail: {},
search: {
status: 1,
},
};
},
filters: {
searchStatus (v) {
switch (v) {
case 1:
return '任务概况';
case 2:
return '任务概况';
}
}
},
created() {
const status = getStore({name: 'taskStatus'})
if (status) {
this.search.status = Number(status)
}
},
mounted() {
this.handleSearch()
},
methods: {
searchCompanyName (companyName) {
this.search.status = 2
setStore({name: 'taskStatus', content: 2, type: 'session'})
this.search.companyName = companyName
this.handleSearch()
},
dateChangeSubTime(val){
if(val){
this.search.stime = val[0]+" 00:00:00";
this.search.etime = val[1]+" 23:59:59";
} else{
this.search.stime = '';
this.search.etime = '';
}
},
gatherInfoInit () {
gatherInfo().then(res => {
this.taskGather = res.data.data
})
},
detailInfoInit () {
detailInfo().then(res => {
this.taskDetail = res.data.data
})
},
radioGroup(v) {
setStore({name: 'taskStatus', content: v, type: 'session'})
this.handleClear()
},
handleSearch () {
if (this.search.status === 1) {
this.gatherInfoInit()
var gatherObj = {
companyName: this.search.companyName,
callTel: this.search.callTel
}
this.$refs.gather.init(gatherObj)
} else if (this.search.status === 2) {
this.detailInfoInit()
var detailObj = {
status: this.search.jobStatus ? this.search.jobStatus : '',
companyName: this.search.companyName ? this.search.companyName : '',
missionNo: this.search.missionNo ? this.search.missionNo : '',
missionTitle: this.search.missionTitle ? this.search.missionTitle : '',
reviewState: this.search.reviewState ? this.search.reviewState : 0,
stime: this.search.stime ? this.search.stime : '',
etime: this.search.etime ? this.search.etime : ''
}
this.$nextTick(() => {
this.$refs.detail.init(detailObj)
})
}
},
handleClear(){
this.search = {
status: this.search.status,
companyName: '',
callTel: '',
missionNo:'',
missionTitle: '',
reviewState: '',
jobStatus: '',
};
this.handleSearch()
},
taskOut(){
var detailObj = {
status: this.search.jobStatus ? this.search.jobStatus : '',
companyName: this.search.companyName ? this.search.companyName : '',
missionNo: this.search.missionNo ? this.search.missionNo : '',
missionTitle: this.search.missionTitle ? this.search.missionTitle : '',
reviewState: this.search.reviewState ? this.search.reviewState : '',
stime: this.search.stime ? this.search.stime : '',
etime: this.search.etime ? this.search.etime : ''
}
this.$refs.detail.taskOut(detailObj)
}
}
}
</script>
<style scoped>
p{
margin: 0 !important;
}
.el-form-item {
margin-right: 18px !important;
/*margin-bottom: 0 !important;*/
}
.searchBtn {
display: inline-block;
margin-bottom: 18px;
}
.taskTip{
border-radius: 0px 4px 5px 4px;
/*padding: 14px;*/
}
.taskTip .name{
font-size: 18px;
font-weight: 500;
color: #333333;
line-height: 25px;
}
.taskTip .smallTitle{
width: 36px;
height: 25px;
font-size: 18px;
font-weight: 400;
color: #999999;
line-height: 25px;
margin-right: 15px;
margin-left: 40px;
}
.taskTip .title{
height: 30px;
font-size: 22px;
font-weight: 800;
color: #333333;
line-height: 30px;
}
</style>

View File

@@ -0,0 +1,248 @@
<template>
<div>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
>
<template slot="status" slot-scope="{ row }">
<div>{{ row.status | jobStatus}}</div>
</template>
<template slot="wage" slot-scope="{ row }">
<div>{{ row.wage}}//</div>
</template>
<template slot="etimePub" slot-scope="{ row }">
<div>{{ dateFormat(new Date(row.etimePub), "yyyy/MM/dd")}}</div>
</template>
<template slot="etime" slot-scope="{ row }">
<div>{{ dateFormat(new Date(row.etime), "yyyy/MM/dd")}}</div>
</template>
<template slot="stime" slot-scope="{ row }">
<div>{{ dateFormat(new Date(row.stime), "yyyy/MM/dd")}}</div>
</template>
<template slot="expiryTime" slot-scope="{ row }">
<div>{{ dateFormat(new Date(row.expiryTime), "yyyy/MM/dd")}}</div>
</template>
<!--自定义操作栏-->
<div slot="menu" slot-scope="{ size, type, row }">
<el-button
icon="el-icon-view"
:size="size"
:type="type"
@click.stop="rowView(row)"
>查看</el-button>
</div>
</avue-crud>
<el-drawer title="详情" :visible.sync="viewDrawer" size="60%">
<mission-view :model="view"></mission-view>
</el-drawer>
</div>
</template>
<script>
import {
getDetail,
} from "@/api/manage/mission";
import missionView from "@/views/util/mission-view";
import {detailList, stationExport} from '@/api/workstation/task'
import {dateFormat} from '@/util/date'
// import {download} from '@/util/util'
export default {
name: "task",
components: {missionView},
filters: {
jobStatus (v) {
switch (v) {
case 1:
return '招聘中'
case 2:
return '任务中'
case 3:
return '已完成'
case 4:
return '已失效'
case 9:
return '审核未通过'
}
}
},
data () {
return {
viewDrawer: false,
loading: false,
view: {},
page: {
pageSize: 10,
currentPage: 1,
total: 100,
},
query: {},
data: [],
option: {
height: "400",
calcHeight: 40,
menuWidth: 120,
align: "center",
menuAlign: "center",
indexLabel: "序号",
menu:true,
tip: false,
addBtn: false,
viewBtn: false,
delBtn: false,
editBtn: false,
excelBtn: false,
columnBtn: false,
searchBtn: false,
searchShow: false,
border: true,
index: true,
selection: false,
dialogType: "drawer",
dialogWidth: "60%",
delBtnText: "取消",
dialogClickModal: false,
column: [
{
label: "任务标题",
prop: "missionTitle",
},
{
label: "任务编码",
prop: "missionNo",
display: false,
},
{
label: "公司名称",
prop: "companyName",
},
{
label: "任务状态",
prop: "status",
slot: true
},
{
label: "招聘人数",
prop: "peopleNum",
display: false,
},
{
label: "申请人数",
prop: "applyCount",
display: false,
},
{
label: "录用人数",
prop: "employedCount",
},
{
label: "发工资人数",
prop: "userPayCount",
},
{
label: "工资",
prop: "wage",
slot: true
},
{
label: "报名截止日期",
prop: "etimePub",
slot: true,
display: false,
},
{
label: "开始时间",
prop: "stime",
slot: true,
display: false,
},
{
label: "结束时间",
prop: "etime",
slot: true,
display: false,
}
]
}
}
},
methods: {
dateFormat,
rowView(row) {
getDetail(row.missionNo).then((resp) => {
this.viewDrawer = true;
this.view = resp.data.data;
});
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
this.listInit(this.query)
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
this.listInit(this.query)
},
/*刷新本页 带搜索参数*/
refreshChange() {
this.init(this.query)
},
init(search){
this.page.currentPage = 1
this.query = search
var params = {
...search,
current: this.page.currentPage,
size: this.page.pageSize
}
this.loading = true
detailList(params).then(res => {
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
},
listInit(search){
this.query = search
var params = {
...search,
current: this.page.currentPage,
size: this.page.pageSize
}
this.loading = true
detailList(params).then(res => {
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
},
// 导出
taskOut(search){
this.query = search
var query = this.query
window.open(
stationExport(
query.status,
query.companyName,
query.missionNo,
query.missionTitle,
query.reviewState,
query.stime,
query.etime,
this.page.currentPage,
this.page.pageSize
)
)
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,198 @@
<template>
<div>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
>
<template slot="openTime" slot-scope="{ row }">
<div :style="{'color': (row.isExpiry===1?'red':'')}">{{ row.openTime ? dateFormat(new Date(row.openTime), "yyyy-MM-dd") : ''}}</div>
</template>
<!--自定义操作栏-->
<div slot="menu" slot-scope="{ size, type, row }">
<el-button
icon="el-icon-view"
:size="size"
:type="type"
@click.stop="rowView(row)"
>查看</el-button>
</div>
</avue-crud>
<el-drawer title="详情" :visible.sync="viewDrawer" size="60%">
<mission-view :model="view"></mission-view>
</el-drawer>
</div>
</template>
<script>
import missionView from "@/views/util/mission-view";
import {gatherList} from '@/api/workstation/task'
import {dateFormat} from '@/util/date'
export default {
name: "task",
components: {missionView},
data () {
return {
viewDrawer: false,
loading: false,
view: {},
page: {
pageSize: 10,
currentPage: 1,
total: 100,
},
query: {},
data: [],
option: {
height: "400",
calcHeight: 40,
menuWidth: 120,
align: "center",
menuAlign: "center",
indexLabel: "序号",
menu:true,
tip: false,
addBtn: false,
viewBtn: false,
delBtn: false,
editBtn: false,
excelBtn: false,
columnBtn: false,
searchBtn: false,
searchShow: false,
border: true,
index: true,
selection: false,
dialogType: "drawer",
dialogWidth: "60%",
delBtnText: "取消",
dialogClickModal: false,
column: [
{
label: "公司名称",
prop: "companyName",
},
{
label: "联系人",
prop: "callName",
},
{
label: "联系电话",
prop: "callTel",
display: false,
},
{
label: "招聘中",
prop: "recruitCount",
display: false,
},
{
label: "任务中",
prop: "startCount",
display: false,
},
{
label: "已完成",
prop: "completCount",
display: false,
},
{
label: "已失效",
prop: "invalidCount",
},
{
label: "审核未通过",
prop: "rejectCount",
display: false,
},
// {
// label: "待支付(人)",
// prop: "nonPaycount",
// display: false,
// },
// {
// label: "已支付",
// prop: "payCount",
// display: false,
// },
// {
// label: "已发放",
// prop: "userPayCount",
// display: false,
// },
// {
// label: "工资发放逾期",
// prop: "expiryCount",
// display: false,
// },
{
label: "最新发布任务时间",
prop: "openTime",
slot: true,
display: false
}
]
}
}
},
methods: {
dateFormat,
rowView(row) {
this.$emit('searchCompanyName', row.companyName)
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
this.listInit(this.query)
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
this.listInit(this.query)
},
/*刷新本页 带搜索参数*/
refreshChange() {
this.init(this.query)
},
init(search){
this.page.currentPage = 1
this.query = search
var params = {
...search,
current: this.page.currentPage,
size: this.page.pageSize
}
this.loading = true
gatherList(params).then(res => {
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
},
listInit(search){
this.query = search
var params = {
...search,
current: this.page.currentPage,
size: this.page.pageSize
}
this.loading = true
gatherList(params).then(res => {
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
}
}
}
</script>
<style scoped>
</style>