Commit 53a660b9 authored by chenfenglei's avatar chenfenglei

云集订单展示老师班级人数情况

parent a3f04251
<template> <template>
<div class="sms"> <div class="sms">
<el-form ref="searchFrom" inline :model="searchFrom" label-width="100px"> <el-form ref="searchFrom" inline :model="searchFrom" label-width="100px">
<el-form-item label="交易订单号"> <el-form-item label="交易订单号">
<el-input v-model="searchFrom.order_id" @change="getList"></el-input> <el-input v-model="searchFrom.order_id" @change="getList"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="手机号"> <el-form-item label="手机号">
<el-input v-model="searchFrom.mobile" @change="getList"></el-input> <el-input v-model="searchFrom.mobile" @change="getList"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="绑定状态"> <el-form-item label="绑定状态">
<el-select v-model="searchFrom.user_buy" placeholder="请选择" @change="getList" clearable> <el-select v-model="searchFrom.user_buy" placeholder="请选择" @change="getList" clearable>
<el-option <el-option v-for="item in useTypeList" :key="item.user_buy" :label="item.value" :value="item.user_buy">
v-for="item in useTypeList" </el-option>
:key="item.user_buy" </el-select>
:label="item.value" </el-form-item>
:value="item.user_buy"> <el-form-item label="商品名称">
</el-option> <el-select v-model="searchFrom.goods_id" placeholder="请选择" @change="getList" clearable>
</el-select> <el-option v-for="(data,index) in goodList" :key="index" :label="data | filterGoods" :value="data.id">
</el-form-item> </el-option>
<el-form-item label="商品名称"> </el-select>
<el-select v-model="searchFrom.goods_id" placeholder="请选择" @change="getList" clearable> </el-form-item>
<el-option
v-for="(data,index) in goodList"
:key="index"
:label="data | filterGoods"
:value="data.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="老师"> <el-form-item label="老师">
<el-select v-model="searchFrom.teacher_id" placeholder="请选择" @change="getList" clearable filterable> <el-select v-model="searchFrom.teacher_id" placeholder="请选择" @change="getList" clearable filterable>
<el-option <el-option v-for="(data,index) in teacherList" :key="index" :label="data.name" :value="data.id">
v-for="(data,index) in teacherList"
:key="index"
:label="data.name"
:value="data.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item label="创建时间"> <!-- <el-form-item label="创建时间">
<el-date-picker <el-date-picker
v-model="searchFrom.payTime" v-model="searchFrom.payTime"
unlink-panels unlink-panels
...@@ -49,7 +37,7 @@ ...@@ -49,7 +37,7 @@
@change="getList"> @change="getList">
</el-date-picker> </el-date-picker>
</el-form-item> --> </el-form-item> -->
<!-- <el-form-item label="同步时间"> <!-- <el-form-item label="同步时间">
<el-date-picker <el-date-picker
v-model="searchFrom.syncTime" v-model="searchFrom.syncTime"
unlink-panels unlink-panels
...@@ -61,289 +49,311 @@ ...@@ -61,289 +49,311 @@
@change="getList"> @change="getList">
</el-date-picker> </el-date-picker>
</el-form-item> --> </el-form-item> -->
<el-form-item> <el-form-item>
<el-button type="primary" @click="getList">搜索</el-button> <el-button type="primary" @click="getList">搜索</el-button>
<el-button type="primary" plain @click="exportTable(list)">导出</el-button> <el-button type="primary" plain @click="exportTable(list)">导出</el-button>
</el-form-item> <el-button type="success" plain @click="classListOption()">班级分布</el-button>
</el-form-item>
</el-form> </el-form>
<el-table <el-table :data="list" style="width: 100%">
:data="list" <el-table-column prop="order_id" label="订单号">
style="width: 100%">
<el-table-column
prop="order_id"
label="订单号">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="nickname" label="购买人">
prop="nickname" <template slot-scope="scope">
label="购买人"> <div v-if='scope.row.user_id !== 0' style="display: flex">
<template slot-scope="scope"> <img class="avatar" :src="scope.row.avatar" />
<div v-if='scope.row.user_id !== 0' style="display: flex"> <div>{{scope.row.nickname}}<br>(ID:{{scope.row.user_id}})</div>
<img class="avatar" :src="scope.row.avatar"/> <div>{{scope.row.nickname}}<br>(ID:{{scope.row.user_id}})</div> </div>
</div>
<div v-if='scope.row.user_id === 0'> <div v-if='scope.row.user_id === 0'>
暂未绑定用户 暂未绑定用户
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="goods_name" label="商品名称">
prop="goods_name"
label="商品名称" >
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="receiver_name" label="姓名">
prop="receiver_name"
label="姓名" >
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="receiver_phone" label="手机号">
prop="receiver_phone"
label="手机号" >
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="收货地址">
label="收货地址" >
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.receiver_province}} {{scope.row.receiver_city}} {{scope.row.receiver_area}} {{scope.row.receiver_address}} {{scope.row.receiver_province}} {{scope.row.receiver_city}} {{scope.row.receiver_area}} {{scope.row.receiver_address}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="teacher_name" label="班级老师">
prop="teacher_name"
label="班级老师" >
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="create_time" label="创建时间" sortable>
prop="create_time"
label="创建时间" sortable>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="pay_time" label="支付时间" sortable>
prop="pay_time"
label="支付时间" sortable>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="desc" label="备注">
prop="desc" </el-table-column>
label="备注" > <el-table-column label="操作" v-if="!$store.state.readonly" width="220">
<template slot-scope="scope">
<!-- <el-button @click="bindTeacher(scope.row)" size="mini" plain type="success">绑定老师</el-button> -->
<el-button @click="editNote(scope.row.id, scope.row.desc)" size="mini" plain type="primary">编辑备注</el-button>
</template>
</el-table-column>
</el-table>
<page :nowPage="nowPage" :total="total" @pageChange="onPageChange" @sizeChange="onSizeChange" />
<el-dialog :title="classObj.title" :visible.sync="classObj.show" center width="800px">
<el-table :data="classList" >
<el-table-column prop="teacher_name" label="班级老师">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="num" label="班级人数">
label="操作" v-if="!$store.state.readonly" width="220">
<template slot-scope="scope">
<!-- <el-button @click="bindTeacher(scope.row)" size="mini" plain type="success">绑定老师</el-button> -->
<el-button @click="editNote(scope.row.id, scope.row.desc)" size="mini" plain type="primary">编辑备注</el-button>
</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<page :nowPage="nowPage" :total="total" @pageChange="onPageChange" @sizeChange="onSizeChange"/> <div style="margin-top:20px;">
同步时间:{{last_pull_time}}
</div>
<span slot="footer" class="dialog-footer">
</span>
</el-dialog>
<teacher-dialog :dialogObj="dialogObj"></teacher-dialog> <teacher-dialog :dialogObj="dialogObj"></teacher-dialog>
</div> </div>
</template> </template>
<script> <script>
import page from '../framework/page' import page from "../framework/page";
import teacherDialog from './dialog' import teacherDialog from "./dialog";
import {getyunjiApi,getGoodsListApi,exportExcelApi,getTeacherListApi,orderDescApi} from "../../service/api"; import {
import {GOODSTYPE} from "../../util/wordbook"; getyunjiApi,
export default { getGoodsListApi,
name: "smsRecord", exportExcelApi,
components:{ getTeacherListApi,
page, orderDescApi
teacherDialog } from "../../service/api";
}, import { GOODSTYPE } from "../../util/wordbook";
data(){ export default {
return { name: "smsRecord",
nowPage: 1, components: {
total: 0, page,
limit: 10, teacherDialog
useTypeList:[ },
{ data() {
user_buy:0, return {
value:'未绑定' nowPage: 1,
}, total: 0,
{ limit: 10,
user_buy:1, useTypeList: [
value:'已绑定' {
}, user_buy: 0,
], value: "未绑定"
searchFrom: {
goods_id: '',
mobile:'',
order_id:'',
teacher_id:'',
payTime:[],
syncTime:[],
}, },
list: [], {
teacherList:[], user_buy: 1,
goodList:[], value: "已绑定"
dialogObj:{
show:false,
title:'绑定老师',
order_id:0,
teacher_id: 0
},
}
},
filters:{
filterStatus:function (value) {
let msg = '';
if(value === 0){
msg = '未绑定'
}else{
msg= "已绑定"
} }
return msg; ],
searchFrom: {
goods_id: "",
mobile: "",
order_id: "",
teacher_id: "",
payTime: [],
syncTime: []
},
list: [],
teacherList: [],
goodList: [],
dialogObj: {
show: false,
title: "绑定老师",
order_id: 0,
teacher_id: 0
}, },
filterGoods(val){ classObj:{
return '[' + GOODSTYPE[val.goods_type] + ']' + '[' +val.current_price / 100 + '元]' + val.name show: false,
title: "班级分布",
order_id: 0,
teacher_id: 0
},
classList:[],
last_pull_time:"无",
};
},
filters: {
filterStatus: function(value) {
let msg = "";
if (value === 0) {
msg = "未绑定";
} else {
msg = "已绑定";
} }
return msg;
}, },
mounted(){ filterGoods(val) {
return (
"[" +
GOODSTYPE[val.goods_type] +
"]" +
"[" +
val.current_price / 100 +
"元]" +
val.name
);
}
},
mounted() {
this.getList();
this.getGoodsOption();
this.getTeacherList();
},
methods: {
onPageChange(val) {
this.nowPage = val;
this.getList(); this.getList();
this.getGoodsOption();
this.getTeacherList();
}, },
methods: { getTeacherList() {
onPageChange(val){ let json = {
this.nowPage = val; page: 1,
this.getList() limit: 200
}, };
getTeacherList(){ getTeacherListApi(json).then(res => {
let json ={ this.teacherList = res.list;
page:1, });
limit:200 },
} onSizeChange(val) {
getTeacherListApi(json).then(res=>{ this.nowPage = 1;
this.teacherList = res.list; this.limit = val;
}); this.getList();
}, },
onSizeChange(val){ getList() {
this.nowPage = 1; let json = {
this.limit = val; limit: this.limit,
this.getList() page: this.nowPage
}, };
getList(){ if (this.searchFrom.mobile) {
let json = { json.mobile = this.searchFrom.mobile;
limit: this.limit, }
page: this.nowPage, if (this.searchFrom.teacher_id) {
}; json.teacher_id = this.searchFrom.teacher_id;
if(this.searchFrom.mobile){ }
json.mobile = this.searchFrom.mobile if (this.searchFrom.goods_name) {
} json.goods_name = this.searchFrom.goods_name;
if(this.searchFrom.teacher_id){ }
json.teacher_id = this.searchFrom.teacher_id if (this.searchFrom.user_buy || this.searchFrom.user_buy == 0) {
} json.user_buy = this.searchFrom.user_buy;
if(this.searchFrom.goods_name){ }
json.goods_name = this.searchFrom.goods_name if (this.searchFrom.order_id) {
} json.order_id = this.searchFrom.order_id;
if(this.searchFrom.user_buy || this.searchFrom.user_buy == 0){ }
json.user_buy = this.searchFrom.user_buy if (this.searchFrom.goods_id) {
} json.goods_id = this.searchFrom.goods_id;
if(this.searchFrom.order_id){ }
json.order_id = this.searchFrom.order_id if (this.searchFrom.payTime && this.searchFrom.payTime.length > 0) {
} json.start_at = this.searchFrom.payTime[0];
if(this.searchFrom.goods_id){ json.end_at = this.searchFrom.payTime[1];
json.goods_id = this.searchFrom.goods_id }
} if (this.searchFrom.syncTime && this.searchFrom.syncTime.length > 0) {
if(this.searchFrom.payTime && this.searchFrom.payTime.length > 0){ json.pull_start_at = this.searchFrom.syncTime[0];
json.start_at =this.searchFrom.payTime[0] json.pull_end_at = this.searchFrom.syncTime[1];
json.end_at = this.searchFrom.payTime[1] }
} getyunjiApi(json).then(res => {
if(this.searchFrom.syncTime && this.searchFrom.syncTime.length > 0){ console.log(res.list);
json.pull_start_at = this.searchFrom.syncTime[0] this.total = res.total;
json.pull_end_at =this.searchFrom.syncTime[1] this.list = res.list ? res.list : [];
} console.log(res)
getyunjiApi(json).then((res)=>{ this.classList=res.teacher;
console.log(res.list) if(res.last_pull_time){
this.total = res.total; this.last_pull_time=res.last_pull_time;
this.list = res.list ? res.list : []
})
},
getGoodsOption(){
let json = {
page: 1,
limit: 100
};
getGoodsListApi(json).then(res=>{
this.goodList = res.list;
})
},
bindTeacher(data){
this.dialogObj = {
show:true,
title:'绑定老师',
id:data.id,
teacher_id: data.teacher_id
} }
}, });
editNote(id,desc){ },
this.$prompt('', '编辑备注', { getGoodsOption() {
confirmButtonText: '确定', let json = {
cancelButtonText: '取消', page: 1,
inputType:'textarea', limit: 100
inputValue: desc || '' };
}).then(({ value }) => { getGoodsListApi(json).then(res => {
this.$confirm('确定保存?', '提示', { this.goodList = res.list;
confirmButtonText: '确定', });
cancelButtonText: '取消', },
type: 'warning' bindTeacher(data) {
}).then(()=>{ this.dialogObj = {
orderDescApi({desc: value},id).then(res=>{ show: true,
this.$message({ title: "绑定老师",
type: 'success', id: data.id,
message: '编辑备注成功' teacher_id: data.teacher_id
}); };
this.getList(); },
}); editNote(id, desc) {
this.$prompt("", "编辑备注", {
confirmButtonText: "确定",
cancelButtonText: "取消",
inputType: "textarea",
inputValue: desc || ""
}).then(({ value }) => {
this.$confirm("确定保存?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
orderDescApi({ desc: value }, id).then(res => {
this.$message({
type: "success",
message: "编辑备注成功"
}); });
}) this.getList();
}, });
exportTable(data){ });
if(data.length>0){ });
let json = {}; },
exportTable(data) {
if (data.length > 0) {
let json = {};
if (this.searchFrom.order_id) { if (this.searchFrom.order_id) {
json.order_id = this.searchFrom.order_id json.order_id = this.searchFrom.order_id;
} }
if (this.searchFrom.user_buy || this.searchFrom.user_buy == 0) { if (this.searchFrom.user_buy || this.searchFrom.user_buy == 0) {
json.user_buy = this.searchFrom.user_buy json.user_buy = this.searchFrom.user_buy;
} }
if (this.searchFrom.mobile) { if (this.searchFrom.mobile) {
json.mobile = this.searchFrom.mobile json.mobile = this.searchFrom.mobile;
} }
if (this.searchFrom.goods_id) { if (this.searchFrom.goods_id) {
json.goods_id = this.searchFrom.goods_id json.goods_id = this.searchFrom.goods_id;
} }
if(this.searchFrom.teacher_id){ if (this.searchFrom.teacher_id) {
json.teacher_id = this.searchFrom.teacher_id json.teacher_id = this.searchFrom.teacher_id;
} }
if(this.searchFrom.payTime && this.searchFrom.payTime.length > 0){ if (this.searchFrom.payTime && this.searchFrom.payTime.length > 0) {
json.start_at =this.searchFrom.payTime[0] json.start_at = this.searchFrom.payTime[0];
json.end_at = this.searchFrom.payTime[1] json.end_at = this.searchFrom.payTime[1];
} }
if(this.searchFrom.syncTime && this.searchFrom.syncTime.length > 0){ if (this.searchFrom.syncTime && this.searchFrom.syncTime.length > 0) {
json.pull_start_at = this.searchFrom.syncTime[0] json.pull_start_at = this.searchFrom.syncTime[0];
json.pull_end_at =this.searchFrom.syncTime[1] json.pull_end_at = this.searchFrom.syncTime[1];
} }
exportExcelApi(`api/admin/yunji/order/export`,json); exportExcelApi(`api/admin/yunji/order/export`, json);
} }
},
}, classListOption() {
this.classObj.show=true;
} }
} }
};
</script> </script>
<style scoped> <style scoped>
.sms{ .sms {
padding: 20px 0; padding: 20px 0;
} }
.avatar { .avatar {
width:50px; width: 50px;
min-width: 50px; min-width: 50px;
margin-right: 10px; margin-right: 10px;
height: 50px; height: 50px;
border-radius: 50%; border-radius: 50%;
} }
</style> </style>
<style> <style>
.userInfo >div{ .userInfo > div {
display: flex; display: flex;
flex-flow: row nowrap; flex-flow: row nowrap;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment