Compare commits

...

14 Commits

Author SHA1 Message Date
25ce5aef43 编辑活动草稿箱完善 2025-07-12 08:47:40 +08:00
76a5c7b4c7 发票抬头部分对完了和发票流程
草稿箱修复:编辑草稿箱里的内容时,弹窗内协议按钮直接亮起来;草稿箱里编辑信息,不填活动分类,点确认发布,没有“平台分类必填”的提示;不上传群二维码,点击确认上传后,没有反应
2025-07-11 18:25:24 +08:00
b25aefce6b 文档中0710的bug修复 2025-07-10 18:47:30 +08:00
a251c2fcc1 待审核列表的修改页面
1、	tabbars的发布活动在选择草稿箱中的内容发布
我发布页面的草稿箱列表
2025-07-09 18:31:02 +08:00
8104c5df2f 草稿箱测试修改 2025-07-08 18:49:38 +08:00
3dbd59baa6 我发布的、修改活动信息和发布活动的页面新增草稿箱 2025-07-07 18:30:41 +08:00
ec699798bf 1、分包packageA中删除部分不使用的页面
2、修改、重发的图片逻辑,价格、文本域接富文本内容、调整报名时间位置
2025-07-04 18:34:21 +08:00
ded0c3cbd4 1、我发布的新增修改、编辑和重发按钮
2、编辑页面的接参逻辑和提交修改的逻辑
3、tabbar页面的发布活动的活动人数的input框的修改
2025-07-03 18:25:28 +08:00
e19474eed0 1、我参加的页面的tabs标签调整
2、发布活动的报名时间放在活动时间之前
3、新增编辑活动页面
4、我发布的活动列表的未开始状态和待审核的状态列表增加修改按钮
2025-07-02 18:29:45 +08:00
f3f6803f30 1、订单列表的发票跳转2、申请发票接口对接
3、发票中心的抬头管理接口对接和提交记录的接口对接,以及数组为空时的按钮提示
4、添加发票的静态页面
5、查看发票的静态页面+接口对接数据
2025-07-01 18:28:55 +08:00
96dda0b4c1 合并开发票跳转的逻辑完善,填写发票信息的静态页面和订单详情接口对接,提交接口的对接 2025-06-30 18:32:05 +08:00
4bcbc1494c 对接了发票中心的合并发票的数据,活动列表的开发票和查看发票的按钮对接,填写发票信息的静态页面70% 2025-06-28 18:26:53 +08:00
4015500d34 发票模块进程10%:发票中心的合开发票和提交记录的静态页面已完成 2025-06-27 18:29:35 +08:00
79aa8574e7 测试账号 2025-06-27 16:57:14 +08:00
23 changed files with 12963 additions and 5617 deletions

View File

@ -1,7 +1,8 @@
<template>
<view>
<view class="long-data-picker">
<picker-view indicator-class="select-line" :immediate-change="true" :indicator-style="itemHeight" @change="bindDateChange">
<picker-view indicator-class="select-line" :immediate-change="true"
:indicator-style="itemHeight" @change="bindDateChange">
<picker-view-column>
<view class="long-datetime-item" v-for="(item,index) in dates" :key="index">{{item}}</view>
@ -14,7 +15,7 @@
<picker-view-column>
<view class="long-datetime-item" v-for="(item,index) in minutes" :key="index">{{item}}</view>
</picker-view-column>
<!-- <picker-view :key="key" ...> -->
</picker-view>
</view>
</view>
@ -27,10 +28,13 @@
export default {
name: "long-date",
props: {
chooseNum: {
type: Number,
default: 30
},
defaultTime: {
type: Date,
default: null
}
},
@ -43,10 +47,16 @@
dates: [],
hours: [],
minutes: [],
formatdates: []
formatdates: [],
currentTime: new Date(),
currentTimePlus8Hours: null, //
// valueDate: [0, 0, 0],
currentValue: [0, 0, 0], //
isInitialized: false, //
};
},
computed: {
//
currentdateindex(nv) {
@ -85,6 +95,7 @@
//
initDate() {
let currentdate = moment().format("MMM Do");
// console.log('');
//
this.dates = []
//
@ -92,6 +103,7 @@
for (let i = 0; i <= this.chooseNum; i++) {
const date = moment().add(i, 'days');
this.formatdates.push(moment().add(i, 'days').format("YYYY-MM-DD"))
this.dates.push(moment().add(i, 'days').format("MMMDo dddd"))
}
@ -109,8 +121,8 @@
}
this.minutes = []
let m = parseInt(moment().format("mm"))
console.log(m);
for (let i = 0; i < 60; i++) {
console.log('m', m);
for (let i = m; i < 60; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
@ -119,70 +131,101 @@
}
this.minutes.push(str);
}
},
console.log('');
},
//
bindDateChange(e) { //
console.log('滚动切换时间',e.detail.value);
let valueArr = e.detail.value
this.hours = []
this.minutes = []
if (valueArr[0] != 0) {
for (let i = 0; i < 24; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.hours.push(str);
}
for (let i = 0; i < 60; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.minutes.push(str);
}
} else {
let h = parseInt(moment().format("HH"))
this.hours = []
for (let i = h; i < 24; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.hours.push(str);
}
this.minutes = []
let m = parseInt(moment().format("mm"))
for (let i = 0; i < 60; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.minutes.push(str);
}
}
if (valueArr[0] != 0) {
let dateStr = this.formatdates[valueArr[0]];
let hourStr = this.hours[valueArr[1]];
let minuteStr = this.minutes[valueArr[2]];
console.log(dateStr + ' ' + hourStr + ':' + minuteStr)
this.$emit("select", {
time: moment(dateStr + ' ' + hourStr + ':' + minuteStr).format("YYYY-MM-DD HH:mm")
});
}
// valueArr[1] = 0
// valueArr[2] = 0
// e.detail.value[1] =0;
// e.detail.value[2] =0;
console.log('不是今天',e.detail.value);
for (let i = 0; i < 24; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.hours.push(str);
}
for (let i = 0; i < 60; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.minutes.push(str);
}
} else {
//
console.log('今天',);
let h = parseInt(moment().format("HH"))
console.log('今天1h',h);
this.hours = []
for (let i = h; i < 24; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.hours.push(str);
}
this.minutes = []
const current = new Date()
const currentHour = moment(current).hours();
let m = parseInt(moment().format("mm"))
console.log('今天1m',m,currentHour,h);
if(valueArr[1] == 0 ){
for (let i = m; i < 60; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.minutes.push(str);
}
}else {
for (let i = 0; i < 60; i++) {
let str = i;
if (i < 10) {
str = '0' + str;
} else {
str = '' + str;
}
this.minutes.push(str);
}
}
}
let dateStr = this.formatdates[valueArr[0]];
let hourStr = this.hours[valueArr[1]];
let minuteStr = this.minutes[valueArr[2]];
console.log(dateStr + ' ' + hourStr + ':' + minuteStr)
this.$emit("select", {
time: moment(dateStr + ' ' + hourStr + ':' + minuteStr).format("YYYY-MM-DD HH:mm")
});
},
},
}
</script>

View File

