lion 2 years ago
parent d4fde70a86
commit 11f84e5755

@ -2,6 +2,6 @@
ENV = 'development'
# base api
VUE_APP_BASE_API = https://yybtest.ali251.langye.net/
#VUE_APP_BASE_API = https://yybtest.ali251.langye.net/
VUE_APP_BASE_DEV_API = https://yunyubang.ali251.langye.net/
#VUE_APP_BASE_API = https://yunyubang.ali251.langye.net/
VUE_APP_BASE_API = https://yunyubang.ali251.langye.net/

@ -47,3 +47,12 @@ export function getActiveOrder(params){
params
})
}
export function cancelUser(data){
return request({
method:'post',
url:'/api/admin/active/active-canceled-member',
data
})
}

@ -43,6 +43,7 @@ export default {
isFullScreen:false
}
},
mounted(){},
methods: {
headerRender(){
return (
@ -120,6 +121,8 @@ export default {
return (
<Modal
ok-text={okText}
draggable
reset-drag-position
class-name={!isFullScreen?'vertical-center-modal':'vertical-center-modal vertical-full-modal'}
width={width}
title={title}
@ -193,7 +196,13 @@ export default {
}
}
</script>
<style scoped>
/deep/ .vertical-center-modal .ivu-modal{
width:100%!important;
height:100%!important;
}
</style>
<style lang="scss">
.xy-table-item-label{
width: 140px;
@ -271,7 +280,8 @@ font-size: 15px;
width:100%!important
}
.ivu-modal-content{
height:100vh
height:100vh;
width:100%!important
}
.ivu-modal-body{
max-height: 80vh !important;

@ -30,7 +30,8 @@
import 'tinymce/plugins/code'
import "tinymce/plugins/image"
import "tinymce/plugins/imagetools"
import "/public/tinymce/plugins/axupimgs/plugin.js"
import "/public/tinymce/plugins/axupimgs/plugin.js"
import 'tinymce/plugins/media'
export default {
components: {
Editor
@ -50,11 +51,11 @@
},
plugins: {
type: [String, Array],
default: "code image axupimgs paste preview searchreplace autolink directionality visualblocks visualchars fullscreen template codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave ",
default: "code image axupimgs media paste preview searchreplace autolink directionality visualblocks visualchars fullscreen template codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave ",
},
toolbar: {
type: [String, Array],
default: ` undo redo restoredraft | code | image | axupimgs | imagetools | assignment | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough anchor | alignleft aligncenter alignright alignjustify outdent indent |
default: ` undo redo restoredraft | code | image | axupimgs | media | imagetools | assignment | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough anchor | alignleft aligncenter alignright alignjustify outdent indent |
styleselect formatselect fontselect fontsizeselect | table charmap emoticons hr pagebreak | bullist numlist | blockquote subscript superscript removeformat |
insertdatetime print preview | fullscreen | bdmap indent2em lineheight formatpainter`,
},
@ -81,7 +82,42 @@
images_upload_url: this.imgUploadUrl,
images_upload_handler: (blobInfo, success, failure) => {
this.handleImgUpload(blobInfo, success, failure);
},
},
file_picker_types: 'media',
file_picker_callback: function(cb, value, meta) {
if(meta.filetype == 'media'){
let input = document.createElement('input');//input
input.setAttribute('type', 'file');
let that = this;
input.onchange = function(){
let file = this.files[0]
let formdate = new FormData();
formdate.append("file", file); //imageFile
uploads(formdate).then(res => {
if (res) {
let url = res.url;
cb(url)
// success(url); //url
} else {
// failure(res.errmsg);
this.$message.error(res.errmsg);
}
})
// this.handleVideoUpload(file, cb)
// let file = this.files[0];//
// that.uploadVideo(that.qiniuToken, file, 'video'); // url
// if(that.uploaded){
// callback(that.resVideo, { title: file.name }) //url
// }else{
// setTimeout(()=>{
// callback(that.resVideo, { title: file.name })
// },2000)
// }
}
//
input.click();
}
}
// setup: (editor) => {
// let _this = this
@ -135,6 +171,20 @@
this.$message.error(res.errmsg);
}
})
},
handleVideoUpload(file, success, failure) {
console.log("我要上传", blobInfo);
let formdate = new FormData();
formdate.append("file", file); //imageFile
uploads(formdate).then(res => {
if (res) {
let url = res.url;
success(url); //url
} else {
failure(res.errmsg);
this.$message.error(res.errmsg);
}
})
}
},
computed: {},

@ -46,7 +46,7 @@
<addActivity ref="addActivity" @refresh="getActivities"></addActivity>
<checkActivity ref="checkActivity" @refresh="getActivities"></checkActivity>
<showActiveOrder :id="activeId" :name="activeName" :is-show.sync="isShowOrder"></showActiveOrder>
<showActiveOrder :id="activeId" :name="activeName" :state='state' :is-show.sync="isShowOrder"></showActiveOrder>
</div>
</template>
@ -106,6 +106,7 @@ export default {
isShowOrder:false,
activeId:null,
activeName:"",
state:'',
activeTypeList:[],
table:[
{
@ -290,21 +291,47 @@ export default {
}
this.activeId = cell.id;
this.activeName = cell.active_name
this.state= "4"
this.isShowOrder = true;
}
}
}
>
{
cell.total?cell.total:0
} </div> )
}
// formatter:(cell,data,value)=>{
// return value ?? 0
// }
},
{
label:"已取消数",
width: 140,
prop:'total_canceled',
customFn: (cell) => {
return ( < div style = {
{
cursor: 'pointer',
color: "blue",
textDecoration: "underline"
}
}
on = {
{
['click']: (e) => {
if(cell.total_canceled<1){
return
}
this.activeId = cell.id;
this.activeName = cell.active_name
this.state= "2"
this.isShowOrder = true;
}
}
}
>
{
cell.total_canceled?cell.total_canceled:0
} </div> )
}
}
// {
// label:"",
@ -399,5 +426,5 @@ export default {
}
/deep/ .el-date-editor .el-range-separator{
line-height: 25px!important;
}
}
</style>

@ -130,6 +130,18 @@
</div>
</div>
</template>
<template v-slot:lecturer>
<div class="xy-table-item">
<div class="xy-table-item-label">
讲师
</div>
<div class="xy-table-item-content">
<el-input type="text" v-model="form.lecturer" placeholder="请输入讲师" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:active_tag>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -400,6 +412,7 @@ companykeyword:"",
sponsorAdvertise:"",
recommend:"",
//slogan:"",
lecturer:'',
active_tag:'',
active_type_id:'',
template:'',
@ -594,6 +607,7 @@ companykeyword:"",
sponsorAdvertise:res.sponsor_advertise,
recommend:res.recommend,
//slogan:res.slogan,
lecturer:res?.lecturer,
active_tag:res?.active_tag,
active_type_id:res?.active_type_id,
template:res?.template,
@ -649,6 +663,7 @@ companykeyword:"",
sponsor_advertise:this.form.sponsorAdvertise,
recommend:this.form.recommend,
//slogan:this.form.slogan,
lecturer:this.form.lecturer,
active_tag:this.form.active_tag,
active_type_id:this.form.active_type_id,
template:this.form.template,
@ -691,6 +706,7 @@ companykeyword:"",
sponsor_advertise:this.form.sponsorAdvertise,
recommend:this.form.recommend,
//slogan:this.form.slogan,
lecturer:this.form.lecturer,
active_tag:this.form.active_tag,
active_type_id:this.form.active_type_id,
template:this.form.template,

@ -22,14 +22,19 @@
<script>
import {
show
show,
cancelUser
} from "@/api/activity"
import {
download
} from '@/utils/downloadRequest'
export default {
props: {
id: Number,
id: Number,
state: {
type:String,
default:''
},
name: String,
isShow: {
type: Boolean,
@ -38,7 +43,20 @@
},
data() {
return {
isFullScreen: false,
isFullScreen: false,
statusNames:[{
id:0,
name:'申请取消'
},{
id:1,
name:'待核销'
},{
id:2,
name:'已取消'
},{
id:3,
name:'已核销'
}],
list: [],
table: [{
prop: "created_at",
@ -46,8 +64,37 @@
width: 180
}, {
prop: "used_time_name",
label: "是否核销",
width: 120
label: "状态",
width: 120,
// formatter(value){
// return value==''?(
// <div>{value}</div>
// ):value
// }
customFn:(row)=>{
if(row.used_time_name=='申请取消'||row.used_time_name=='待核销'){
return (<div
style={
{
color:'#bf617c',
'text-decoration': 'underline',
cursor:'pointer'
}
}
on = {
{
['click']: (e) => {
this.cancelUser(row.id)
}
}
}
>{row.used_time_name}</div>)
}else{
return (
<div>{row.used_time_name}</div>
)
}
}
}, {
prop: "code",
label: "核销码",
@ -120,16 +167,39 @@
},
methods: {
closeshowChange() {},
fullScreen() {},
fullScreen() {},
cancelUser(id){
console.log("123")
this.$Modal.confirm({
title: '取消活动',
content: '是否确认取消该用户报名的活动?',
loading: true,
onOk: () => {
cancelUser({
id:id
}).then(res=>{
this.$Modal.remove();
this.$Message.info('取消成功');
this.getOrder()
})
}
});
},
async getOrder() {
await show({
id: this.id
id: this.id,
state:this.state
}).then(res => {
for (var k of res.apply) {
k.wechat_nickname = k.members ? k.members.wechat_nickname : ""
k.used_time_name = k.used_time ? '已核销' : '待核销'
// k.used_time_name = k.used_time ? '' : ''
k.spread_member_name = k.spread_member ? k.spread_member.name : ''
k.spread_member_phone = k.spread_member ? k.spread_member.phone : ''
k.spread_member_phone = k.spread_member ? k.spread_member.phone : ''
for(var s of this.statusNames){
if(k.state==s.id){
k.used_time_name = s.name
}
}
}
this.list = res.apply
})
@ -154,6 +224,11 @@
isShow(newVal) {
if (newVal) {
this.getOrder()
}else{
this.id=''
this.name=''
this.state = ''
}
}
}

@ -17,9 +17,9 @@
<div class="xy-table-item-label">课程表</div>
<div class="xy-table-item-content">
<Button type="primary" icon="md-add" style="margin-bottom: 10px"
@click="form.course_list.push({ sortnumber:0,name: '',time:'', address: '',speaker:'',link:'' })">新增</Button>
@click="form.course_list.push({ sortnumber:0,name: '',theme:'',time:'', address: '',speaker:'',link:'' })">新增</Button>
<xy-table style="width: 100%" :height="560" :is-page="false" :showIndex='false' :list="form.course_list"
<xy-table style="width: 80%" :height="560" :is-page="false" :showIndex='false' :list="form.course_list"
:table-item="contentTable">
<template v-slot:btns>
<el-table-column label="操作" width="90" header-align="center" align="center">
@ -216,7 +216,7 @@
row.time = e.start_date + ' ' + e.start_time
//
row.address = e.address
row.speaker = ''
row.speaker = e.lecturer
row.link = '/pages/active/detail?id=' + e.id
},

@ -39,7 +39,7 @@
</div>
<div class="boxcline"></div>
<div class="boxcontentsubtitle">下单/取消</div>
<div class="boxcontentsubtitle">下单/取消</div>
<div class="boxcontent">
<div class="boxcontentitem">
<div class="boxcontentitem-big">
@ -108,6 +108,23 @@
:end-val="totaldata.customer.customer_list.total.customer_date.phone" :duration="3600" />
</div>
</div>
</div>
<div class="boxcline"></div>
<div class="boxcontentsubtitle">当前注册 / 手机号授权</div>
<div class="boxcontent">
<div class="boxcontentitem">
<div class="boxcontentitem-big">
<count-to separator="" :start-val="0"
:end-val="totaldata.customer.customer_list.total.customer_month.total" :duration="3600" />
</div>
</div>
<div class="boxline"></div>
<div class="boxcontentitem">
<div class="boxcontentitem-big">
<count-to separator="" :start-val="0"
:end-val="totaldata.customer.customer_list.total.customer_month.phone" :duration="3600" />
</div>
</div>
</div>
<div class="boxfooter"></div>
</div>

@ -27,6 +27,7 @@ export default {
form:{
comment:''
},
comment:'',
rules:{
}
}
@ -51,10 +52,11 @@ export default {
watch:{
isShow(val){
if(val){
this.form.comment = this.comment
}else{
this.$refs['dialog'].reset()
this.id=''
this.comment = ''
}
}
}

@ -56,7 +56,7 @@
<el-table-column fixed="right" label="操作" width="100" header-align="center">
<template slot-scope="scope">
<Button type="primary" size="small" ghost style="margin-left: 10px;"
@click="changeRemark(scope.row.id)">修改备注</Button>
@click="changeRemark(scope.row.id,scope.row.comment)">修改备注</Button>
</template>
</el-table-column>
</template>
@ -200,10 +200,10 @@
},
'财务流水.xlsx')
},
changeRemark(id){
console.log(id)
changeRemark(id,comment){
this.$refs['editRemark'].isShow = true
this.$refs['editRemark'].id = id
this.$refs['editRemark'].comment = comment
},
pageChange(e) {
this.select.pageIndex = e

@ -66,10 +66,16 @@ export default {
id:1,
value:"已读"
}],
typeList:[{
id:"MerchantBalance",
typeList:[
// {
// id:"MerchantBalance",
// value:""
// },
{
id:"MerchantBalanceToAdmin",
value:"余额不足"
},{
},
{
id:"OrderItemMemberCancel",
value:"用户取消单"
},{
@ -141,7 +147,8 @@ export default {
this.total = res.total
},
goOrder(value){
this.$router.push("/order/orderList?order_item_id="+value);
let url =`/admin/#/order/orderList?order_item_id=`+value
let seeBuy = window.open(url, 'seeBuy','location=0')
},
pageChange(e) {
this.select.pageIndex = e

@ -1,7 +1,14 @@
<template>
<div>
<Modal draggable :width="60" title="订单日志" :value.sync="isShow" @on-visible-change="$emit('update:isShow',$event)"
<Modal draggable :width="60" :fullscreen='fullScreen' title="订单日志" :value.sync="isShow" @on-visible-change="$emit('update:isShow',$event)"
>
<!-- <template v-slot:header>
<div>
订单日志
<a class="ivu-modal-close" @click="closeshowChange"><i class="ivu-icon ivu-icon-ios-close"></i></a>
<a class="ivu-modal-screen" @click="fullScreen=!fullScreen"><i :class="fullScreen?'el-icon-aim':'el-icon-full-screen'"></i></a>
</div>
</template> -->
<xy-table :is-page="false" :list="list" :table-item="table" :height="300">
<template v-slot:btns>
<div></div>
@ -26,6 +33,7 @@ export default {
data() {
return {
list:[],
fullScreen:false,
table:[
{
label:'用户',
@ -65,6 +73,9 @@ export default {
item_id:this.id
})
this.list = res.data
},
closeshowChange(){
this.isShow = false
}
},
watch:{
@ -78,5 +89,15 @@ export default {
}
</script>
<style scoped lang="scss">
<style scoped>
/deep/ .ivu-modal{
width:100%!important;
}
/deep/ .ivu-modal-content{
/* */
}
/* /deep/ .ivu-modal-content{
width:100%!important
} */
</style>

@ -5,8 +5,9 @@
<slot>
<div style="display: flex">
<Input v-model="select.keyword" class="select" style="width: 200px; margin-right: 10px"
placeholder="关键字搜索" />
<Button class="select" type="primary" style="margin-right: 10px;" @click="searchOrder"></Button>
placeholder="关键字搜索" />
<el-checkbox style="margin-left: 10px;line-height:36px" v-model="select.next_follow_time"></el-checkbox>
<Button class="select" type="primary" style="margin-right: 10px;margin-left: 10px;" @click="searchOrder"></Button>
<xy-selectors @search="searchOrder" @reset="resetsearch">
<template>
<el-row>
@ -188,7 +189,8 @@
name: "",
id: ""
},
keyword: '',
keyword: '',
next_follow_time:false,
productType: '',
orderStates: '',
productTypeName: "",
@ -242,7 +244,7 @@
table: [{
prop: "order.serial",
label: "订单编号",
width: 150,
width: 130,
align: 'center',
fixed: 'left'
},
@ -529,7 +531,8 @@
resetsearch() {
this.select.page = 1;
this.select.merchant = '';
this.select.keyword = '';
this.select.keyword = '';
this.select.next_follow_time = false;
this.select.productType = '';
this.select.orderStates = '';
this.select.productTypeName = '';
@ -612,7 +615,9 @@
async getOrders() {
let is_merchant = this.select.is_merchant
this.select.is_merchant = is_merchant ? 1 : 0;
this.select.is_merchant = is_merchant ? 1 : 0;
let is_next_follow_time = this.select.next_follow_time
this.select.next_follow_time = is_next_follow_time ? 1 : '';
let order_paid = this.select.order_paid
this.select.order_paid = order_paid ? 1 : '';
@ -627,7 +632,8 @@
sort_type:'DESC',
...this.select
})
this.select.is_merchant = is_merchant;
this.select.is_merchant = is_merchant;
this.select.next_follow_time = is_next_follow_time;
this.select.order_paid = order_paid;
this.select.order_item_id=""
this.total = res.total
@ -643,7 +649,10 @@
let is_merchant = this.select.is_merchant
this.select.is_merchant = is_merchant ? 1 : 0;
this.select.is_merchant = is_merchant ? 1 : 0;
let is_next_follow_time = this.select.next_follow_time
this.select.next_follow_time = is_next_follow_time ? 1 : 0;
let order_paid = this.select.order_paid
this.select.order_paid = order_paid ? 1 : '';
@ -661,7 +670,9 @@
'订单列表.xlsx')
this.select.is_merchant = is_merchant;
this.select.is_merchant = is_merchant;
this.select.next_follow_time = is_next_follow_time;
this.select.order_paid = order_paid;
}
},

@ -26,7 +26,7 @@
<el-checkbox v-model="select.is_phone"></el-checkbox>
</div>
<div class="selector-item">
<div class="selector-item__label">支付查询</div>
<div class="selector-item__label">支付时间</div>
<el-date-picker
v-model="dateRange"
@change='dateChange'
@ -37,6 +37,30 @@
end-placeholder="结束日期">
</el-date-picker>
</div>
<div class="selector-item">
<div class="selector-item__label">核销时间</div>
<el-date-picker
v-model="dateRangeCancel"
@change='dateChangeCancel'
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
<div class="selector-item">
<div class="selector-item__label">注册时间</div>
<el-date-picker
v-model="dateRangeReg"
@change='dateChangeReg'
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
<div class="selector-item">
<div class="selector-item__label">核销数</div>
<Input clearable v-model="select.write_off" style="width: 50px;margin:0 3px" placeholder="" />
@ -97,6 +121,10 @@
is_phone: false,
create_time:'',
over_time:'',
finish_start_date:'',
finish_end_date:'',
register_start_date:'',
register_end_date:'',
order_count:'',
write_off:'',
total_related_person:'',
@ -108,7 +136,9 @@
arrHospital: ["市立医院", "苏大附一院", "苏大附二院","附二浒关院区", "中医院", "第五人民医院", "苏州市第七人民医院", "明基医院", "九龙医院", "娄葑医院",
"吴中人民医院", "甪直人民医院", "相城人民医院", "相城区第二人民医院", "吴江第一人民医院", "吴江第二人民医院", "盛泽医院", "其他"
],
dateRange:[],
dateRange:[],
dateRangeCancel:[],
dateRangeReg:[],
areas: ["吴中区", "吴江区", "姑苏区", "工业园区", "高新区", "相城区", "昆山", "常熟", "张家港", "太仓"],
total: 0,
@ -196,7 +226,7 @@
}>
<div>
<span style={{'color':k.state=='finished'?'red':'#000'}}>{index+1}{k.items?.state_name}</span>-
<span>{k.created_at}</span>-
<span>{k.items.updated_at}</span>-
<span>{ k.order_name}</span>
</div>
</div>)
@ -259,6 +289,24 @@
this.select.create_time = ''
this.select.over_time = ''
}
},
dateChangeCancel(e){
if(e){
this.select.finish_start_date = this.dateRangeCancel[0]
this.select.finish_end_date = this.dateRangeCancel[1]
}else{
this.select.finish_start_date = ''
this.select.finish_end_date = ''
}
},
dateChangeReg(e){
if(e){
this.select.register_start_date = this.dateRangeReg[0]
this.select.register_end_date = this.dateRangeReg[1]
}else{
this.select.register_start_date = ''
this.select.register_end_date = ''
}
},
pageSizeChange(e) {
@ -283,6 +331,10 @@
area: this.select.area,
is_phone: this.select.is_phone ? 1 : "",
create_time:this.select.create_time,
finish_start_date:this.select.finish_start_date,
finish_end_date:this.select.finish_end_date,
register_start_date:this.select.register_start_date,
register_end_date:this.select.register_end_date,
over_time:this.select.over_time,
write_off:this.select.write_off,
order_count:this.select.order_count,
@ -298,13 +350,17 @@
exportExel() {
download('/api/admin/member/index', 'get', {
is_export: 1,
is_export: 2,
keyword: this.select.keywords,
hospital: this.select.hospital,
area: this.select.area,
is_phone: this.select.is_phone ? 1 : "",
create_time:this.select.create_time,
over_time:this.select.over_time,
finish_start_date:this.select.finish_start_date,
finish_end_date:this.select.finish_end_date,
register_start_date:this.select.register_start_date,
register_end_date:this.select.register_end_date,
write_off:this.select.write_off,
order_count:this.select.order_count,
total_related_person:this.select.total_related_person,
@ -312,7 +368,7 @@
end_date:this.select.end_date,
product_pid:this.select.product_pid,
product_type_list:this.select.product_type_list
}, '用户列表.xlsx')
},
reloadUser(){

Loading…
Cancel
Save