Commit 5bb62fd3 authored by 赵茹林's avatar 赵茹林

期数名称

parent e9d96da5
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
</head> </head>
<body> <body>
<!-- 先引入 Vue --> <!-- 先引入 Vue -->
<script src="https://lib.baomitu.com/vue/2.5.17/vue.min.js"></script> <!--<script src="https://lib.baomitu.com/vue/2.5.17/vue.min.js"></script>-->
<script src="https://lib.baomitu.com/vue/2.5.17/vue.js"></script>
<script src="https://lib.baomitu.com/vuex/3.0.1/vuex.min.js"></script> <script src="https://lib.baomitu.com/vuex/3.0.1/vuex.min.js"></script>
<!-- 引入组件库 --> <!-- 引入组件库 -->
<script src="https://lib.baomitu.com/axios/0.18.0/axios.min.js"></script> <script src="https://lib.baomitu.com/axios/0.18.0/axios.min.js"></script>
......
...@@ -200,10 +200,7 @@ ...@@ -200,10 +200,7 @@
<el-table-column prop="title" label="标题"></el-table-column> <el-table-column prop="title" label="标题"></el-table-column>
<el-table-column label="操作" width="120px" v-if="!$store.state.readonly"> <el-table-column label="操作" width="120px" v-if="!$store.state.readonly">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button @click="delStarListFn(scope.row)" type="warning" plain size="mini">删除</el-button>
@click="delStarListFn(scope.row)"
type="warning" plain size="mini">删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -11,8 +11,7 @@ ...@@ -11,8 +11,7 @@
end-placeholder="结束日期" end-placeholder="结束日期"
:picker-options="{shortcuts:[today,yesterday,last7Day,last30Day]}" :picker-options="{shortcuts:[today,yesterday,last7Day,last30Day]}"
:default-time="['00:00:00','23:59:59']" :default-time="['00:00:00','23:59:59']"
@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-select <el-select
...@@ -21,14 +20,12 @@ ...@@ -21,14 +20,12 @@
placeholder="请选择" placeholder="请选择"
style="width: 150px" style="width: 150px"
clearable clearable
@change="selectChange" @change="selectChange">
>
<el-option <el-option
v-for="(data,index) in watchList" v-for="(data,index) in watchList"
:key="index" :key="index"
:label="data.title" :label="data.title"
:value="data.id" :value="data.id"></el-option>
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="渠道code"> <el-form-item label="渠道code">
...@@ -63,7 +60,13 @@ ...@@ -63,7 +60,13 @@
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
:span-method="arraySpanMethod"> :span-method="arraySpanMethod">
<!--height="calc(100vh - 210px)"--> <!--height="calc(100vh - 210px)"-->
<el-table-column prop="periods_title" align="center" min-width="80" fixed label="期数名称"></el-table-column> <!--<el-table-column prop="periods_title" align="center" min-width="80" fixed label="期数名称"></el-table-column>-->
<el-table-column align="center" fixed label="期数名称" width="120px">
<template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column>
<el-table-column prop="is_other" min-width="160" align="left" fixed label="渠道信息"> <el-table-column prop="is_other" min-width="160" align="left" fixed label="渠道信息">
<template slot-scope="scope"> <template slot-scope="scope">
来源:{{scope.row.is_other==0?"内部":"外部"}}<br> 来源:{{scope.row.is_other==0?"内部":"外部"}}<br>
...@@ -178,6 +181,27 @@ export default { ...@@ -178,6 +181,27 @@ export default {
}; };
}, },
methods: { methods: {
periodName(val) {
let str = '';
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}`
}
if (val.watch_num) {
str += `${val.watch_num}课时<br>`
} else {
str += `<br>`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
return str
},
selectChange(value) { selectChange(value) {
this.searchFrom.watch_num = this.watchList[value].title; this.searchFrom.watch_num = this.watchList[value].title;
this.getList(); this.getList();
......
...@@ -87,7 +87,13 @@ ...@@ -87,7 +87,13 @@
@sort-change="sortMethod" @sort-change="sortMethod"
:style="{width: width+'px'}" :style="{width: width+'px'}"
fixed> fixed>
<el-table-column prop="periods_title" label="期数名称" ></el-table-column> <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
<el-table-column label="期数名称" width="170px">
<template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column>
<el-table-column <el-table-column
prop="duration_over_at" prop="duration_over_at"
label="开课看课时间" label="开课看课时间"
...@@ -134,12 +140,7 @@ ...@@ -134,12 +140,7 @@
</div> </div>
</template> </template>
<script> <script>
import { import { getPeriodsConversionListApi, getGoodsListApi, getPeriodsOtherListApi, getTeacherListApi } from "../../service/api";
getPeriodsConversionListApi,
getGoodsListApi,
getPeriodsOtherListApi,
getTeacherListApi
} from "../../service/api";
import page from "../framework/page"; import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook"; import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
import { tipArr3 } from "../../util/tipArr"; import { tipArr3 } from "../../util/tipArr";
...@@ -242,7 +243,6 @@ export default { ...@@ -242,7 +243,6 @@ export default {
]; ];
} }
}, },
propertyList: [],
spanArr: [], spanArr: [],
contentSpanArr: [], contentSpanArr: [],
searchFrom: { searchFrom: {
...@@ -269,6 +269,27 @@ export default { ...@@ -269,6 +269,27 @@ export default {
}, },
components: { page }, components: { page },
methods: { methods: {
periodName(val) {
let str = '';
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}<br>`
} else {
str += `<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
return str
},
rendertip(h, { column }) { rendertip(h, { column }) {
// console.log(h) // console.log(h)
return h("span", [ return h("span", [
......
...@@ -170,13 +170,7 @@ ...@@ -170,13 +170,7 @@
</div> </div>
</template> </template>
<script> <script>
import { import { getPeriodsConversionListApi, getSourceConversionListApi, getGoodsListApi, getPeriodsOtherListApi, getTeacherListApi } from "../../service/api";
getPeriodsConversionListApi,
getSourceConversionListApi,
getGoodsListApi,
getPeriodsOtherListApi,
getTeacherListApi
} from "../../service/api";
import page from "../framework/page"; import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE,ORDERSTATUS } from "../../util/wordbook"; import { GOODSTYPE, CLASSSOURCE,ORDERSTATUS } from "../../util/wordbook";
import { tipArr3 } from "../../util/tipArr"; import { tipArr3 } from "../../util/tipArr";
...@@ -295,7 +289,6 @@ export default { ...@@ -295,7 +289,6 @@ export default {
teacher_id: "", teacher_id: "",
periods_title: "" periods_title: ""
}, },
propertyList: [],
watchList: [ watchList: [
{ id: 0, title: 5 }, { id: 0, title: 5 },
{ id: 1, title: 6 }, { id: 1, title: 6 },
......
<template> <template>
<div class="sms"> <div class="admin-refresh sms">
<div class="section-search">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline size="small"> <el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline size="small">
<el-form-item label="用户ID"> <el-form-item label="用户ID">
<el-input v-model="searchFrom.user_id" style="width: 80px"></el-input> <el-input v-model="searchFrom.user_id" style="width: 80px"></el-input>
...@@ -16,13 +17,14 @@ ...@@ -16,13 +17,14 @@
</el-form-item>--> </el-form-item>-->
<el-form-item label="期数"> <el-form-item label="期数">
<el-cascader <el-cascader
:popper-class="'refresh-cascader-multi width-480'"
style="width: 480px"
:options="goodsList" :options="goodsList"
:props="{value:'id',label:'name'}" :props="{value:'id',label:'name'}"
@active-item-change="handleItemChange" @active-item-change="handleItemChange"
@change="changePeriods" @change="changePeriods"
filterable filterable
v-model="selectedGoods" v-model="selectedGoods"></el-cascader>
></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="主题"> <el-form-item label="主题">
<el-select filterable v-model="searchFrom.theme_id" placeholder="请选择" clearable> <el-select filterable v-model="searchFrom.theme_id" placeholder="请选择" clearable>
...@@ -50,49 +52,57 @@ ...@@ -50,49 +52,57 @@
:onSuccess="fileSuccess" :onSuccess="fileSuccess"
:headers="uploadHeader" :headers="uploadHeader"
:data="{param_token:param_token}" :data="{param_token:param_token}"
action="/api/admin/order/deliver/list/import" action="/api/admin/order/deliver/list/import">
>
<el-button type="success" plain>导入发货信息</el-button> <el-button type="success" plain>导入发货信息</el-button>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-tabs v-model="searchFrom.type" type="card" @tab-click="handleClick"> </div>
<el-tabs v-model="searchFrom.type" type="card" @tab-click="handleClick" style="padding-top: 10px;background-color: #fff">
<el-tab-pane label="当前待发货" name="0"></el-tab-pane> <el-tab-pane label="当前待发货" name="0"></el-tab-pane>
<el-tab-pane label="所有待发货" name="1"></el-tab-pane> <el-tab-pane label="所有待发货" name="1"></el-tab-pane>
<el-tab-pane label="所有已发货" name="2"></el-tab-pane> <el-tab-pane label="所有已发货" name="2"></el-tab-pane>
</el-tabs> </el-tabs>
<el-table :data="deliverList" size="mini" style="width: 100%"> <el-table :data="deliverList" size="mini" style="width: 100%">
<el-table-column width="220" class="f-c" label="用户"> <el-table-column width="200" class="f-c" label="用户">
<template slot-scope="scope"> <template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar" /> <img style="vertical-align: top" class="avatar" :src="scope.row.user_avatar" />
<span style="display: inline-block;">
{{scope.row.user_nickname}} {{scope.row.user_nickname}}
<br /> <br />
(ID:{{scope.row.user_id}}) (ID:{{scope.row.user_id}})
<br /> <br />
手机:{{scope.row.user_mobile}} 手机:{{scope.row.user_mobile}}
</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="address" label="收货地址"> <el-table-column prop="address" label="收货地址">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.receive_name}} {{scope.row.receive_name}}
<br /> <br/>
{{scope.row.receive_mobile}} {{scope.row.receive_mobile}}
<br /> <br/>
{{scope.row.province_name}}{{scope.row.city_name}}{{scope.row.area_name}}{{scope.row.address}} {{scope.row.province_name}}{{scope.row.city_name}}{{scope.row.area_name}}{{scope.row.address}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="periods_title" label="期数名称"></el-table-column> <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
<el-table-column prop="periods_title" label="期数名称">
<template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column>
<el-table-column prop="theme_name" label="主题"></el-table-column> <el-table-column prop="theme_name" label="主题"></el-table-column>
<el-table-column prop="deliver_start_at" label="预计发货开始时间"></el-table-column> <el-table-column prop="deliver_start_at" label="预计发货开始时间" width="100px"></el-table-column>
<el-table-column prop="deliver_end_at" label="预计发货结束时间"></el-table-column> <el-table-column prop="deliver_end_at" label="预计发货结束时间" width="100px"></el-table-column>
<el-table-column prop="deliver_at" label="发货时间"></el-table-column> <el-table-column prop="deliver_at" label="发货时间" width="100px"></el-table-column>
<el-table-column prop="status" label="物流状态"> <el-table-column prop="status" label="物流状态">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.status|LogisticsStatusFil}} {{scope.row.status|LogisticsStatusFil}}<br/>
<br />
<span v-if="searchFrom.type==2"> <span v-if="searchFrom.type==2">
名称:{{scope.row.express_name}} 名称:{{scope.row.express_name}}<br/>
<br />
单号:{{scope.row.express_no}} 单号:{{scope.row.express_no}}
</span> </span>
</template> </template>
...@@ -182,6 +192,27 @@ export default { ...@@ -182,6 +192,27 @@ export default {
this.init(); this.init();
}, },
methods: { methods: {
periodName(val) {
let str = '';
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}<br>`
} else {
str += `<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
return str
},
cancelEvent() { cancelEvent() {
this.showFlag = false; this.showFlag = false;
}, },
...@@ -402,9 +433,6 @@ export default { ...@@ -402,9 +433,6 @@ export default {
</script> </script>
<style scoped> <style scoped>
.sms {
padding: 20px 0;
}
.el-button + .el-button { .el-button + .el-button {
margin-left: 0; margin-left: 0;
/* margin-top: 10px; */ /* margin-top: 10px; */
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
:span-method="arraySpanMethod"> :span-method="arraySpanMethod">
<el-table-column min-width="180" prop="wait_join_num" align="left" fixed="left" label="期数总状况"> <el-table-column min-width="180" prop="wait_join_num" align="left" fixed="left" label="期数总状况">
<template slot-scope="scope"> <template slot-scope="scope">
期数名称:{{scope.row.title}} 期数名称:{{scope.row.title=='合计' ? '合计' : periodName(scope.row)}}
<br /> <br />
开始时间:{{scope.row.start_at}} 开始时间:{{scope.row.start_at}}
<br /> <br />
...@@ -77,6 +77,25 @@ export default { ...@@ -77,6 +77,25 @@ export default {
}; };
}, },
methods: { methods: {
periodName(val) {
let str = '';
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.title) {
str += `${val.title}`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
return str
},
initPage() { initPage() {
getPeriodsClassCurDataApi().then(res => { getPeriodsClassCurDataApi().then(res => {
this.list = res; this.list = res;
......
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
@change="getOrderList"> @change="getOrderList">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item > <el-form-item>
<el-button type="primary" plain @click="getOrderList">搜索</el-button> <el-button type="primary" plain @click="getOrderList">搜索</el-button>
<el-button type="primary" plain @click="exportTable" v-if="$store.state.export">导出</el-button> <el-button type="primary" plain @click="exportTable" v-if="$store.state.export">导出</el-button>
</el-form-item> </el-form-item>
...@@ -98,37 +98,25 @@ ...@@ -98,37 +98,25 @@
<el-button type="success" plain @click="add" v-if="!$store.state.readonly">新增订单</el-button> <el-button type="success" plain @click="add" v-if="!$store.state.readonly">新增订单</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table <el-table size="small" :data="tableData" @expand-change="changeRow" fixed>
size="small" <el-table-column prop="out_trade_no" label="订单号"></el-table-column>
:data="tableData" <el-table-column label="购买人" width="200">
@expand-change="changeRow"
style="width: 100%" fixed >
<el-table-column
prop="out_trade_no"
label="订单号"
>
</el-table-column>
<el-table-column
label="购买人"
className="f-c"
width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}} <img style="vertical-align: top" class="avatar" :src="scope.row.user_avatar"/>
<span style="display: inline-block;">
{{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}}
</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <!--<el-table-column prop="periods_title" label="期数标题"></el-table-column>-->
prop="periods_title" <el-table-column label="期数名称" width="150px">
label="期数标题"> <template slot-scope="scope">
</el-table-column> <div v-html="periodName(scope.row)"></div>
<el-table-column <!--{{periodName(scope.row)}}-->
prop="goods_name" </template>
label="商品名称">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="goods_name" label="商品名称" width="150px"></el-table-column>
width="250" <el-table-column width="190" prop="invite_id" className="f-c" label="推广人">
prop="invite_id"
className="f-c"
label="推广人">
<template slot-scope="scope"> <template slot-scope="scope">
<div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="width:100%;display: flex;color: #409eff;cursor: pointer"> <div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="width:100%;display: flex;color: #409eff;cursor: pointer">
<img :src="scope.row.invite_avatar" class="avatar"/> <img :src="scope.row.invite_avatar" class="avatar"/>
...@@ -202,28 +190,12 @@ ...@@ -202,28 +190,12 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="pay_at" label="购买时间" sortable width="95px"></el-table-column>
prop="pay_at" <el-table-column prop="created_at" label="下单时间" sortable width="95px"></el-table-column>
label="购买时间" sortable> <el-table-column prop="desc" label="备注"></el-table-column>
</el-table-column> <el-table-column width="50" label="操作" v-if="!$store.state.readonly" fixed="right">
<el-table-column
prop="created_at"
label="下单时间" sortable>
</el-table-column>
<el-table-column
prop="desc"
label="备注">
</el-table-column>
<el-table-column
width="50"
label="操作"
v-if="!$store.state.readonly" fixed="right"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover <el-popover placement="top" width="400">
placement="top"
width="400">
<div style="text-align: center"> <div style="text-align: center">
<!--v-if="(scope.row.status == 1 || scope.row.status == 4|| scope.row.status == 5) && $store.state.orderRefund"--> <!--v-if="(scope.row.status == 1 || scope.row.status == 4|| scope.row.status == 5) && $store.state.orderRefund"-->
<el-button <el-button
...@@ -258,7 +230,7 @@ ...@@ -258,7 +230,7 @@
</el-button> </el-button>
</div> </div>
<el-button slot="reference" size="mini" type="text" >操作</el-button> <el-button slot="reference" size="mini" type="text">操作</el-button>
</el-popover> </el-popover>
</template> </template>
...@@ -306,7 +278,16 @@ ...@@ -306,7 +278,16 @@
</template> </template>
<script> <script>
import {getOrderListApi,editOrderDescApi,getGoodsListApi,getRefundListApi,exportExcelApi,getTeacherListApi,updateOrderTeacherApi,setOrderApi} from "../../service/api"; import {
getOrderListApi,
editOrderDescApi,
getGoodsListApi,
getRefundListApi,
exportExcelApi,
getTeacherListApi,
updateOrderTeacherApi,
setOrderApi
} from "../../service/api";
import page from '../framework/page' import page from '../framework/page'
import addressDialog from './dialog' import addressDialog from './dialog'
import orderDialog from './newDialog' import orderDialog from './newDialog'
...@@ -316,68 +297,78 @@ ...@@ -316,68 +297,78 @@
import detailDialog from './detail' import detailDialog from './detail'
import refundDetail from './refundDetail' import refundDetail from './refundDetail'
import AddressArray from '../framework/address-picker/addr' import AddressArray from '../framework/address-picker/addr'
import {INVITETYPE,ORDERSTATUS,BUYTYPE,BUYTYPEOPTION,ORDERSTATUSOPTION,INVITETYPEOPTION,GOODSTYPE,BUYWay,BUYTYPEWAY} from "../../util/wordbook"; import {
INVITETYPE,
ORDERSTATUS,
BUYTYPE,
BUYTYPEOPTION,
ORDERSTATUSOPTION,
INVITETYPEOPTION,
GOODSTYPE,
BUYWay,
BUYTYPEWAY
} from "../../util/wordbook";
import CommonJs from '../../util/common'; import CommonJs from '../../util/common';
export default { export default {
name: 'index', name: 'index',
data(){ data() {
return { return {
nowPage: 1, nowPage: 1,
total: 0, total: 0,
sourceDialog:{ sourceDialog: {
show:false, show: false,
out_trade_no:'' out_trade_no: ''
}, },
today:{ today: {
text:'今天', text: '今天',
onClick:()=>{ onClick: () => {
this.searchFrom.payTime = [this.formatTime(new Date())+' 00:00:00',this.formatTime(new Date())+' 23:59:59']; this.searchFrom.payTime = [this.formatTime(new Date()) + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'];
} }
}, },
yesterday:{ yesterday: {
text:'昨天', text: '昨天',
onClick:()=>{ onClick: () => {
let preDate = this.formatTime(new Date(new Date().getTime() - 24*60*60*1000)); let preDate = this.formatTime(new Date(new Date().getTime() - 24 * 60 * 60 * 1000));
this.searchFrom.payTime = [preDate+' 00:00:00',preDate+' 23:59:59']; this.searchFrom.payTime = [preDate + ' 00:00:00', preDate + ' 23:59:59'];
} }
}, },
last30Day:{ last30Day: {
text:'过去30天', text: '过去30天',
onClick:()=>{ onClick: () => {
let preDate = this.formatTime(new Date(new Date().getTime() - 30*24*60*60*1000)); let preDate = this.formatTime(new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000));
this.searchFrom.payTime = [preDate+' 00:00:00',this.formatTime(new Date())+' 23:59:59']; this.searchFrom.payTime = [preDate + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'];
} }
}, },
last7Day:{ last7Day: {
text:'过去7天', text: '过去7天',
onClick:()=>{ onClick: () => {
let preDate = this.formatTime(new Date(new Date().getTime() - 7*24*60*60*1000)); let preDate = this.formatTime(new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000));
this.searchFrom.payTime = [preDate+' 00:00:00',this.formatTime(new Date())+' 23:59:59']; this.searchFrom.payTime = [preDate + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'];
} }
}, },
couponDetail:{ couponDetail: {
show:false, show: false,
order_coupon_id:'' order_coupon_id: ''
}, },
refundDetail:{ refundDetail: {
show:false, show: false,
out_trade_no:'' out_trade_no: ''
}, },
limit: 10, limit: 10,
searchFrom: { searchFrom: {
nickname: '', nickname: '',
wait_into_course:'', wait_into_course: '',
user_id: '', user_id: '',
invite_type: '', invite_type: '',
invite_id: '', invite_id: '',
buy_type: '', buy_type: '',
order_type: '', order_type: '',
status: [1,4,5], status: [1, 4, 5],
goods_id: '', goods_id: '',
out_trade_no: '', out_trade_no: '',
payTime: [], payTime: [],
order_group_id:"", order_group_id: "",
}, },
tableData: [], tableData: [],
dialogObj: { dialogObj: {
...@@ -399,11 +390,11 @@ ...@@ -399,11 +390,11 @@
inviteTypeOption: INVITETYPEOPTION, inviteTypeOption: INVITETYPEOPTION,
orderStatusOption: ORDERSTATUSOPTION, orderStatusOption: ORDERSTATUSOPTION,
buyTypeOption: BUYTYPEOPTION, buyTypeOption: BUYTYPEOPTION,
buyWay:BUYWay, buyWay: BUYWay,
inviteSearchPlaceholder: '', inviteSearchPlaceholder: '',
rules:{ rules: {
value:[ value: [
{ required: true, message: '请输入备注', trigger: 'change' } {required: true, message: '请输入备注', trigger: 'change'}
] ]
}, },
promoterDialog: { promoterDialog: {
...@@ -418,36 +409,59 @@ ...@@ -418,36 +409,59 @@
} }
}, },
methods: { methods: {
formatTime(date){ periodName(val) {
let str = '';
if (!val.periods_title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
formatTime(date) {
let year = date.getFullYear(); let year = date.getFullYear();
let Month = date.getMonth()+1; let Month = date.getMonth() + 1;
if(Month < 10){ if (Month < 10) {
Month = `0${Month}` Month = `0${Month}`
} }
let Day = date.getDate(); let Day = date.getDate();
if(Day<10)Day = `0${Day}`; if (Day < 10) Day = `0${Day}`;
return `${year}-${Month}-${Day}`; return `${year}-${Month}-${Day}`;
}, },
showRef(data){ showRef(data) {
this.refundDetail.show = true; this.refundDetail.show = true;
this.refundDetail.out_trade_no = data.out_trade_no; this.refundDetail.out_trade_no = data.out_trade_no;
}, },
showCoupon(data){ showCoupon(data) {
this.couponDetail.show = true; this.couponDetail.show = true;
this.couponDetail.order_coupon_id = data.order_coupon_id; this.couponDetail.order_coupon_id = data.order_coupon_id;
}, },
showSource(data){ showSource(data) {
this.sourceDialog.show = true; this.sourceDialog.show = true;
this.sourceDialog.out_trade_no = data.out_trade_no; this.sourceDialog.out_trade_no = data.out_trade_no;
}, },
changeRow(data,b){ changeRow(data, b) {
if(b.indexOf(data)>-1){ if (b.indexOf(data) > -1) {
getRefundListApi({out_trade_no:data.out_trade_no}).then(res=>{ getRefundListApi({out_trade_no: data.out_trade_no}).then(res => {
data.refundList = res.list data.refundList = res.list
}) })
} }
}, },
exportTable(){ exportTable() {
let json = {}; let json = {};
if (this.searchFrom.nickname) { if (this.searchFrom.nickname) {
json.nickname = this.searchFrom.nickname json.nickname = this.searchFrom.nickname
...@@ -482,7 +496,7 @@ ...@@ -482,7 +496,7 @@
if (this.searchFrom.receive_mobile) { if (this.searchFrom.receive_mobile) {
json.receive_mobile = this.searchFrom.receive_mobile json.receive_mobile = this.searchFrom.receive_mobile
} }
if(this.searchFrom.payTime && this.searchFrom.payTime.length > 0){ if (this.searchFrom.payTime && this.searchFrom.payTime.length > 0) {
json.pay_start_at = this.searchFrom.payTime[0] json.pay_start_at = this.searchFrom.payTime[0]
json.pay_end_at = this.searchFrom.payTime[1] json.pay_end_at = this.searchFrom.payTime[1]
} }
...@@ -490,20 +504,20 @@ ...@@ -490,20 +504,20 @@
if (this.searchFrom.wait_into_course) { if (this.searchFrom.wait_into_course) {
json.wait_into_course = this.searchFrom.wait_into_course json.wait_into_course = this.searchFrom.wait_into_course
} }
json.course_type=0//月课 json.course_type = 0//月课
exportExcelApi('/api/admin/order/export',json,'月课订单列表') exportExcelApi('/api/admin/order/export', json, '月课订单列表')
}, },
getGoodsOption(){ getGoodsOption() {
let json = { let json = {
page: 1, page: 1,
limit: 100, limit: 100,
course_type:0, course_type: 0,
}; };
getGoodsListApi(json).then(res=>{ getGoodsListApi(json).then(res => {
this.goodList = res.list; this.goodList = res.list;
}) })
}, },
onInviteTypeChange(val){ onInviteTypeChange(val) {
if (val === 0) { if (val === 0) {
this.inviteSearchPlaceholder = '用户ID' this.inviteSearchPlaceholder = '用户ID'
} else if (val === 1) { } else if (val === 1) {
...@@ -513,7 +527,7 @@ ...@@ -513,7 +527,7 @@
} }
this.getOrderList(); this.getOrderList();
}, },
detail(row){ detail(row) {
let _detail = row; let _detail = row;
this.dialogDetailObj = { this.dialogDetailObj = {
show: true, show: true,
...@@ -524,15 +538,15 @@ ...@@ -524,15 +538,15 @@
this.$prompt('', '编辑备注', { this.$prompt('', '编辑备注', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
inputType:'textarea', inputType: 'textarea',
inputValue: desc || '' inputValue: desc || ''
}).then(({ value }) => { }).then(({value}) => {
this.$confirm('确定保存?', '提示', { this.$confirm('确定保存?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(()=>{ }).then(() => {
editOrderDescApi(id,'order',{desc: value}).then(res=>{ editOrderDescApi(id, 'order', {desc: value}).then(res => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '编辑备注成功' message: '编辑备注成功'
...@@ -542,16 +556,16 @@ ...@@ -542,16 +556,16 @@
}); });
}) })
}, },
onPageChange(val){ onPageChange(val) {
this.nowPage = val this.nowPage = val
this.getOrderList() this.getOrderList()
}, },
onSizeChange(val){ onSizeChange(val) {
this.limit = val; this.limit = val;
this.nowPage = 1; this.nowPage = 1;
this.getOrderList() this.getOrderList()
}, },
getOrderList(){ getOrderList() {
let json = { let json = {
limit: this.limit, limit: this.limit,
page: this.nowPage page: this.nowPage
...@@ -589,43 +603,43 @@ ...@@ -589,43 +603,43 @@
if (this.searchFrom.receive_mobile) { if (this.searchFrom.receive_mobile) {
json.receive_mobile = this.searchFrom.receive_mobile json.receive_mobile = this.searchFrom.receive_mobile
} }
if(this.searchFrom.payTime && this.searchFrom.payTime.length > 0){ if (this.searchFrom.payTime && this.searchFrom.payTime.length > 0) {
json.pay_start_at = this.searchFrom.payTime[0] json.pay_start_at = this.searchFrom.payTime[0]
json.pay_end_at = this.searchFrom.payTime[1] json.pay_end_at = this.searchFrom.payTime[1]
} }
if (this.searchFrom.wait_into_course) { if (this.searchFrom.wait_into_course) {
json.wait_into_course = this.searchFrom.wait_into_course json.wait_into_course = this.searchFrom.wait_into_course
} }
json.course_type=0 //月课 json.course_type = 0 //月课
getOrderListApi(json).then((res)=>{ getOrderListApi(json).then((res) => {
res.list.forEach(i=>{ res.list.forEach(i => {
i.refundList=[] i.refundList = []
}); });
this.tableData = res.list; this.tableData = res.list;
this.total = res.total this.total = res.total
}) })
}, },
changeDetailShow(data){ changeDetailShow(data) {
this.dialogDetailObj.show=data this.dialogDetailObj.show = data
}, },
changeShow(data){ changeShow(data) {
this.refundDialogObj.show=data this.refundDialogObj.show = data
}, },
onRefund(id, money){ onRefund(id, money) {
this.refundDialogObj.id= id; this.refundDialogObj.id = id;
this.refundDialogObj.money= money; this.refundDialogObj.money = money;
this.refundDialogObj.show = true; this.refundDialogObj.show = true;
}, },
onAfterRefund(){ onAfterRefund() {
this.refundDialogObj.show = false; this.refundDialogObj.show = false;
this.getOrderList() this.getOrderList()
}, },
onUpdateAddress(){ onUpdateAddress() {
this.dialogObj.show = false; this.dialogObj.show = false;
this.getOrderList(); this.getOrderList();
}, },
editAddress(row){ editAddress(row) {
if( !row.address_info || !row.address_info.province_name ){ if (!row.address_info || !row.address_info.province_name) {
this.dialogObj.province = '' this.dialogObj.province = ''
this.dialogObj.city = '' this.dialogObj.city = ''
this.dialogObj.district = '' this.dialogObj.district = ''
...@@ -633,18 +647,18 @@ ...@@ -633,18 +647,18 @@
let provinceObj = AddressArray.filter((item) => { let provinceObj = AddressArray.filter((item) => {
return item.label === row.address_info.province_name return item.label === row.address_info.province_name
}) })
if(provinceObj && provinceObj.length > 0){ if (provinceObj && provinceObj.length > 0) {
this.dialogObj.province = row.address_info.province_id ? row.address_info.province_id : provinceObj[0].value this.dialogObj.province = row.address_info.province_id ? row.address_info.province_id : provinceObj[0].value
if(!row.address_info.city){ if (!row.address_info.city) {
this.dialogObj.city = '' this.dialogObj.city = ''
} else { } else {
let cityObj = provinceObj[0].children.filter((city) => { let cityObj = provinceObj[0].children.filter((city) => {
return city.label === row.address_info.city return city.label === row.address_info.city
}) })
this.dialogObj.city = row.address_info.city_id ? row.address_info.city_id : cityObj[0].value this.dialogObj.city = row.address_info.city_id ? row.address_info.city_id : cityObj[0].value
if(!row.address_info.area){ if (!row.address_info.area) {
this.dialogObj.district = '' this.dialogObj.district = ''
}else { } else {
let districtObj = cityObj[0].children.filter((district) => { let districtObj = cityObj[0].children.filter((district) => {
return district.label === row.address_info.area return district.label === row.address_info.area
}); });
...@@ -664,26 +678,26 @@ ...@@ -664,26 +678,26 @@
this.dialogObj.city_name = row.address_info ? row.address_info.city : ''; this.dialogObj.city_name = row.address_info ? row.address_info.city : '';
this.dialogObj.district_name = row.address_info ? row.address_info.area : ''; this.dialogObj.district_name = row.address_info ? row.address_info.area : '';
this.dialogObj.id = row.id; this.dialogObj.id = row.id;
this.dialogObj.show=true; this.dialogObj.show = true;
}, },
getTeacherList(name){ getTeacherList(name) {
this.loading = true this.loading = true
let json = { let json = {
limit: this.promoterDialog.limit, limit: this.promoterDialog.limit,
page: this.promoterDialog.nowPage page: this.promoterDialog.nowPage
}; };
if(name) { if (name) {
json.name = name json.name = name
} }
getTeacherListApi(json).then(res=>{ getTeacherListApi(json).then(res => {
this.teacherList = res.list this.teacherList = res.list
this.loading = false this.loading = false
}); });
}, },
handleCurrentTeacherChange(val){ handleCurrentTeacherChange(val) {
console.log('handleCurrentTeacherChange', val) console.log('handleCurrentTeacherChange', val)
}, },
updateTeacher(val){ updateTeacher(val) {
this.promoterDialog.show = true; this.promoterDialog.show = true;
this.promoterDialog.id = val.id; this.promoterDialog.id = val.id;
this.promoterDialog.teacher_id = val.invite_id; this.promoterDialog.teacher_id = val.invite_id;
...@@ -696,15 +710,15 @@ ...@@ -696,15 +710,15 @@
this.getTeacherList(); this.getTeacherList();
} }
}, },
saveTeacher(){ saveTeacher() {
this.$confirm('此操作将修改推广人?', '提示', { this.$confirm('此操作将修改推广人?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
console.log('this.promoterDialog.teacher_id', this.promoterDialog) console.log('this.promoterDialog.teacher_id', this.promoterDialog)
updateOrderTeacherApi(this.promoterDialog.id,this.promoterDialog.teacher_id).then(res=>{ updateOrderTeacherApi(this.promoterDialog.id, this.promoterDialog.teacher_id).then(res => {
this.promoterDialog.id=''; this.promoterDialog.id = '';
this.promoterDialog.teacher_id = ''; this.promoterDialog.teacher_id = '';
this.promoterDialog.show = false; this.promoterDialog.show = false;
this.$message({ this.$message({
...@@ -715,8 +729,8 @@ ...@@ -715,8 +729,8 @@
}); });
}); });
}, },
add(){ add() {
this.newdialogObj.show=true; this.newdialogObj.show = true;
}, },
}, },
components: { components: {
...@@ -729,44 +743,44 @@ ...@@ -729,44 +743,44 @@
couponDialog, couponDialog,
page page
}, },
mounted(){ mounted() {
if (this.$route.query.code) { if (this.$route.query.code) {
this.searchFrom.invite_type = this.$route.query.code this.searchFrom.invite_type = this.$route.query.code
} }
this.getOrderList(); this.getOrderList();
this.getGoodsOption(); this.getGoodsOption();
}, },
watch:{ watch: {
"newdialogObj.show":function(val){ "newdialogObj.show": function (val) {
if(!val){ if (!val) {
this.getOrderList(); this.getOrderList();
} }
} }
}, },
filters:{ filters: {
payMentFilter(val){ payMentFilter(val) {
return val=='1'?'已付款':'未付款' return val == '1' ? '已付款' : '未付款'
}, },
courseTypeFilter(val){ courseTypeFilter(val) {
return val.type=='1'?`正式课(${val.duration}个月)`:`试听课(${val.duration}天)` return val.type == '1' ? `正式课(${val.duration}个月)` : `试听课(${val.duration}天)`
}, },
inviteType(value){ inviteType(value) {
return INVITETYPE[value] return INVITETYPE[value]
}, },
status(value){ status(value) {
return ORDERSTATUS[value] return ORDERSTATUS[value]
}, },
buyType(value){ buyType(value) {
return BUYTYPE[value] return BUYTYPE[value]
}, },
moneytFilter(val){ moneytFilter(val) {
return val = val / 100 + '元' return val = val / 100 + '元'
}, },
filterGoods(val){ filterGoods(val) {
return '[' +val.id + ']' + '[' + GOODSTYPE[val.goods_type] + ']' + '[' +val.current_price / 100 + '元]' + val.name return '[' + val.id + ']' + '[' + GOODSTYPE[val.goods_type] + ']' + '[' + val.current_price / 100 + '元]' + val.name
}, },
buyTypeWay(value){ buyTypeWay(value) {
return BUYTYPEWAY[value] return BUYTYPEWAY[value]
}, },
} }
...@@ -774,16 +788,17 @@ ...@@ -774,16 +788,17 @@
</script> </script>
<style scoped> <style scoped>
.avatar{ .avatar {
width: 50px; width: 50px;
min-width: 50px; min-width: 50px;
height: 50px; height: 50px;
margin-right: 5px; margin-right: 5px;
border-radius: 50%; border-radius: 50%;
} }
.order {
.order {
padding: 20px 0; padding: 20px 0;
} }
</style> </style>
<style> <style>
.f-c > .cell { .f-c > .cell {
......
...@@ -35,12 +35,14 @@ ...@@ -35,12 +35,14 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="class_name" label="班级名称"> <el-table-column prop="class_name" label="班级名称"></el-table-column>
</el-table-column> <el-table-column label="期数名称" prop="periods_name" width="170px">
<el-table-column label="期数标题" prop="periods_name"> <template slot-scope="scope">
</el-table-column> <div v-html="periodName(scope.row)"></div>
<el-table-column label="商品名称" prop="goods_name"> <!--{{periodName(scope.row)}}-->
</template>
</el-table-column> </el-table-column>
<el-table-column label="商品名称" prop="goods_name"></el-table-column>
<el-table-column label="手机号" prop="mobile"> <el-table-column label="手机号" prop="mobile">
</el-table-column> </el-table-column>
<el-table-column prop="created_at" label="创建时间" sortable> <el-table-column prop="created_at" label="创建时间" sortable>
...@@ -54,19 +56,19 @@ ...@@ -54,19 +56,19 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<page :nowPage="nowPage" :total="total" @pageChange="onPageChange" @sizeChange="onSizeChange" /> <page :nowPage="nowPage" :total="total" @pageChange="onPageChange" @sizeChange="onSizeChange"/>
<entrance :entranceObj="entranceObj"/> <entrance :entranceObj="entranceObj"/>
</div> </div>
</template> </template>
<script> <script>
import entrance from "./entrance"; import entrance from "./entrance";
import { getClassConfigApi ,getGoodsListApi,updateDescApi,exportExcelApi } from "../../service/api"; import {getClassConfigApi, getGoodsListApi, updateDescApi, exportExcelApi} from "../../service/api";
import page from "../framework/page"; import page from "../framework/page";
import {GOODSTYPE} from "../../util/wordbook"; import {GOODSTYPE} from "../../util/wordbook";
export default { export default {
name: "notBuyClass", name: "notBuyClass",
data() { data() {
return { return {
...@@ -78,21 +80,21 @@ export default { ...@@ -78,21 +80,21 @@ export default {
title: "无需登录入口", title: "无需登录入口",
show: false show: false
}, },
searchFrom:{ searchFrom: {
user_id:"", user_id: "",
goods_id:"", goods_id: "",
mobile:"", mobile: "",
}, },
goodList:[], goodList: [],
}; };
}, },
components: { components: {
entrance, entrance,
page page
}, },
filters:{ filters: {
filterGoods(val){ filterGoods(val) {
return '[' + GOODSTYPE[val.goods_type] + ']' + '[' +val.current_price / 100 + '元]' + val.name return '[' + GOODSTYPE[val.goods_type] + ']' + '[' + val.current_price / 100 + '元]' + val.name
} }
}, },
mounted() { mounted() {
...@@ -101,6 +103,29 @@ export default { ...@@ -101,6 +103,29 @@ export default {
}, },
methods: { methods: {
periodName(val) {
let str = '';
if (!val.periods_name) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_name) {
str += `${val.periods_name}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
onPageChange(val) { onPageChange(val) {
this.nowPage = val; this.nowPage = val;
this.getList(); this.getList();
...@@ -116,29 +141,29 @@ export default { ...@@ -116,29 +141,29 @@ export default {
page: this.nowPage page: this.nowPage
}; };
// 搜索筛选 // 搜索筛选
if(this.searchFrom.user_id){ if (this.searchFrom.user_id) {
json.user_id=this.searchFrom.user_id json.user_id = this.searchFrom.user_id
} }
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.nickname){ if (this.searchFrom.nickname) {
json.nickname=this.searchFrom.nickname json.nickname = this.searchFrom.nickname
} }
if(this.searchFrom.mobile){ if (this.searchFrom.mobile) {
json.mobile=this.searchFrom.mobile json.mobile = this.searchFrom.mobile
} }
getClassConfigApi(json).then(res => { getClassConfigApi(json).then(res => {
this.total = res.total; this.total = res.total;
this.configList=res.list; this.configList = res.list;
}); });
}, },
getGoodsOption(){ getGoodsOption() {
let json = { let json = {
page: 1, page: 1,
limit: 100 limit: 100
}; };
getGoodsListApi(json).then(res=>{ getGoodsListApi(json).then(res => {
this.goodList = res.list; this.goodList = res.list;
}) })
}, },
...@@ -146,15 +171,15 @@ export default { ...@@ -146,15 +171,15 @@ export default {
this.$prompt('', '编辑备注', { this.$prompt('', '编辑备注', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
inputType:'textarea', inputType: 'textarea',
inputValue: desc || '' inputValue: desc || ''
}).then(({ value }) => { }).then(({value}) => {
this.$confirm('确定保存?', '提示', { this.$confirm('确定保存?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(()=>{ }).then(() => {
updateDescApi({desc: value},id).then(res=>{ updateDescApi({desc: value}, id).then(res => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '编辑备注成功' message: '编辑备注成功'
...@@ -164,48 +189,51 @@ export default { ...@@ -164,48 +189,51 @@ export default {
}); });
}) })
}, },
exportTable(){ exportTable() {
let json = {}; let json = {};
if(this.searchFrom.user_id){ if (this.searchFrom.user_id) {
json.user_id=this.searchFrom.user_id json.user_id = this.searchFrom.user_id
} }
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.mobile){ if (this.searchFrom.mobile) {
json.mobile=this.searchFrom.mobile json.mobile = this.searchFrom.mobile
} }
if(this.searchFrom.nickname){ if (this.searchFrom.nickname) {
json.nickname=this.searchFrom.nickname json.nickname = this.searchFrom.nickname
} }
exportExcelApi('/api/admin/user/receive/course/log/export',json) exportExcelApi('/api/admin/user/receive/course/log/export', json)
}, },
} }
}; };
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.not_buy { .not_buy {
.head { .head {
margin-bottom: 10px; margin-bottom: 10px;
} }
width: 100%; width: 100%;
padding: 20px 0; padding: 20px 0;
.page-div { .page-div {
text-align: center; text-align: center;
padding-top: 20px; padding-top: 20px;
} }
} }
.avatar { .avatar {
width: 50px; width: 50px;
min-width:50px !important; min-width: 50px !important;
height: 50px; height: 50px;
border-radius: 50%; border-radius: 50%;
line-height:1; line-height: 1;
} }
</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;
......
...@@ -83,26 +83,29 @@ ...@@ -83,26 +83,29 @@
</el-table-column> </el-table-column>
<el-table-column label="购买人" className="f-c" width="150"> <el-table-column label="购买人" className="f-c" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar" /> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}} <img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>&lt;!&ndash;&ndash;&gt;-->
prop="periods_title" <el-table-column prop="periods_title" label="期数名称" width="150px">
label="期数标题"> <template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column> </el-table-column>
<el-table-column prop="goods_name" label="商品名称" width="160"> <el-table-column prop="goods_name" label="商品名称" width="160">
</el-table-column> </el-table-column>
<el-table-column width="250" prop="invite_id" className="f-c" label="来源"> <el-table-column width="250" prop="invite_id" className="f-c" label="来源">
<template slot-scope="scope"> <template slot-scope="scope">
<div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="width:100%;display: flex;color: #409eff;cursor: pointer"> <div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="width:100%;display: flex;color: #409eff;cursor: pointer">
<img :src="scope.row.invite_avatar" class="avatar" /> 类型:{{scope.row.invite_type}} ({{scope.row.invite_name}}) <img :src="scope.row.invite_avatar" class="avatar"/> 类型:{{scope.row.invite_type}} ({{scope.row.invite_name}})
<br> 收益:{{scope.row.invite_earnings / 100}} <br> 收益:{{scope.row.invite_earnings / 100}}
<br> 用户ID:{{scope.row.invite_id}} <br> 用户ID:{{scope.row.invite_id}}
<br> 昵称:{{scope.row.invite_nickname}} <br> 昵称:{{scope.row.invite_nickname}}
<br> 手机:{{scope.row.invite_mobile}} <br> 手机:{{scope.row.invite_mobile}}
</div> </div>
<div v-if="scope.row.invite_earnings === 0 && scope.row.invite_id !== 0" style="display: flex;"> <div v-if="scope.row.invite_earnings === 0 && scope.row.invite_id !== 0" style="display: flex;">
<img :src="scope.row.invite_avatar" class="avatar" /> 类型:{{scope.row.invite_type}} ({{scope.row.invite_name}}) <img :src="scope.row.invite_avatar" class="avatar"/> 类型:{{scope.row.invite_type}} ({{scope.row.invite_name}})
<br> 收益:{{scope.row.invite_earnings / 100}} <br> 收益:{{scope.row.invite_earnings / 100}}
<br> 用户ID:{{scope.row.invite_id}} <br> 用户ID:{{scope.row.invite_id}}
<br> 昵称:{{scope.row.invite_nickname}} <br> 昵称:{{scope.row.invite_nickname}}
...@@ -187,7 +190,7 @@ ...@@ -187,7 +190,7 @@
</el-table> </el-table>
<address-dialog :dialogObj="dialogObj" @reflash="onUpdateAddress"></address-dialog> <address-dialog :dialogObj="dialogObj" @reflash="onUpdateAddress"></address-dialog>
<refund-dialog :dialogObj="refundDialogObj" @reflash="onAfterRefund" @changeShow="changeShow"></refund-dialog> <refund-dialog :dialogObj="refundDialogObj" @reflash="onAfterRefund" @changeShow="changeShow"></refund-dialog>
<detail-dialog :dialogObj="dialogDetailObj" @changeShow="changeDetailShow" /> <detail-dialog :dialogObj="dialogDetailObj" @changeShow="changeDetailShow"/>
<source-dialog :dialogObj="sourceDialog"/> <source-dialog :dialogObj="sourceDialog"/>
<refund-detail :dialogObj="refundDetail"/> <refund-detail :dialogObj="refundDetail"/>
<coupon-dialog :dialogObj="couponDetail"/> <coupon-dialog :dialogObj="couponDetail"/>
...@@ -205,12 +208,12 @@ ...@@ -205,12 +208,12 @@
<el-button type="primary" @click="saveTeacher">确 定</el-button> <el-button type="primary" @click="saveTeacher">确 定</el-button>
</span> </span>
</el-dialog> </el-dialog>
<page :nowPage="nowPage" :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange" /> <page :nowPage="nowPage" :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/>
</div> </div>
</template> </template>
<script> <script>
import { import {
getOrderListApi, getOrderListApi,
editOrderDescApi, editOrderDescApi,
getGoodsListApi, getGoodsListApi,
...@@ -219,16 +222,16 @@ import { ...@@ -219,16 +222,16 @@ import {
getTeacherListApi, getTeacherListApi,
updateOrderTeacherApi, updateOrderTeacherApi,
setOrderApi setOrderApi
} from "../../service/api"; } from "../../service/api";
import page from "../framework/page"; import page from "../framework/page";
import addressDialog from "./dialog"; import addressDialog from "./dialog";
import sourceDialog from "./sourceDialog"; import sourceDialog from "./sourceDialog";
import refundDialog from "./refundDialog"; import refundDialog from "./refundDialog";
import couponDialog from "./couponDialog"; import couponDialog from "./couponDialog";
import detailDialog from "./detail"; import detailDialog from "./detail";
import refundDetail from "./refundDetail"; import refundDetail from "./refundDetail";
import AddressArray from "../framework/address-picker/addr"; import AddressArray from "../framework/address-picker/addr";
import { import {
INVITETYPE, INVITETYPE,
ORDERSTATUS, ORDERSTATUS,
BUYTYPE, BUYTYPE,
...@@ -238,40 +241,40 @@ import { ...@@ -238,40 +241,40 @@ import {
GOODSTYPE, GOODSTYPE,
ISLEADER, ISLEADER,
ISLEADEROPTION ISLEADEROPTION
} from "../../util/wordbook"; } from "../../util/wordbook";
import CommonJs from "../../util/common"; import CommonJs from "../../util/common";
export default { export default {
name: "index", name: "index",
data() { data() {
return { return {
nowPage: 1, nowPage: 1,
total: 0, total: 0,
today:{ today: {
text:'今天', text: '今天',
onClick:()=>{ onClick: () => {
this.searchFrom.payTime = [this.formatTime(new Date())+' 00:00:00',this.formatTime(new Date())+' 23:59:59']; this.searchFrom.payTime = [this.formatTime(new Date()) + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'];
} }
}, },
yesterday:{ yesterday: {
text:'昨天', text: '昨天',
onClick:()=>{ onClick: () => {
let preDate = this.formatTime(new Date(new Date().getTime() - 24*60*60*1000)); let preDate = this.formatTime(new Date(new Date().getTime() - 24 * 60 * 60 * 1000));
this.searchFrom.payTime = [preDate+' 00:00:00',preDate+' 23:59:59']; this.searchFrom.payTime = [preDate + ' 00:00:00', preDate + ' 23:59:59'];
} }
}, },
last30Day:{ last30Day: {
text:'过去30天', text: '过去30天',
onClick:()=>{ onClick: () => {
let preDate = this.formatTime(new Date(new Date().getTime() - 30*24*60*60*1000)); let preDate = this.formatTime(new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000));
this.searchFrom.payTime = [preDate+' 00:00:00',this.formatTime(new Date())+' 23:59:59']; this.searchFrom.payTime = [preDate + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'];
} }
}, },
last7Day:{ last7Day: {
text:'过去7天', text: '过去7天',
onClick:()=>{ onClick: () => {
let preDate = this.formatTime(new Date(new Date().getTime() - 7*24*60*60*1000)); let preDate = this.formatTime(new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000));
this.searchFrom.payTime = [preDate+' 00:00:00',this.formatTime(new Date())+' 23:59:59']; this.searchFrom.payTime = [preDate + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'];
} }
}, },
sourceDialog: { sourceDialog: {
...@@ -289,7 +292,7 @@ export default { ...@@ -289,7 +292,7 @@ export default {
limit: 10, limit: 10,
searchFrom: { searchFrom: {
nickname: "", nickname: "",
wait_into_course:'', wait_into_course: '',
user_id: "", user_id: "",
invite_type: "", invite_type: "",
invite_id: "", invite_id: "",
...@@ -299,7 +302,7 @@ export default { ...@@ -299,7 +302,7 @@ export default {
out_trade_no: "", out_trade_no: "",
payTime: [], payTime: [],
order_group_id: "", order_group_id: "",
is_captain:"", is_captain: "",
}, },
tableData: [], tableData: [],
dialogObj: { dialogObj: {
...@@ -320,7 +323,7 @@ export default { ...@@ -320,7 +323,7 @@ export default {
buyTypeOption: BUYTYPEOPTION, buyTypeOption: BUYTYPEOPTION,
inviteSearchPlaceholder: "", inviteSearchPlaceholder: "",
rules: { rules: {
value: [{ required: true, message: "请输入备注", trigger: "change" }] value: [{required: true, message: "请输入备注", trigger: "change"}]
}, },
promoterDialog: { promoterDialog: {
show: false, show: false,
...@@ -331,18 +334,41 @@ export default { ...@@ -331,18 +334,41 @@ export default {
}, },
teacherList: [], teacherList: [],
loading: false, loading: false,
isLeaderOption:ISLEADEROPTION, isLeaderOption: ISLEADEROPTION,
}; };
}, },
methods: { methods: {
formatTime(date){ periodName(val) {
let str = '';
if (!val.periods_title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
formatTime(date) {
let year = date.getFullYear(); let year = date.getFullYear();
let Month = date.getMonth()+1; let Month = date.getMonth() + 1;
if(Month < 10){ if (Month < 10) {
Month = `0${Month}` Month = `0${Month}`
} }
let Day = date.getDate(); let Day = date.getDate();
if(Day<10)Day = `0${Day}`; if (Day < 10) Day = `0${Day}`;
return `${year}-${Month}-${Day}`; return `${year}-${Month}-${Day}`;
}, },
showRef(data) { showRef(data) {
...@@ -359,7 +385,7 @@ export default { ...@@ -359,7 +385,7 @@ export default {
}, },
changeRow(data, b) { changeRow(data, b) {
if (b.indexOf(data) > -1) { if (b.indexOf(data) > -1) {
getRefundListApi({ out_trade_no: data.out_trade_no }).then(res => { getRefundListApi({out_trade_no: data.out_trade_no}).then(res => {
data.refundList = res.list; data.refundList = res.list;
}); });
} }
...@@ -404,14 +430,14 @@ export default { ...@@ -404,14 +430,14 @@ export default {
json.wait_into_course = this.searchFrom.wait_into_course json.wait_into_course = this.searchFrom.wait_into_course
} }
json.course_type = 1; //日课 json.course_type = 1; //日课
exportExcelApi("/api/admin/order/export", json,'日课订单列表'); exportExcelApi("/api/admin/order/export", json, '日课订单列表');
}, },
getGoodsOption() { getGoodsOption() {
let json = { let json = {
page: 1, page: 1,
limit: 100, limit: 100,
course_type:1, course_type: 1,
status:"1,2" status: "1,2"
}; };
getGoodsListApi(json).then(res => { getGoodsListApi(json).then(res => {
...@@ -442,13 +468,13 @@ export default { ...@@ -442,13 +468,13 @@ export default {
cancelButtonText: "取消", cancelButtonText: "取消",
inputType: "textarea", inputType: "textarea",
inputValue: desc || "" inputValue: desc || ""
}).then(({ value }) => { }).then(({value}) => {
this.$confirm("确定保存?", "提示", { this.$confirm("确定保存?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
editOrderDescApi(id, "order", { desc: value }).then(res => { editOrderDescApi(id, "order", {desc: value}).then(res => {
this.$message({ this.$message({
type: "success", type: "success",
message: "编辑备注成功" message: "编辑备注成功"
...@@ -667,10 +693,9 @@ export default { ...@@ -667,10 +693,9 @@ export default {
this.getOrderList(); this.getOrderList();
this.getGoodsOption(); this.getGoodsOption();
}, },
watch: { watch: {},
},
filters: { filters: {
isLeader(value){ isLeader(value) {
return ISLEADER[value] return ISLEADER[value]
}, },
payMentFilter(val) { payMentFilter(val) {
...@@ -708,26 +733,27 @@ export default { ...@@ -708,26 +733,27 @@ export default {
); );
} }
} }
}; };
</script> </script>
<style scoped> <style scoped>
.avatar { .avatar {
width: 50px; width: 50px;
min-width: 50px; min-width: 50px;
height: 50px; height: 50px;
margin-right: 5px; margin-right: 5px;
border-radius: 50%; border-radius: 50%;
} }
.order {
.order {
padding: 20px 0; padding: 20px 0;
} }
</style> </style>
<style> <style>
.f-c > .cell { .f-c > .cell {
display: flex !important; display: flex !important;
flex-flow: row; flex-flow: row;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
</style> </style>
...@@ -550,7 +550,7 @@ ...@@ -550,7 +550,7 @@
<style scoped lang="less"> <style scoped lang="less">
@import "../../util/public"; @import "../../util/public";
.user{ .user{
height: 100%; /*height: 100%;*/
overflow: auto; overflow: auto;
padding: 20px 0; padding: 20px 0;
.btn-content{ .btn-content{
......
...@@ -3,9 +3,7 @@ ...@@ -3,9 +3,7 @@
<div class="header"> <div class="header">
<el-card style="width: 450px;display: inline-block;margin-right: 10px"> <el-card style="width: 450px;display: inline-block;margin-right: 10px">
<div slot="header"> <div slot="header">
<span> <span><label>{{detail.type | teacherType}}</label> {{detail.name}}(T{{detail.squad}}</span>
<label>{{detail.type | teacherType}}</label> {{detail.name}}(T{{detail.squad}}
</span>
<el-button style="float: right;margin-top: -6px;" size="small" type="success" v-if="!$store.state.readonly" plain @click="onAddUser(true)">老师绑定用户</el-button> <el-button style="float: right;margin-top: -6px;" size="small" type="success" v-if="!$store.state.readonly" plain @click="onAddUser(true)">老师绑定用户</el-button>
</div> </div>
<div class="card-content"> <div class="card-content">
...@@ -36,9 +34,7 @@ ...@@ -36,9 +34,7 @@
<el-card style="width: 450px;display: inline-block;margin-right: 10px" v-if="detail.user_info"> <el-card style="width: 450px;display: inline-block;margin-right: 10px" v-if="detail.user_info">
<div slot="header"> <div slot="header">
<span>绑定用户</span> <span>绑定用户</span>
<el-button @click="createInviteLink(detail.user_info)" style="float: right;" size="mini" plain type="primary"> <el-button @click="createInviteLink(detail.user_info)" style="float: right;" size="mini" plain type="primary">复制专属链接</el-button>
复制专属链接
</el-button>
</div> </div>
<div class="card-content"> <div class="card-content">
<div class="text item"> <div class="text item">
...@@ -78,60 +74,47 @@ ...@@ -78,60 +74,47 @@
<el-tab-pane label="今日任务" name="task"> <el-tab-pane label="今日任务" name="task">
<task :parentDetail="parentDetail"></task> <task :parentDetail="parentDetail"></task>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="期数列表" name="periods" > <el-tab-pane label="期数列表" name="periods">
<el-table <el-table @expand-change="changeRow" :data="list">
@expand-change="changeRow"
:data="list"
style="width: 100%">
<el-table-column type="expand"> <el-table-column type="expand">
<template slot-scope="scope"> <template slot-scope="scope">
<el-table <el-table :data="[scope.row]">
:data="[scope.row]" <el-table-column label="到课率">
style="width: 100%">
<el-table-column
label="到课率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.arrive_course_rate | percent}}</span> <span>{{ scope2.row.arrive_course_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="看课率">
label="看课率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.watch_course_rate | percent}}</span> <span>{{ scope2.row.watch_course_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="完课率">
label="完课率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.over_course_rate | percent}}</span> <span>{{ scope2.row.over_course_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="作业率">
label="作业率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.work_rate | percent}}</span> <span>{{ scope2.row.work_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="全勤作业率">
label="全勤作业率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.over_work_rate | percent}}</span> <span>{{ scope2.row.over_work_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="打卡率">
label="打卡率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.clock_rate | percent}}</span> <span>{{ scope2.row.clock_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="全勤打卡率">
label="全勤打卡率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.over_clock_rate | percent}}</span> <span>{{ scope2.row.over_clock_rate | percent}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="转化率">
label="转化率">
<template slot-scope="scope2"> <template slot-scope="scope2">
<span>{{ scope2.row.transform_rate | percent}}</span> <span>{{ scope2.row.transform_rate | percent}}</span>
</template> </template>
...@@ -139,7 +122,13 @@ ...@@ -139,7 +122,13 @@
</el-table> </el-table>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="periods_title" label="期数名称"></el-table-column> <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
<el-table-column prop="periods_title" label="期数名称">
<template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column>
<el-table-column prop="class_name" label="班级名称"></el-table-column> <el-table-column prop="class_name" label="班级名称"></el-table-column>
<el-table-column prop="join_num" label="已进班人数" width="90px"></el-table-column> <el-table-column prop="join_num" label="已进班人数" width="90px"></el-table-column>
<el-table-column prop="need_add_teacher_num" label="需加好友数" width="90px"></el-table-column> <el-table-column prop="need_add_teacher_num" label="需加好友数" width="90px"></el-table-column>
...@@ -158,7 +147,7 @@ ...@@ -158,7 +147,7 @@
</el-table> </el-table>
<page :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/> <page :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="系统订单列表" name="order" > <el-tab-pane label="系统订单列表" name="order">
<el-form ref="form" :model="form" label-width="100px" inline> <el-form ref="form" :model="form" label-width="100px" inline>
<el-form-item label="用户ID"> <el-form-item label="用户ID">
<el-input v-model="form.user_id"></el-input> <el-input v-model="form.user_id"></el-input>
...@@ -195,39 +184,26 @@ ...@@ -195,39 +184,26 @@
<el-form-item label="交易订单号"> <el-form-item label="交易订单号">
<el-input v-model="form.out_trade_no"></el-input> <el-input v-model="form.out_trade_no"></el-input>
</el-form-item> </el-form-item>
<el-form-item > <el-form-item>
<el-button type="primary" plain @click="getOrderList">搜索</el-button> <el-button type="primary" plain @click="getOrderList">搜索</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table <el-table :data="tableData" class="order_list" fixed>
:data="tableData" <el-table-column prop="out_trade_no" label="订单号"></el-table-column>
style="width: 100%" class="order_list" fixed> <el-table-column label="购买人" className="f-c" width="150">
<el-table-column
prop="out_trade_no"
label="订单号"
>
</el-table-column>
<el-table-column
label="购买人"
className="f-c"
width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}} <img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
prop="periods_title" <el-table-column prop="periods_title" label="期数名称" width="170px">
label="期数标题"> <template slot-scope="scope">
</el-table-column> <div v-html="periodName(scope.row)"></div>
<el-table-column <!--{{periodName(scope.row)}}-->
prop="goods_name" </template>
label="商品名称">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="goods_name" label="商品名称"></el-table-column>
width="250" <el-table-column width="250" prop="invite_id" className="f-c" label="推广人">
prop="invite_id"
className="f-c"
label="推广人">
<template slot-scope="scope"> <template slot-scope="scope">
<div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="width:100%;display: flex;color: #409eff;cursor: pointer"> <div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="width:100%;display: flex;color: #409eff;cursor: pointer">
<img :src="scope.row.invite_avatar" class="avatar"/> <img :src="scope.row.invite_avatar" class="avatar"/>
...@@ -253,39 +229,29 @@ ...@@ -253,39 +229,29 @@
<br> <br>
手机:{{scope.row.invite_mobile}} 手机:{{scope.row.invite_mobile}}
</div> </div>
<div v-if="scope.row.invite_id === 0"> <div v-if="scope.row.invite_id === 0"></div>
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="优惠活动">
label="优惠活动">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.order_coupon_id === 0"> <span v-if="scope.row.order_coupon_id === 0"></span>
</span>
<el-button type="text" v-if="scope.row.order_coupon_id !== 0" @click="showCoupon(scope.row)"> <el-button type="text" v-if="scope.row.order_coupon_id !== 0" @click="showCoupon(scope.row)">
优惠券 优惠券
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="付款状态" width="80">
label="付款状态"
width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" v-if="scope.row.status === 5 || scope.row.status === 3" @click="showRef(scope.row)">{{scope.row.status|status}}</el-button> <el-button type="text" v-if="scope.row.status === 5 || scope.row.status === 3" @click="showRef(scope.row)">{{scope.row.status|status}}</el-button>
<div v-if="scope.row.status !== 5 && scope.row.status !== 3">{{scope.row.status|status}}</div> <div v-if="scope.row.status !== 5 && scope.row.status !== 3">{{scope.row.status|status}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="实付金额" width="80">
label="实付金额"
width="80">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.money | moneytFilter}} {{scope.row.money | moneytFilter}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="收货地址">
label="收货地址">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.user_address_id && scope.row.address_info"> <div v-if="scope.row.user_address_id && scope.row.address_info">
{{scope.row.address_info.receive_name}}<br> {{scope.row.address_info.receive_name}}<br>
...@@ -294,46 +260,23 @@ ...@@ -294,46 +260,23 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="pay_at" label="购买时间" sortable></el-table-column>
prop="pay_at" <el-table-column prop="created_at" label="下单时间" sortable></el-table-column>
label="购买时间" sortable> <el-table-column prop="desc" label="备注"></el-table-column>
</el-table-column> <el-table-column width="50" label="操作" v-if="!$store.state.readonly" fixed="right">
<el-table-column
prop="created_at"
label="下单时间" sortable>
</el-table-column>
<el-table-column
prop="desc"
label="备注">
</el-table-column>
<el-table-column
width="50"
label="操作"
v-if="!$store.state.readonly" fixed="right"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover <el-popover placement="top" width="200">
placement="top"
width="200">
<div style="text-align: center"> <div style="text-align: center">
<el-button <el-button @click="editComment(scope.row.id, scope.row.desc)" type="info" plain size="mini">编辑备注</el-button>
@click="editComment(scope.row.id, scope.row.desc)"
type="info"
plain
size="mini">
编辑备注
</el-button>
</div> </div>
<el-button slot="reference" size="mini" type="text" >操作</el-button> <el-button slot="reference" size="mini" type="text">操作</el-button>
</el-popover> </el-popover>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<page :total="orderListObj.total" :limit="orderListObj.limit" @pageChange="onPageChange2" @sizeChange="onSizeChange2"/> <page :total="orderListObj.total" :limit="orderListObj.limit" @pageChange="onPageChange2" @sizeChange="onSizeChange2"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="外部订单列表" name="yunji" > <el-tab-pane label="外部订单列表" name="yunji">
<el-form ref="form" :model="form" label-width="100px" inline> <el-form ref="form" :model="form" label-width="100px" inline>
<el-form-item label="用户ID"> <el-form-item label="用户ID">
<el-input v-model="form.user_id"></el-input> <el-input v-model="form.user_id"></el-input>
...@@ -370,30 +313,29 @@ ...@@ -370,30 +313,29 @@
<el-form-item label="交易订单号"> <el-form-item label="交易订单号">
<el-input v-model="form.out_trade_no"></el-input> <el-input v-model="form.out_trade_no"></el-input>
</el-form-item> </el-form-item>
<el-form-item > <el-form-item>
<el-button type="primary" plain @click="getyunjiList">搜索</el-button> <el-button type="primary" plain @click="getyunjiList">搜索</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table <el-table :data="yunjiList" class="order_list" fixed>
:data="yunjiList" <el-table-column prop="order_id" width="80" label="订单号"></el-table-column>
style="width: 100%" class="order_list" fixed>
<el-table-column prop="order_id" width="80" label="订单号">
</el-table-column>
<el-table-column prop="nickname" label="购买人"> <el-table-column prop="nickname" label="购买人">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if='scope.row.user_id !== 0' > <div v-if='scope.row.user_id !== 0'>
<img class="avatar" :src="scope.row.avatar" /> <img class="avatar" :src="scope.row.avatar"/>
<div>{{scope.row.nickname}}<br>(ID:{{scope.row.user_id}})</div> <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 prop="periods_title" label="期数"> <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
</el-table-column> <el-table-column prop="periods_title" label="期数名称" width="170px">
<el-table-column prop="goods_name" label="商品名称"> <template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column> </el-table-column>
<el-table-column prop="goods_name" label="商品名称"></el-table-column>
<el-table-column prop="invite_type" label="来源"> <el-table-column prop="invite_type" label="来源">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.invite_type}}{{scope.row.invite_name}} {{scope.row.invite_type}}{{scope.row.invite_name}}
...@@ -424,18 +366,14 @@ ...@@ -424,18 +366,14 @@
{{scope.row.active_at === '0000-00-00 00:00:00'?'未激活':scope.row.active_at}} {{scope.row.active_at === '0000-00-00 00:00:00'?'未激活':scope.row.active_at}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="create_time" label="下单时间" width="90"> <el-table-column prop="create_time" label="下单时间" width="90"></el-table-column>
</el-table-column> <el-table-column prop="pay_time" label="付款时间" width="90"></el-table-column>
<el-table-column prop="pay_time" label="付款时间" width="90"> <el-table-column prop="user_status" :formatter="userStatusFormatter" label="沟通状态" width="90"></el-table-column>
</el-table-column> <el-table-column prop="desc" label="备注"></el-table-column>
<el-table-column prop="user_status" :formatter="userStatusFormatter" label="沟通状态" width="90">
</el-table-column>
<el-table-column prop="desc" label="备注">
</el-table-column>
</el-table> </el-table>
<page :total="yunjiListObj.total" :limit="yunjiListObj.limit" @pageChange="onPageChange3" @sizeChange="onSizeChange3"/> <page :total="yunjiListObj.total" :limit="yunjiListObj.limit" @pageChange="onPageChange3" @sizeChange="onSizeChange3"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="话术列表" name="huashu" > <el-tab-pane label="话术列表" name="huashu">
<div class="cssbox"> <div class="cssbox">
<el-tabs v-model="questionListParams.type" type="card" @tab-click="handleClick"> <el-tabs v-model="questionListParams.type" type="card" @tab-click="handleClick">
<el-tab-pane label="话术" name="1"></el-tab-pane> <el-tab-pane label="话术" name="1"></el-tab-pane>
...@@ -447,14 +385,17 @@ ...@@ -447,14 +385,17 @@
<template slot="title"> <template slot="title">
{{item.title}} {{item.title}}
</template> </template>
<div class="search"><el-input placeholder="请输入关键字" v-model="questionListParams.keywords"></el-input> <el-button type="primary" plain @click="handleChange">搜索</el-button> </div> <div class="search">
<el-input placeholder="请输入关键字" v-model="questionListParams.keywords"></el-input>
<el-button type="primary" plain @click="handleChange">搜索</el-button>
</div>
<el-table :data="modularContent" style="width: 100%"> <el-table :data="modularContent" style="width: 100%">
<el-table-column prop="title" label="标题"></el-table-column> <el-table-column prop="title" label="标题"></el-table-column>
<el-table-column prop="keywords" label="关键字"></el-table-column> <el-table-column prop="keywords" label="关键字"></el-table-column>
<el-table-column label="创建时间" prop="created_at"></el-table-column> <el-table-column label="创建时间" prop="created_at"></el-table-column>
<el-table-column width="250" v-if="!$store.state.readonly" label="操作"> <el-table-column width="250" v-if="!$store.state.readonly" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" plain type="warning" @click="showContent(scope.row)" >查看内容</el-button> <el-button size="mini" plain type="warning" @click="showContent(scope.row)">查看内容</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -469,8 +410,7 @@ ...@@ -469,8 +410,7 @@
append-to-body append-to-body
ref="ruleForm" ref="ruleForm"
:visible.sync="postModularContentDialog" :visible.sync="postModularContentDialog"
width="800px" width="800px">
>
<div class="quesion"> <div class="quesion">
<p style="font-weight:bold">标题:&nbsp;</p><span>{{postModularParams.title}}</span> <p style="font-weight:bold">标题:&nbsp;</p><span>{{postModularParams.title}}</span>
</div> </div>
...@@ -562,9 +502,30 @@ ...@@ -562,9 +502,30 @@
</template> </template>
<script> <script>
import {getTeacherDetailApi,getClassStatisticsApi,task4Api,getUserListApi,getQuestionModularListApi,getQuestionModularDetailApi, import {
teacherBindUserApi,getOrderListApi,getGoodsListApi,editOrderDescApi,updateOrderTeacherApi,getyunjiApi,getClassListApi,getSourceStudentApi } from "../../service/api"; getTeacherDetailApi,
import {TEACHERTYPE,ORDERSTATUSOPTION,GOODSTYPE,ORDERSTATUS,CLASSSOURCE,USERSTATUSFORMATER} from "../../util/wordbook"; getClassStatisticsApi,
task4Api,
getUserListApi,
getQuestionModularListApi,
getQuestionModularDetailApi,
teacherBindUserApi,
getOrderListApi,
getGoodsListApi,
editOrderDescApi,
updateOrderTeacherApi,
getyunjiApi,
getClassListApi,
getSourceStudentApi
} from "../../service/api";
import {
TEACHERTYPE,
ORDERSTATUSOPTION,
GOODSTYPE,
ORDERSTATUS,
CLASSSOURCE,
USERSTATUSFORMATER
} from "../../util/wordbook";
import AddressArray from '../framework/address-picker/addr' import AddressArray from '../framework/address-picker/addr'
import task from './task' import task from './task'
import page from '../framework/page' import page from '../framework/page'
...@@ -573,13 +534,14 @@ ...@@ -573,13 +534,14 @@
import refundDetail from './refundDetail' import refundDetail from './refundDetail'
import UserList from '../class/userList' import UserList from '../class/userList'
import chooseGoodDialog from './chooseGoodDialog' import chooseGoodDialog from './chooseGoodDialog'
let studentSource = {} let studentSource = {}
export default { export default {
name: "index", name: "index",
props:[ props: [
'parentDetail' 'parentDetail'
], ],
components:{ components: {
page, page,
task, task,
UserList, UserList,
...@@ -588,100 +550,123 @@ ...@@ -588,100 +550,123 @@
refundDetail, refundDetail,
sourceDialog sourceDialog
}, },
data(){ data() {
let nowDate = new Date(); let nowDate = new Date();
let month = (nowDate.getMonth()+1); let month = (nowDate.getMonth() + 1);
if(month < 10)month='0'+month.toString(); if (month < 10) month = '0' + month.toString();
nowDate = nowDate.getFullYear() + '-' + month; nowDate = nowDate.getFullYear() + '-' + month;
return { return {
modularContentTitle:"", modularContentTitle: "",
modularTotal: 0, modularTotal: 0,
modularNowPage: 1, modularNowPage: 1,
modularLimit: 10, modularLimit: 10,
contentTotal: 0, contentTotal: 0,
contentNowPage: 1, contentNowPage: 1,
contentLimit: 10, contentLimit: 10,
postModularContentDialog:false, postModularContentDialog: false,
modularId: "", modularId: "",
questionListParams: { questionListParams: {
type: "1", type: "1",
pid: "", pid: "",
keywords:'' keywords: ''
}, },
postModularParams:{}, postModularParams: {},
modularList: [], modularList: [],
modularContent: [], modularContent: [],
tabs:'task', tabs: 'task',
nowDate:nowDate, nowDate: nowDate,
yunjiList:[], yunjiList: [],
searchFrom: { searchFrom: {
user_id:'', user_id: '',
is_add_teacher: '', is_add_teacher: '',
is_view_course: '', is_view_course: '',
start_at:'', start_at: '',
end_at:'' end_at: ''
}, },
form: { form: {
nickname: '', nickname: '',
user_id: '', user_id: '',
status: [1,3,4,5], status: [1, 3, 4, 5],
goods_id: '', goods_id: '',
out_trade_no: '', out_trade_no: '',
receive_mobile:"", receive_mobile: "",
mobile:"", mobile: "",
}, },
task4Data:null, task4Data: null,
goodList:[], goodList: [],
orderStatusOption:ORDERSTATUSOPTION, orderStatusOption: ORDERSTATUSOPTION,
tableData:[], tableData: [],
userList:[], userList: [],
list:[], list: [],
id: '', id: '',
isBindUser:true, isBindUser: true,
addShow:false, addShow: false,
detail: {}, detail: {},
total: 0, total: 0,
limit: 10, limit: 10,
nowPage: 1, nowPage: 1,
userObj:{ userObj: {
classId:'', classId: '',
title:'', title: '',
show:false, show: false,
total: 0, total: 0,
limit: 10, limit: 10,
nowPage: 1, nowPage: 1,
}, },
addId:'', addId: '',
multipleSelection:[], multipleSelection: [],
chooseGoodDialogObj: { chooseGoodDialogObj: {
show: false, show: false,
code: '' code: ''
}, },
orderListObj:{ orderListObj: {
total: 0, total: 0,
limit: 10, limit: 10,
nowPage: 1, nowPage: 1,
}, },
yunjiListObj:{ yunjiListObj: {
total: 0, total: 0,
limit: 10, limit: 10,
nowPage: 1, nowPage: 1,
}, },
sourceDialog:{ sourceDialog: {
show:false, show: false,
out_trade_no:'' out_trade_no: ''
},
couponDetail: {
show: false,
order_coupon_id: ''
}, },
couponDetail:{ refundDetail: {
show:false, show: false,
order_coupon_id:'' out_trade_no: ''
}, },
refundDetail:{ }
show:false,
out_trade_no:''
}, },
methods: {
periodName(val) {
let str = '';
if (!val.periods_title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
} }
if (val.periods_title) {
str += `${val.periods_title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
}, },
methods:{
onPageChangeModular(val) { onPageChangeModular(val) {
this.modularNowPage = val; this.modularNowPage = val;
this.getList(); this.getList();
...@@ -700,9 +685,7 @@ ...@@ -700,9 +685,7 @@
this.contentLimit = val; this.contentLimit = val;
this.handleChange(); this.handleChange();
}, },
onPageChangeModular(){ showContent(data) {
},
showContent(data){
this.modularContentTitle = data.title this.modularContentTitle = data.title
getQuestionModularDetailApi(data.id).then(res => { getQuestionModularDetailApi(data.id).then(res => {
this.postModularParams = Object.assign({}, res); this.postModularParams = Object.assign({}, res);
...@@ -715,13 +698,13 @@ ...@@ -715,13 +698,13 @@
// console.log(val); // console.log(val);
let json = { let json = {
type: this.questionListParams.type, type: this.questionListParams.type,
page:this.contentNowPage, page: this.contentNowPage,
limit:this.contentLimit limit: this.contentLimit
}; };
if (this.modularId) { if (this.modularId) {
json.pid = this.modularId; json.pid = this.modularId;
} }
if(this.questionListParams.keywords){ if (this.questionListParams.keywords) {
json.keywords = this.questionListParams.keywords; json.keywords = this.questionListParams.keywords;
} }
// this.postModularParams.pid = this.modularId; // this.postModularParams.pid = this.modularId;
...@@ -741,10 +724,10 @@ ...@@ -741,10 +724,10 @@
getList() { getList() {
let json = { let json = {
type: this.questionListParams.type, type: this.questionListParams.type,
modularPage:this.modularNowPage, modularPage: this.modularNowPage,
modularLimit:this.modularLimit modularLimit: this.modularLimit
}; };
if (this.questionListParams.pid){ if (this.questionListParams.pid) {
json.pid = this.questionListParams.pid; json.pid = this.questionListParams.pid;
} }
getQuestionModularListApi(json.type, json).then(res => { getQuestionModularListApi(json.type, json).then(res => {
...@@ -754,28 +737,28 @@ ...@@ -754,28 +737,28 @@
this.modularTotal = res.total; this.modularTotal = res.total;
}); });
}, },
userStatusFormatter(val){ userStatusFormatter(val) {
return(USERSTATUSFORMATER[val.user_status]) return (USERSTATUSFORMATER[val.user_status])
}, },
getTask4(){ getTask4() {
task4Api(this.id).then(res=>{ task4Api(this.id).then(res => {
this.task4Data = res this.task4Data = res
}) })
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
this.multipleSelection = val; this.multipleSelection = val;
}, },
onAdd(){ onAdd() {
let json = { let json = {
is_buy: 0 is_buy: 0
} }
if(this.multipleSelection.length === 0) { if (this.multipleSelection.length === 0) {
this.$message({ this.$message({
type: 'error', type: 'error',
message: '请选择用户!' message: '请选择用户!'
}); });
return return
} else if (this.multipleSelection.length !== 1){ } else if (this.multipleSelection.length !== 1) {
this.$message({ this.$message({
type: 'error', type: 'error',
message: '只能选择一个用户!' message: '只能选择一个用户!'
...@@ -789,7 +772,7 @@ ...@@ -789,7 +772,7 @@
if (!this.isBindUser) { if (!this.isBindUser) {
} else { } else {
teacherBindUserApi(this.id, {user_id: this.addId}).then(res=>{ teacherBindUserApi(this.id, {user_id: this.addId}).then(res => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '绑定成功!' message: '绑定成功!'
...@@ -801,12 +784,12 @@ ...@@ -801,12 +784,12 @@
}) })
} }
}, },
onAddUser(flag){ onAddUser(flag) {
this.isBindUser = flag; this.isBindUser = flag;
this.addShow = true; this.addShow = true;
this.getUser(); this.getUser();
}, },
getUser(){ getUser() {
let json = { let json = {
page: this.userObj.nowPage, page: this.userObj.nowPage,
limit: this.userObj.limit, limit: this.userObj.limit,
...@@ -820,14 +803,14 @@ ...@@ -820,14 +803,14 @@
if (this.searchFrom.mobile) { if (this.searchFrom.mobile) {
json.mobile = this.searchFrom.mobile json.mobile = this.searchFrom.mobile
} }
getUserListApi(json).then(res=>{ getUserListApi(json).then(res => {
this.userList = res.list; this.userList = res.list;
this.userObj.total = res.total; this.userObj.total = res.total;
}) })
}, },
changeRow(data,b){ changeRow(data, b) {
if(b.indexOf(data)>-1){ if (b.indexOf(data) > -1) {
getClassStatisticsApi(data.periods_id,data.id).then(res=>{ getClassStatisticsApi(data.periods_id, data.id).then(res => {
data.arrive_course_rate = res.arrive_course_rate; data.arrive_course_rate = res.arrive_course_rate;
data.watch_course_rate = res.watch_course_rate; data.watch_course_rate = res.watch_course_rate;
data.over_course_rate = res.over_course_rate; data.over_course_rate = res.over_course_rate;
...@@ -839,63 +822,63 @@ ...@@ -839,63 +822,63 @@
}) })
} }
}, },
showUser(data){ showUser(data) {
console.log(data) console.log(data)
let classType = data.type==1?'(带班班级)':'(观摩班级)' let classType = data.type == 1 ? '(带班班级)' : '(观摩班级)'
this.userObj={ this.userObj = {
classId:data.id, classId: data.id,
show:true, show: true,
title:`${this.detail.name}班级用户列表${classType}`, title: `${this.detail.name}班级用户列表${classType}`,
teacherId: data.teacher_id, teacherId: data.teacher_id,
periods_id: data.periods_id, periods_id: data.periods_id,
goods_id:data.goods_id, goods_id: data.goods_id,
type:data.type type: data.type
} }
}, },
onPageChange3(val){ /*onPageChange3(val) {
this.userObj.nowPage = val; this.userObj.nowPage = val;
this.getUser() this.getUser()
}, },*/
onSizeChange3(val){ /*onSizeChange3(val) {
this.userObj.limit = val; this.userObj.limit = val;
this.userObj.nowPage = 1; this.userObj.nowPage = 1;
this.getUser(); this.getUser();
}, },*/
onPageChange(val){ onPageChange(val) {
this.nowPage = val; this.nowPage = val;
this.getTeacherDetail(); this.getTeacherDetail();
}, },
onSizeChange(val){ onSizeChange(val) {
this.limit = val; this.limit = val;
this.nowPage = 1; this.nowPage = 1;
this.getTeacherDetail(); this.getTeacherDetail();
}, },
onPageChange2(val){ onPageChange2(val) {
this.orderListObj.nowPage = val; this.orderListObj.nowPage = val;
this.getOrderList() this.getOrderList()
}, },
onSizeChange2(val){ onSizeChange2(val) {
this.orderListObj.limit = val; this.orderListObj.limit = val;
this.orderListObj.nowPage = 1; this.orderListObj.nowPage = 1;
this.getOrderList() this.getOrderList()
}, },
onPageChange3(val){ onPageChange3(val) {
this.yunjiListObj.nowPage = val; this.yunjiListObj.nowPage = val;
this.getyunjiList() this.getyunjiList()
}, },
onSizeChange3(val){ onSizeChange3(val) {
this.yunjiListObj.limit = val; this.yunjiListObj.limit = val;
this.yunjiListObj.nowPage = 1; this.yunjiListObj.nowPage = 1;
this.getyunjiList() this.getyunjiList()
}, },
getTeacherDetail(){ getTeacherDetail() {
this.searchFrom = { this.searchFrom = {
user_id:'', user_id: '',
is_add_teacher: '', is_add_teacher: '',
is_view_course: '', is_view_course: '',
start_at:'', start_at: '',
end_at:'' end_at: ''
}; };
let id = this.id; let id = this.id;
let json = { let json = {
...@@ -908,11 +891,11 @@ ...@@ -908,11 +891,11 @@
// }) // })
console.log(this.id) console.log(this.id)
// debugger // debugger
getTeacherDetailApi(id, json).then((res)=>{ getTeacherDetailApi(id, json).then((res) => {
console.log(res) console.log(res)
this.detail = res; this.detail = res;
if (this.detail.class_list) { if (this.detail.class_list) {
this.detail.class_list.list.forEach(data=>{ this.detail.class_list.list.forEach(data => {
data.arrive_course_rate = 0; data.arrive_course_rate = 0;
data.watch_course_rate = 0; data.watch_course_rate = 0;
data.over_course_rate = 0; data.over_course_rate = 0;
...@@ -929,24 +912,24 @@ ...@@ -929,24 +912,24 @@
// this.getOrderList(); // this.getOrderList();
}) })
}, },
createInviteLink(val){ createInviteLink(val) {
this.chooseGoodDialogObj.show = true; this.chooseGoodDialogObj.show = true;
//类型选择项 //类型选择项
if(this.detail.type == 0 ){ if (this.detail.type == 0) {
this.chooseGoodDialogObj.code = `CC-TEACHER-${val.user_id}`; this.chooseGoodDialogObj.code = `CC-TEACHER-${val.user_id}`;
}else if(this.detail.type == 1){ } else if (this.detail.type == 1) {
this.chooseGoodDialogObj.code = `CC-XXMM-${val.user_id}`; this.chooseGoodDialogObj.code = `CC-XXMM-${val.user_id}`;
}else{ } else {
this.chooseGoodDialogObj.code = `CC-TEACHER-${val.user_id}`; this.chooseGoodDialogObj.code = `CC-TEACHER-${val.user_id}`;
} }
}, },
changeShow(){ changeShow() {
this.chooseGoodDialogObj.show = false; this.chooseGoodDialogObj.show = false;
this.chooseGoodDialogObj.code = ''; this.chooseGoodDialogObj.code = '';
}, },
getOrderList(){ getOrderList() {
let json = { let json = {
limit: this.orderListObj.limit, limit: this.orderListObj.limit,
page: this.orderListObj.nowPage page: this.orderListObj.nowPage
...@@ -978,11 +961,11 @@ ...@@ -978,11 +961,11 @@
// } // }
// json.teacher_id=this.id; // json.teacher_id=this.id;
// json.invite_id=this.id; // json.invite_id=this.id;
if(this.detail.user_id !==0){ if (this.detail.user_id !== 0) {
json.invite_id=this.detail.user_id; json.invite_id = this.detail.user_id;
getOrderListApi(json).then((res)=>{ getOrderListApi(json).then((res) => {
res.list.forEach(i=>{ res.list.forEach(i => {
i.refundList=[] i.refundList = []
}); });
this.tableData = res.list; this.tableData = res.list;
this.orderListObj.total = res.total this.orderListObj.total = res.total
...@@ -990,13 +973,13 @@ ...@@ -990,13 +973,13 @@
} }
}, },
getGoodsOption(){ getGoodsOption() {
let json = { let json = {
page: 1, page: 1,
limit: 100, limit: 100,
course_type:0, course_type: 0,
}; };
getGoodsListApi(json).then(res=>{ getGoodsListApi(json).then(res => {
this.goodList = res.list; this.goodList = res.list;
}) })
}, },
...@@ -1004,15 +987,15 @@ ...@@ -1004,15 +987,15 @@
this.$prompt('', '编辑备注', { this.$prompt('', '编辑备注', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
inputType:'textarea', inputType: 'textarea',
inputValue: desc || '' inputValue: desc || ''
}).then(({ value }) => { }).then(({value}) => {
this.$confirm('确定保存?', '提示', { this.$confirm('确定保存?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(()=>{ }).then(() => {
editOrderDescApi(id,'order',{desc: value}).then(res=>{ editOrderDescApi(id, 'order', {desc: value}).then(res => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '编辑备注成功' message: '编辑备注成功'
...@@ -1022,19 +1005,19 @@ ...@@ -1022,19 +1005,19 @@
}); });
}) })
}, },
showRef(data){ showRef(data) {
this.refundDetail.show = true; this.refundDetail.show = true;
this.refundDetail.out_trade_no = data.out_trade_no; this.refundDetail.out_trade_no = data.out_trade_no;
}, },
showCoupon(data){ showCoupon(data) {
this.couponDetail.show = true; this.couponDetail.show = true;
this.couponDetail.order_coupon_id = data.order_coupon_id; this.couponDetail.order_coupon_id = data.order_coupon_id;
}, },
showSource(data){ showSource(data) {
this.sourceDialog.show = true; this.sourceDialog.show = true;
this.sourceDialog.out_trade_no = data.out_trade_no; this.sourceDialog.out_trade_no = data.out_trade_no;
}, },
getyunjiList(){ getyunjiList() {
let json = { let json = {
limit: this.yunjiListObj.limit, limit: this.yunjiListObj.limit,
page: this.yunjiListObj.nowPage page: this.yunjiListObj.nowPage
...@@ -1060,8 +1043,8 @@ ...@@ -1060,8 +1043,8 @@
if (this.form.mobile) { if (this.form.mobile) {
json.mobile = this.form.mobile json.mobile = this.form.mobile
} }
if(this.id){ if (this.id) {
json.teacher_id=this.id; json.teacher_id = this.id;
} }
getyunjiApi(json).then(res => { getyunjiApi(json).then(res => {
this.yunjiListObj.total = res.total; this.yunjiListObj.total = res.total;
...@@ -1069,35 +1052,35 @@ ...@@ -1069,35 +1052,35 @@
}); });
} }
}, },
filters:{ filters: {
teacherType(value){ teacherType(value) {
return TEACHERTYPE[value] return TEACHERTYPE[value]
}, },
percent(val){ percent(val) {
return (val * 100).toFixed(2)+'%' return (val * 100).toFixed(2) + '%'
}, },
status(value){ status(value) {
return ORDERSTATUS[value] return ORDERSTATUS[value]
}, },
moneytFilter(val){ moneytFilter(val) {
return val = val / 100 + '元' return val = val / 100 + '元'
}, },
filterGoods(val){ filterGoods(val) {
return '['+val.id+']'+'[' + GOODSTYPE[val.goods_type] + ']' + '[' +val.current_price / 100 + '元]' + val.name return '[' + val.id + ']' + '[' + GOODSTYPE[val.goods_type] + ']' + '[' + val.current_price / 100 + '元]' + val.name
}, },
classSource(val){ classSource(val) {
// return CLASSSOURCE[val] // return CLASSSOURCE[val]
return studentSource[val] return studentSource[val]
} }
}, },
mounted(){ mounted() {
this.id =this.parentDetail ? this.parentDetail.id : this.$route.params.id; this.id = this.parentDetail ? this.parentDetail.id : this.$route.params.id;
this.getTask4(); this.getTask4();
getSourceStudentApi().then(res=>{ getSourceStudentApi().then(res => {
let obj = {} let obj = {}
res.forEach((item,index)=>{ res.forEach((item, index) => {
obj[item.type]=item.name obj[item.type] = item.name
}) })
studentSource = obj studentSource = obj
// console.log(obj) // console.log(obj)
...@@ -1105,15 +1088,15 @@ ...@@ -1105,15 +1088,15 @@
this.getTeacherDetail(); this.getTeacherDetail();
this.getGoodsOption(); this.getGoodsOption();
}, },
watch:{ watch: {
'tabs'(value){ 'tabs'(value) {
if( value === 'order'){ if (value === 'order') {
this.getOrderList(); this.getOrderList();
} }
if(value==='yunji'){ if (value === 'yunji') {
this.getyunjiList(); this.getyunjiList();
} }
if(value==='huashu'){ if (value === 'huashu') {
this.getList(); this.getList();
} }
} }
...@@ -1126,13 +1109,16 @@ ...@@ -1126,13 +1109,16 @@
padding: 20px; padding: 20px;
color: #666; color: #666;
} }
.teacher { .teacher {
padding: 20px 0; padding: 20px 0;
} }
.header { .header {
padding: 0 20px; padding: 0 20px;
margin-bottom: 20px; margin-bottom: 20px;
} }
.el-row { .el-row {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
...@@ -1140,49 +1126,59 @@ ...@@ -1140,49 +1126,59 @@
color: #666; color: #666;
font-size: 16px; font-size: 16px;
} }
.text.item{
.text.item {
line-height: 40px; line-height: 40px;
label{
label {
width: 120px; width: 120px;
} }
&.style-fix { &.style-fix {
/*display: flex; /*display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between;*/ justify-content: space-between;*/
line-height: 25px; line-height: 25px;
span { span {
display: block; display: block;
} }
} }
} }
.el-card{
.el-card {
/*height: 50px;*/ /*height: 50px;*/
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
.avatar { .avatar {
width: 120px; width: 120px;
margin-right: 10px; margin-right: 10px;
height: 120px; height: 120px;
border-radius: 1000px; border-radius: 1000px;
} }
img{
img {
width: 120px; width: 120px;
float: left; float: left;
margin-right: 10px; margin-right: 10px;
} }
label{
label {
color: #5982e6; color: #5982e6;
width: 120px; width: 120px;
} }
} }
.card-content:after{
.card-content:after {
content: ''; content: '';
display: block; display: block;
clear: both; clear: both;
} }
.order_list{
.avatar{ .order_list {
.avatar {
width: 50px; width: 50px;
min-width: 50px; min-width: 50px;
height: 50px; height: 50px;
...@@ -1190,24 +1186,32 @@ ...@@ -1190,24 +1186,32 @@
border-radius: 50%; border-radius: 50%;
} }
} }
.search{
.search {
padding: 10px 30px; padding: 10px 30px;
.el-input{display: inline-block;width: 300px;}
.el-input {
display: inline-block;
width: 300px;
}
} }
</style> </style>
<style> <style>
.demo-table-expand { .demo-table-expand {
font-size: 0; font-size: 0;
} }
.demo-table-expand label { .demo-table-expand label {
width: 90px; width: 90px;
color: #99a9bf; color: #99a9bf;
} }
.demo-table-expand .el-form-item { .demo-table-expand .el-form-item {
margin-right: 0; margin-right: 0;
margin-bottom: 0; margin-bottom: 0;
width: 50%; width: 50%;
} }
.f-c > .cell { .f-c > .cell {
display: flex !important; display: flex !important;
flex-flow: row; flex-flow: row;
......
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
<div class="title" style="width:8%"> <div class="title" style="width:8%">
<div class="header bg-h">期数</div> <div class="header bg-h">期数</div>
<div> <div>
{{data.title}} <!--{{data.title}}-->
<div v-html="periodName(data)"></div>
</div> </div>
</div> </div>
<div class="over_work" style="background-color: #fffbe4"> <div class="over_work" style="background-color: #fffbe4">
...@@ -563,6 +564,29 @@ ...@@ -563,6 +564,29 @@
} }
}, },
methods:{ methods:{
periodName(val) {
let str = '';
if (!val.title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.title) {
str += `${val.title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
formatTime(date){ formatTime(date){
let year = date.getFullYear(); let year = date.getFullYear();
let Month = date.getMonth()+1; let Month = date.getMonth()+1;
......
...@@ -49,15 +49,10 @@ ...@@ -49,15 +49,10 @@
</div> </div>
<el-tabs type="border-card" v-model="tabs"> <el-tabs type="border-card" v-model="tabs">
<el-tab-pane label="期数列表" name="periods"> <el-tab-pane label="期数列表" name="periods">
<el-table <el-table @expand-change="changeRow" :data="periodList">
@expand-change="changeRow"
:data="periodList"
style="width: 100%">
<el-table-column type="expand"> <el-table-column type="expand">
<template slot-scope="scope"> <template slot-scope="scope">
<el-table <el-table :data="list">
:data="list"
style="width: 100%">
<el-table-column <el-table-column
label="到课率"> label="到课率">
<template slot-scope="scope2"> <template slot-scope="scope2">
...@@ -97,10 +92,11 @@ ...@@ -97,10 +92,11 @@
</el-table> </el-table>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="periods_title" label="期数名称"> <el-table-column prop="periods_title" label="期数名称" width="170px">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="{name:'class', query: { goods_id: scope.row.goods_id, periods_id: scope.row.periods_id}}" > <router-link :to="{name:'class', query: { goods_id: scope.row.goods_id, periods_id: scope.row.periods_id}}">
{{scope.row.periods_title}} <div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</router-link> </router-link>
</template> </template>
</el-table-column> </el-table-column>
...@@ -111,7 +107,7 @@ ...@@ -111,7 +107,7 @@
</el-table-column> </el-table-column>
<el-table-column className="f-c" label="老师"> <el-table-column className="f-c" label="老师">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="`/teacher/${scope.row.teacher_id}`" > <router-link :to="`/teacher/${scope.row.teacher_id}`">
<div class="f-c"> <div class="f-c">
<div> <div>
<img class="avatar" :src="scope.row.teacher_qr"> {{scope.row.teacher_name}} <img class="avatar" :src="scope.row.teacher_qr"> {{scope.row.teacher_name}}
...@@ -127,43 +123,29 @@ ...@@ -127,43 +123,29 @@
<el-table-column label="操作" width="340px"> <el-table-column label="操作" width="340px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="showUser(scope.row)" size="mini" type="primary"> 班级成员</el-button> <el-button @click="showUser(scope.row)" size="mini" type="primary"> 班级成员</el-button>
<el-button size="mini" type="warning" v-if="!$store.state.readonly" @click="editPrivilege(scope.row)" >编辑</el-button> <el-button size="mini" type="warning" v-if="!$store.state.readonly" @click="editPrivilege(scope.row)">编辑</el-button>
<el-button size="mini" type="primary" @click="onGetUserDescList(scope.row)" >备注</el-button> <el-button size="mini" type="primary" @click="onGetUserDescList(scope.row)">备注</el-button>
<el-button size="mini" type="primary" @click="showSourceByDate(scope.row)">看课情况 </el-button> <el-button size="mini" type="primary" @click="showSourceByDate(scope.row)">看课情况</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="系统订单列表" name="order"> <el-tab-pane label="系统订单列表" name="order">
<el-table <el-table :data="userList">
:data="userList" <el-table-column prop="out_trade_no" label="订单号"></el-table-column>
style="width: 100%"> <el-table-column label="购买人" className="f-c" width="150">
<el-table-column
prop="out_trade_no"
label="订单号"
>
</el-table-column>
<el-table-column
label="购买人"
className="f-c"
width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}}) <img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="periods_title" label="期数名称" width="170px">
prop="periods_title" <template slot-scope="scope">
label="期数标题"> <div v-html="periodName(scope.row)"></div>
</el-table-column> <!--{{periodName(scope.row)}}-->
<el-table-column </template>
prop="goods_name"
label="商品名称">
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="goods_name" label="商品名称"></el-table-column>
width="250" <el-table-column width="250" prop="invite_id" className="f-c" label="推广人属性">
prop="invite_id"
className="f-c"
label="推广人属性">
<template slot-scope="scope"> <template slot-scope="scope">
<div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="display: flex;color: #409eff;cursor: pointer"> <div @click="showSource(scope.row)" v-if="scope.row.invite_earnings > 0 && scope.row.invite_id !== 0" style="display: flex;color: #409eff;cursor: pointer">
<img :src="scope.row.invite_avatar" class="avatar"/> <img :src="scope.row.invite_avatar" class="avatar"/>
...@@ -242,33 +224,31 @@ ...@@ -242,33 +224,31 @@
<page :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/> <page :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="外部订单列表" name="yunji"> <el-tab-pane label="外部订单列表" name="yunji">
<el-table <el-table :data="yunjiList">
:data="yunjiList"
style="width: 100%">
<el-table-column prop="order_id" width="80" label="订单号"> <el-table-column prop="order_id" width="80" label="订单号">
</el-table-column> </el-table-column>
<el-table-column prop="nickname" label="购买人"> <el-table-column prop="nickname" label="购买人">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if='scope.row.user_id !== 0' > <div v-if='scope.row.user_id !== 0'>
<img class="avatar" :src="scope.row.avatar" /> <img class="avatar" :src="scope.row.avatar"/>
<div>{{scope.row.nickname}}<br>(ID:{{scope.row.user_id}})</div> <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 prop="periods_title" label="期数"> <el-table-column prop="periods_title" label="期数名称" width="170px">
</el-table-column> <template slot-scope="scope">
<el-table-column prop="goods_name" label="商品名称"> <div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column> </el-table-column>
<el-table-column prop="goods_name" label="商品名称"></el-table-column>
<el-table-column prop="invite_type" label="来源"> <el-table-column prop="invite_type" label="来源">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.invite_type}}{{scope.row.invite_name}} {{scope.row.invite_type}}{{scope.row.invite_name}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="teacher_name" label="班级老师"> <el-table-column prop="teacher_name" label="班级老师"></el-table-column>
</el-table-column>
<el-table-column label="付款状态" width="80"> <el-table-column label="付款状态" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" v-if="scope.row.status === 5 || scope.row.status === 3" @click="showRef(scope.row)">{{scope.row.status|status}}</el-button> <el-button type="text" v-if="scope.row.status === 5 || scope.row.status === 3" @click="showRef(scope.row)">{{scope.row.status|status}}</el-button>
...@@ -294,45 +274,21 @@ ...@@ -294,45 +274,21 @@
{{scope.row.active_at === '0000-00-00 00:00:00'?'未激活':scope.row.active_at}} {{scope.row.active_at === '0000-00-00 00:00:00'?'未激活':scope.row.active_at}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="create_time" label="下单时间" width="90"> <el-table-column prop="create_time" label="下单时间" width="90"></el-table-column>
</el-table-column> <el-table-column prop="pay_time" label="付款时间" width="90"></el-table-column>
<el-table-column prop="pay_time" label="付款时间" width="90"> <el-table-column prop="user_status" :formatter="userStatusFormatter" label="沟通状态" width="90"></el-table-column>
</el-table-column> <el-table-column prop="desc" label="备注"></el-table-column>
<el-table-column prop="user_status" :formatter="userStatusFormatter" label="沟通状态" width="90">
</el-table-column>
<el-table-column prop="desc" label="备注">
</el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="地址列表" name="address"> <el-tab-pane label="地址列表" name="address">
<el-button size="mini" type="" v-if="!addressList.length" @click="addAddress()" >新增</el-button> <el-button size="mini" type="" v-if="!addressList.length" @click="addAddress()">新增</el-button>
<el-table <el-table :data="addressList">
:data="addressList" <el-table-column prop="receive_name" label="收件人名称"></el-table-column>
style="width: 100%"> <el-table-column prop="receive_mobile" label="收件人手机号"></el-table-column>
<el-table-column <el-table-column prop="province_name" label="省"></el-table-column>
prop="receive_name" <el-table-column prop="city" label="市"></el-table-column>
label="收件人名称"> <el-table-column prop="area" label="地区名称"></el-table-column>
</el-table-column> <el-table-column prop="address" label="详细地址"></el-table-column>
<el-table-column
prop="receive_mobile"
label="收件人手机号">
</el-table-column>
<el-table-column
prop="province_name"
label="省">
</el-table-column>
<el-table-column
prop="city"
label="市">
</el-table-column>
<el-table-column
prop="area"
label="地区名称">
</el-table-column>
<el-table-column
prop="address"
label="详细地址">
</el-table-column>
<!-- <el-table-column <!-- <el-table-column
prop="is_del" prop="is_del"
label="是否删除"> label="是否删除">
...@@ -340,52 +296,26 @@ ...@@ -340,52 +296,26 @@
{{scope.row.is_del == 0?'否':'是'}} {{scope.row.is_del == 0?'否':'是'}}
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column <el-table-column prop="created_at" label="创建时间"></el-table-column>
prop="created_at" <el-table-column prop="updated_at" label="更新时间"></el-table-column>
label="创建时间"> <el-table-column label="操作" width="100px">
</el-table-column>
<el-table-column
prop="updated_at"
label="更新时间">
</el-table-column>
<el-table-column
label="操作" width="100px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="warning" v-if="!$store.state.readonly&&scope.row.is_del == 0" @click="editAddress(scope.row)" >编辑</el-button> <el-button size="mini" type="warning" v-if="!$store.state.readonly&&scope.row.is_del == 0" @click="editAddress(scope.row)">编辑</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="绑定记录" name="subList"> <el-tab-pane label="绑定记录" name="subList">
<el-table <el-table :data="subListData">
:data="subListData" <el-table-column prop="cur_date" label="绑定时间"></el-table-column>
style="width: 100%"> <el-table-column prop="unbind_at" label="解绑时间"></el-table-column>
<el-table-column <el-table-column prop="user_nickname" label="主账号"></el-table-column>
prop="cur_date" <el-table-column prop="sub_user_nickname" label="子账号"></el-table-column>
label="绑定时间">
</el-table-column>
<el-table-column
prop="unbind_at"
label="解绑时间">
</el-table-column>
<el-table-column
prop="user_nickname"
label="主账号">
</el-table-column>
<el-table-column
prop="sub_user_nickname"
label="子账号">
</el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="发货记录" name="deliverRecord"> <el-tab-pane label="发货记录" name="deliverRecord">
<el-table <el-table :data="deliverRecordList">
:data="deliverRecordList" <el-table-column width="220" className="f-c" label="用户">
style="width: 100%">
<el-table-column
width="220"
className="f-c"
label="用户">
<template slot-scope="scope"> <template slot-scope="scope">
<img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}} <img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}<br>(ID:{{scope.row.user_id}})<br>手机:{{scope.row.user_mobile}}
</template> </template>
...@@ -397,20 +327,15 @@ ...@@ -397,20 +327,15 @@
{{scope.row.province_name}}{{scope.row.city_name}}{{scope.row.area_name}}{{scope.row.address}} {{scope.row.province_name}}{{scope.row.city_name}}{{scope.row.area_name}}{{scope.row.address}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="periods_title" label="期数名称"> <el-table-column prop="periods_title" label="期数名称"></el-table-column>
</el-table-column> <el-table-column prop="theme_name" label="主题"></el-table-column>
<el-table-column prop="theme_name" label="主题"> <el-table-column prop="deliver_start_at" label="预计发货开始时间"></el-table-column>
</el-table-column> <el-table-column prop="deliver_end_at" label="预计发货结束时间"></el-table-column>
<el-table-column prop="deliver_start_at" label="预计发货开始时间"> <el-table-column prop="deliver_at" label="发货时间"></el-table-column>
</el-table-column>
<el-table-column prop="deliver_end_at" label="预计发货结束时间">
</el-table-column>
<el-table-column prop="deliver_at" label="发货时间">
</el-table-column>
<el-table-column prop="status" label="物流状态"> <el-table-column prop="status" label="物流状态">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- {{scope.row.status|LogisticsStatusFil}}<br> --> <!-- {{scope.row.status|LogisticsStatusFil}}<br> -->
<span >名称:{{scope.row.express_name}}<br>单号:{{scope.row.express_no}}</span> <span>名称:{{scope.row.express_name}}<br>单号:{{scope.row.express_no}}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column width="150" label="操作" v-if="!$store.state.readonly" fixed="right"> <!-- <el-table-column width="150" label="操作" v-if="!$store.state.readonly" fixed="right">
...@@ -561,68 +486,79 @@ ...@@ -561,68 +486,79 @@
</el-table> </el-table>
<page :nowPage="lookDetail.nowPage" :total="lookDetail.total" :limit="lookDetail.limit" @pageChange="onLookDetailPageChange" @sizeChange="onLookDetailSizeChange"/> <page :nowPage="lookDetail.nowPage" :total="lookDetail.total" :limit="lookDetail.limit" @pageChange="onLookDetailPageChange" @sizeChange="onLookDetailSizeChange"/>
</el-dialog> </el-dialog>
<sourceByDateDialog :dialogObj = sourceByDateDialogJson ref="sourceByDateDialogDom"></sourceByDateDialog> <sourceByDateDialog :dialogObj=sourceByDateDialogJson ref="sourceByDateDialogDom"></sourceByDateDialog>
</div> </div>
</template> </template>
<script> <script>
import {getOrderListApi,getUserDetailApi,getPeriodsStatisticsApi,userLookApi,getUserDescListApi,addPeriodsClassUserDescApi,getDeliverRecordApi, import {
updateUserPrivilegeApi,getyunjiApi,fetchAddressListApi,getSubAccountInfoApi,getUserSubAccountListApi} from "../../service/api"; getOrderListApi,
getUserDetailApi,
getPeriodsStatisticsApi,
userLookApi,
getUserDescListApi,
addPeriodsClassUserDescApi,
getDeliverRecordApi,
updateUserPrivilegeApi,
getyunjiApi,
fetchAddressListApi,
getSubAccountInfoApi,
getUserSubAccountListApi
} from "../../service/api";
import page from '../framework/page' import page from '../framework/page'
import sourceDialog from '../order/sourceDialog' import sourceDialog from '../order/sourceDialog'
import refundDetail from '../order/refundDetail' import refundDetail from '../order/refundDetail'
import couponDialog from '../order/couponDialog' import couponDialog from '../order/couponDialog'
import addressDialogC from "./addressdialog"; import addressDialogC from "./addressdialog";
import {INVITETYPE,ORDERSTATUS,BUYTYPE,USERSTATUSFORMATER} from "../../util/wordbook"; import {INVITETYPE, ORDERSTATUS, BUYTYPE, USERSTATUSFORMATER} from "../../util/wordbook";
import teacherDialog from './dialog' import teacherDialog from './dialog'
import UserList from '../class/userList' import UserList from '../class/userList'
import sourceByDateDialog from '../teacherDetail/sourceByDateDialog' import sourceByDateDialog from '../teacherDetail/sourceByDateDialog'
import AddressArray from "../framework/address-picker/addr"; import AddressArray from "../framework/address-picker/addr";
export default { export default {
name: "index", name: "index",
data(){ data() {
return { return {
userList:[], userList: [],
yunjiList:[], yunjiList: [],
addressList:[], addressList: [],
total:0, total: 0,
addressDialog:{ addressDialog: {
show:false show: false
},
addressParams:{
}, },
sourceDialog:{ addressParams: {},
show:false, sourceDialog: {
out_trade_no:'' show: false,
out_trade_no: ''
}, },
tabs:'periods', tabs: 'periods',
couponDetail:{ couponDetail: {
show:false, show: false,
order_coupon_id:'' order_coupon_id: ''
}, },
refundDetail:{ refundDetail: {
show:false, show: false,
out_trade_no:'' out_trade_no: ''
}, },
nowPage:1, nowPage: 1,
limit: 5, limit: 5,
id: '', id: '',
detail: {}, detail: {},
subDetail:{}, subDetail: {},
subListData:[], subListData: [],
periodList: [], periodList: [],
dialogObj:{ dialogObj: {
show:false, show: false,
title:'绑定老师', title: '绑定老师',
id:0, id: 0,
teacher_id: 0 teacher_id: 0
}, },
list: [], list: [],
userObj:{ userObj: {
classId:'', classId: '',
title:'', title: '',
show:false, show: false,
}, },
privilegeDialog: { privilegeDialog: {
show: false, show: false,
...@@ -636,16 +572,16 @@ ...@@ -636,16 +572,16 @@
descList: [], descList: [],
nowPage: 1, nowPage: 1,
limit: 10, limit: 10,
total:0, total: 0,
userInfo: null userInfo: null
}, },
lookDetail:{ lookDetail: {
show:false, show: false,
loading:false, loading: false,
list:[], list: [],
nowPage: 1, nowPage: 1,
limit: 10, limit: 10,
total:0 total: 0
}, },
isAddTeacherList: [ isAddTeacherList: [
{ {
...@@ -673,11 +609,11 @@ ...@@ -673,11 +609,11 @@
value: 5 value: 5
} }
], ],
sourceByDateDialogJson:{}, sourceByDateDialogJson: {},
deliverRecordList:[] deliverRecordList: []
} }
}, },
components:{ components: {
page, page,
teacherDialog, teacherDialog,
UserList, UserList,
...@@ -687,41 +623,64 @@ ...@@ -687,41 +623,64 @@
sourceByDateDialog, sourceByDateDialog,
addressDialogC addressDialogC
}, },
props:[ props: [
'parentDetail' 'parentDetail'
], ],
mounted(){ mounted() {
this.id = this.parentDetail ? this.parentDetail.id : this.$route.params.id; this.id = this.parentDetail ? this.parentDetail.id : this.$route.params.id;
this.getDetail(); this.getDetail();
}, },
watch:{ watch: {
'tabs'(value){ 'tabs'(value) {
if(value === 'order'){ if (value === 'order') {
this.getUser() this.getUser()
} }
if(value === 'yunji'){ if (value === 'yunji') {
this.getyunjiOrder() this.getyunjiOrder()
} }
if(value === 'address'){ if (value === 'address') {
this.getAddressList() this.getAddressList()
} }
if(value === 'subList'){ if (value === 'subList') {
this.getUserSubAccountList() this.getUserSubAccountList()
} }
if(value === 'deliverRecord'){ if (value === 'deliverRecord') {
this.getDeliverRecordList() this.getDeliverRecordList()
} }
} }
}, },
methods:{ methods: {
// editAddress(row){ // editAddress(row){
// this.addressParams = row // this.addressParams = row
// this.addressParams.show=true // this.addressParams.show=true
// console.log(row) // console.log(row)
// }, // },
getDeliverRecordList(){ periodName(val) {
getDeliverRecordApi({user_id:this.id,page:1,limit:20}).then(res =>{ let str = '';
if (!val.periods_title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
getDeliverRecordList() {
getDeliverRecordApi({user_id: this.id, page: 1, limit: 20}).then(res => {
this.deliverRecordList = res.list this.deliverRecordList = res.list
console.log(this.deliverRecordList) console.log(this.deliverRecordList)
}) })
...@@ -730,7 +689,7 @@ ...@@ -730,7 +689,7 @@
this.dialogObj.show = false; this.dialogObj.show = false;
this.getAddressList(); this.getAddressList();
}, },
addAddress(row){ addAddress(row) {
this.addressDialog.userid = this.id; this.addressDialog.userid = this.id;
this.addressDialog.show = true; this.addressDialog.show = true;
}, },
...@@ -794,28 +753,28 @@ ...@@ -794,28 +753,28 @@
console.log(this.addressDialog) console.log(this.addressDialog)
// debugger // debugger
}, },
getAddressList(){ getAddressList() {
fetchAddressListApi(this.id).then(res =>{ fetchAddressListApi(this.id).then(res => {
this.addressList =res this.addressList = res
// console.log(this.addressList) // console.log(this.addressList)
}) })
}, },
userStatusFormatter(val){ userStatusFormatter(val) {
return(USERSTATUSFORMATER[val.user_status]) return (USERSTATUSFORMATER[val.user_status])
}, },
showSourceByDate(row){ showSourceByDate(row) {
this.sourceByDateDialogJson = { this.sourceByDateDialogJson = {
"periods_id":row.periods_id, "periods_id": row.periods_id,
"user_id":row.user_id, "user_id": row.user_id,
json:{ json: {
limit: 10, limit: 10,
page:0 page: 0
} }
} }
this.$refs.sourceByDateDialogDom.dialogShow = true this.$refs.sourceByDateDialogDom.dialogShow = true
}, },
getUserLook(){ getUserLook() {
if(!this.lookDetail.data) return; if (!this.lookDetail.data) return;
this.lookDetail.show = true; this.lookDetail.show = true;
this.lookDetail.loading = true; this.lookDetail.loading = true;
let json = { let json = {
...@@ -823,46 +782,46 @@ ...@@ -823,46 +782,46 @@
page: this.lookDetail.nowPage page: this.lookDetail.nowPage
} }
let data = this.lookDetail.data; let data = this.lookDetail.data;
userLookApi(data.periods_id,data.user_id, json).then(res=>{ userLookApi(data.periods_id, data.user_id, json).then(res => {
this.lookDetail.list = res.list; this.lookDetail.list = res.list;
this.lookDetail.loading = false; this.lookDetail.loading = false;
this.lookDetail.total = res.total; this.lookDetail.total = res.total;
}) })
}, },
onLookDetailPageChange(val){ onLookDetailPageChange(val) {
this.lookDetail.nowPage = val this.lookDetail.nowPage = val
this.getUserLook(); this.getUserLook();
}, },
onLookDetailSizeChange(val){ onLookDetailSizeChange(val) {
this.lookDetail.limit = val this.lookDetail.limit = val
this.lookDetail.nowPage = 1; this.lookDetail.nowPage = 1;
this.getUserLook(); this.getUserLook();
}, },
onDescDialogPageChange(val){ onDescDialogPageChange(val) {
this.descDialog.nowPage = val this.descDialog.nowPage = val
this.getUserDescList() this.getUserDescList()
}, },
onDescDialogSizeChange(val){ onDescDialogSizeChange(val) {
this.descDialog.limit = val this.descDialog.limit = val
this.descDialog.nowPage = 1; this.descDialog.nowPage = 1;
this.getUserDescList() this.getUserDescList()
}, },
showRef(data){ showRef(data) {
this.refundDetail.show = true; this.refundDetail.show = true;
this.refundDetail.out_trade_no = data.out_trade_no; this.refundDetail.out_trade_no = data.out_trade_no;
}, },
showCoupon(data){ showCoupon(data) {
this.couponDetail.show = true; this.couponDetail.show = true;
this.couponDetail.order_coupon_id = data.order_coupon_id; this.couponDetail.order_coupon_id = data.order_coupon_id;
}, },
showSource(data){ showSource(data) {
this.sourceDialog.show = true; this.sourceDialog.show = true;
this.sourceDialog.out_trade_no = data.out_trade_no; this.sourceDialog.out_trade_no = data.out_trade_no;
}, },
changeRow(data,b){ changeRow(data, b) {
this.list = []; this.list = [];
if(b.indexOf(data)>-1){ if (b.indexOf(data) > -1) {
getPeriodsStatisticsApi(data.periods_id).then(res=>{ getPeriodsStatisticsApi(data.periods_id).then(res => {
data.arrive_course_rate = res.arrive_course_rate; data.arrive_course_rate = res.arrive_course_rate;
data.watch_course_rate = res.watch_course_rate; data.watch_course_rate = res.watch_course_rate;
data.over_course_rate = res.over_course_rate; data.over_course_rate = res.over_course_rate;
...@@ -875,75 +834,75 @@ ...@@ -875,75 +834,75 @@
}) })
} }
}, },
onPageChange(val){ onPageChange(val) {
this.nowPage = val; this.nowPage = val;
this.getUser(); this.getUser();
}, },
onSizeChange(val){ onSizeChange(val) {
this.nowPage = 1; this.nowPage = 1;
this.limit = val; this.limit = val;
this.getUser(); this.getUser();
}, },
getUser(){ getUser() {
let json = { let json = {
user_id: this.id, user_id: this.id,
limit: this.limit, limit: this.limit,
page: this.nowPage, page: this.nowPage,
status: '1,3,4,5' status: '1,3,4,5'
}; };
getOrderListApi(json).then(res=>{ getOrderListApi(json).then(res => {
res.list.forEach(i=>{ res.list.forEach(i => {
i.refundList = [] i.refundList = []
}); });
this.userList = res.list; this.userList = res.list;
this.total = res.total this.total = res.total
}) })
}, },
getDetail(){ getDetail() {
if(!this.id) return; if (!this.id) return;
getUserDetailApi(this.id).then(res=>{ getUserDetailApi(this.id).then(res => {
this.detail = res; this.detail = res;
if (res.periods_list) { if (res.periods_list) {
this.periodList = res.periods_list this.periodList = res.periods_list
} }
console.log(res) console.log(res)
}) })
getSubAccountInfoApi(this.id).then(res =>{ getSubAccountInfoApi(this.id).then(res => {
if(res.family_user==1){ if (res.family_user == 1) {
this.subDetail = res.sub_user_info this.subDetail = res.sub_user_info
} }
}) })
}, },
getUserSubAccountList(){ getUserSubAccountList() {
getUserSubAccountListApi(this.id).then(res =>{ getUserSubAccountListApi(this.id).then(res => {
this.subListData = res this.subListData = res
}) })
}, },
bindTeacher(){ bindTeacher() {
let data = this.detail let data = this.detail
this.dialogObj = { this.dialogObj = {
show:true, show: true,
title:'绑定老师', title: '绑定老师',
id:data.user_id, id: data.user_id,
teacher_id: data.teacher_id teacher_id: data.teacher_id
} }
}, },
showUser(data){ showUser(data) {
let classType = data.type==1?'(带班班级)':'(观摩班级)' let classType = data.type == 1 ? '(带班班级)' : '(观摩班级)'
console.log(data) console.log(data)
this.userObj={ this.userObj = {
classId:data.class_id, classId: data.class_id,
show:true, show: true,
title:`${data.teacher_name}班级用户列表${classType}`, title: `${data.teacher_name}班级用户列表${classType}`,
teacherId: data.teacher_id, teacherId: data.teacher_id,
periods_id: data.periods_id, periods_id: data.periods_id,
goods_id:data.goods_id, goods_id: data.goods_id,
classPage:true, classPage: true,
type:data.type type: data.type
} }
}, },
//编辑备注 看课情况 //编辑备注 看课情况
editPrivilege(val){ editPrivilege(val) {
this.privilegeDialog = { this.privilegeDialog = {
id: val.id, id: val.id,
isAllowView: val.is_view_course === 1, isAllowView: val.is_view_course === 1,
...@@ -952,7 +911,7 @@ ...@@ -952,7 +911,7 @@
show: true show: true
} }
}, },
onGetUserDescList(val){ onGetUserDescList(val) {
this.descDialog.show = true; this.descDialog.show = true;
this.descDialog.userInfo = { this.descDialog.userInfo = {
user_id: val.user_id, user_id: val.user_id,
...@@ -962,17 +921,17 @@ ...@@ -962,17 +921,17 @@
this.descDialog.id = val.id; this.descDialog.id = val.id;
this.getUserDescList(); this.getUserDescList();
}, },
getUserDescList(){ getUserDescList() {
let json = { let json = {
page: this.descDialog.nowPage, page: this.descDialog.nowPage,
limit: this.descDialog.limit limit: this.descDialog.limit
}; };
getUserDescListApi(this.descDialog.id,json).then(res=>{ getUserDescListApi(this.descDialog.id, json).then(res => {
this.descDialog.descList = res.list; this.descDialog.descList = res.list;
this.descDialog.total = res.total; this.descDialog.total = res.total;
}) })
}, },
userLook(data){ userLook(data) {
this.lookDetail.show = true; this.lookDetail.show = true;
this.lookDetail.loading = true; this.lookDetail.loading = true;
let json = { let json = {
...@@ -980,10 +939,10 @@ ...@@ -980,10 +939,10 @@
page: this.lookDetail.nowPage page: this.lookDetail.nowPage
} }
this.lookDetail.data = { this.lookDetail.data = {
periods_id:data.periods_id, periods_id: data.periods_id,
user_id: data.user_id user_id: data.user_id
} }
userLookApi(data.periods_id,data.user_id, json).then(res=>{ userLookApi(data.periods_id, data.user_id, json).then(res => {
this.lookDetail.list = res.list; this.lookDetail.list = res.list;
this.lookDetail.loading = false; this.lookDetail.loading = false;
this.lookDetail.total = res.total; this.lookDetail.total = res.total;
...@@ -994,8 +953,8 @@ ...@@ -994,8 +953,8 @@
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
inputValue: '' inputValue: ''
}).then(({ value }) => { }).then(({value}) => {
addPeriodsClassUserDescApi(id,{desc: value}).then(res=>{ addPeriodsClassUserDescApi(id, {desc: value}).then(res => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '编辑备注成功' message: '编辑备注成功'
...@@ -1004,7 +963,7 @@ ...@@ -1004,7 +963,7 @@
}); });
}) })
}, },
changePrivilegeSub(){ changePrivilegeSub() {
this.$confirm('此操作将修改用户权限?', '提示', { this.$confirm('此操作将修改用户权限?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
...@@ -1015,7 +974,7 @@ ...@@ -1015,7 +974,7 @@
is_add_teacher: this.privilegeDialog.is_add_teacher, is_add_teacher: this.privilegeDialog.is_add_teacher,
weight: this.privilegeDialog.weight weight: this.privilegeDialog.weight
} }
updateUserPrivilegeApi(this.privilegeDialog.id,_json).then(res=>{ updateUserPrivilegeApi(this.privilegeDialog.id, _json).then(res => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '修改成功!' message: '修改成功!'
...@@ -1026,7 +985,7 @@ ...@@ -1026,7 +985,7 @@
}); });
}); });
}, },
getyunjiOrder(){ getyunjiOrder() {
let json = { let json = {
limit: this.limit, limit: this.limit,
page: this.nowPage page: this.nowPage
...@@ -1038,30 +997,30 @@ ...@@ -1038,30 +997,30 @@
}); });
} }
}, },
filters:{ filters: {
payMentFilter(val){ payMentFilter(val) {
return val=='1'?'已付款':'未付款' return val == '1' ? '已付款' : '未付款'
}, },
courseTypeFilter(val){ courseTypeFilter(val) {
return val.type=='1'?`正式课(${val.duration}个月)`:`试听课(${val.duration}天)` return val.type == '1' ? `正式课(${val.duration}个月)` : `试听课(${val.duration}天)`
}, },
inviteType(value){ inviteType(value) {
return INVITETYPE[value] return INVITETYPE[value]
}, },
status(value){ status(value) {
return ORDERSTATUS[value] return ORDERSTATUS[value]
}, },
buyType(value){ buyType(value) {
return BUYTYPE[value] return BUYTYPE[value]
}, },
moneytFilter(val){ moneytFilter(val) {
return val = val / 100 + '元' return val = val / 100 + '元'
}, },
percent(val){ percent(val) {
return (val * 100).toFixed(2)+'%' return (val * 100).toFixed(2) + '%'
}, },
isdel(val){ isdel(val) {
return val==0?'未删除':'已删除' return val == 0 ? '未删除' : '已删除'
} }
} }
} }
...@@ -1069,62 +1028,79 @@ ...@@ -1069,62 +1028,79 @@
<style scoped lang="less"> <style scoped lang="less">
@import "../../util/public"; @import "../../util/public";
.box{display: flex;}
.user-card{ .box {
margin: 10px;width: 600px; display: flex;
}
.user-card {
margin: 10px;
width: 600px;
padding: 20px; padding: 20px;
// display: flex; // display: flex;
.text.item{ .text.item {
line-height: 30px; line-height: 30px;
} }
.card-content{
img{ .card-content {
img {
float: left; float: left;
} }
} }
label{
label {
color: #5982e6; color: #5982e6;
width: 100px; width: 100px;
display: inline-block; display: inline-block;
text-align: right; text-align: right;
} }
.el-col{
.el-col {
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
} }
.title{
.title {
height: 50px; height: 50px;
line-height: 60px; line-height: 60px;
margin-bottom: 20px; margin-bottom: 20px;
a{
a {
display: block; display: block;
img{
img {
width: 80px; width: 80px;
border-radius: 100px; border-radius: 100px;
} }
} }
} }
} }
.width400{
.width400 {
width: 400px; width: 400px;
} }
.avatar { .avatar {
width: 50px; width: 50px;
height: 50px; height: 50px;
border-radius: 50%; border-radius: 50%;
} }
.user{
.user {
height: 100%; height: 100%;
overflow: auto; overflow: auto;
/*padding: 20px 0;*/ /*padding: 20px 0;*/
.btn-content{
.btn-content {
text-align: center; text-align: center;
} }
} }
.header { .header {
padding: 0 20px; padding: 0 20px;
margin-bottom: 20px; margin-bottom: 20px;
} }
.header { .header {
.el-row { .el-row {
display: flex; display: flex;
...@@ -1133,14 +1109,17 @@ ...@@ -1133,14 +1109,17 @@
color: #666; color: #666;
font-size: 16px; font-size: 16px;
margin: 25px 0; margin: 25px 0;
label{
label {
margin-right: 10px; margin-right: 10px;
} }
} }
.avatar { .avatar {
margin-right: 10px; margin-right: 10px;
} }
} }
.b-title { .b-title {
padding: 20px; padding: 20px;
color: #666; color: #666;
......
...@@ -156,7 +156,12 @@ ...@@ -156,7 +156,12 @@
<div v-if='scope.row.user_id === 0'>用户未绑定</div> <div v-if='scope.row.user_id === 0'>用户未绑定</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="periods_title" label="期数"> <!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
<el-table-column prop="periods_title" label="期数名称" width="150px">
<template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
<!--{{periodName(scope.row)}}-->
</template>
</el-table-column> </el-table-column>
<el-table-column prop="goods_name" label="商品名称"> <el-table-column prop="goods_name" label="商品名称">
</el-table-column> </el-table-column>
...@@ -500,6 +505,29 @@ export default { ...@@ -500,6 +505,29 @@ export default {
}); });
}, },
methods: { methods: {
periodName(val) {
let str = '';
if (!val.periods_title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.periods_title) {
str += `${val.periods_title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
initClearOtherOrder(id){ initClearOtherOrder(id){
this.$confirm('确认清除?', '提示', { this.$confirm('确认清除?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
......
...@@ -1364,7 +1364,7 @@ export const getStaffRecordApi = function (json) { ...@@ -1364,7 +1364,7 @@ export const getStaffRecordApi = function (json) {
// 系统配置设备 // 系统配置设备
export const getTeacherTypeListApi = function (json) { export const getTeacherTypeListApi = function (json) {
return Vue.prototype.$fetch(`${_baseUrl}api/admin/teacher/type/list`, json) return Vue.prototype.$fetch(`${_baseUrl}api/admin/teacher/type/list`, json)
}; };
export const postTeacherTypeListApi = function (json) { export const postTeacherTypeListApi = function (json) {
return Vue.prototype.$post(`${_baseUrl}api/admin/teacher/type/add`, json) return Vue.prototype.$post(`${_baseUrl}api/admin/teacher/type/add`, json)
}; };
...@@ -1375,3 +1375,7 @@ export const postMediaConvertApi = function (json) { ...@@ -1375,3 +1375,7 @@ export const postMediaConvertApi = function (json) {
return Vue.prototype.$post(`${_baseUrl}api/public/media/convert`, json) return Vue.prototype.$post(`${_baseUrl}api/public/media/convert`, json)
}; };
///api/public/media/convert ///api/public/media/convert
// 最近更新时间
export const getUpdateTimeApi = function () {
return Vue.prototype.$fetch(`${_baseUrl}api/admin/get/report/time`)
};
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