main
parent
87049e2c51
commit
6113c85c7b
@ -0,0 +1,58 @@
|
|||||||
|
import httpService from "@/request"
|
||||||
|
|
||||||
|
// 任务列表
|
||||||
|
export function taskList(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/taskRelease/list`,
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 置顶
|
||||||
|
export function topTask(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/taskRelease/topTask`,
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 取消
|
||||||
|
export function cancelTask(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/taskRelease/cancel`,
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 撤回
|
||||||
|
export function withdrawTask(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/taskRelease/withdraw`,
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 确认
|
||||||
|
export function confirmTask(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/taskRelease/confirm`,
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取任务设置
|
||||||
|
export function getSetting(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/settingTaskRelease/getSetting`,
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 保存任务设置
|
||||||
|
export function Setting(params) {
|
||||||
|
return httpService({
|
||||||
|
url: `/user/settingTaskRelease/setting`,
|
||||||
|
method: 'post',
|
||||||
|
data: params,
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
<template>
|
||||||
|
<a-cascader
|
||||||
|
:options="cityList"
|
||||||
|
placeholder="请选择"
|
||||||
|
:field-names="{
|
||||||
|
label: 'name',
|
||||||
|
value: 'id',
|
||||||
|
children: 'cityList',
|
||||||
|
}"
|
||||||
|
@change="change"
|
||||||
|
style="width: 60%"
|
||||||
|
></a-cascader>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import store from "@/store";
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
cityList:[]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
change(data){
|
||||||
|
this.$emit('onchange',data)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
if(store.getters.getCity.length===0){
|
||||||
|
this.$axios({
|
||||||
|
method:'get',
|
||||||
|
url:process.env.VUE_APP_URL+'manage/city/allCity',//【api不需要communityCode】
|
||||||
|
}).then((response) =>{
|
||||||
|
this.cityList = response.data.data
|
||||||
|
this.setCity(response.data.data);
|
||||||
|
}).catch((error) =>{
|
||||||
|
console.log(error) //请求失败返回的数据
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
@ -0,0 +1,34 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
|
||||||
|
<img alt="example" style="width: 100%" :src="previewImage" />
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props:{
|
||||||
|
previewVisible:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false,
|
||||||
|
},
|
||||||
|
previewImage:{
|
||||||
|
type:String,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return{
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
handleCancel() {
|
||||||
|
this.$emit('handleCancel')
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,68 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-upload
|
||||||
|
:action="`${$upload}`"
|
||||||
|
accept='.jpg,.JPG,.png,.PNG,.jpeg,.JPEG'
|
||||||
|
list-type="picture-card"
|
||||||
|
:headers="uploadHeaders"
|
||||||
|
:file-list="fileList"
|
||||||
|
@preview="handlePreview"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
<div v-if="fileList.length < 1">
|
||||||
|
<a-icon type="plus" />
|
||||||
|
<div class="ant-upload-text">上传图片</div>
|
||||||
|
</div>
|
||||||
|
</a-upload>
|
||||||
|
<imgModal :previewVisible='previewVisible' :previewImage='previewImage' @handleCancel='handleCancel'/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import imgModal from "./imgModal.vue"
|
||||||
|
function getBase64(file) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.readAsDataURL(file);
|
||||||
|
reader.onload = () => resolve(reader.result);
|
||||||
|
reader.onerror = error => reject(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
import store from "@/store";
|
||||||
|
export default {
|
||||||
|
components:{
|
||||||
|
imgModal
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return{
|
||||||
|
previewVisible: false,
|
||||||
|
previewImage: '',
|
||||||
|
fileList: [],
|
||||||
|
uploadHeaders: {
|
||||||
|
"admin-login-token": store.getters.getToken
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
async handlePreview(file) {
|
||||||
|
if (!file.url && !file.preview) {
|
||||||
|
file.preview = await getBase64(file.originFileObj);
|
||||||
|
}
|
||||||
|
this.previewImage = file.url || file.preview;
|
||||||
|
this.previewVisible = true;
|
||||||
|
},
|
||||||
|
handleCancel(){
|
||||||
|
this.previewVisible = false;
|
||||||
|
},
|
||||||
|
handleChange({ fileList }) {
|
||||||
|
this.fileList = fileList
|
||||||
|
if(fileList[0].status==='done'){
|
||||||
|
this.$emit('handleChange',fileList)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
@ -0,0 +1,166 @@
|
|||||||
|
export const pagination = {
|
||||||
|
current: 1,
|
||||||
|
total: 0,
|
||||||
|
pageSize: 10,
|
||||||
|
showTotal: (total) => `共 ${total} 条`,
|
||||||
|
showSizeChanger: true,
|
||||||
|
showQuickJumper: true,
|
||||||
|
}
|
||||||
|
export const searchForm = {
|
||||||
|
status:undefined,
|
||||||
|
rewardType: undefined,
|
||||||
|
type: undefined,
|
||||||
|
keyword:''
|
||||||
|
}
|
||||||
|
export const columns = [
|
||||||
|
{
|
||||||
|
title: "任务单号",
|
||||||
|
width: "12%",
|
||||||
|
dataIndex: "code",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "创建人名称",
|
||||||
|
width: "5%",
|
||||||
|
dataIndex: "createName",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "任务状态",
|
||||||
|
width: "4%",
|
||||||
|
dataIndex: "status",
|
||||||
|
customRender: function (status) {
|
||||||
|
switch (status) {
|
||||||
|
case 1:
|
||||||
|
return '已发布'
|
||||||
|
case 2:
|
||||||
|
return '已接取'
|
||||||
|
case 3:
|
||||||
|
return '服务中'
|
||||||
|
case 4:
|
||||||
|
return '待确认'
|
||||||
|
case 5:
|
||||||
|
return '已完成'
|
||||||
|
case 6:
|
||||||
|
return '已评价'
|
||||||
|
case 9:
|
||||||
|
return '已取消'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "类型",
|
||||||
|
width: "4%",
|
||||||
|
dataIndex: "type",
|
||||||
|
customRender: function (type) {
|
||||||
|
switch (type) {
|
||||||
|
case 1:
|
||||||
|
return '跑腿'
|
||||||
|
case 2:
|
||||||
|
return '家政'
|
||||||
|
case 3:
|
||||||
|
return '维修'
|
||||||
|
case 4:
|
||||||
|
return '家教'
|
||||||
|
case 9:
|
||||||
|
return '其他'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "备注",
|
||||||
|
width: "8%",
|
||||||
|
dataIndex: "remarks",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "接单人名称",
|
||||||
|
width: "5%",
|
||||||
|
dataIndex: "receiverName",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "可接单开始时间",
|
||||||
|
width: "10%",
|
||||||
|
dataIndex: "readyStartTime",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "可接单结束时间",
|
||||||
|
width: "10%",
|
||||||
|
dataIndex: "readyEndTime",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "服务人员",
|
||||||
|
width: "4%",
|
||||||
|
dataIndex: "servicePersonnel",
|
||||||
|
customRender: function (servicePersonnel) {
|
||||||
|
switch (servicePersonnel) {
|
||||||
|
case 1:
|
||||||
|
return '住户'
|
||||||
|
case 2:
|
||||||
|
return '物业'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "联系人",
|
||||||
|
width: "4%",
|
||||||
|
dataIndex: "contact",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "报酬类型",
|
||||||
|
width: "4%",
|
||||||
|
dataIndex: "rewardType",
|
||||||
|
customRender: function (rewardType) {
|
||||||
|
switch (rewardType) {
|
||||||
|
case 1:
|
||||||
|
return '赏金'
|
||||||
|
case 2:
|
||||||
|
return '积分'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "报酬数",
|
||||||
|
width: "4%",
|
||||||
|
dataIndex: "reward",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "创建时间",
|
||||||
|
width: "8%",
|
||||||
|
dataIndex: "createDate",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
dataIndex: "action",
|
||||||
|
key: "action",
|
||||||
|
width: "300",
|
||||||
|
fixed: "right",
|
||||||
|
scopedSlots: { customRender: "action" },
|
||||||
|
},
|
||||||
|
]
|
||||||
|
export const options = {
|
||||||
|
rewardType: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name:'赏金'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name:'积分'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
type: [
|
||||||
|
{
|
||||||
|
id:1, name:'跑腿'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:2, name:'家政'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:3, name:'维修'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:4, name:'家教'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:9, name:'其他'
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,213 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="cardTitle">
|
||||||
|
<a-space size="large">
|
||||||
|
<span>任务列表</span>
|
||||||
|
<a-radio-group
|
||||||
|
v-model="activeName"
|
||||||
|
button-style="solid"
|
||||||
|
@change="tabsChange"
|
||||||
|
>
|
||||||
|
<a-radio-button value="0"> 全部 </a-radio-button>
|
||||||
|
<a-radio-button value="1"> 已发布 </a-radio-button>
|
||||||
|
<a-radio-button value="2"> 已接取 </a-radio-button>
|
||||||
|
<a-radio-button value="3"> 服务中 </a-radio-button>
|
||||||
|
<a-radio-button value="4"> 待确认 </a-radio-button>
|
||||||
|
<a-radio-button value="5"> 已完成 </a-radio-button>
|
||||||
|
<a-radio-button value="6"> 已评价 </a-radio-button>
|
||||||
|
<a-radio-button value="9"> 已取消 </a-radio-button>
|
||||||
|
</a-radio-group>
|
||||||
|
</a-space>
|
||||||
|
</div>
|
||||||
|
<div class="search-box">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="20">
|
||||||
|
<a-space size="large">
|
||||||
|
<a-select placeholder="报酬类型" v-model="searchForm.rewardType" style="width: 200px" >
|
||||||
|
<a-select-option v-for="item in options.rewardType" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-select placeholder="类型" v-model="searchForm.type" style="width: 200px" >
|
||||||
|
<a-select-option v-for="item in options.type" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-input placeholder="关键字" v-model="searchForm.keyword" style="width: 200px" />
|
||||||
|
<a-button type="primary" @click='getData'>查 询</a-button>
|
||||||
|
<a-button @click='reset'>重 置</a-button>
|
||||||
|
</a-space>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<div style="margin-bottom: 16px">
|
||||||
|
<!-- 批量操作 -->
|
||||||
|
<a-select
|
||||||
|
type="primary"
|
||||||
|
v-model="activeAction"
|
||||||
|
:disabled="!hasSelected"
|
||||||
|
:loading="loading"
|
||||||
|
style="width: 120px"
|
||||||
|
@change="Actions"
|
||||||
|
placeholder="请选择操作"
|
||||||
|
>
|
||||||
|
批量
|
||||||
|
<a-select-option v-for="item in ActionsList" :key="item.value">
|
||||||
|
{{ item.label }}
|
||||||
|
</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<span style="margin-left: 8px">
|
||||||
|
<template v-if="hasSelected">
|
||||||
|
{{ `已选择 ${selectedRowKeys.length} 条` }}
|
||||||
|
</template>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- 表格 -->
|
||||||
|
<a-table
|
||||||
|
:columns="columns"
|
||||||
|
:data-source="tableData"
|
||||||
|
:pagination="pagination"
|
||||||
|
:scroll="{ x: 2500 }"
|
||||||
|
@change="handleTableChange"
|
||||||
|
:row-selection="{
|
||||||
|
selectedRowKeys: selectedRowKeys,
|
||||||
|
onChange: selectionChoosed,
|
||||||
|
}"
|
||||||
|
:row-key="
|
||||||
|
(record, index) => {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span slot="action" slot-scope="text, row">
|
||||||
|
<a-space>
|
||||||
|
<a class="ant-dropdown-link" v-if='row.status===1' @click="top(row)">推荐置顶</a>
|
||||||
|
<a class="ant-dropdown-link" v-if='row.status===2||row.status===3' @click="withdraw(row)">撤回大厅</a>
|
||||||
|
<a class="ant-dropdown-link" v-if='row.status===4' @click="confirm(row)">确认完成</a>
|
||||||
|
<a class="ant-dropdown-link" @click="cancel(row)" v-if='row.status<4'>取消</a>
|
||||||
|
</a-space>
|
||||||
|
</span>
|
||||||
|
</a-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { pagination, searchForm, columns, options } from "./depend/config";
|
||||||
|
import {
|
||||||
|
taskList,
|
||||||
|
topTask,
|
||||||
|
cancelTask,
|
||||||
|
withdrawTask,
|
||||||
|
confirmTask,
|
||||||
|
} from "@/api/operation/task";
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeName: "0",
|
||||||
|
pagination,
|
||||||
|
searchForm,
|
||||||
|
activeAction: undefined,
|
||||||
|
loading: false,
|
||||||
|
// 选择的index
|
||||||
|
selectedRowKeys: [],
|
||||||
|
tableChoosed: [],
|
||||||
|
// 列
|
||||||
|
columns,options,
|
||||||
|
// 数据
|
||||||
|
tableData: [],
|
||||||
|
ActionsList: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getData() {
|
||||||
|
let res = await taskList({
|
||||||
|
pageNum: this.pagination.current,
|
||||||
|
size: this.pagination.pageSize,
|
||||||
|
status: this.searchForm.status,
|
||||||
|
rewardType: this.searchForm.rewardType,
|
||||||
|
type: this.searchForm.type,
|
||||||
|
keyword: this.searchForm.keyword,
|
||||||
|
});
|
||||||
|
this.tableData = res.data.rows;
|
||||||
|
this.pagination.total = res.data.total;
|
||||||
|
},
|
||||||
|
tabsChange(e) {
|
||||||
|
if(e.target.value === '0'){
|
||||||
|
this.searchForm.status =undefined
|
||||||
|
this.getData();
|
||||||
|
}
|
||||||
|
this.searchForm.status = e.target.value;
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
handleTableChange(pagination) {
|
||||||
|
console.log(pagination);
|
||||||
|
const pager = { ...this.pagination };
|
||||||
|
pager.current = pagination.current;
|
||||||
|
pager.pageSize = pagination.pageSize;
|
||||||
|
this.pagination = pager;
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
Actions(data) {
|
||||||
|
console.log(data);
|
||||||
|
this.activeAction = undefined;
|
||||||
|
},
|
||||||
|
reset(){
|
||||||
|
this.searchForm = {
|
||||||
|
rewardType: undefined,
|
||||||
|
type: undefined,
|
||||||
|
keyword:''
|
||||||
|
}
|
||||||
|
this.getData()
|
||||||
|
},
|
||||||
|
selectionChoosed(data) {
|
||||||
|
console.log(data);
|
||||||
|
this.tableChoosed = data;
|
||||||
|
},
|
||||||
|
async top(data) {
|
||||||
|
let res = await topTask({ taskId: data.id });
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$message.success(res.msg);
|
||||||
|
this.getData();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async cancel(data) {
|
||||||
|
let res = await cancelTask({ taskId: data.id });
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$message.success(res.msg);
|
||||||
|
this.getData();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async confirm(data) {
|
||||||
|
let res = await confirmTask({ taskId: data.id });
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$message.success(res.msg);
|
||||||
|
this.getData();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async withdraw(data) {
|
||||||
|
let res = await withdrawTask({ taskId: data.id });
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$message.success(res.msg);
|
||||||
|
this.getData();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
hasSelected() {
|
||||||
|
return this.selectedRowKeys.length > 0;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
</style>
|
@ -0,0 +1,18 @@
|
|||||||
|
export const set = {
|
||||||
|
taskEnable: undefined,
|
||||||
|
releaseEnable: undefined,
|
||||||
|
releaseFreeTime: undefined,
|
||||||
|
releaseDeductType: undefined,
|
||||||
|
releaseTimeoutInterval: undefined,
|
||||||
|
releaseTimeoutValue: undefined,
|
||||||
|
releaseTimeoutMax: undefined,
|
||||||
|
releaseReturnType: undefined,
|
||||||
|
ordersEnable: undefined,
|
||||||
|
ordersFreeTime: undefined,
|
||||||
|
ordersDeductType: undefined,
|
||||||
|
ordersTimeoutInterval: undefined,
|
||||||
|
ordersTimeoutValue: undefined,
|
||||||
|
ordersTimeoutMax: undefined,
|
||||||
|
ordersReturnType: undefined,
|
||||||
|
serviceConfirmTime: undefined,
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
<router-view></router-view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
Loading…
Reference in new issue