@ -1,6 +1,6 @@
{
"name" : "多样青春活动版",
"appid" : "__UNI__F09A3D9",
"appid" : "__UNI__BD0139D",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",

View File

@ -2,7 +2,6 @@
export {};
; declare global {
const __VLS_intrinsicElements: __VLS_IntrinsicElements;
const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any };
const __VLS_unref: typeof import('vue').unref;
const __VLS_placeholder: any;
@ -24,10 +23,31 @@ export {};
N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N2] } :
N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N3] } :
{ [K in N0]: unknown };
type __VLS_FunctionalComponentProps<T, K> =
'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
: T extends (props: infer P, ...args: any) => any ? P :
{};
type __VLS_FunctionalComponentCtx<T, K> = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny<K, {}>
? K extends { __ctx?: infer Ctx } ? NonNullable<Ctx> : never : any
, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
>;
type __VLS_FunctionalComponentProps<T, K> = '__ctx' extends keyof __VLS_PickNotAny<K, {}>
? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
: T extends (props: infer P, ...args: any) => any ? P
: {};
type __VLS_FunctionalComponent<T> = (props: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>, ctx?: any) => __VLS_Element & {
__ctx?: {
attrs?: any,
slots?: T extends { $slots: infer Slots } ? Slots : Record<string, any>,
emit?: T extends { $emit: infer Emit } ? Emit : {},
props?: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>,
expose?: (exposed: T) => void,
}
};
type __VLS_NormalizeSlotReturns<S, R = NonNullable<S> extends (...args: any) => infer K ? K : any> = R extends any[] ? {
[K in keyof R]: R[K] extends infer V
? V extends Element ? V
: V extends new (...args: any) => infer R ? ReturnType<__VLS_FunctionalComponent<R>>
: V extends (...args: any) => infer R ? R
: any
: never
} : R;
type __VLS_IsFunction<T, K> = K extends keyof T
? __VLS_IsAny<T[K]> extends false
? unknown extends T[K]
@ -35,13 +55,13 @@ export {};
: true
: false
: false;
type __VLS_NormalizeComponentEvent<Props, Events, onEvent extends keyof Props, Event extends keyof Events, CamelizedEvent extends keyof Events> = (
type __VLS_NormalizeComponentEvent<Props, Emits, onEvent extends keyof Props, Event extends keyof Emits, CamelizedEvent extends keyof Emits> = (
__VLS_IsFunction<Props, onEvent> extends true
? Props
: __VLS_IsFunction<Events, Event> extends true
? { [K in onEvent]?: Events[Event] }
: __VLS_IsFunction<Events, CamelizedEvent> extends true
? { [K in onEvent]?: Events[CamelizedEvent] }
: __VLS_IsFunction<Emits, Event> extends true
? { [K in onEvent]?: Emits[Event] }
: __VLS_IsFunction<Emits, CamelizedEvent> extends true
? { [K in onEvent]?: Emits[CamelizedEvent] }
: Props
) & Record<string, unknown>;
// fix https://github.com/vuejs/language-tools/issues/926
@ -67,11 +87,16 @@ export {};
}
>
>;
type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
type __VLS_PickFunctionalComponentCtx<T, K> = NonNullable<__VLS_PickNotAny<
'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: infer Ctx } ? Ctx : never : any
, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
>>;
type __VLS_ResolveEmits<
Comp,
Emits,
TypeEmits = Comp extends { __typeEmits?: infer T } ? unknown extends T ? {} : import('vue').ShortEmitsToObject<T> : {},
NormalizedEmits = __VLS_NormalizeEmits<Emits> extends infer E ? string extends keyof E ? {} : E : never,
> = __VLS_SpreadMerge<NormalizedEmits, TypeEmits>;
type __VLS_ResolveDirectives<T> = {
[K in Exclude<keyof T, keyof __VLS_GlobalDirectives> & string as `v${Capitalize<K>}`]: T[K];
};
type __VLS_PrettifyGlobal<T> = { [K in keyof T as K]: T[K]; } & {};
type __VLS_UseTemplateRef<T> = Readonly<import('vue').ShallowRef<T | null>>;
function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [
@ -87,10 +112,8 @@ export {};
key: keyof T,
index: number,
][];
// @ts-ignore
function __VLS_getSlotParams<T>(slot: T): Parameters<__VLS_PickNotAny<NonNullable<T>, (...args: any[]) => any>>;
// @ts-ignore
function __VLS_getSlotParam<T>(slot: T): Parameters<__VLS_PickNotAny<NonNullable<T>, (...args: any[]) => any>>[0];
function __VLS_getSlotParameters<S, D extends S>(slot: S, decl?: D):
__VLS_PickNotAny<NonNullable<D>, (...args: any) => any> extends (...args: infer P) => any ? P : any[];
function __VLS_asFunctionalDirective<T>(dir: T): T extends import('vue').ObjectDirective
? NonNullable<T['created' | 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated' | 'beforeUnmount' | 'unmounted']>
: T extends (...args: any) => any
@ -98,19 +121,10 @@ export {};
: (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void;
function __VLS_makeOptional<T>(t: T): { [K in keyof T]?: T[K] };
function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
T extends new (...args: any) => any
? (props: (K extends { $props: infer Props } ? Props : any) & Record<string, unknown>, ctx?: any) => __VLS_Element & {
__ctx?: {
attrs?: any;
slots?: K extends { $slots: infer Slots } ? Slots : any;
emit?: K extends { $emit: infer Emit } ? Emit : any;
expose?(exposed: K): void;
props?: (K extends { $props: infer Props } ? Props : any) & Record<string, unknown>;
}
}
T extends new (...args: any) => any ? __VLS_FunctionalComponent<K>
: T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>
: T extends (...args: any) => any ? T
: (_: {} & Record<string, unknown>, ctx?: any) => { __ctx?: { attrs?: any, expose?: any, slots?: any, emit?: any, props?: {} & Record<string, unknown> } };
: __VLS_FunctionalComponent<{}>;
function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): 2 extends Parameters<T>['length'] ? [any] : [];
function __VLS_asFunctionalElement<T>(tag: T, endTag?: T): (attrs: T & Record<string, unknown>) => void;
function __VLS_asFunctionalSlot<S>(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable<S>;

View File

@ -735,12 +735,7 @@
}
});
},
//
toMeDetail() {
uni.navigateTo({
url: "/packageA/center/MechanismDetail?id=" + this.detail.shop.id
})
},
close() {
this.type = 0

View File

@ -697,65 +697,65 @@
this.type = 3
},
// type = 0 0 1 2 3
confimTime() {
uni.$u.http.post('/api/school/hour_order/confirm', {
classes_order_id: this.orderId,
classes_lib_spec_id: this.classes_lib_spec_id,
order_no: this.order_no2,
is_compute: 1
}).then(res => {
if (res.code == 1) {
this.order_no2 = res.data.order_no
this.timeCreat(res.data.order_no)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
this.type = 2
// _this.$api.toast(res.msg);
}
}).catch(error => {
// confimTime() {
// uni.$u.http.post('/api/school/hour_order/confirm', {
// classes_order_id: this.orderId,
// classes_lib_spec_id: this.classes_lib_spec_id,
// order_no: this.order_no2,
// is_compute: 1
// }).then(res => {
// if (res.code == 1) {
// this.order_no2 = res.data.order_no
// this.timeCreat(res.data.order_no)
// } else {
// uni.showToast({
// title: res.msg,
// icon: 'none',
// duration: 2000
// })
// this.type = 2
// // _this.$api.toast(res.msg);
// }
// }).catch(error => {
});
// });
this.show = false
this.type = 0
},
//
timeCreat(order_no) {
uni.$u.http.post('/api/school/hour_order/create', {
order_no: order_no,
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.reLaunch({
url: "/packageA/my/makeList?status=" + -1
})
}, 2000);
}
// this.show = false
// this.type = 0
// },
// //
// timeCreat(order_no) {
// uni.$u.http.post('/api/school/hour_order/create', {
// order_no: order_no,
// }).then(res => {
// if (res.code == 1) {
// uni.showToast({
// title: res.msg,
// icon: 'none',
// duration: 2000,
// complete: function() {
// setTimeout(function() {
// uni.reLaunch({
// url: "/packageA/my/makeList?status=" + -1
// })
// }, 2000);
// }
})
// })
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
this.type = 2
// _this.$api.toast(res.msg);
}
}).catch(error => {
// } else {
// uni.showToast({
// title: res.msg,
// icon: 'none',
// duration: 2000
// })
// this.type = 2
// // _this.$api.toast(res.msg);
// }
// }).catch(error => {
});
},
// });
// },
//
toMap(latitude, longitude, name) {
uni.openLocation({
@ -767,12 +767,7 @@
}
});
},
//
toMeDetail() {
uni.navigateTo({
url: "/packageA/center/MechanismDetail?id=" + this.detail.shop.id
})
},
close() {
this.type = 0
@ -1360,7 +1355,7 @@
width: 288rpx;
height: 36rpx;
font-family: PingFang SC Bold, PingFang SC Bold;
font-weight: 600;
font-weight: 900;
font-size: 36rpx;
color: #202020;
line-height: 36rpx;

File diff suppressed because it is too large Load Diff

View File

@ -1,416 +0,0 @@
<template>
<view class="center-box">
<view class="box flex flex-column flex-start">
<view class="listBox flex flex-column flex-start">
<view class="list flex flex-column flex-start" v-for="(item,index) in list" :key="index"
@click="open(item.id)">
<image :src="item.headimage" mode=""
style="width: 690rpx;height: 482rpx;border-radius: 10rpx;"></image>
<span class="title white-space">{{item.title}}</span>
<view class="icon flex align-items">
<span class="white-space"
style="font-size: 24rpx;">{{'活动时间: ' + item.start_time_text + '-' + item.end_time_text}}</span>
</view>
<view class="icon flex align-items" style="margin-bottom: 8rpx;margin-top: 8rpx;width: 400rpx;">
<span class="white-space" style="font-size: 24rpx;color: #FF2323;">
<span style="color:#7A7A7A;" v-if="item.feel == 1">活动费用:{{'' + '公益'}}</span>
<span style="color:#7A7A7A;" v-if="item.feel == 2">活动费用:{{''+ item.price}}</span>
</span>
</view>
<span class="Sign bg-blue flex justify-center align-items" @click.stop="open(item.id)">订单管理</span>
</view>
</view>
</view>
<u-loadmore :status="loadStatus" />
</view>
</template>
<script>
export default {
data() {
return {
page: 1,
limit: 10,
keywords: '',
list: [],
count: 1,
loadStatus: 'nomore',
shop_id: '',
};
},
onLoad() {
this.shop_id = uni.getStorageSync('shop_id')
},
onShow() {
this.page = 1
this.list = []
this.getList();
},
onReachBottom() {
// this.getList();
if (this.count) {
this.getList();
}
},
methods: {
//
open(id){
uni.navigateTo({
url:"/packageA/activity/acList?id=" + id
})
},
getList() {
uni.$u.http.get('/api/school/activity/activity_list', {
params: {
keywords: this.keywords,
page: this.page,
limit: this.limit,
order: 'normal',
shop_id: this.shop_id,
status: '1'
}
}).then(res => {
if (res.code == 1) {
if (res.data.list.data.length > 0) {
this.count = res.data.list.data.length;
if(this.count){
this.loadStatus = 'nomore';
this.page++;
} else {
this.loadStatus = 'loading';
}
this.list = [...this.list, ...res.data.list.data]
// if (this.list.length >= this.count) {
// this.loadStatus = 'loading';
// } else {
// this.loadStatus = 'nomore';
// }
} else {
// this.count = this.list.length
this.loadStatus = 'nomore';
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
console.log(error)
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
open(id) {
uni.navigateTo({
url: "/packageA/activity/acList?id=" + id
})
},
}
}
</script>
<style lang="scss" scoped>
.center-box {
width: 750rpx;
background: #F1F2F8;
min-height: 100vh;
}
.box {
width: 690rpx;
padding: 0 30rpx 0rpx 30rpx;
border-radius: 0px 0px 0px 0px;
}
.white-space {
overflow: hidden;
/* 确保超出容器的文本被隐藏 */
white-space: nowrap;
/* 确保文本在一行内显示 */
text-overflow: ellipsis;
/* 使用省略号表示被截断的文本 */
width: 100%;
}
.search {
margin-top: 27rpx;
width: 690rpx;
height: 64rpx;
background: #FFFFFF;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #008CFF;
.dashed {
image {
width: 52rpx;
height: 52rpx;
}
}
.line-search {
width: 2rpx;
height: 42rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.input {
// border: 4rpx solid #EAEAEA;
padding-left: 12rpx;
height: 100%;
width: 78%;
}
::v-deep .input-placeholder {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #C0C0C0;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
.searchBtn {
width: 128rpx;
height: 64rpx;
background: #008CFF;
border-radius: 5rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
}
}
.white-space {
overflow: hidden;
/* 确保超出容器的文本被隐藏 */
white-space: nowrap;
/* 确保文本在一行内显示 */
text-overflow: ellipsis;
/* 使用省略号表示被截断的文本 */
width: 100%;
}
.w-100 {
width: 100%;
}
.flex {
display: flex;
}
.justify-center {
justify-content: center;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.justify-start {
justify-content: start;
}
.listBox {
width: 690rpx;
margin-top: 10rpx;
.list {
margin-top: 32rpx;
position: relative;
background: #FFFFFF;
border-radius: 10rpx;
.title {
width: 642rpx;
margin-top: 32rpx;
margin-left: 24rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 32rpx;
color: #343434;
}
.icon {
width: 580rpx;
margin-top: 24rpx;
margin-left: 24rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #7A7A7A;
}
.Sign {
width: 170rpx;
height: 56rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 32rpx;
color: #FFFFFF;
letter-spacing: 8rpx;
align-self: flex-end;
margin-right: 24rpx;
margin-bottom: 32rpx;
}
.hui {
position: absolute;
bottom: 32rpx;
right: 54rpx;
width: 152rpx;
height: 56rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 32rpx;
color: #FFFFFF;
}
}
}
.icon-size {
width: 32rpx;
height: 32rpx;
margin-right: 8rpx;
}
.status {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #008CFF;
}
.popup {
.header {
margin-left: 24rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 42rpx;
color: #008CFF;
margin-top: 34rpx;
width: 690rpx;
}
.line-row {
width: 690rpx;
height: 1rpx;
background: #D9D9D9;
margin: 11rpx 0 31rpx 0;
}
.pop-center {
margin-top: 50rpx;
align-items: center;
width: 650rpx;
.left {
image {
border-radius: 12rpx;
}
}
.right {
// margin-left: 30rpx;
.title {
width: 650rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 42rpx;
color: #343434;
}
.line-short {
width: 642rpx;
height: 1rpx;
background: #D9D9D9;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin: 25rpx 0 25rpx 0;
}
.status {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
}
.hui {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
}
}
.popList {
justify-content: space-between;
width: 600rpx;
margin-top: 32rpx;
.hei {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #343434;
}
}
.pop-btn {
width: 690rpx;
margin-top: 62rpx;
justify-content: space-around;
.Cancel {
width: 306rpx;
height: 80rpx;
border-radius: 401rpx 401rpx 401rpx 401rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #008CFF;
}
.Confirm {
width: 306rpx;
height: 80rpx;
background: #008CFF;
border-radius: 401rpx 401rpx 401rpx 401rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #FFFFFF;
}
}
}
</style>

View File

@ -1,14 +1,23 @@
<template>
<view class="box flex">
<view class="con-center flex flex-column justify-center align-items">
<view class="tabs align-items">
<view class="tabs">
<u-tabs :activeStyle="{
color: '#303133',
fontWeight: 'bold',fontSize: '32rpx'}" :inactiveStyle="{
color: '#606266',fontSize: '32rpx'
}" :list="headers" lineColor="#323232" @click="selectheader"></u-tabs>
</view>
<!-- <view class="tabs align-items">
<span class="s-header flex flex-column" v-for="(item, index) in headers" :key="index"
:class="{ selected: headerSelected(item.status) }" @click="selectheader(item.status)">
{{ item.text }}
<span class="lines" :class="{ selected: headerSelected(item.status) }"></span>
</span>
</view>
</view> -->
<view style="min-height: 100vh;margin-top: 80rpx;">
@ -49,6 +58,11 @@
@click="toPay(item.id, item.order_no)">去支付</view>
<view v-if="item.status == 2 || item.status == 3" class="btnhx"
@click="toDetail(item.id, item.order_no, item.status)">核销码</view>
<view v-if="item.status == 9 && item.invoice_status == 0 && item.detail.feel == 0" class="btn_Inv"
@click="toAddInvoic(item.id, item.order_no)">申请开票</view>
<view v-if="item.status == 9 && item.invoice_status == 1 && item.detail.feel == 0" class="btn_InvIng">开票中</view>
<view v-if="item.status == 9 && item.invoice_status == 2 && item.detail.feel == 0" class="btn_Inv"
@click="checkInvoice(item.user_invoice_apply_id, item.order_no)">查看开票</view>
<view v-if="item.status != 0" class="btn_xq"
@click="toDetail(item.id, item.order_no, item.status)">查看详情</view>
</view>
@ -67,96 +81,7 @@
<!-- <span class="line"></span> -->
<!-- <view class="sort flex" style="width: 100%;padding: 20rpx 0;">
<JQ-orderBy @switchSort="switchSort" :size="size"></JQ-orderBy>
</view> -->
<!-- <view class="centerBox flex justify-start align-items flex-column">
<view class="flex w-100 center flex-column" style="align-items: center;" v-for="(item,index) in list"
:key="index">
<view class="flex w-100">
<image :src="item.detail.headimage" mode="" style="width: 280rpx; height: 200rpx;border-radius: 12rpx;"
@click="toDetail(item.shop_id,item.id,item.classes_lib_id,item.order_no)"></image>
<view class="flex flex-column rightBox">
<view class="flex flex-column"
@click="toDetail(item.shop_id,item.id,item.classes_lib_id,item.order_no)">
<span class="name">{{item.detail.title}}</span>
<span class="line-row"></span>
<span class="minge" v-if="selected == 0">课程名额 {{ Number(item.detail.verification_num )}}
/
{{item.detail.limit_num}}</span>
<span class="minge" v-if="selected == 0">剩余时间:24:00:00</span>
<span class="minge"
v-if="selected == 3 || selected == 6 || selected == 9">{{'购买时间 ' + item.paytime_text.slice(0,10)}}</span>
<span class="minge" v-if="selected == 2">{{'预约时间 ' + item.make}}</span>
<span class="minge" v-if="selected == 3">{{'课时 ' + item.detail.use_num + "/" + item.detail.classes_num}}</span>
<span class="minge" v-if="selected == 9">{{'核销时间 ' + item.finishtime_text.slice(0,10)}}</span>
<span class="minge" v-if="selected == -3">{{'取消时间 ' + item.canceltime}}</span>
<span class="minge" v-if="selected == 6">{{'退款时间 ' + item.refundtime}}</span>
<span class="money" v-if="item.payprice != 0">
<span>课程价格:</span>
{{'¥' + item.payprice}}</span>
<span class="charge" v-if="item.payprice == 0" >
免费
</span>
<span class="charge" v-if="item.payprice == 0" >
</span>
</view>
<view class="flex align-items" style="justify-content: flex-end;margin-top: 12rpx;">
<span class="Cancel" v-if="selected == 0" @click="Cancel(item.order_no)">取消订单</span>
<span class="make" v-if="selected == 0"
@click="toPay(item.shop_id,item.id,item.classes_lib_id,item.order_no,1)">去付款</span>
<span class="Cancel" v-if="selected == 3 && item.detail.feel == 0" style="width: 100rpx;"
@click="service(item.id)">售后</span>
<span class="Cancel" v-if="selected == 3 && item.detail.feel == 1" style="width: 100rpx;"
@click="service(item.id)">取消</span>
<span class="Cancel" v-if="selected == 3" @click="QR(item.id)"
style="width: 100rpx; margin-left: 24rpx;">核销</span>
<span class="make" v-if="selected == 3"
@click="toMake(item.shop_id,item.id,item.classes_lib_id,2)"
style="width: 100rpx;">预约</span>
<span class="Cancel" v-if="selected == 9">已完成</span>
<span class="make" v-if="selected == 6 || selected == -3 || selected == 9"
@click="againBuy(item.classes_lib_id)">再次购买</span>
<span class="make" v-if="selected == 6 || selected == -3 || selected == 9"
@click.stop="toDetail(item.shop_id,item.id,item.classes_lib_id,item.order_no)">再次购买</span>
<span class="QR" v-if="selected == 2" >二维码</span>
</view>
</view>
</view>
<span class="box-line"></span>
</view>
</view> -->
</view>
<!-- <u-popup :show="show" mode="center" :zIndex="99999" :custom-style="popupStyle" closeable="true" @close="close"
@open="open">
<view class="popup flex flex-column align-items">
<view class="pop-center flex">
<view class="left">
<image :src="qrcode.detail.headimage" mode="" style="width: 280rpx;height: 200rpx;"></image>
</view>
<view class="right flex flex-column">
<span class="title white-space">{{qrcode.detail.title}}</span>
<span class="hui"
style="margin: 16rpx 0 6rpx 0;">课时:{{qrcode.detail.verification_num}}/{{qrcode.detail.limit_num}}</span>
<span class="hui">日期:{{qrcode.detail.classes_date_text}}</span>
<span class="hui" style="margin: 6rpx 0 6rpx 0;">时间:{{qrcode.detail.classes_time_text}}</span>
<span class="hui" v-if="qrcode && qrcode.detail" style="margin-top: 6rpx;">开始时间:{{ formatTimestamp(qrcode.detail.start_time) }}</span>
<span class="hui" v-if="qrcode && qrcode.detail" style="margin: 6rpx 0 6rpx 0;">结束时间:{{ formatTimestamp(qrcode.detail.end_time) }}</span>
<span class="hui">地址:{{qrcode.detail.address_detail}}</span>
</view>
</view>
<span class="line-short"></span>
<image :src="qrcode.codeimage" mode="" style="width: 376rpx;height: 376rpx;"></image>
<span style="margin: 24rpx 0 64rpx 0;">核销二维码</span>
</view>
</u-popup> -->
<!-- <u-loadmore :status="loadStatus" /> -->
</view>
</template>
@ -188,27 +113,27 @@
sortStyle: ['#ff557f', '#3f3f3f'],
headers: [{
status: '-3,0,2,3,4,5,6,7,9',
text: '全部'
name: '全部'
},
{
status: '0',
text: '待支付'
name: '待支付'
},
{
status: '2,3',
text: '待核销'
name: '待核销'
},
{
status: '9',
text: '已完成'
name: '已完成'
},
{
status: '-3',
text: '已关闭'
name: '已关闭'
},
{
status: '4,5,6,7',
text: '退款/售后'
name: '退款/售后'
}
],
selected: '0',
@ -220,12 +145,12 @@
show: false,
qrcode: '',
count: 0,
option:{},
isInitialized:false,
option: {},
isInitialized: false,
};
},
onLoad(option) {
this.isInitialized = true; //
this.isInitialized = true; //
console.log(1);
if (option?.status) {
this.selected = option.status
@ -233,16 +158,16 @@
} else {
this.getList('-3,0,2,3,4,5,6,7,9');
}
},
onShow() {
console.log(2);
if (this.isInitialized) return; //
setTimeout(()=>{
if (this.isInitialized) return; //
setTimeout(() => {
this.list = []
this.page = 1
this.getList(this.selected);
},500)
}, 500)
},
onPullDownRefresh() {
uni.showLoading({
@ -318,20 +243,26 @@
}
}).catch(error => {});
},
//
toMake(id, orderId, classes_lib_id, type) {
uni.navigateTo({
// url: "/packageA/center/applyDetail?id=" + id + "&orderId=" + orderId + "&type=" + 2
url: "/packageA/center/orderDetail?id=" + id + "&orderId=" + orderId + "&type=" + 2 +
"&classes_lib_id=" + classes_lib_id
})
},
toInfo(id) {
//123
uni.navigateTo({
url: "/packageA/center/detail?id=" + id
})
},
//
toAddInvoic(id, order_no) {
const num = 1
uni.navigateTo({
url: '/packageB/invoice/addInvoice?id=' + id + "&order_nos=" + order_no + "&num=" + num
})
},
//
checkInvoice(id, order_no) {
uni.navigateTo({
url: '/packageB/invoice/invoiceInfo?id=' + id + "&order_no=" + order_no
})
},
//
toDetail(id, order_no, status) {
if (status == 2 || status == 3) {
@ -407,7 +338,7 @@
} else {
this.loadStatus = 'loading';
}
this.isInitialized = false; //
this.isInitialized = false; //
} else {
uni.showToast({
title: res.msg,
@ -423,11 +354,11 @@
},
selectheader(status) {
const that = this;
that.selected = status;
that.selected = status.status;
console.log(status, '')
that.page = 1
that.list = []
that.getList(status)
that.getList(status.status)
},
headerSelected(status) {
return this.selected === status;
@ -439,7 +370,6 @@
<style lang="scss" scoped>
.box {
background: #f5f5f5;
.con-center {
@ -447,53 +377,63 @@
height: 100%;
// margin-top: 25rpx;
// overflow: hidden;
.tabs {
background: #ffffff;
width: 750rpx;
display: flex;
overflow-x: auto;
// margin-top: 10rpx;
-webkit-overflow-scrolling: touch;
font-family: PingFang SC, PingFang SC;
position: fixed;
top: 0;
.s-header {
display: flex;
justify-content: center;
align-items: center;
width: 150rpx;
height: 80rpx;
font-weight: 400;
font-size: 28rpx;
color: #9E9E9E;
line-height: 26rpx;
flex: 0 0 auto;
position: relative;
}
.s-header.selected {
width: 150rpx;
height: 80rpx;
background: #ffffff;
font-weight: 800;
font-size: 32rpx;
color: #323232;
line-height: 28rpx;
}
.lines {
position: absolute;
bottom: 0;
width: 44rpx;
}
.lines.selected {
border-bottom: #323232 solid 8rpx;
}
z-index: 1000;
}
// .tabs {
// background: #ffffff;
// width: 750rpx;
// display: flex;
// overflow-x: auto;
// // margin-top: 10rpx;
// -webkit-overflow-scrolling: touch;
// font-family: PingFang SC, PingFang SC;
// position: fixed;
// top: 0;
// padding-bottom: 10rpx;
// .s-header {
// display: flex;
// justify-content: center;
// align-items: center;
// width: 150rpx;
// height: 80rpx;
// font-weight: 400;
// font-size: 28rpx;
// color: #9E9E9E;
// line-height: 26rpx;
// flex: 0 0 auto;
// position: relative;
// }
// .s-header.selected {
// width: 150rpx;
// height: 80rpx;
// background: #ffffff;
// font-weight: 800;
// font-size: 32rpx;
// color: #323232;
// line-height: 28rpx;
// }
// .lines {
// position: absolute;
// bottom: 0;
// width: 44rpx;
// }
// .lines.selected {
// border-bottom: #323232 solid 8rpx;
// border-radius: 4rpx;
// }
// }
.hdkuai {
background: #FFFFFF;
// height: 360rpx;
@ -537,6 +477,29 @@
}
.btn_Inv {
width: 180rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
color: #999999;
border: 2rpx solid #999999;
border-radius: 276rpx 276rpx 276rpx 276rpx;
margin-right: 10rpx;
}
.btn_InvIng {
width: 180rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
color: #999999;
// border: 2rpx solid #999999;
background-color: #f0f0f0;
border-radius: 276rpx 276rpx 276rpx 276rpx;
margin-right: 10rpx;
}
.btnhx {
width: 180rpx;
height: 70rpx;
@ -892,6 +855,7 @@
text-overflow: ellipsis;
/* 使用省略号表示被截断的文本 */
}
.tofb {
margin-top: 50rpx;
width: 280rpx;

View File

@ -1,726 +0,0 @@
<template>
<view class="box flex justify-center align-items flex-column">
<view class="con-center flex flex-column justify-center align-items" style="margin-top: 24rpx;">
<view class="flex align-items" style="width: 100%;justify-content: flex-start;">
<view class="search flex align-items" style="width: 508rpx;">
<span class="dashed flex align-items justify-center">
<image src="../../static/center/search.png" mode=""></image>
</span>
<span class="line-search"></span>
<input type="text" placeholder="搜索您的预约课程" v-model="keywords" @input="onInput" class="input"
placeholder-class="plasty" />
</view>
<span class="searchBtn" @click.stop="addClass()">创建课程</span>
</view>
<view class="header flex align-items w-100" style="justify-content: space-between;">
<span class="s-header flex justify-center align-items" v-for="(item,index) in headers" :key="index"
:class="{ selected: headerSelected(item.status) }"
@click="selectheader(item.status)">{{item.text}}</span>
</view>
<span class="line"></span>
<!-- <view class="sort flex" style="width: 100%;padding: 20rpx 0;">
<JQ-orderBy @switchSort="switchSort" :size="size"></JQ-orderBy>
</view> -->
<view class="centerBox flex justify-start align-items flex-column">
<view class="flex w-100 center flex-column" style="align-items: center;" v-for="(item,index) in list"
:key="index" @click="toDetail(item.id,item.shop_id)">
<view class="flex" style="width: 690rpx;">
<image :src="item.headimage" mode=""
style="width: 280rpx; height: 200rpx;border-radius: 12rpx;"></image>
<view class="flex flex-column rightBox">
<span class="name">{{item.title}}</span>
<!-- <span class="line-row"></span> -->
<span class="minge">{{'开始时间 ' + item.start_time_text}}</span>
<span class="minge">{{'结束时间 ' + item.end_time_text}}</span>
<span class="price" v-if="item.feel == 0">课程价格 <span
style="color: #FF2323;">{{'¥' + item.price}}</span> </span>
<span class="price" style="color: #FF2323;" v-else>免费</span>
<view class="flex align-items" style="justify-content: space-between;margin-top: 12rpx;">
<span class="pass" v-if="item.auth_status == 1">审核通过</span>
<span class="full" v-if="item.auth_status == 0">审核中</span>
<span class="full" v-if="item.auth_status == 2">审核未通过</span>
</view>
<view class="flex align-items" style="justify-content: flex-end;margin-top: 12rpx;">
<span class="Cancel" @click.stop="Confirm(item.id,2)" v-if="item.status == 1">下架</span>
<span class="Cancel" @click.stop="Confirm(item.id,1)" v-if="item.status == 2">上架</span>
<span class="hui" v-if="item.auth_status != 1">上架</span>
<span class="lan" @click.stop="toList(item.id)">订单管理</span>
</view>
<!-- <span class="full" v-if="item.status == 1">已上架</span>
<span class="full" v-if="item.status == 2">已下架</span>
<span class="full" v-if="item.status == 3">平台下架</span> -->
</view>
</view>
<!-- <span class="error" v-if="item.auth_status == 2">审核失败:{{item.reason}}</span> -->
<span class="box-line"></span>
</view>
</view>
</view>
<u-loadmore :status="loadStatus" />
</view>
</template>
<script>
export default {
data() {
return {
popupStyle: {
width: '690rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
padding: '0',
borderRadius: '20rpx'
},
sortList: [{
text: '按照价格排序',
value: ['acs', 'desc'],
}, {
text: '按照编号排序',
value: ['acs', 'desc'],
}],
QRShow: false,
size: 13,
sortStyle: ['#ff557f', '#3f3f3f'],
headers: [{
status: '-1',
text: '全部'
},
{
status: '1',
text: '上架'
},
{
status: '2',
text: '下架'
}
// {
// status: '3',
// text: ''
// }
],
popupStyle: {
width: '690rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
padding: '0',
borderRadius: '20rpx'
},
selected: '-1',
auth_status: '-1',
page: 1,
limit: 10,
loadStatus: 'loading',
keywords: '',
list: [],
show: false,
qrcode: {},
order_no: '',
QR: {},
last_page: 0,
shop_id: ''
};
},
onLoad() {
this.shop_id = uni.getStorageSync('shop_id')
},
onShow() {
this.page = 1
this.list = []
this.getList(this.selected);
},
onReachBottom() {
if (this.page < this.last_page) {
this.page++;
this.getList(this.selected);
}
},
methods: {
openUrl(url) {
uni.navigateTo({
url: url
})
},
switchSort(index, value) {
console.log(index, value);
},
//
toDetail(id,shop_id) {
uni.navigateTo({
url: "/packageA/my/addManagement?id=" + id + '&shop_id=' + shop_id
})
},
//
toList(id) {
uni.navigateTo({
url: "/packageA/my/mentList?id=" + id
})
},
Confirm(id, status) {
uni.$u.http.post('/api/school.worker.classes/update_status', {
id: id,
status: status
}).then(res => {
if (res.code == 1) {
this.page = 1
this.list = []
this.getList(this.selected)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
console.error('请求失败', error);
});
},
//
addClass() {
uni.$u.http.get('/api/school/shop/auth_info', ).then(res => {
if (res.code == 1) {
if (res.data.check_full){
uni.navigateTo({
url: "/packageA/my/addManagement?shop_id=" + this.shop_id
})
} else{
uni.showToast({
title: '必要展示信息未完善,请先在机构完善展示信息',
icon: 'none',
duration: 2000
});
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
console.error('请求失败', error);
});
},
//
onInput(e) {
console.log(e)
const that = this
this.keywords = e.detail.value
that.page = 1
that.list = []
this.selected = '-1'
this.getList(this.selected)
},
//
getList(status) {
// if (this.loadStatus === 'nomore') return;
uni.$u.http.get('/api/school/classes/classes_list', {
params: {
keywords: this.keywords,
page: this.page,
limit: this.limit,
status: status,
order: 'normal',
shop_id: this.shop_id,
auth_status: this.auth_status
}
}).then(res => {
if (res.code == 1) {
this.last_page = res.data.list.last_page
this.list = [...this.list, ...res.data.list.data];
if (this.list.length >= res.data.list.total) {
this.loadStatus = 'nomore';
} else {
this.loadStatus = 'loading';
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
this.loadStatus = 'loading';
}
}).catch(error => {
console.error('请求失败', error);
this.loadStatus = 'loading';
});
},
selectheader(status) {
const that = this
that.selected = status;
console.log(status, '')
that.page = 1
that.list = []
that.getList(status)
},
headerSelected(status) {
return this.selected === status;
},
//
// toDetail(id, orderId) {
// uni.navigateTo({
// url: "/packageA/center/detail?id=" + id + "&orderId=" + orderId
// })
// }
}
}
</script>
<style lang="scss" scoped>
.box {
background: linear-gradient(to bottom, #F1F2F8 0%, #FFFFFF 5%, #FFFFFF 100%);
.con-center {
width: 690rpx;
// margin-top: 25rpx;
.centerBack {
position: fixed;
width: 100%;
height: 100%;
top: 25rpx;
left: 0;
z-index: -1;
}
.header {
height: 50rpx;
margin-top: 37rpx;
.s-header {
// width: 104rpx;
padding: 10rpx 20rpx;
height: 50rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 28rpx;
color: #9E9E9E;
line-height: 26rpx;
}
.s-header.selected {
// width: 104rpx;
padding: 10rpx 20rpx;
height: 50rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 28rpx;
color: #FFFFFF;
line-height: 26rpx;
}
}
.searchBtn {
width: 164rpx;
height: 64rpx;
background: #008CFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
margin-left: 18rpx;
}
}
}
.w-100 {
width: 100%;
}
.flex {
display: flex;
}
.flex-start {
align-items: flex-start;
}
.justify-center {
justify-content: center;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.justify-start {
justify-content: start;
}
.line {
margin-top: 18rpx;
width: 690rpx;
height: 1rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.centerBox {
width: 690rpx;
.error {
width: 100%;
word-break: break-all;
}
.box-line {
width: 400rpx;
height: 1rpx;
background: #D9D9D9;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin-top: 24rpx;
}
.center {
margin: 32rpx 0 32rpx 0;
}
.rightBox {
margin-left: 24rpx;
width: 378rpx;
.line-row {
width: 382rpx;
height: 1rpx;
background: #D9D9D9;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
margin: 14rpx 0 6rpx 0;
}
.price {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FF2323;
}
.hui {
width: 138rpx;
height: 48rpx;
background: #D9D9D9;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-right: 16rpx;
}
.lan {
width: 138rpx;
height: 50rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
letter-spacing: 8rpx;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
}
.name {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 36rpx;
color: #343434;
margin-bottom: 24rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/* 设置行数 */
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
/* 防止单词被截断 */
}
.minge {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
margin-bottom: 14rpx;
}
.pass {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #008CFF;
}
.full {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #FF2323;
}
.money {
font-weight: 800;
font-size: 24rpx;
color: #FF2323;
span {
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
}
.Cancel {
width: 138rpx;
height: 48rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #008CFF;
line-height: 32rpx;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-right: 16rpx;
}
.xia {
width: 138rpx;
height: 48rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #008CFF;
line-height: 32rpx;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
}
.make {
width: 138rpx;
height: 48rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
line-height: 32rpx;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-left: 16rpx;
}
.QR {
width: 138rpx;
height: 48rpx;
background: #4974FF;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-weight: 400;
font-size: 26rpx;
color: #EAEAEA;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-top: 50rpx;
}
}
}
.charge {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 28rpx;
color: #FF2323;
line-height: 32rpx;
}
.search {
width: 690rpx;
height: 64rpx;
background: #FFFFFF;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #008CFF;
.dashed {
image {
width: 52rpx;
height: 52rpx;
}
}
.line-search {
width: 2rpx;
height: 42rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.input {
// border: 4rpx solid #EAEAEA;
padding-left: 12rpx;
height: 100%;
width: 100%;
}
::v-deep .input-placeholder {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #C0C0C0;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
}
.popup {
.header {
margin-left: 24rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 42rpx;
color: #008CFF;
margin-top: 34rpx;
width: 690rpx;
}
.line-row {
width: 690rpx;
height: 1rpx;
background: #D9D9D9;
margin: 11rpx 0 31rpx 0;
}
.pop-center {
.left {}
.right {
margin-left: 30rpx;
.title {
width: 340rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #343434;
}
}
}
.line-short {
width: 400rpx;
height: 1rpx;
background: #D9D9D9;
}
.popList {
justify-content: space-between;
width: 600rpx;
margin-top: 32rpx;
.hei {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #343434;
}
}
.pop-btn {
width: 690rpx;
margin-top: 62rpx;
justify-content: space-around;
.Cancel {
width: 306rpx;
height: 80rpx;
border-radius: 401rpx 401rpx 401rpx 401rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #008CFF;
}
.Confirm {
width: 306rpx;
height: 80rpx;
background: #008CFF;
border-radius: 401rpx 401rpx 401rpx 401rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #FFFFFF;
}
}
}
.hui {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
.white-space {
overflow: hidden;
/* 确保超出容器的文本被隐藏 */
white-space: nowrap;
/* 确保文本在一行内显示 */
text-overflow: ellipsis;
/* 使用省略号表示被截断的文本 */
}
</style>

View File

@ -1,547 +0,0 @@
<template>
<view class="box flex flex-column flex-start align-items">
<view class="top flex ">
<image :src="detail.headimage" mode="" style="width: 280rpx;height: 200rpx;border-radius: 12rpx;"></image>
<view class="rightBox flex flex-column flex-start">
<span class="name">{{detail.title}}</span>
<span class="minge">开始时间:{{detail.start_time_text}}</span>
<span class="minge">结束时间:{{detail.end_time_text}}</span>
<span class="minge">课程销量:{{detail.sale}}</span>
<span class="minge" v-if="detail.feel == 0">课程价格:
<span style="color: #FF2323;font-weight: 800;">{{'¥' + detail.price}}</span>
</span>
<span class="minge" v-if="detail.feel == 1">
<span style="color: #FF2323;font-weight: 800;">免费</span>
</span>
</view>
</view>
<view class="con-center flex flex-column flex-start align-items" style="margin-top: 24rpx;min-height: 73vh;">
<view class="flex align-items" style="width: 100%;justify-content: flex-start;">
<view class="search flex align-items" style="width: 508rpx;">
<span class="dashed flex align-items justify-center">
<image src="../../static/center/search.png" mode=""></image>
</span>
<span class="line-search"></span>
<input type="text" placeholder="搜索课程" v-model="keywords" @input="onInput" class="input"
placeholder-class="plasty" />
</view>
<span class="searchBtn" @click.stop="addClass()">搜索</span>
</view>
<view class="header flex align-items w-100" style="justify-content: space-between;">
<span class="s-header flex justify-center align-items" v-for="(item,index) in headers" :key="index"
:class="{ selected: headerSelected(item.status) }"
@click="selectheader(item.status)">{{item.text}}</span>
</view>
<span class="line"></span>
<view class="centerBox flex justify-start align-items flex-column" v-for="(item,index) in list" :key="index"
@click.stop="toRefund(item.id)">
<view class="flex w-100 space-between hui align-items">
<span>订单号</span>
<span>{{item.order_no}}</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;">
<span>购买人/联系电话</span>
<span class="flex align-items" style="color: #71D0FF;"
@click.stop="callPhone(item.user.mobile)">{{item.user.realname || item.user.nickname}}/{{item.user.mobile}}
<span>
<image src="../../static/tel.png" mode="" style="width: 36rpx;height: 36rpx;"></image>
</span>
</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;" v-if="selected == 0">
<span>创建时间</span>
<span>{{item.createtime | formatDateTime}}</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;" v-if="selected == 3">
<span>购买时间</span>
<span>{{item.paytime_text}}</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;" v-if="selected == 4">
<span>发起时间</span>
<span>{{item.serviceorder.createtime | formatDateTime}}</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;" v-if="selected == 6">
<span>退款时间</span>
<span>{{item.serviceorder.refundtime_text}}</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;" v-if="selected == 9">
<span>完成时间</span>
<span>{{item.serviceorder.checkouttime_text}}</span>
</view>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;">
<span>订单状态</span>
<span class="status" v-if="item.status == 4" style="font-size: 26rpx;color: #FF2323;">售后中</span>
<span class="status" v-if="item.status == 0" style="font-size: 26rpx;color: #008CFF;">待支付</span>
<span class="status" v-if="item.status == 3" style="font-size: 26rpx;color: #008CFF;">使用中</span>
<span class="status" v-if="item.status == 6" style="font-size: 26rpx;color: #FF2323;">已退款</span>
<span class="status" v-if="item.status == 9" style="font-size: 26rpx;color: #34DC12;">已完成</span>
</view>
<span class="box-line"></span>
<view class="flex w-100 space-between hui align-items" style="margin-top: 8rpx;"
v-if=" item.status == 4">
<span>售后状态</span>
<span class="status" style="color: #FF2323;font-size: 26rpx;"
v-if="item.serviceorder.status == 1 && item.status == 4">待处理</span>
<span class="status" v-if="item.serviceorder.status == 4 && item.status == 4">处理中</span>
<span class="status" v-if="item.serviceorder.status == 7 && item.status == 4">已结单</span>
<span class="status" v-if="item.serviceorder.status == -3 && item.status == 4">已取消</span>
<span class="status" v-if="item.serviceorder.status == -3 && item.status == 4">已取消</span>
</view>
<view class="flex w-100" style="justify-content: flex-end;margin-top: 24rpx;">
<span class="copy" style="margin-right: 10rpx;" @click.stop="copy(item.order_no)">复制消息</span>
<span class="refund" v-if="item.status == 3" @click.stop="toRefund(item.id)">退款</span>
<span class="refundNone" v-if="item.status == 0">退款</span>
<span class="refund"
v-if="(item.serviceorder.status == 1 || item.serviceorder.status == 4) && item.status == 4"
@click.stop="toRefund(item.id)">处理</span>
<span class="refundNone"
v-if="(item.serviceorder.status == 7 || item.serviceorder.status == -3) && item.status == 4">处理</span>
</view>
</view>
</view>
<u-loadmore :status="loadStatus" />
</view>
</template>
<script>
export default {
data() {
return {
detail: {},
page: 1,
limit: 10,
selected: '0,3,6,9,4',
list: [],
keywords: '',
classes_lib_id: '',
loadStatus: 'loading',
count: 0,
headers: [{
status: '0,3,6,9,4',
text: '全部'
},
{
status: '0',
text: '待支付'
},
{
status: '3',
text: '使用中'
},
{
status: '4',
text: '售后中'
},
{
status: '6',
text: '已退款'
},
{
status: '9',
text: '已完成'
}
],
};
},
filters: {
formatDateTime(timestamp) {
if (!timestamp) return '';
const date = new Date(timestamp * 1000);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
},
onLoad(option) {
this.classes_lib_id = option.id
// this.getList(this.selected)
},
onShow() {
this.page = 1
this.list = []
this.getDetail(this.classes_lib_id)
this.getList(this.selected);
},
onReachBottom() {
if (this.list.length < this.count) {
this.page++;
this.getList(this.selected);
}
},
methods: {
//
toRefund(id) {
uni.navigateTo({
url: "/packageA/my/refund?id=" + id
})
},
copy(order) {
uni.setClipboardData({
data: order, //
success: () => {
uni.showToast({
title: "复制订单号成功"
})
}
})
},
getDetail(id) {
uni.$u.http.get('/api/school/classes/detail', {
params: {
id: id,
}
}).then(res => {
if (res.code == 1) {
this.detail = res.data.detail
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
},
getList(status) {
uni.$u.http.get('/api/school/worker/order/order_list', {
params: {
keywords: this.keywords,
page: this.page,
limit: this.limit,
status: status,
classes_lib_id: this.classes_lib_id
}
}).then(res => {
if (res.code == 1) {
this.count = res.data.count
this.list = [...this.list, ...res.data.list];
if (this.list.length >= res.data.count) {
this.loadStatus = 'nomore';
} else {
this.loadStatus = 'loading';
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
this.loadStatus = 'loading';
}
}).catch(error => {
console.error('请求失败', error);
this.loadStatus = 'loading';
});
},
selectheader(status) {
const that = this
that.selected = status;
console.log(status, '')
that.page = 1
that.list = []
that.getList(status)
},
headerSelected(status) {
return this.selected === status;
},
callPhone(phone) {
uni.makePhoneCall({
phoneNumber: phone
})
}
}
}
</script>
<style lang="scss" scoped>
.w-100 {
width: 100%;
}
.flex {
display: flex;
}
.flex-start {
align-items: flex-start;
}
.justify-center {
justify-content: center;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.justify-start {
justify-content: start;
}
.line {
margin-top: 12rpx;
width: 690rpx;
height: 1rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.space-between {
justify-content: space-between;
}
.hui {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
.box {
width: 750rpx;
background: #F1F2F8;
.con-center {
width: 690rpx;
// margin-top: 25rpx;
}
.top {
width: 690rpx;
padding: 32rpx 30rpx;
background: #FFFFFF;
.rightBox {
margin-left: 32rpx;
width: 378rpx;
.line-row {
width: 382rpx;
height: 1rpx;
background: #D9D9D9;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
margin: 14rpx 0 6rpx 0;
}
.price {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FF2323;
}
.name {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #343434;
margin-bottom: 16rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/* 设置行数 */
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
/* 防止单词被截断 */
}
.minge {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
margin-top: 8rpx;
height: 32rpx;
}
.money {
font-weight: 800;
font-size: 24rpx;
color: #FF2323;
span {
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
}
}
}
.centerBack {
position: fixed;
width: 100%;
height: 100%;
top: 25rpx;
left: 0;
z-index: -1;
}
.header {
// height: 50rpx;
margin-top: 37rpx;
.s-header {
// width: 104rpx;
width: 84rpx;
height: 26rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 28rpx;
color: #9E9E9E;
}
.s-header.selected {
// width: 104rpx;
padding: 10rpx 10rpx;
height: 50rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 28rpx;
color: #FFFFFF;
line-height: 26rpx;
}
}
.searchBtn {
width: 164rpx;
height: 64rpx;
background: #008CFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
margin-left: 18rpx;
}
}
.search {
width: 690rpx;
height: 64rpx;
background: #FFFFFF;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #008CFF;
.dashed {
image {
width: 52rpx;
height: 52rpx;
}
}
.line-search {
width: 2rpx;
height: 42rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.input {
// border: 4rpx solid #EAEAEA;
padding-left: 12rpx;
height: 100%;
width: 100%;
}
::v-deep .input-placeholder {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #C0C0C0;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
}
.centerBox {
width: 642rpx;
padding: 24rpx 24rpx 32rpx 24rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
margin-top: 24rpx;
.box-line {
width: 635rpx;
height: 1rpx;
background: #C0C0C0;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin-top: 13rpx;
}
.status {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #008CFF;
}
}
.copy {
width: 138rpx;
height: 48rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #008CFF;
display: flex;
justify-content: center;
align-items: center;
letter-spacing: 8rpx;
}
.refundNone {
width: 138rpx;
height: 48rpx;
background: #D9D9D9;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
}
.refund {
width: 138rpx;
height: 48rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
}
</style>

View File

@ -2,7 +2,7 @@
<view class="box">
<view class="con-center flex flex-column justify-center align-items">
<view class="tabs">
<u-tabs :activeStyle="{
<u-tabs :current="headers.findIndex(item => item.status === selected)" :activeStyle="{
color: '#303133',
fontWeight: 'bold',fontSize: '32rpx'}" :inactiveStyle="{
color: '#606266'
@ -31,8 +31,56 @@
</view>
<view style="width: 100%;">
<view :class="['hot', status == 0 || status == -2 ? 'wsh_hot' : '']">
<!-- 草稿箱列表 -->
<!-- <view v-if="draftShow === true"> -->
<view v-if="status == 15" style="margin-top: 110rpx;width: 100%;min-height: 100vh;height:auto;margin-bottom: 20rpx;">
<!-- v-for="(item,index) in draftList" :key="index" @click="checkInvoice(item.invoiceCheck,index)"-->
<view class="invoiceList" >
<view class="invoiceList-item" v-for="(item,index) in draftList" :key="index">
<view class="invoiceList-itemInfo flex">
<view class="item-img">
<image v-if="item.images.length>0"
style="width: 170rpx;height: 170rpx;border-radius: 20rpx;" :src="item.images[0]"
mode=""></image>
<image v-else style="width: 170rpx;height: 170rpx;border-radius: 20rpx;"
src="https://naweigetetest2.hschool.com.cn/miniapp/invoice/draftImgNo.png"
mode=""></image>
</view>
<view class="item-con">
<view class="itenCon-actName" style="">{{item.title !='' ? item.title:'描述待补充' }}
</view>
<view class="itenCon-actCon" style="">
{{item.content != '' ? item.content:'快来添加活动内容吧'}}
</view>
<view class="itenCon-actPrice" style="">保存时间 {{item.updatetime_text}}</view>
</view>
</view>
<view class="item-draftBtns">
<view class="part1 flex justify-center align-items" style="margin-right: 20rpx;" @click.stop="toDeleteDraft(item.id)">
删除
</view>
<view class="part flex justify-center align-items" @click.stop="toEditDraft(item.id)">
编辑
</view>
</view>
</view>
</view>
<!-- <view class="invoiceBtn" @click="handleIssueInvoice()">
<view>申请开票</view>
</view> -->
<view class="bottom_box flex justify-center align-items" style="height: 1240rpx;width: 100%;"
v-if="draftList.length == 0">
<view style="text-align: center;">
<image src="/static/no.png" style="width: 150rpx;height: 150rpx;"></image>
<view>暂无数据</view>
</view>
</view>
</view>
<view :class="['hot', status == 0 || status == -2 ? 'wsh_hot' : '']" v-if="status != 15">
<view class="content flex align-items flex-column">
<view class="flex flex-column w-100 bbb" style="position: relative;"
v-for="(item, index) in hotList" :key="index">
@ -43,8 +91,9 @@
style="width: 134rpx; height: 106rpx;position: absolute;right: 0;"></image>
<view class="flex" style="margin-top: 24rpx">
<view class="right flex flex-column" style="align-items: self-start;">
<span class="title white-space" style="padding-left: 30rpx;font-weight: 600;">{{ item.title }}</span>
<span class="title white-space"
style="padding-left: 30rpx;font-weight: 600;">{{ item.title }}</span>
<span class="first-image flex align-items"
style="margin-top: 20rpx; width: 100%;padding-left: 30rpx;">
<image :src="item.user.avatar"
@ -57,43 +106,69 @@
v-for="items_t in item.classes_cate">#{{ items_t }}</span>
</view>
</span>
<view class="flex flex-column" style="margin-top: 20rpx;padding-left: 30rpx;">
<view class="time flex align-items white-space">
<span class="time_tex" v-if="item.status == 2">{{
"报名中"
}}</span>
<span v-if="item.status == 2"
<!-- <span v-if="item.status == 2"
style="margin: 0 20rpx">{{ dateWeeks(item.sign_start_time) }}</span>
<span v-if="item.status != 2"
style="margin: 0 20rpx 0 0">{{ dateWeeks(item.sign_start_time) }}
</span><span style="width: 1rpx;height: 22rpx;background: #323232;"></span>
</span> -->
<span v-if="item.status == 2"
style="margin: 0 20rpx">{{ dateWeeks(item.start_time) }}</span>
<span v-if="item.status != 2"
style="margin: 0 20rpx 0 0">{{ dateWeeks(item.start_time) }}
</span>
<span style="width: 1rpx;height: 22rpx;background: #323232;"></span>
<span class="white-space" style="margin-left: 20rpx; width: 260rpx">{{
item.address_detail }}</span>
</view>
</view>
<view class="flex align-items justify-center"
style="gap: 16rpx;width: 100%;margin-top: 20rpx;margin-bottom: 32rpx;">
<view class="imgs_con_div" v-for="(items_img, index) in item.images.slice(0, 3)"
:key="index">
<view class="imgs_con_div"
v-for="(items_img, index) in item.images.slice(0, 3)" :key="index">
<image class="imgs_con" :src="items_img"></image>
</view>
</view>
</view>
</view>
<view
style="display: flex;align-items: center;justify-content: flex-end;gap: 20rpx;width: 96%;margin-bottom: 30rpx;"
v-if="item.auth_status == 0">
<view class="part1 flex justify-center align-items" v-if="item.auth_status == 0 "
@click.stop="editItem(item.id)"> 修改 </view>
</view>
<!-- <view
style="display: flex;align-items: center;justify-content: flex-end;gap: 20rpx;width: 96%;margin-bottom: 30rpx;"
v-if="item.auth_status == 1 && item.status == -1">
<view class="part flex justify-center align-items"
@click.stop="editItem(item.id)"> 重发 </view>
<view class="part flex justify-center align-items"
@click.stop="editItem(item.id)"> 详情 </view>
</view> -->
<view class="bottom flex align-items" v-if="item.auth_status != 0"
style="justify-content: space-between;padding: 0rpx 20rpx;">
<view v-if="item.status == 1">
<view v-if="item.status == 1" style="width: auto;">
<image src="/static/index/dian.png"
style="width: 60rpx;height: 60rpx;vertical-align: middle;"></image>
<text style="margin-left: 20rpx;vertical-align: middle;font-size: 26rpx;">未开始</text>
<text
style="margin-left: 20rpx;vertical-align: middle;font-size: 26rpx;">未开始</text>
</view>
<view v-if="item.status == 2" style="display: flex;align-items: center;">
<u-avatar-group :urls="item.join_info.users" keyName="avatar" size="30" maxCount="1"
gap="0.4"></u-avatar-group>
<u-avatar-group :urls="item.join_info.users" keyName="avatar" size="30"
maxCount="1" gap="0.4"></u-avatar-group>
<image src="/static/index/dian.png" style="
width: 60rpx;
height: 60rpx;
@ -103,23 +178,58 @@
{{ Number(item.join_info.people_number) + "人已上车" }}
</view>
</view>
<view v-if="item.auth_status != 2" style="font-size: 26rpx; width: 24%;">
<!-- <view v-if="item.auth_status != 2 || item.status != 1" style="font-size: 26rpx; width: 24%;"> -->
<view v-if="item.status == 3 || item.status == 4">
</view>
<view v-if="item.status == 4 || item.status == 5"
style="font-size: 26rpx; width: 24%;">
<text>核销</text>
<text style="color: orangered;">{{ item.verification_num }}</text>
<text>/{{ item.stock }}</text>
</view>
<view style="display: flex;align-items: center;justify-content: flex-end;gap: 20rpx;">
<view v-if="item.status == 3 || item.status == 4"
class="part1 flex justify-center align-items" @click.stop="toHexiao"> 核销 </view>
<view class="part flex justify-center align-items" v-if="item.auth_status != 2"
@click.stop="detail(item.id)"> 详情 </view>
<view v-if="item.status == -1 && item.auth_status == 1">
</view>
<view
style="display: flex;align-items: center;justify-content: flex-end;gap: 20rpx;">
<view v-if="item.status == 3 || item.status == 4"
class="part1 flex justify-center align-items" @click.stop="toHexiao"> 核销
</view>
<view class="part flex justify-center align-items" v-if="item.auth_status == 0"
@click.stop="editItem(item.id)"> 修改 </view>
<view class="part1 flex justify-center align-items" v-if="item.auth_status == 1 && item.status == 1"
@click.stop="editItem(item.id)"> 修改 </view>
<view class="part1 flex justify-center align-items"
v-if="item.status == -1 && item.auth_status == 1"
@click.stop="copyNewItem(item.id)"> 重发 </view>
<view class="part flex justify-center align-items"
v-if="item.auth_status != 2 " @click.stop="detail(item.id)"> 详情 </view>
</view>
<!-- <view style="display: flex;align-items: center;justify-content: flex-end;gap: 20rpx;width: 1005;">
<view class="part flex justify-center align-items" v-if="item.auth_status == 0 || item.status == 1"
@click.stop="editItem(item.id)"> 重发 </view>
<view class="part flex justify-center align-items" @click.stop="detail(item.id)"> 详情 </view>
</view> -->
</view>
<view style="padding: 30rpx;" v-if="item.auth_status == 2">
<view style="height: 160rpx;color: #323232;font-size: 26rpx;;padding: 20rpx;background: #F7F7F7;border: 1rpx solid #C1C1C1;border-radius: 18rpx 18rpx 18rpx 18rpx;">
<view style="padding: 30rpx;" v-if="item.auth_status == 2 && item.status == -1">
<view
style="height: 160rpx;color: #323232;font-size: 26rpx;;padding: 20rpx;background: #F7F7F7;border: 1rpx solid #C1C1C1;border-radius: 18rpx 18rpx 18rpx 18rpx;">
未通过原因{{item.reason}}
</view>
</view>
<view
style="display: flex;align-items: center;justify-content: flex-end;gap: 20rpx;width: 96%;margin-bottom: 30rpx;"
v-if="item.auth_status == 2 && item.status == -1">
<view class="part1 flex justify-center align-items"
v-if="item.auth_status == 2 && item.status == -1"
@click.stop="cancelsOpen(item.id)"> 删除 </view>
<view class="part flex justify-center align-items"
v-if="item.auth_status == 2 && item.status == -1"
@click.stop="copyItem(item.id)"> 重发 </view>
</view>
</view>
<view v-if="status == -2" @click.stop="detail(item.activity_id)">
<view class="flex" style="margin-top: 30rpx">
@ -131,7 +241,8 @@
}}</span>
</view>
</view>
<view style="height: 1px;width: 98%;background-color: #eeeeee;margin: 30rpx 0px;">
<view
style="height: 1px;width: 98%;background-color: #eeeeee;margin: 30rpx 0px;">
</view>
<view class="flex align-items" style="width: 100%;">
<view>
@ -151,7 +262,8 @@
style="color: #FF4810;font-weight: 600;">{{ item.real_refundprice }}</text>
</view>
<view v-if="item.before_status==-3"
style="font-size: 26rpx;color: #9C9C9C;">数量{{ item.num }}</view>
style="font-size: 26rpx;color: #9C9C9C;">数量{{ item.num }}
</view>
<view v-if="item.before_status!=-3"
style="font-size: 26rpx;color: #9C9C9C;">数量{{ item.auth_num }}
</view>
@ -178,18 +290,33 @@
</view>
</view>
</view>
<view class="flex flex-column flex-start align-items" v-if="hotList.length == 0"
style="margin-top: 300rpx;">
<view class="flex flex-column flex-start align-items"
v-if="hotList.length == 0 && selected != 15" style="margin-top: 300rpx;">
<image src="/static/message/activen.png" mode="" style="width: 180rpx;height: 180rpx;">
</image>
<view style="margin-top: 30rpx;font-size: 28rpx;color: #323232;">暂无发布活动</view>
<view class="tofb" @click="tofb">前往发布</view>
</view>
<!-- <view class="flex flex-column flex-start align-items" v-if="hotList.length == 0"
style="margin-top: 300rpx;">
<image src="/static/message/activen.png" mode="" style="width: 180rpx;height: 180rpx;">
</image>
<view style="margin-top: 30rpx;font-size: 28rpx;color: #323232;">暂无发布活动</view>
<view class="tofb" @click="tofb">前往发布</view>
</view> -->
</view>
</view>
</view>
</view>
<!-- 热门活动 -->
@ -219,6 +346,29 @@
<!-- <u-loadmore :status="loadStatus" /> -->
<!-- 二次确认弹窗 -->
<u-popup :show="cancelsShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupCancelStyle"
@close="cancelsClose" @open="cancelsOpen" :safeAreaInsetBottom="false" :closeable="false">
<view class="popupBox flex justify-start align-items flex-column">
<view class="pop-header flex align-items flex-column flex-start">
<span class="name white-space">是否确认删除活动</span>
<span class="price">
删除活动后若再次举办活动需重新设置活动内容并提交平台审核
</span>
<!-- <image src="../../static/center/buy.png" mode="" style="width: 168rpx; height: 48rpx;">
</image> -->
</view>
<view class="popup-footer flex ">
<span @click="cancelsClose" class="span1">取消</span>
<span @click="deleteItem()">确认删除</span>
<!-- <image src="../../static/center/price.png" mode="" style="width: 642rpx;height: 80rpx;"></image> -->
<!-- <u-loading-icon :vertical="true" v-if="uloadingShow"></u-loading-icon> -->
</view>
</view>
</u-popup>
</view>
</template>
@ -226,6 +376,7 @@
import {
dateWeek
} from "../../utils/dateFormat";
import dayjs from 'dayjs';
export default {
data() {
return {
@ -238,6 +389,15 @@
padding: "0",
borderRadius: "20rpx",
},
popupCancelStyle: {
width: '640rpx',
height: '414rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'flex-start',
alignItems: 'center',
borderRadius: '50rpx'
},
sortList: [{
text: "按照价格排序",
value: ["acs", "desc"],
@ -250,6 +410,9 @@
size: 13,
sortStyle: ["#ff557f", "#3f3f3f"],
headers: [{
status: "15",
name: "草稿箱",
}, {
status: "0",
name: "活动审核",
},
@ -296,20 +459,43 @@
//
auth_status: 0,
status: 0,
server_status: '3'
server_status: '3',
cancelsShow: false, //
deleteId: null, //id
draftList: [], //稿
draftShow: false,
draftCount: 0,
};
},
onLoad(option) {
this.list = []
this.page = 1
if (option?.status) {
this.selected = option.status
this.getHotList(option.status);
} else {
this.getHotList('0');
}
this.draftList = []
// if (option?.status) {
// this.selected = option.status
// console.log('11');
// this.getHotList(option.status);
// } else {
// console.log('22');
// this.getHotList('0');
// }
},
onShow() {
this.list = []
this.page = 1
this.hotList = []
this.draftList = []
console.log('hotList', this.hotList);
// this.getHotList(this.selected);
if (this.status == -2) {
this.getAfterList();
} else if (this.status == 15) {
this.getDraftList('15')
} else {
this.getHotList(this.selected);
}
},
onPullDownRefresh() {
uni.showLoading({
title: '加载中...'
@ -327,6 +513,7 @@
}, 2000)
},
onReachBottom() {
console.log('onReachBottom',this.status);
// if (this.list.length < this.count) {
// this.page++;
// this.getList(this.selected);
@ -334,6 +521,12 @@
if (this.status == -2) {
this.page++;
this.getAfterList();
}else if(this.status == 15) {
if(this.draftCount > this.draftList.length){
this.page++;
this.getDraftList();
}
} else {
this.page++;
this.getHotList(this.selected);
@ -346,6 +539,76 @@
url: "/packageA/afterSales/info?id=" + id,
});
},
//+
editItem(id) {
const type = 0;
uni.navigateTo({
url: "/packageB/editAct?id=" + id + '&type=' + type,
});
// uni.switchTab({
// url:"/pages/center/index?id=" + id,
// })//tabbar
},
//
copyItem(id) {
const type = 1
uni.navigateTo({
url: "/packageB/editAct?original_activity_id=" + id + '&type=' + type,
});
},
//
copyNewItem(id) {
const type = 2
uni.navigateTo({
url: "/packageB/editAct?original_activity_id=" + id + '&type=' + type,
});
// uni.switchTab({
// url:"/pages/center/index?id=" + id,
// })//tabbar
},
//
deleteItem() {
console.log('deleteItem', this.deleteId);
uni.$u.http.post('/api/school.new_activity/del', {
id: this.deleteId,
}).then(res => {
if (res.code == 1) {
this.cancelsShow = false
this.deleteId = null
uni.showToast({
title: '删除成功',
icon: 'success',
duration: 2000
})
// this.getHotList('0');
this.toShlist('2')
// setTimeout(() => {
// uni.redirectTo({
// url: "/packageA/my/orderList"
// })
// }, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
},
//
cancelsOpen(id) {
this.cancelsShow = true
if (!this.deleteId) {
this.deleteId = id
}
// this.deleteId = id
console.log('cancelsOpen', this.deleteId);
},
cancelsClose() {
this.cancelsShow = false
this.deleteId = ""
},
//
detail(id) {
uni.navigateTo({
@ -363,16 +626,16 @@
},
//
getAfterList() {
var auth_status='';
var server_status=this.server_status;
var status='4,5,6'
var auth_status = '';
var server_status = this.server_status;
var status = '4,5,6'
//-1退
if(this.server_status== -1){
auth_status='2';
server_status='6';
status="4,5,6,7";
}else{
if (this.server_status == -1) {
auth_status = '2';
server_status = '6';
status = "4,5,6,7";
} else {
}
uni.$u.http
.get("/api/school.newworker.activity.order/order_list", {
@ -381,7 +644,7 @@
limit: 20,
server_status: server_status,
status: status,
auth_status:auth_status,
auth_status: auth_status,
},
})
.then((res) => {
@ -406,14 +669,21 @@
},
//
getHotList(val) {
console.log(val);
console.log('跳转接口', val, this.auth_status);
var auth_status = '';
if (val == 0) {
val = '1,2,3,4,5';
if (this.auth_status == 0) {
val = '1,2,3,4,5';
} else {
val = '1,2,3,4,5,-1';
}
// val = '1,2,3,4,5';
auth_status = this.auth_status;
console.log('val==0', this.auth_status);
} else {
if (val == '-1') {
auth_status = '0,1,2';
// auth_status = '0,1,2';
auth_status = '0,1';
} else {
auth_status = '1';
}
@ -526,63 +796,8 @@
})
.catch((error) => {});
},
//
toMake(id, orderId, classes_lib_id, type) {
uni.navigateTo({
// url: "/packageA/center/applyDetail?id=" + id + "&orderId=" + orderId + "&type=" + 2
url: "/packageA/center/orderDetail?id=" +
id +
"&orderId=" +
orderId +
"&type=" +
2 +
"&classes_lib_id=" +
classes_lib_id,
});
},
toDetail(id, orderId, classes_lib_id, order_no) {
let type = null;
if (this.selected == 0) {
type = 1;
} else if (this.selected == 3) {
type = 2;
} else if (this.selected == 9) {
type = 9;
} else if (this.selected == -3) {
type = -3;
} else if (this.selected == 6) {
type = 6;
} else {
type = 0;
}
uni.navigateTo({
url: "/packageA/center/orderDetail?id=" +
id +
"&orderId=" +
orderId +
"&order_no=" +
order_no +
"&type=" +
type +
"&classes_lib_id=" +
classes_lib_id,
});
},
//
toPay(id, orderId, classes_lib_id, order_no, type) {
uni.navigateTo({
url: "/packageA/center/orderDetail?id=" +
id +
"&orderId=" +
orderId +
"&order_no=" +
order_no +
"&type=" +
1 +
"&classes_lib_id=" +
classes_lib_id,
});
},
//
service(id) {
uni.navigateTo({
@ -665,19 +880,153 @@
this.status = status;
if (status == -2) {
this.getAfterList();
} else if (status == 15) {
console.log('draftShow');
this.draftShow = true
this.hotList = []
this.draftList = []
this.getDraftList(status)
} else {
this.getHotList(status);
}
},
//稿
getDraftList(status) {
uni.$u.http
.get("/api/school.newactivity.activity_drafts/drafts_list", {
params: {
keywords: this.keywords,
page: this.page,
limit: this.limit,
order: 'normal'
// status: status,
},
})
.then((res) => {
if (res.code == 1) {
this.draftCount = res.data.count;
console.log('draft1', res.data.list);
const list = res.data.list.data || [];
this.draftList.push(...list);
// this.draftList = [...this.draftList,...res.data.list.data];
console.log('draft', this.draftList);
for (let i = 0; i < this.draftList.length; i++) {
this.draftList[i].createTime = dayjs.unix(this.draftList[i].createtime).format(
'YYYY-MM-DD HH:mm')
}
if (this.draftList.length >= res.data.count) {
this.loadStatus = "nomore";
} else {
this.loadStatus = "loading";
}
console.log('draft', this.draftList);
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
});
this.loadStatus = "loading";
}
})
.catch((error) => {
console.error("请求失败", error);
this.loadStatus = "loading";
});
},
toEditDraft(id) {
console.log('编辑草稿');
const type = 3
uni.navigateTo({
url: '/packageB/editDraft?draftId=' + id + '&type=' + type
})
},
toDeleteDraft(id) {
console.log('删除草稿');
console.log('deleteItem', id);
uni.$u.http.post('/api/school.newactivity.activity_drafts/del', {
ids: id,
}).then(res => {
if (res.code == 1) {
this.cancelsShow = false
uni.showToast({
title: '删除成功',
icon: 'success',
duration: 1000
})
this.getDraftList2('15')
// this.toShlist('2')
// setTimeout(() => {
// uni.redirectTo({
// url: "/packageA/my/orderList"
// })
// }, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1000
})
}
}).catch(error => {});
},
//稿
getDraftList2(status) {
uni.$u.http
.get("/api/school.newactivity.activity_drafts/drafts_list", {
params: {
keywords: this.keywords,
page: 1,
limit: this.limit,
order: 'normal'
// status: status,
},
})
.then((res) => {
if (res.code == 1) {
this.count = res.data.count;
console.log('draft1', res.data.list);
// const list = res.data.list.data || [];
// this.draftList.push(...list);
this.draftList = res.data.list.data;
console.log('draft', this.draftList);
for (let i = 0; i < this.draftList.length; i++) {
this.draftList[i].createTime = dayjs.unix(this.draftList[i].createtime).format(
'YYYY-MM-DD HH:mm')
}
if (this.draftList.length >= res.data.count) {
this.loadStatus = "nomore";
} else {
this.loadStatus = "loading";
}
console.log('draft', this.draftList);
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
});
this.loadStatus = "loading";
}
})
.catch((error) => {
console.error("请求失败", error);
this.loadStatus = "loading";
});
},
headerSelected(status) {
return this.selected === status;
},
//
toShlist(val) {
this.page = 1;
this.hotList = [];
this.auth_status = val
console.log('toShlist', val, this.auth_status, this.status);
this.getHotList(this.status);
},
//
toAfter(val) {
this.page = 1;
this.hotList = [];
@ -692,6 +1041,7 @@
.box {
.con-center {
width: 100%;
// height: 100vh;
// margin-top: 25rpx;
// overflow: hidden;
background: #f7f7f7;
@ -729,6 +1079,10 @@
color: #3D3D3D;
}
}
}
}
@ -1055,11 +1409,97 @@
/* 使用省略号表示被截断的文本 */
}
.invoiceList {
width: 100%;
height: auto;
display: grid;
justify-content: center;
.invoiceList-item {
display: grid;
justify-content: space-between;
align-items: center;
background-color: #ffffff;
// width: 100%;
width: 670rpx;
margin-bottom: 20rpx;
// margin-left: 10rpx;
padding: 20rpx 30rpx;
height: 220rpx auto;
border-radius: 30rpx;
.invoiceList-itemInfo {
// width: 100%;
width: 670rpx;
display: flex;
// justify-content: flex-start;
align-items: center;
.item-img {
width: 170rpx;
height: 170rpx;
// margin-left: 40rpx;
}
.item-con {
margin-left: 20rpx;
width: 100%;
height: 160rpx;
position: relative;
color: #323232;
display: grid;
.itenCon-actName {
// position: absolute;
// top: 0;
font-size: 28rpx;
font-weight: 600;
}
.itenCon-actCon {
// position: absolute;
// top: 50rpx;
// margin-top: 60rpx;
width: 400rpx;
white-space: nowrap;
/* 禁止换行 */
overflow: hidden;
/* 隐藏超出部分 */
text-overflow: ellipsis;
font-size: 28rpx;
font-weight: 400;
}
.itenCon-actPrice {
// position: absolute;
// bottom: 0;
color: #9c9c9c;
font-size: 26rpx;
font-weight: 400;
}
}
}
.item-draftBtns {
// width: 100%;
width: 670rpx;
display: flex;
justify-content: flex-end;
align-items: center;
margin-top: 20rpx;
}
}
}
.hot {
margin-top: 80rpx;
margin-bottom: 70rpx;
min-height: 100vh;
padding:0rpx 30rpx;
padding: 0rpx 30rpx;
.hot-top {
@ -1224,7 +1664,8 @@
}
.bottom {
margin: 0rpx 10rpx 30rpx 10rpx;
margin: 0rpx 0rpx 30rpx 10rpx;
// margin: 0rpx 0rpx 0rpx 10rpx;
.number {
font-family: Source Han Sans CN, Source Han Sans CN;
@ -1300,4 +1741,116 @@
align-items: center;
justify-content: center;
}
.popupBox {
width: 640rpx;
height: 414rpx;
background-image: url("https://naweigetetest2.hschool.com.cn/dyqc/confirm2.png");
background-size: 100%;
background-repeat: no-repeat;
border-radius: 44rpx;
.pop-header {
width: 100%;
background-repeat: no-repeat;
background-position: left bottom;
height: 414rpx;
margin-top: 80rpx;
span {
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 20rpx;
color: #343434;
}
.name {
width: 288rpx;
height: 36rpx;
font-family: PingFang SC Bold, PingFang SC Bold;
font-weight: 800;
font-size: 36rpx;
color: #202020;
line-height: 36rpx;
text-align: center;
font-style: normal;
text-transform: none;
}
.price {
width: 520rpx;
height: 68rpx;
margin-top: 30rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 24rpx;
color: #202020;
line-height: 34rpx;
text-align: center;
font-style: normal;
text-transform: none;
}
}
.popup {
display: flex;
align-items: self-start;
justify-content: center;
width: 594rpx;
}
.popup-footer {
position: absolute;
left: 75rpx;
bottom: 60rpx;
span {
width: 230rpx;
height: 90rpx;
background: #323232;
border-radius: 200rpx 200rpx 200rpx 200rpx;
font-family: PingFang SC Regular, PingFang SC Regular;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
display: flex;
justify-content: center;
align-items: center;
}
.span1 {
background: rgba(193, 193, 193, 0.22);
color: #202020;
margin-right: 30rpx;
}
}
.line {
width: 642rpx;
height: 1rpx;
background: #F0F0F0;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.selectTime.selected {
width: 288rpx;
height: 50rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
background: #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
cursor: pointer;
margin: 24rpx 32rpx 0 0;
}
}
</style>

View File

@ -511,12 +511,7 @@
}
});
},
//
toMeDetail() {
uni.navigateTo({
url: "/packageA/center/MechanismDetail?id=" + this.detail.shop.id
})
},
close() {
this.type = 0

View File

@ -605,12 +605,7 @@
}
});
},
//
toMeDetail() {
uni.navigateTo({
url: "/packageA/center/MechanismDetail?id=" + this.detail.shop.id
})
},
close() {
this.type = 0

View File

@ -56,6 +56,12 @@
<view><u-icon name="arrow-right"></u-icon></view>
</view>
</view>
<view class="list-item" @click="openUrl('/packageB/invoice/invoiceCenter')">
<view class="left">发票中心</view>
<view class="right">
<view><u-icon name="arrow-right"></u-icon></view>
</view>
</view>
<view class="list-item" @click="openSfz()">
<view class="left">
身份信息

View File

@ -1,637 +0,0 @@
<template>
<view style="background: #F1F2F8;min-height: 100vh;">
<view style="padding: 30rpx 30rpx 250rpx 30rpx;">
<view style="background-color: #ffffff;border-radius: 20rpx;padding:30rpx">
<view style="display: flex;align-self: center;align-items: start;">
<view style="width: 45%;">
<image :src="info.detail.headimage" style="width: 280rpx; height: 200rpx;" mode="aspectFill">
</image>
</view>
<view style="padding-left: 20rpx;">
<view style="font-size: 36rpx;font-weight: 600;">{{info.detail.title}}</view>
<view style="font-size: 26rpx;color: #7A7A7A;margin-top: 15rpx;">
<image src="/static/center/address.png"
style="width: 40rpx;height: 40rpx;vertical-align: middle;"></image>
<text style="vertical-align: middle;">{{info.detail.address}}</text>
</view>
</view>
</view>
<view style="height: 1px;width: 70%;background: #D9D9D9;margin: 45rpx auto;"></view>
<view v-if="info!=''" class="item-spacing"
style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">当前状态</view>
<span class="status"
v-if="info.serviceorder && info.serviceorder.status == 1 && info.serviceorder.service_stauts == 1"
style="font-size: 26rpx;color: #FF2323;">待机构处理</span>
<span class="status"
v-if="info.serviceorder && info.serviceorder.status == 4 && info.serviceorder.service_stauts == 7"
style="font-size: 26rpx;color: #FF2323;">售后通过结单中</span>
<span class="status"
v-if="info.serviceorder && info.serviceorder.status == 4 && info.serviceorder.service_stauts == 4"
style="font-size: 26rpx;color: #FF2323;">待用户确认</span>
<span class="status"
v-if="info.serviceorder && info.serviceorder.status == 7 && info.serviceorder.service_stauts == 4"
style="font-size: 26rpx;color: #FF2323;">售后结单完成</span>
<span class="status" v-if="info.status == 0" style="font-size: 26rpx;color: #008CFF;">待支付</span>
<span class="status" v-if="info.status == 3" style="font-size: 26rpx;color: #008CFF;">使用中</span>
<span class="status" v-if="info.status == 6" style="font-size: 26rpx;color: #FF2323;">已退款</span>
<span class="status" v-if="info.status == 9" style="font-size: 26rpx;color: #34DC12;">已完成</span>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">课程机构</view>
<view style="color: #343434;">{{info.shop.name}}</view>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">讲师/电话</view>
<view style="color: #71D0FF;" @click="callPhone(info.shop.tel)">
<text style="vertical-align: middle;">{{info.detail.teacher.name}}/{{info.shop.tel}}</text>
<image src="/static/tel.png" style="width: 40rpx;height: 40rpx;vertical-align: middle;"></image>
</view>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;" v-if="info.status != 3">
<view style="color: #7A7A7A;">退款原因</view>
<view style="color: #343434;">{{info.serviceorder.reason}}</view>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">订单号</view>
<view style="color: #343434;">{{info.order_no}}</view>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">购买时间</view>
<view style="color: #343434;">
{{ info.detail ? formatTimestamp(info.detail.createtime) : '加载中...' }}
</view>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">全部课时</view>
<view style="color: #343434;">{{info.detail.classes_num}}</view>
</view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">已用课时</view>
<view style="color: #343434;">{{info.detail.use_num}}</view>
</view>
<view style="display: flex; justify-content: space-between; font-size: 26rpx;">
<view style="color: #7A7A7A;">购买价格</view>
<view style="color: #FF5F5F;" v-if="info.detail.feel == 0">{{info.detail.price}}</view>
<view style="color: #FF5F5F;" v-if="info.detail.feel == 1">免费</view>
</view>
<view class="line-row" v-if="(info.serviceorder && info.serviceorder.status == 4 && info.serviceorder.service_stauts == 4) || info.status == 6 || info.status == 9 || (info.serviceorder && info.serviceorder.status == 4 && info.serviceorder.service_stauts == 7)"></view>
<view class="item-spacing" style="display: flex; justify-content: space-between; font-size: 26rpx;" v-if="(info.serviceorder && info.serviceorder.status == 4 && info.serviceorder.service_stauts == 4) || info.status == 6 || info.status == 9 || (info.serviceorder && info.serviceorder.status == 4 && info.serviceorder.service_stauts == 7)">
<view style="color: #7A7A7A;">商家退款金额</view>
<view style="color: #FF2323;font-weight: 800;font-size: 36rpx;">{{'¥' + info.serviceorder.tbc_price}}</view>
</view>
</view>
<!-- <view class="flex flex-column" style="background-color: #ffffff;border-radius: 20rpx;padding:30rpx;margin-top: 42rpx;">
<span style="font-family: PingFang SC, PingFang SC;font-weight: 500;font-size: 24rpx;color: #7A7A7A;">用户驳回退款金额</span>
<view class="line-row" style="margin: 24rpx 0 18rpx 0;"></view>
<span style="font-family: PingFang SC, PingFang SC;font-weight: 500;font-size: 24rpx;color: #343434;">课程质量没有问题</span>
</view> -->
<view class="refund flex flex-column" v-if="info.status == 3 && info.detail.feel != 1">
<span class="title">退款金额</span>
<view class="price flex align-items">
<span></span>
<input class="uni-input" focus="true" v-model="price" type="digit" placeholder-class="plasty"
style="height: 60rpx;" />
</view>
<span class="line"></span>
<span class="text">退款金额可修改上限为课程购买价格(损耗百分比:{{loss_proportion}}%)</span>
<u--textarea v-model="reason" placeholder="请输入内容" count maxlength="150" height='100'></u--textarea>
</view>
</view>
<view class="buttonClack" v-if="info.status == 3 || (info.status == 4 && info.serviceorder.status == 1 && info.detail.feel != 1) ">
<view class="flex align-items" style="text-align: center;justify-content: space-around;">
<view style="width: 100%;" v-if="info.status == 3">
<view @click="cancelRefund"
style="margin: 0 auto;border: 2rpx solid #FF5F5F;color: #FF5F5F;width: 80%;height: 80rpx;border-radius: 401rpx;line-height: 80rpx;">
</view>
</view>
<view style="width: 100%;" v-if="info.status == 3">
<view @click="submitRefund"
style="margin: 0 auto;background-color: #008CFF;color: #ffffff;width: 80%;height: 80rpx;border-radius: 80rpx;line-height: 80rpx;">
退 </view>
</view>
<view style="width: 100%;"
v-if="info.serviceorder && info.serviceorder.status == 1 && info.serviceorder.service_stauts == 1">
<view @click="refuseShow = true"
style="margin: 0 auto;background-color: #008CFF;color: #ffffff;width: 80%;height: 80rpx;border-radius: 80rpx;line-height: 80rpx;">
</view>
</view>
<view style="width: 100%;"
v-if="info.serviceorder && info.serviceorder.status == 1 && info.serviceorder.service_stauts == 1">
<view @click="agreeShow = true"
style="margin: 0 auto;background-color: #008CFF;color: #ffffff;width: 80%;height: 80rpx;border-radius: 80rpx;line-height: 80rpx;">
</view>
</view>
</view>
</view>
<view class="buttonClack" v-if="info.detail.feel == 1 && info.status == 3">
<view class="flex align-items" style="text-align: center;justify-content: space-around;">
<view style="width: 100%;">
<view @click="quxiao()"
style="margin: 0 auto;border: 2rpx solid #FF5F5F;color: #FF5F5F;width: 80%;height: 80rpx;border-radius: 401rpx;line-height: 80rpx;">
</view>
</view>
</view>
</view>
<!-- 拒绝 -->
<u-popup :show="refuseShow" mode="center" :zIndex="99999" :custom-style="popupStyle" @close="refuseClose" @open="refuseOpen" :closeable="true">
<view class="center-box flex flex-column">
<span class="title">拒绝理由</span>
<span class="line"></span>
<view style="width: 630rpx;margin-left: 30rpx;margin-top: 31rpx;">
<u--textarea v-model="reasonText" placeholder="请输入内容" count maxlength="150" height='100'></u--textarea>
</view>
<view class="flex align-items btnList" style="justify-content: space-evenly;">
<span style="border-radius: 401rpx;border: 2rpx solid #008CFF;color: #008CFF;" @click.stop="qx()">取消</span>
<span style="border-radius: 401rpx;background: #008CFF;color: #FFFFFF;" @click.stop="next()">确认</span>
</view>
</view>
</u-popup>
<!-- 同意 -->
<u-popup :show="agreeShow" mode="center" :zIndex="99999" :custom-style="popupStyle" @close="agreeClose" @open="agreeOpen" :closeable="true">
<view class="center-box flex flex-column">
<span class="title">同意退款</span>
<span class="line"></span>
<span class="jine">退款金额
<span class="red">(必填)</span>
</span>
<view class="price flex align-items">
<span></span>
<input class="uni-input" focus="true" v-model="reasonPrice" type="digit" placeholder-class="plasty"
style="height: 60rpx;" />
</view>
<span class="line" style="width: 630rpx;margin-left: 30rpx;"></span>
<span class="text">退款金额可修改上限为课程购买价格</span>
<span class="text" style="margin-top: 16rpx;">课程购买价格
<span class="red">{{info.detail.price}}</span>
</span>
<view class="flex align-items btnList" style="justify-content: space-evenly;">
<span style="border-radius: 401rpx;border: 2rpx solid #008CFF;color: #008CFF;" @click.stop="TyQx()">取消</span>
<span style="border-radius: 401rpx;background: #008CFF;color: #FFFFFF;" @click.stop="Tynext()">确认</span>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
price: '',
reason: '',
reasonPrice:'', //
list: '',
refuseShow: false,
agreeShow: false,
id: 0,
info: {},
classes_service_order_id: 0,
reasonText:'',
loss_proportion: '', //
popupStyle: {
width: '690rpx',
// height: '564rpx',
borderRadious:'20rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'center',
alignItems: 'center'
},
};
},
onLoad(op) {
this.classes_service_order_id = op.id;
// this.getRefundInfo();
this.getOrderInfo(op.id);
//classes_service_order_id
},
computed: {
},
methods: {
formatTimestamp(timestamp) {
const date = new Date(timestamp * 1000); // 1000
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
//
quxiao(){
uni.$u.http.post('/api/school/worker/order/cancel', {
order_no: this.info.order_no,
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: '取消免费课程成功',
icon: 'none',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.navigateBack(1)
}, 2000);
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
// 退
cancelRefund() {
uni.navigateBack(1)
},
refuseClose(){
this.refuseShow = false
this.reasonText = ''
},
refuseOpen(){
this.refuseShow = true
},
agreeClose(){
this.agreeShow = false
},
agreeOpen(){
this.agreeShow = true
},
//
qx(){
this.refuseShow = false
this.reasonText = ''
},
TynextQx(){
this.agreeShow = fasle
},
Tynext(){
uni.$u.http.post('/api/school.worker.service_order/shop_confirmation', {
order_no: this.info.serviceorder.id,
price: this.reasonPrice,
status: 'yes'
}).then(res => {
if (res.code == 1) {
this.agreeShow = false
uni.showToast({
title: '已同意',
icon: 'none',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.navigateBack(1)
}, 2000);
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
// 退
next(){
uni.$u.http.post('/api/school.worker.service_order/shop_confirmation', {
order_no: this.info.serviceorder.id,
reject_reason: this.reasonText,
status: 'no'
}).then(res => {
if (res.code == 1) {
this.refuseShow = false
this.reasonText = ''
uni.showToast({
title: '已拒绝',
icon: 'none',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.navigateBack(1)
}, 2000);
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
// 退
submitRefund() {
uni.$u.http.post('/api/school.worker.service_order/create', {
classes_order_id: this.id,
reason: this.reason,
price: this.price
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: '发起成功',
icon: 'none',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.navigateBack(1)
}, 2000);
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
// 退
getMoney(id) {
uni.$u.http.get('/api/school.worker.service_order/create', {
params: {
classes_order_id: id
}
}).then(res => {
if (res.code == 1) {
this.loss_proportion = res.data.order_data.loss_proportion
if (res.data.order_data.auto_recommend_price <= 0) {
this.price = res.data.order_data.sub_refundprice
} else {
this.price = res.data.order_data.auto_recommend_price
}
// this.price = res.data
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
//
getOrderInfo(id) {
uni.$u.http.get('/api/school/worker/order/detail', {
params: {
id: id
}
}).then(res => {
if (res.code == 1) {
this.info = res.data.detail;
if (this.info.serviceorder && (this.info.status == 4 && this.info.serviceorder.status == 1 )) {
if (res.data.detail.serviceorder.auto_recommend_price <= 0) {
this.reasonPrice = res.data.detail.serviceorder.sub_refundprice
} else {
this.reasonPrice = res.data.detail.serviceorder.auto_recommend_price
}
}
if (res.data.detail.status == 3) {
this.id = res.data.detail.id
this.getMoney(res.data.detail.id)
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
callPhone(phone) {
uni.makePhoneCall({
phoneNumber: phone
})
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #F1F2F8;
}
.buttonClack {
padding-top: 20rpx;
position: fixed;
bottom: 0;
width: 100%;
height: 100rpx;
background-color: #ffffff;
padding-bottom: calc(env(safe-area-inset-bottom));
box-shadow: 0rpx -6rpx 12rpx 0rpx rgba(111, 190, 255, 0.1);
}
.item-spacing {
padding-bottom: 30rpx;
}
.w-100 {
width: 100%;
}
.flex {
display: flex;
}
.justify-center {
justify-content: center;
}
.space-between {
justify-content: space-between;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.justify-start {
justify-content: start;
}
.mar-top-30 {
margin-top: 30rpx;
}
.refund {
padding: 15rpx;
.title {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 28rpx;
color: #343434;
}
.price {
margin-top: 32rpx;
height: 53rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 62rpx;
color: #FF5F5F;
}
input {
height: 53rpx;
}
.line {
width: 642rpx;
height: 1rpx;
background: #D9D9D9;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin: 17rpx 0 7rpx 0;
}
.text {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
margin-bottom: 42rpx;
}
}
::v-deep.plasty {
height: 53rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 62rpx;
color: #FF5F5F;
}
.center-box{
width: 690rpx;
.title{
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 42rpx;
color: #008CFF;
padding: 30rpx;
}
.text{
padding: 0 30rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
.jine{
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 28rpx;
color: #343434;
}
.line{
width: 690rpx;
height: 1rpx;
background: #D9D9D9;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin: 11rpx 31rpx 0 0;
}
.price {
margin-top: 32rpx;
height: 53rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 62rpx;
color: #FF5F5F;
padding: 0 30rpx;
width: 630rpx;
}
.jine{
padding: 30rpx;
}
.red{
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #FF5F5F;
}
input {
height: 53rpx;
}
.btnList{
padding: 30rpx;
span{
width: 306rpx;
height: 80rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
}
.line-row{
width: 630rpx;
height: 1rpx;
background: #D9D9D9;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin: 32rpx 0 38rpx 0;
}
</style>

3274
packageB/editAct.vue Normal file

File diff suppressed because it is too large Load Diff

2999
packageB/editDraft.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,805 @@
<template>
<!-- <view>添加抬头</view> -->
<view class="container">
<!-- 表单 -->
<view style="height: auto;">
<u-form :model="form" :rules="rules" ref="uForm" label-width="auto" labelPostition="left">
<view class="formBox">
<u-form-item label="发票类型" prop="invoice_type">
<view class="typeBOx" style="width: 300px;justify-content: flex-end;">
<view class="normalInv" @click="handleHeadTp1()">
<view class="typeImgs">
<image v-if="form.invoice_type == 'ordinary'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">普通发票</view>
</view>
<view class="specialInv" @click="handleHeadTp2()">
<view class="typeImgs">
<image v-if="form.invoice_type == 'special'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">专用发票</view>
</view>
</view>
</u-form-item>
<u-form-item label="发票内容" prop="">
<view class="typeBOx" style="width: 305px;justify-content: space-between;">
<view class="typeImgs" @click="explainShow = true">
<image style="width: 44rpx;height: 44rpx;"
src="https://naweigetetest2.hschool.com.cn/miniapp/invoice/conRecord.png" mode="">
</image>
</view>
<view class="normalInv">
<view class="typeImgs">
<image style="width: 44rpx;height: 44rpx;position: relative;top: 6rpx;"
src="/static/fabu/check.png" mode=""></image>
</view>
<view class="typeText">商品明细</view>
</view>
</view>
<!-- <image style="width: 38rpx;height: 38rpx;" src="/static/tips.png" mode=""></image> -->
<!-- <u-input inputAlign="right" v-model="form.password" placeholder="请输入密码" border="none"/> -->
</u-form-item>
<u-form-item label="抬头类型" prop="head_type">
<view class="typeBOx" style="width: 219px;justify-content: flex-end;">
<view class="normalInv" v-if="form.invoice_type == 'ordinary' || form.invoice_type == ''"
@click="handlePerson()">
<view class="typeImgs">
<image v-if="form.head_type == 'personal'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">个人或事业单位</view>
</view>
<view class="specialInv" @click="handleCompany()">
<view class="typeImgs">
<image v-if="form.head_type == 'corporate'" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/nocheck.png" mode=""></image>
</view>
<view class="typeText">企业</view>
</view>
</view>
</u-form-item>
<u-form-item label="抬头名称" prop="invoice_header" required>
<u-input inputAlign="right" v-model="form.invoice_header" type="number" placeholder="请输入抬头名称"
border="none" />
</u-form-item>
<u-form-item label="单位税号" prop="tax_id"
v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.tax_id" type="number" placeholder="请输入单位税号"
border="none" />
</u-form-item>
<u-form-item label="注册地址" prop="enterprise_address"
v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.enterprise_address" type="number" placeholder="必填"
border="none" />
</u-form-item>
<u-form-item label="注册电话" prop="enterprise_phone"
v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.enterprise_phone" type="number" placeholder="必填"
border="none" />
</u-form-item>
<u-form-item label="开户银行" prop="bank_deposit"
v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.bank_deposit" type="number" placeholder="必填"
border="none" />
</u-form-item>
<u-form-item label="银行账号" prop="bank_number"
v-if="form.head_type == 'corporate' || form.head_type == ''">
<u-input inputAlign="right" v-model="form.bank_number" type="number" placeholder="必填"
border="none" />
</u-form-item>
</view>
<!-- <view style="background-color: #f5f5f5;height: 40rpx;"></view> -->
<view class="recipientInfo">
<u-form-item label="手机号" prop="invoice_reservation_phone" required>
<u-input inputAlign="right" v-model="form.invoice_reservation_phone" type="number"
placeholder="请输入发票预留手机号" border="none" />
</u-form-item>
<u-form-item label="邮箱地址" prop="invoice_reservation_email" required>
<u-input inputAlign="right" v-model="form.invoice_reservation_email" type="number"
placeholder="请输入发票预留邮箱" border="none" />
</u-form-item>
</view>
<view class="defaultInfo" @click="handleDefault()">
<view class="defaultLeft">
<view class="leftText1">设为默认发票</view>
<view class="leftText2">设置为默认后续下单优先使用以上发票信息</view>
</view>
<view class="defaultRight">
<image v-if="is_default == 1" style="width: 44rpx;height: 44rpx;"
src="../../static/fabu/check.png" mode=""></image>
<image v-else style="width: 44rpx;height: 44rpx;" src="../../static/fabu/nocheck.png" mode="">
</image>
</view>
</view>
<!--<u-form-item>
<u-button type="primary" @click="submit">申请开票</u-button>
</u-form-item>-->
</u-form>
<view v-if="form.head_type == 'corporate' || form.head_type == ''" style="width: 100%;height: 300rpx;">
</view>
</view>
<!-- 提交按钮 -->
<view class="footer-btn">
<view class="invoiceBtn" @click.stop="submit()">
<view>提交保存</view>
</view>
<view v-if="deleteShow" class="invoiceDeleteBtn" @click.stop="deleteHead()">
<view>删除</view>
</view>
</view>
<u-popup :show="explainShow" :round="22" mode="center" @close="explainShow = false" @open="explainShow = true"
:custom-style="popupStyRe">
<view class="popup_tkall" style="">
<view class="popup_tk">发票内容说明</view>
<view style="font-size: 28rpx;font-weight: 400;color: #3D3D3D;">
<view>·发票内容将显示详细商品名称与价格信息</view>
<view style="margin-top: 20rpx;">·部分商家可能开具发票内容为商品所属类别及价格信息如有特殊需求请向商家客服咨询</view>
</view>
<view class="popup-footer"
style="display: flex;justify-content: center;align-items: center;margin-top: 40rpx;">
<view class="headBtn" style="width: 45%;height: 80rpx;background-color: #ffffff;border-radius: 148rpx;color: #999999;font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
border: 2rpx solid #999999" @click="explainShow = false">
<view>取消</view>
</view>
<view class="headBtn" style="width: 45%;height: 80rpx;background-color: #323232;border-radius: 148rpx;color: #BBFC5B;font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
margin-left: 20rpx;" @click="explainShow = false">
<view>我已知晓</view>
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
popupStyRe: {
width: '540rpx',
padding: '24rpx 24rpx 42rpx 24rpx',
height: '384rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'start',
alignItems: 'center',
flexColumn: 'column'
},
style: {
//
img: 'width: 100%'
},
id: 0,
order_no: '',
order_nos: '',
form: {
order_nos: '',
head_type: '',
invoice_type: '',
invoice_header: '',
tax_id: '',
bank_deposit: '',
bank_number: '',
enterprise_address: '',
enterprise_phone: '',
invoice_reservation_phone: '',
invoice_reservation_email: '',
is_default: null
},
rules: {
// invoice_type: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
invoice_header: [{
required: true,
// type: 'invoice_header',
message: '请输入抬头名称',
trigger: 'blur'
}],
// invoice_type: [{
// required: true,
// // type: 'invoice_type',
// message: '',
// trigger: 'blur'
// }],
invoice_reservation_phone: [{
required: true,
// type: 'invoice_reservation_phone',
message: '请输入发票预留手机号',
trigger: 'blur'
}],
invoice_reservation_email: [{
required: true,
message: '请输入发票预留邮箱',
trigger: 'blur'
}],
},
detail: '', //detail
detailAny: '', //detail
qrimages: '',
headShow: false, //
title: '',
deleteShow: false,
explainShow: false, //
is_default: 0, //01
}
},
onLoad(options) {
console.log('options:', options.id);
const id = options.id
const ids = options.id
console.log('ids:', ids);
if (ids) {
this.id = ids
console.log('ids1', this.id, ids);
this.title = '编辑发票抬头信息'
this.deleteShow = true
this.getHeadInfo();
} else {
this.deleteShow = false
this.title = '添加发票抬头信息'
}
},
onReady() {
},
methods: {
handleHeadTp1() {
this.form.invoice_type = 'ordinary'
console.log('1-1', this.form.invoice_type);
},
handleHeadTp2() {
// this.$set(this.form.invoice_type = 'special')
this.form.invoice_type = 'special'
console.log('2-2', this.form.invoice_type);
},
handlePerson() {
console.log('1');
this.form.head_type = 'personal'
},
handleCompany() {
console.log('2');
this.form.head_type = 'corporate'
},
handleDefault() {
console.log('handleDefault');
const index = this.is_default;
console.log('index', index);
if (index == 0) {
this.is_default = 1
} else {
this.is_default = 0
}
this.form.is_default = this.is_default
console.log('this.is_default', this.is_default, this.form.is_default);
},
//
getHeadInfo() {
console.log('详情', this.id);
uni.$u.http.get('/api/school.header/detail', {
params: {
id: this.id,
}
}).then(res => {
if (res.code == 1) {
console.log('详情返值', res.data);
this.form = res.data.detail
this.is_default = res.data.detail.is_default
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
},
submit() {
//
if (this.form.invoice_type == '') {
uni.showToast({
title: '请选择发票类型!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.invoice_header == '') {
uni.showToast({
title: '请输入抬头名称!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.invoice_reservation_phone == '') {
uni.showToast({
title: '请输入手机号!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.invoice_reservation_email == '') {
uni.showToast({
title: '请输入邮箱地址!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.head_type == '') {
uni.showToast({
title: '请选择抬头类型',
icon: 'none',
duration: 2000
})
return;
}
//
if (this.form.head_type == 'special') {
//
console.log('抬头类型——企业');
//
if (this.form.tax_id == '') {
uni.showToast({
title: '请输入单位税号!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.enterprise_address == '') {
uni.showToast({
title: '请输入注册地址!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.enterprise_phone == '') {
uni.showToast({
title: '请输入注册电话!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form.bank_deposit == '') {
uni.showToast({
title: '请输入开户银行!',
icon: 'none',
duration: 2000
});
return;
}
//
if (this.form, bank_number == '') {
uni.showToast({
title: '请输入银行账号!',
icon: 'none',
duration: 2000
});
return;
}
}
console.log('submit');
if (this.id) {
//
console.log('编辑');
uni.$u.http.post('/api/school.header/edit', {
ids: this.id,
order_nos: this.form.order_nos,
head_type: this.form.head_type,
invoice_type: this.form.invoice_type,
invoice_header: this.form.invoice_header,
tax_id: this.form.tax_id,
bank_deposit: this.form.bank_deposit,
bank_number: this.form.bank_number,
enterprise_address: this.form.enterprise_address,
enterprise_phone: this.form.enterprise_phone,
invoice_reservation_phone: this.form.invoice_reservation_phone,
invoice_reservation_email: this.form.invoice_reservation_email,
is_default: this.form.is_default
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: '保存成功!',
icon: 'none',
duration: 1000,
});
//
this.is_default = null;
this.form = {
order_nos: '',
head_type: '',
invoice_type: '',
invoice_header: '',
tax_id: '',
bank_deposit: '',
bank_number: '',
enterprise_address: '',
enterprise_phone: '',
invoice_reservation_phone: '',
invoice_reservation_email: '',
is_default: null
}
setTimeout(() => {
uni.navigateBack()
// this.getInfo();
// uni.hideLoading();
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
} else {
//
console.log('新增');
uni.$u.http.post('/api/school.header/add', {
order_nos: this.form.order_nos,
head_type: this.form.head_type,
invoice_type: this.form.invoice_type,
invoice_header: this.form.invoice_header,
tax_id: this.form.tax_id,
bank_deposit: this.form.bank_deposit,
bank_number: this.form.bank_number,
enterprise_address: this.form.enterprise_address,
enterprise_phone: this.form.enterprise_phone,
invoice_reservation_phone: this.form.invoice_reservation_phone,
invoice_reservation_email: this.form.invoice_reservation_email,
is_default: this.form.is_default
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: '添加成功!',
icon: 'none',
duration: 1000,
});
//
this.is_default = null;
this.form = {
order_nos: '',
head_type: '',
invoice_type: '',
invoice_header: '',
tax_id: '',
bank_deposit: '',
bank_number: '',
enterprise_address: '',
enterprise_phone: '',
invoice_reservation_phone: '',
invoice_reservation_email: '',
is_default: null
}
setTimeout(() => {
uni.navigateBack()
// this.getInfo();
// uni.hideLoading();
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
}
},
deleteHead() {
console.log('deleteHead');
uni.$u.http.post('/api/school.header/del', {
ids: this.id,
}).then(res => {
if (res.code == 1) {
// this.cancelsShow = false
uni.showToast({
title: '删除成功',
icon: 'success',
duration: 2000
})
setTimeout(() => {
uni.navigateBack()
}, 2000)
// this.getDraftList2('15')
// this.toShlist('2')
// setTimeout(() => {
// uni.redirectTo({
// url: "/packageA/my/orderList"
// })
// }, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1000
})
}
}).catch(error => {});
},
},
}
</script>
<style lang="scss" scoped>
.form_right {
display: flex;
align-items: center;
margin-left: auto;
color: #848484;
width: 300rpx;
padding: 0rpx 0rpx 0rpx 20rpx;
position: relative;
left: 2rpx;
font-size: 26rpx;
font-weight: 400;
text-align: right;
justify-content: flex-end;
}
.typeBOx {
display: flex;
align-items: center;
margin-left: auto;
.normalInv {
display: flex;
align-items: center;
justify-content: center;
.typeImgs {
width: 44rpx;
height: 44rpx;
}
.typeText {
font-size: 30rpx;
font-weight: 400;
color: #999999;
margin-left: 20rpx;
}
.typeText2 {
font-size: 30rpx;
font-weight: 400;
color: #323232;
margin-left: 20rpx;
}
}
.specialInv {
margin-left: 30rpx;
display: flex;
align-items: center;
justify-content: center;
.typeImgs {
width: 44rpx;
height: 44rpx;
}
.typeText {
font-size: 30rpx;
font-weight: 400;
color: #999999;
margin-left: 20rpx;
}
.typeText2 {
font-size: 30rpx;
font-weight: 400;
color: #323232;
margin-left: 20rpx;
}
}
}
.container {
padding: 30rpx 0;
background-color: #f5f5f5;
// justify-content: center;
// display: grid;
.formBox {
// width: 100%;
margin-top: 0rpx;
background-color: #ffffff;
padding: 10rpx 20rpx;
border-radius: 20rpx;
}
.recipientInfo {
margin-top: 30rpx;
background-color: #ffffff;
padding: 10rpx 20rpx;
border-radius: 20rpx;
}
.defaultInfo {
margin-top: 30rpx;
// margin-left: 30rpx;
background-color: #ffffff;
padding: 30rpx 30rpx 30rpx 20rpx;
border-radius: 20rpx;
// width: 690rpx;
width: 93%;
display: flex;
justify-content: space-between;
align-items: center;
.defaultLeft {
display: grid;
justify-content: flex-start;
align-items: center;
.leftText1 {
font-weight: 600;
font-size: 32rpx;
color: #3d3d3d;
font-family: PingFang SC, PingFang SC;
line-height: 36rpx;
font-style: normal;
text-transform: none;
}
.leftText2 {
font-weight: 400;
font-size: 24rpx;
color: #3d3d3d;
margin-top: 20rpx;
font-family: PingFang SC, PingFang SC;
line-height: 36rpx;
font-style: normal;
text-transform: none;
}
}
}
.footer-btn {
width: 95%;
padding: 20rpx 20rpx;
display: grid;
justify-content: center;
position: fixed;
bottom: 0;
// left: 0;
right: -2rpx;
z-index: 99;
background-color: #ffffff;
color: #bbfc5b;
.invoiceBtn {
width: 690rpx;
height: 90rpx;
background-color: #323232;
border-radius: 148rpx;
color: #BBFC5B;
font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
// position: fixed;
// bottom: 66rpx;
// margin-left: 2%;
}
.invoiceDeleteBtn {
margin-top: 30rpx;
width: 690rpx;
height: 90rpx;
background-color: #ffffff;
border-radius: 148rpx;
color: #999999;
border: 2rpx solid #999999;
font-size: 36rpx;
font-weight: 400;
line-height: 50rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
text-transform: none;
font-style: normal;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
// position: fixed;
// bottom: 40rpx;
// margin-left: 2%;
}
}
.popup_tkall {
background-color: #ffffff;
.popup_tk {
font-size: 32rpx;
font-weight: 500;
margin: 12rpx 0 24rpx 0;
text-align: center;
color: #3D3D3D;
}
}
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,292 @@
<template>
<!-- <view>查看发票</view> -->
<view class="container">
<view class="info-top">
<image style="height: 122px;width: 294px;position: absolute;right: 5%;top:0%" src="https://naweigetetest2.hschool.com.cn/miniapp/invoice/invInfoBk.png"></image>
<view class="info-status">
<view class="statusFir">
<image style="width: 32rpx;height: 32rpx;" src="https://naweigetetest2.hschool.com.cn/miniapp/invoice/statusInv.png"></image>
<view style="margin-left: 20rpx;">{{detailList[0].invoice_status_text}}</view>
</view>
<view class="statusSec" style="margin-top: 20rpx;">已开发票金额: {{detailAny.price}}</view>
</view>
</view>
<view class="infoCon">
<view class="conFIr">
<view class="conFir-left">
<view class="leftTitle">发票类型<span style="color: #323232;" v-if="detailAny.invoice_type == 'ordinary'">普通发票 </span>
<span style="color: #323232;" v-else>专用发票</span></view>
<view class="leftTitle">发票内容<span style="color: #323232;">商品明细</span></view>
<view class="leftTitle">抬头类型<span style="color: #323232;" v-if="detailAny.head_type == 'personal'">个人或事业单位</span>
<span style="color: #323232;" v-else>企业</span></view>
</view>
<view class="conFir-right" @click="checkImages()">
<image style="width: 266rpx;height: 166rpx;border-radius: 14rpx;" :src="detailAny.images[0]" mode=""></image>
<view class="ringhtImg-text">{{imagesNum}}</view>
</view>
</view>
<view class="conSec">
<view class="rightTitle">抬头名称<span style="color: #323232;">{{detailAny.invoice_header}}</span></view>
<view class="rightTitle">开票金额<span style="color: #323232;">{{detailAny.price}}</span></view>
<view class="rightTitle">申请时间<span style="color: #323232;">{{detailAny.createtime_text}}</span></view>
<view class="rightTitle">开票时间<span style="color: #323232;">{{detailAny.invoicingtime_text}}</span></view>
</view>
</view>
<u-popup :show="imagesShow" :round="22" mode="center" @close="imagesShow = false" @open="imagesShow = true"
:custom-style="popupStyImg">
<view class="popup_tkall" style="">
<image src="/static/center/close.png" style="width: 64rpx;height: 64rpx;position: absolute;top: 10rpx;right: 20rpx;" @click="imagesShow = false"></image>
<view class="popup_tk">
<view style="width: 20rpx;height: 20rpx;">
<u-icon v-if="imagesIndex != 0" name="arrow-left" @click="changeLeft()"></u-icon>
</view>
<image style="width: 320px;height: 240px;margin: 0rpx 26rpx;" :src="imagesList[imagesIndex]" mode=""></image>
<view style="width: 20rpx;height: 20rpx;">
<u-icon v-if="imagesIndex != iamgesListIndexNum" name="arrow-right" @click="changeRight()"></u-icon>
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
popupStyImg: {
width: '700rpx',
padding: '24rpx 24rpx 42rpx 24rpx',
height: '500rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'start',
alignItems: 'center',
flexColumn: 'column',
backgroundColor: '#f8f8f8'
},
order_nos: '', //
id: 0,
detailList: '', //
detailAny: '', //detail
qrimages: '',
imagesShow:false,
imagesNum:0,
imagesList: [],
imagesIndex:0,
iamgesListIndexNum: 0,
};
},
onLoad(options) {
console.log('options',options.id);
this.id = options.id
console.log('options',this.id);
if(this.id){
this.getOrderInfo()
}
},
// onShow() {
// this.getInvoiceList()
// },
onPullDownRefresh() {
},
onReachBottom() {
},
methods: {
getOrderInfo() {
console.log('id', this.id);
uni.$u.http.get('/api/school.header/applydetail', {
params: {
id: this.id,
}
}).then(res => {
if (res.code == 1) {
this.detailList = res.data.detail.activityorders;//
this.detailAny = res.data.detail;
this.imagesNum = this.detailAny.images.length
this.imagesList = this.detailAny.images
this.iamgesListIndexNum = this.imagesNum -1
console.log('qrimages:', this.qrimages);
console.log('imagesNum:', this.imagesNum);
console.log('detail:', this.detail);
console.log('iamgesListIndexNum:', this.iamgesListIndexNum);
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
}).catch(error => {});
},
checkImages() {
this.imagesIndex = 0
this.imagesShow = true;
},
changeLeft() {
console.log('left');
if(this.imagesIndex > 0) {
this.imagesIndex = this.imagesIndex-1
}
},
changeRight() {
console.log('right');
if(this.imagesIndex < this.iamgesListIndexNum) {
this.imagesIndex = this.imagesIndex + 1
}
},
}
}
</script>
<style lang="scss" scoped>
.container {
width: 100%;
background-color: #f7f7f7;
.info-top {
width: 100%;
height: 260rpx;
background-color: #323232;
// background-image: ;
.info-status {
display: inline;
width: 100%;
justify-content: center;
align-items: center;
color: #bbfc5b;
//margin-top: 60rpx;
position: relative;
top: 110rpx;
.statusFir {
display: flex;
justify-content: center;
align-items: center;
// margin-top: 60rpx;
}
.statusSec {
margin-top: 20rpx;
display: grid;
justify-content: center;
align-items: center;
}
}
}
.infoCon {
display: block;
width: 95%;
height: 506rpx;
background-color: #ffffff;
padding: 30rpx 20rpx;
border-radius: 30rpx 30rpx 0 0;
.conFIr{
width: 96%;
display: flex;
justify-content: space-between;
align-items: center;
.conFir-left {
display: inline;
.leftTitle {
font-size: 28rpx;
font-weight: 400;
color: #9c9c9c;
line-height: 36rpx;
margin-top: 20rpx;
}
}
.conFir-right {
.ringhtImg-text {
background-color: #4d4d4d;
opacity: 0.65;
font-size: 22rpx;
font-weight: 400;
color: #ffffff;
text-align: center;
display: grid;
justify-content: center;
align-items: center;
height: 42rpx;
border-radius: 0rpx 0rpx 14rpx 14rpx;
position: relative;
bottom: 50rpx;
}
}
}
.conSec {
width: 90%;
display: grid;
justify-content: flex-start;
align-items: center;
position: relative;
bottom: 26rpx;
.rightTitle {
font-size: 28rpx;
font-weight: 400;
color: #9c9c9c;
line-height: 36rpx;
margin-top: 20rpx;
}
}
}
.popup_tkall {
display: grid;
justify-content: center;
align-items: center;
// background-color: #ffffff;
.popup_tk {
display: flex;
justify-content: center;
align-items: center;
margin-top: 56rpx;
// font-size: 32rpx;
// font-weight: 500;
// margin: 12rpx 0 24rpx 0;
// text-align: center;
// color: #3D3D3D;
}
}
}
</style>

View File

@ -221,18 +221,18 @@
"navigationBarTitleText": "邀请入驻"
}
},
{
"path": "my/management",
"style": {
"navigationBarTitleText": "课程管理"
}
},
{
"path": "my/ac-management",
"style": {
"navigationBarTitleText": "活动管理"
}
},
// {
// "path": "my/management",
// "style": {
// "navigationBarTitleText": "课程管理"
// }
// },
// {
// "path": "my/ac-management",
// "style": {
// "navigationBarTitleText": "活动管理"
// }
// },
{
"path": "my/help",
"style": {
@ -246,25 +246,25 @@
}
},
{
"path": "my/addManagement",
"style": {
"navigationBarTitleText": "新增课程"
}
},
{
"path": "my/mentList",
"style": {
"navigationBarTitleText": "订单管理"
}
},
// {
// "path": "my/addManagement",
// "style": {
// "navigationBarTitleText": "新增课程"
// }
// },
// {
// "path": "my/mentList",
// "style": {
// "navigationBarTitleText": "订单管理"
// }
// },
{
"path": "my/refund",
"style": {
"navigationBarTitleText": "发起退款"
}
},
// {
// "path": "my/refund",
// "style": {
// "navigationBarTitleText": "发起退款"
// }
// },
{
"path": "center/detail",
"style": {
@ -285,19 +285,19 @@
"navigationBarTitleText": "报名信息"
}
},
{
"path": "center/MechanismDetail",
"style": {
"navigationBarTitleText": "机构详情"
}
},
// {
// "path": "center/MechanismDetail",
// "style": {
// "navigationBarTitleText": "机构详情"
// }
// },
{
"path": "center/orderDetail",
"style": {
"navigationBarTitleText": "订单详情"
}
},
// {
// "path": "center/orderDetail",
// "style": {
// "navigationBarTitleText": "订单详情"
// }
// },
{
"path": "center/applyDetail",
"style": {
@ -352,7 +352,44 @@
"style": {
"navigationBarTitleText": ""
}
}]
},
{
"path": "editAct",
"style": {
"navigationBarTitleText": "编辑活动信息"
}
},
{
"path": "editDraft",
"style": {
"navigationBarTitleText": "编辑草稿箱"
}
},
{
"path": "invoice/invoiceCenter",
"style": {
"navigationBarTitleText": "发票中心"
}
},
{
"path": "invoice/addInvoice",
"style": {
"navigationBarTitleText": "填写发票信息"
}
},
{
"path": "invoice/invoiceInfo",
"style": {
"navigationBarTitleText": "查看发票"
}
},
{
"path": "invoice/addHead",
"style": {
"navigationBarTitleText": "添加发票抬头信息"
}
}
]
}
],
"preloadRule": { //

File diff suppressed because it is too large Load Diff