@rolatech/angular-booking 19.0.0-beta.11 → 19.0.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rolatech-angular-booking.mjs +349 -1
- package/fesm2022/rolatech-angular-booking.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/components/booking-item/booking-item.component.d.ts +8 -0
- package/lib/components/booking-return-item/booking-return-item.component.d.ts +5 -0
- package/lib/components/booking-return-request/booking-return-request.component.d.ts +15 -0
- package/lib/components/index.d.ts +5 -0
- package/lib/components/period-item/period-item.component.d.ts +30 -0
- package/lib/components/session-item/session-item.component.d.ts +28 -0
- package/lib/interfaces/booking.d.ts +61 -0
- package/lib/interfaces/category.d.ts +14 -0
- package/lib/interfaces/facility.d.ts +12 -0
- package/lib/interfaces/index.d.ts +7 -0
- package/lib/interfaces/media.d.ts +9 -0
- package/lib/interfaces/partner.d.ts +32 -0
- package/lib/interfaces/resource-variant.d.ts +6 -0
- package/lib/interfaces/resource.d.ts +86 -0
- package/package.json +1 -1
|
@@ -1,8 +1,356 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, input, output, model } from '@angular/core';
|
|
3
|
+
import { CommonModule, DatePipe } from '@angular/common';
|
|
4
|
+
import * as i3 from '@angular/forms';
|
|
5
|
+
import { FormsModule } from '@angular/forms';
|
|
6
|
+
import * as i1 from '@angular/material/checkbox';
|
|
7
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
+
import { map } from 'lodash';
|
|
9
|
+
import { MomentDateAdapter } from '@angular/material-moment-adapter';
|
|
10
|
+
import * as i5 from '@angular/material/core';
|
|
11
|
+
import { MatOptionModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
12
|
+
import * as i6 from '@angular/material/button';
|
|
13
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
14
|
+
import * as i4 from '@angular/material/select';
|
|
15
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
16
|
+
import * as i2 from '@angular/material/input';
|
|
17
|
+
import { MatInputModule } from '@angular/material/input';
|
|
18
|
+
import * as i1$1 from '@angular/material/form-field';
|
|
19
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
20
|
+
import moment from 'moment';
|
|
21
|
+
import * as i4$1 from '@angular/material/datepicker';
|
|
22
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
23
|
+
import * as i1$2 from '@angular/material/icon';
|
|
24
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
25
|
+
|
|
1
26
|
const bookingRoutes = [];
|
|
2
27
|
|
|
28
|
+
class BookingReturnItemComponent {
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: BookingReturnItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.2", type: BookingReturnItemComponent, isStandalone: true, selector: "rolatech-booking-return-item", ngImport: i0, template: "<p>booking-return-item works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: BookingReturnItemComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{ selector: 'rolatech-booking-return-item', imports: [CommonModule], template: "<p>booking-return-item works!</p>\n" }]
|
|
35
|
+
}] });
|
|
36
|
+
|
|
37
|
+
class BookingReturnRequestComponent {
|
|
38
|
+
items = input.required();
|
|
39
|
+
allComplete = false;
|
|
40
|
+
total = 0;
|
|
41
|
+
selectedItems;
|
|
42
|
+
output = output();
|
|
43
|
+
updateAllComplete() {
|
|
44
|
+
this.allComplete = this.items() != null && this.items().every((t) => t.completed);
|
|
45
|
+
}
|
|
46
|
+
someComplete() {
|
|
47
|
+
if (this.items() == null) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return this.items().filter((t) => t.completed).length > 0 && !this.allComplete;
|
|
51
|
+
}
|
|
52
|
+
setAll(completed) {
|
|
53
|
+
this.allComplete = completed;
|
|
54
|
+
if (this.items() == null) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.items().forEach((t) => (t.completed = completed));
|
|
58
|
+
}
|
|
59
|
+
ngDoCheck() {
|
|
60
|
+
const filterItems = this.items().filter((item) => item.completed);
|
|
61
|
+
const items = map(filterItems, 'id');
|
|
62
|
+
this.output.emit(items);
|
|
63
|
+
}
|
|
64
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: BookingReturnRequestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
65
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: BookingReturnRequestComponent, isStandalone: true, selector: "rolatech-booking-return-request", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { output: "output" }, ngImport: i0, template: "<div>\n <div class=\"flex justify-between items-center\">\n <div class=\"flex items-center gap-3\">\n <mat-checkbox [checked]=\"allComplete\" [indeterminate]=\"someComplete()\" (change)=\"setAll($event.checked)\"> </mat-checkbox>\n <div>\u5168\u9009</div>\n </div>\n <div>\u9000\u6B3E\u91D1\u989D: \u00A5{{ total.toFixed(2) }}</div>\n </div>\n @for (item of items(); track item) {\n <div class=\"flex flex-col\">\n <div class=\"hover:bg-[--rt-raised-background] cursor-pointer py-2\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex flex-row w-full\">\n <mat-checkbox [(ngModel)]=\"item.completed\" (ngModelChange)=\"updateAllComplete()\"> </mat-checkbox>\n <div class=\"w-2/5 sm:w-1/4 bg-[--rt-raised-background]\">\n @if (item.variant) {\n <img class=\"w-full h-full object-cover sm:aspect-video\" [src]=\"item.variant.classroom.media[0].url\" alt />\n }\n </div>\n <div class=\"w-3/5 sm:w-3/4 ml-3 flex flex-col py-1\">\n <span class=\"font-bold break-words line-clamp-2\">\u6559\u5BA4: {{ item.variant.classroom.name }}</span>\n <span class=\"font-thin text-md\">\u53EF\u7528\u65F6\u95F4: {{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
66
|
+
}
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: BookingReturnRequestComponent, decorators: [{
|
|
68
|
+
type: Component,
|
|
69
|
+
args: [{ selector: 'rolatech-booking-return-request', imports: [MatCheckboxModule, FormsModule], template: "<div>\n <div class=\"flex justify-between items-center\">\n <div class=\"flex items-center gap-3\">\n <mat-checkbox [checked]=\"allComplete\" [indeterminate]=\"someComplete()\" (change)=\"setAll($event.checked)\"> </mat-checkbox>\n <div>\u5168\u9009</div>\n </div>\n <div>\u9000\u6B3E\u91D1\u989D: \u00A5{{ total.toFixed(2) }}</div>\n </div>\n @for (item of items(); track item) {\n <div class=\"flex flex-col\">\n <div class=\"hover:bg-[--rt-raised-background] cursor-pointer py-2\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex flex-row w-full\">\n <mat-checkbox [(ngModel)]=\"item.completed\" (ngModelChange)=\"updateAllComplete()\"> </mat-checkbox>\n <div class=\"w-2/5 sm:w-1/4 bg-[--rt-raised-background]\">\n @if (item.variant) {\n <img class=\"w-full h-full object-cover sm:aspect-video\" [src]=\"item.variant.classroom.media[0].url\" alt />\n }\n </div>\n <div class=\"w-3/5 sm:w-3/4 ml-3 flex flex-col py-1\">\n <span class=\"font-bold break-words line-clamp-2\">\u6559\u5BA4: {{ item.variant.classroom.name }}</span>\n <span class=\"font-thin text-md\">\u53EF\u7528\u65F6\u95F4: {{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n" }]
|
|
70
|
+
}] });
|
|
71
|
+
|
|
72
|
+
var ResourceStatus;
|
|
73
|
+
(function (ResourceStatus) {
|
|
74
|
+
ResourceStatus[ResourceStatus["DRAFT"] = '草稿'] = "DRAFT";
|
|
75
|
+
ResourceStatus[ResourceStatus["AWAITING"] = '审核中'] = "AWAITING";
|
|
76
|
+
ResourceStatus[ResourceStatus["PENDING"] = '审核中'] = "PENDING";
|
|
77
|
+
ResourceStatus[ResourceStatus["ACTIVE"] = '已发布'] = "ACTIVE";
|
|
78
|
+
ResourceStatus[ResourceStatus["ACCEPTED"] = '已通过'] = "ACCEPTED";
|
|
79
|
+
ResourceStatus[ResourceStatus["DELETED"] = '已删除'] = "DELETED";
|
|
80
|
+
})(ResourceStatus || (ResourceStatus = {}));
|
|
81
|
+
var ResourceType;
|
|
82
|
+
(function (ResourceType) {
|
|
83
|
+
ResourceType[ResourceType["CLASSROOM"] = '教室'] = "CLASSROOM";
|
|
84
|
+
})(ResourceType || (ResourceType = {}));
|
|
85
|
+
const PeriodDate = [
|
|
86
|
+
'00:00',
|
|
87
|
+
'00:15',
|
|
88
|
+
'00:30',
|
|
89
|
+
'00:45',
|
|
90
|
+
'01:00',
|
|
91
|
+
'01:15',
|
|
92
|
+
'01:30',
|
|
93
|
+
'01:45',
|
|
94
|
+
'02:00',
|
|
95
|
+
'02:15',
|
|
96
|
+
'02:30',
|
|
97
|
+
'02:45',
|
|
98
|
+
'03:00',
|
|
99
|
+
'03:15',
|
|
100
|
+
'03:30',
|
|
101
|
+
'03:45',
|
|
102
|
+
'04:00',
|
|
103
|
+
'04:15',
|
|
104
|
+
'04:30',
|
|
105
|
+
'04:45',
|
|
106
|
+
'05:00',
|
|
107
|
+
'05:15',
|
|
108
|
+
'05:30',
|
|
109
|
+
'05:45',
|
|
110
|
+
'06:00',
|
|
111
|
+
'06:15',
|
|
112
|
+
'06:30',
|
|
113
|
+
'06:45',
|
|
114
|
+
'07:00',
|
|
115
|
+
'07:15',
|
|
116
|
+
'07:30',
|
|
117
|
+
'07:45',
|
|
118
|
+
'08:00',
|
|
119
|
+
'08:15',
|
|
120
|
+
'08:30',
|
|
121
|
+
'08:45',
|
|
122
|
+
'09:00',
|
|
123
|
+
'09:15',
|
|
124
|
+
'09:30',
|
|
125
|
+
'09:45',
|
|
126
|
+
'10:00',
|
|
127
|
+
'10:15',
|
|
128
|
+
'10:30',
|
|
129
|
+
'10:45',
|
|
130
|
+
'11:00',
|
|
131
|
+
'11:15',
|
|
132
|
+
'11:30',
|
|
133
|
+
'11:45',
|
|
134
|
+
'12:00',
|
|
135
|
+
'12:15',
|
|
136
|
+
'12:30',
|
|
137
|
+
'12:45',
|
|
138
|
+
'13:00',
|
|
139
|
+
'13:15',
|
|
140
|
+
'13:30',
|
|
141
|
+
'13:45',
|
|
142
|
+
'14:00',
|
|
143
|
+
'14:15',
|
|
144
|
+
'14:30',
|
|
145
|
+
'14:45',
|
|
146
|
+
'15:00',
|
|
147
|
+
'15:15',
|
|
148
|
+
'15:30',
|
|
149
|
+
'15:45',
|
|
150
|
+
'16:00',
|
|
151
|
+
'16:15',
|
|
152
|
+
'16:30',
|
|
153
|
+
'16:45',
|
|
154
|
+
'17:00',
|
|
155
|
+
'17:15',
|
|
156
|
+
'17:30',
|
|
157
|
+
'17:45',
|
|
158
|
+
'18:00',
|
|
159
|
+
'18:15',
|
|
160
|
+
'18:30',
|
|
161
|
+
'18:45',
|
|
162
|
+
'19:00',
|
|
163
|
+
'19:15',
|
|
164
|
+
'19:30',
|
|
165
|
+
'19:45',
|
|
166
|
+
'20:00',
|
|
167
|
+
'20:15',
|
|
168
|
+
'20:30',
|
|
169
|
+
'20:45',
|
|
170
|
+
'21:00',
|
|
171
|
+
'21:15',
|
|
172
|
+
'21:30',
|
|
173
|
+
'21:45',
|
|
174
|
+
'22:00',
|
|
175
|
+
'22:15',
|
|
176
|
+
'22:30',
|
|
177
|
+
'22:45',
|
|
178
|
+
'23:00',
|
|
179
|
+
'23:15',
|
|
180
|
+
'23:30',
|
|
181
|
+
'23:45',
|
|
182
|
+
];
|
|
183
|
+
|
|
184
|
+
const MY_FORMATS$1 = {
|
|
185
|
+
parse: {
|
|
186
|
+
dateInput: 'YYYY-MM-DD',
|
|
187
|
+
},
|
|
188
|
+
display: {
|
|
189
|
+
dateInput: 'YYYY-MM-DD',
|
|
190
|
+
monthYearLabel: 'MMM YYYY',
|
|
191
|
+
dateA11yLabel: 'YYYY-MM-DD',
|
|
192
|
+
monthYearA11yLabel: 'MMMM YYYY',
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
class PeriodItemComponent {
|
|
196
|
+
period = model.required();
|
|
197
|
+
actions = input(false);
|
|
198
|
+
delete = output();
|
|
199
|
+
save = output();
|
|
200
|
+
output = output();
|
|
201
|
+
date = PeriodDate;
|
|
202
|
+
ngOnInit() {
|
|
203
|
+
// this.period.startTime = moment(this.period.startTime).format('HH:mm');
|
|
204
|
+
// this.period.endTime = moment(this.period.endTime).format('HH:mm');
|
|
205
|
+
}
|
|
206
|
+
startTimeChanged(event) { }
|
|
207
|
+
endTimeChanged(event) { }
|
|
208
|
+
onSave(period) {
|
|
209
|
+
this.save.emit(period);
|
|
210
|
+
}
|
|
211
|
+
onDelete(period) {
|
|
212
|
+
this.delete.emit(period);
|
|
213
|
+
}
|
|
214
|
+
ngDoCheck() {
|
|
215
|
+
this.output.emit(this.period());
|
|
216
|
+
}
|
|
217
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: PeriodItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
218
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: PeriodItemComponent, isStandalone: true, selector: "rolatech-period-item", inputs: { period: { classPropertyName: "period", publicName: "period", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { period: "periodChange", delete: "delete", save: "save", output: "output" }, providers: [
|
|
219
|
+
{
|
|
220
|
+
provide: DateAdapter,
|
|
221
|
+
useClass: MomentDateAdapter,
|
|
222
|
+
deps: [MAT_DATE_LOCALE],
|
|
223
|
+
},
|
|
224
|
+
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS$1 },
|
|
225
|
+
DatePipe,
|
|
226
|
+
], ngImport: i0, template: "<div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"period().name\" name=\"name\" required />\n </mat-form-field>\n <div class=\"flex flex-row gap-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u5F00\u59CB\u65F6\u95F4</mat-label>\n <mat-select [(ngModel)]=\"period().startTime\" (selectionChange)=\"startTimeChanged($event)\" required readonly>\n @for (d of date; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7ED3\u675F\u65F6\u95F4</mat-label>\n <mat-select [(ngModel)]=\"period().endTime\" (selectionChange)=\"endTimeChanged($event)\" required readonly>\n @for (d of date; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button (click)=\"onDelete(period())\">\u5220\u9664</button>\n <button mat-flat-button (click)=\"onSave(period())\">\u4FDD\u5B58</button>\n </div>\n }\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
|
|
227
|
+
}
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: PeriodItemComponent, decorators: [{
|
|
229
|
+
type: Component,
|
|
230
|
+
args: [{ selector: 'rolatech-period-item', providers: [
|
|
231
|
+
{
|
|
232
|
+
provide: DateAdapter,
|
|
233
|
+
useClass: MomentDateAdapter,
|
|
234
|
+
deps: [MAT_DATE_LOCALE],
|
|
235
|
+
},
|
|
236
|
+
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS$1 },
|
|
237
|
+
DatePipe,
|
|
238
|
+
], imports: [MatFormFieldModule, MatInputModule, FormsModule, MatSelectModule, MatOptionModule, MatButtonModule], template: "<div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"period().name\" name=\"name\" required />\n </mat-form-field>\n <div class=\"flex flex-row gap-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u5F00\u59CB\u65F6\u95F4</mat-label>\n <mat-select [(ngModel)]=\"period().startTime\" (selectionChange)=\"startTimeChanged($event)\" required readonly>\n @for (d of date; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7ED3\u675F\u65F6\u95F4</mat-label>\n <mat-select [(ngModel)]=\"period().endTime\" (selectionChange)=\"endTimeChanged($event)\" required readonly>\n @for (d of date; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button (click)=\"onDelete(period())\">\u5220\u9664</button>\n <button mat-flat-button (click)=\"onSave(period())\">\u4FDD\u5B58</button>\n </div>\n }\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
239
|
+
}] });
|
|
240
|
+
|
|
241
|
+
const MY_FORMATS = {
|
|
242
|
+
parse: {
|
|
243
|
+
dateInput: 'YYYY-MM-DD',
|
|
244
|
+
},
|
|
245
|
+
display: {
|
|
246
|
+
dateInput: 'YYYY-MM-DD',
|
|
247
|
+
monthYearLabel: 'MMM YYYY',
|
|
248
|
+
dateA11yLabel: 'YYYY-MM-DD',
|
|
249
|
+
monthYearA11yLabel: 'MMMM YYYY',
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
class SessionItemComponent {
|
|
253
|
+
session = model.required();
|
|
254
|
+
actions = input(false);
|
|
255
|
+
delete = output();
|
|
256
|
+
save = output();
|
|
257
|
+
date = PeriodDate;
|
|
258
|
+
output = output();
|
|
259
|
+
ngOnInit() {
|
|
260
|
+
this.session().startDate = moment(this.session().startDate).format('YYYY-MM-DD');
|
|
261
|
+
this.session().endDate = moment(this.session().endDate).format('YYYY-MM-DD');
|
|
262
|
+
}
|
|
263
|
+
onSave(session) {
|
|
264
|
+
this.save.emit(session);
|
|
265
|
+
}
|
|
266
|
+
onDelete(session) {
|
|
267
|
+
this.delete.emit(session);
|
|
268
|
+
}
|
|
269
|
+
ngDoCheck() {
|
|
270
|
+
this.output.emit(this.session());
|
|
271
|
+
}
|
|
272
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: SessionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
273
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: SessionItemComponent, isStandalone: true, selector: "rolatech-session-item", inputs: { session: { classPropertyName: "session", publicName: "session", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { session: "sessionChange", delete: "delete", save: "save", output: "output" }, providers: [
|
|
274
|
+
{
|
|
275
|
+
provide: DateAdapter,
|
|
276
|
+
useClass: MomentDateAdapter,
|
|
277
|
+
deps: [MAT_DATE_LOCALE],
|
|
278
|
+
},
|
|
279
|
+
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
|
|
280
|
+
DatePipe,
|
|
281
|
+
], ngImport: i0, template: "<div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"session().name\" name=\"name\" required />\n </mat-form-field>\n <div class=\"flex flex-row gap-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u5F00\u59CB\u65E5\u671F</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n (focus)=\"picker.open()\"\n name=\"startAt\"\n [(ngModel)]=\"session().startDate\"\n (dateInput)=\"session().startDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7ED3\u675F\u65E5\u671F</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker2\"\n name=\"endAt\"\n (focus)=\"picker2.open()\"\n [(ngModel)]=\"session().endDate\"\n (dateInput)=\"session().endDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </mat-form-field>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button (click)=\"onDelete(session())\">\u5220\u9664</button>\n <button mat-flat-button (click)=\"onSave(session())\">\u4FDD\u5B58</button>\n </div>\n }\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
|
|
282
|
+
}
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: SessionItemComponent, decorators: [{
|
|
284
|
+
type: Component,
|
|
285
|
+
args: [{ selector: 'rolatech-session-item', providers: [
|
|
286
|
+
{
|
|
287
|
+
provide: DateAdapter,
|
|
288
|
+
useClass: MomentDateAdapter,
|
|
289
|
+
deps: [MAT_DATE_LOCALE],
|
|
290
|
+
},
|
|
291
|
+
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
|
|
292
|
+
DatePipe,
|
|
293
|
+
], imports: [MatFormFieldModule, MatInputModule, FormsModule, MatDatepickerModule, MatButtonModule], template: "<div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"session().name\" name=\"name\" required />\n </mat-form-field>\n <div class=\"flex flex-row gap-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u5F00\u59CB\u65E5\u671F</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n (focus)=\"picker.open()\"\n name=\"startAt\"\n [(ngModel)]=\"session().startDate\"\n (dateInput)=\"session().startDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>\u7ED3\u675F\u65E5\u671F</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker2\"\n name=\"endAt\"\n (focus)=\"picker2.open()\"\n [(ngModel)]=\"session().endDate\"\n (dateInput)=\"session().endDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </mat-form-field>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button (click)=\"onDelete(session())\">\u5220\u9664</button>\n <button mat-flat-button (click)=\"onSave(session())\">\u4FDD\u5B58</button>\n </div>\n }\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
294
|
+
}] });
|
|
295
|
+
|
|
296
|
+
var BookingStatus;
|
|
297
|
+
(function (BookingStatus) {
|
|
298
|
+
BookingStatus[BookingStatus["CREATED"] = '待付款'] = "CREATED";
|
|
299
|
+
BookingStatus[BookingStatus["PAID"] = '已支付'] = "PAID";
|
|
300
|
+
BookingStatus[BookingStatus["COMPLETED"] = '已完成'] = "COMPLETED";
|
|
301
|
+
BookingStatus[BookingStatus["CLOSED"] = '交易关闭'] = "CLOSED";
|
|
302
|
+
BookingStatus[BookingStatus["CANCELED"] = '交易取消'] = "CANCELED";
|
|
303
|
+
BookingStatus[BookingStatus["REFUNDED"] = '已退款'] = "REFUNDED";
|
|
304
|
+
})(BookingStatus || (BookingStatus = {}));
|
|
305
|
+
var BookingReturnStatus;
|
|
306
|
+
(function (BookingReturnStatus) {
|
|
307
|
+
BookingReturnStatus[BookingReturnStatus["CREATED"] = '等待审核'] = "CREATED";
|
|
308
|
+
BookingReturnStatus[BookingReturnStatus["CANCELED"] = '用户取消'] = "CANCELED";
|
|
309
|
+
BookingReturnStatus[BookingReturnStatus["APPROVED"] = '已通过'] = "APPROVED";
|
|
310
|
+
BookingReturnStatus[BookingReturnStatus["REJECTED"] = '已拒绝'] = "REJECTED";
|
|
311
|
+
BookingReturnStatus[BookingReturnStatus["PROCESSING"] = '平台处理中'] = "PROCESSING";
|
|
312
|
+
BookingReturnStatus[BookingReturnStatus["RETURNED"] = '已退款'] = "RETURNED";
|
|
313
|
+
})(BookingReturnStatus || (BookingReturnStatus = {}));
|
|
314
|
+
var BookingItemStatus;
|
|
315
|
+
(function (BookingItemStatus) {
|
|
316
|
+
BookingItemStatus[BookingItemStatus["CREATED"] = '创建'] = "CREATED";
|
|
317
|
+
BookingItemStatus[BookingItemStatus["CANCELED"] = '已取消'] = "CANCELED";
|
|
318
|
+
BookingItemStatus[BookingItemStatus["CLOSED"] = '已关闭'] = "CLOSED";
|
|
319
|
+
BookingItemStatus[BookingItemStatus["RETURN_REQUESTED"] = '等待审核'] = "RETURN_REQUESTED";
|
|
320
|
+
BookingItemStatus[BookingItemStatus["RETURN_APPROVED"] = '商家同意退款'] = "RETURN_APPROVED";
|
|
321
|
+
BookingItemStatus[BookingItemStatus["RETURN_REJECTED"] = '商家拒绝退款'] = "RETURN_REJECTED";
|
|
322
|
+
BookingItemStatus[BookingItemStatus["RETURN_PROCESSING"] = '退款处理中'] = "RETURN_PROCESSING";
|
|
323
|
+
BookingItemStatus[BookingItemStatus["REFUNDED"] = '已退款'] = "REFUNDED";
|
|
324
|
+
})(BookingItemStatus || (BookingItemStatus = {}));
|
|
325
|
+
var BookingTimelineStatus;
|
|
326
|
+
(function (BookingTimelineStatus) {
|
|
327
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_CREATE"] = '交易创建'] = "BOOKING_CREATE";
|
|
328
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_CLOSED"] = '交易关闭'] = "BOOKING_CLOSED";
|
|
329
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_CANCELED"] = '交易取消'] = "BOOKING_CANCELED";
|
|
330
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_PAID"] = '订单已支付'] = "BOOKING_PAID";
|
|
331
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_REFUNDED"] = '订单已退款'] = "BOOKING_REFUNDED";
|
|
332
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_COMPLETED"] = '订单已完成'] = "BOOKING_COMPLETED";
|
|
333
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_RETURN_REQUESTED"] = '退款申请'] = "BOOKING_RETURN_REQUESTED";
|
|
334
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_RETURN_APPROVED"] = '商家同意退款'] = "BOOKING_RETURN_APPROVED";
|
|
335
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_RETURN_REJECTED"] = '商家拒绝退款'] = "BOOKING_RETURN_REJECTED";
|
|
336
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_RETURN_PROCESSING"] = '退款处理中'] = "BOOKING_RETURN_PROCESSING";
|
|
337
|
+
BookingTimelineStatus[BookingTimelineStatus["BOOKING_RETURN_REFUNDED"] = '退款处理完成,已入账'] = "BOOKING_RETURN_REFUNDED";
|
|
338
|
+
})(BookingTimelineStatus || (BookingTimelineStatus = {}));
|
|
339
|
+
|
|
340
|
+
class BookingItemComponent {
|
|
341
|
+
booking = input.required();
|
|
342
|
+
status = BookingStatus;
|
|
343
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: BookingItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
344
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: BookingItemComponent, isStandalone: true, selector: "rolatech-booking-item", inputs: { booking: { classPropertyName: "booking", publicName: "booking", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col p-3 hover:bg-[--rt-raised-background] cursor-pointer\">\n <div class=\"flex justify-between w-full\">\n <span>\u9884\u8BA2\u53F7: {{ booking().bookingNo }}</span>\n <span class=\"font-medium text-sm\">{{ status[booking().status] }}</span>\n </div>\n @if (booking().product) {\n <div class=\"flex items-center justify-between\">\n <div>\n <span class=\"font-bold break-words line-clamp-2\">\u5546\u54C1: {{ booking().product.name }}</span>\n @if (booking().items) {\n <span class=\"font-bold break-words line-clamp-2\">\u6559\u5BA4: {{ booking().items[0].variant.classroom.name }}</span>\n }\n <span class=\"mt-2 text-md\">\u91D1\u989D: \u00A5{{ booking().total / 100 }}</span>\n </div>\n <div class=\"pl-2\">\n <mat-icon>navigate_next</mat-icon>\n </div>\n </div>\n }\n</div>\n<hr />\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
345
|
+
}
|
|
346
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: BookingItemComponent, decorators: [{
|
|
347
|
+
type: Component,
|
|
348
|
+
args: [{ selector: 'rolatech-booking-item', imports: [MatIconModule], template: "<div class=\"flex flex-col p-3 hover:bg-[--rt-raised-background] cursor-pointer\">\n <div class=\"flex justify-between w-full\">\n <span>\u9884\u8BA2\u53F7: {{ booking().bookingNo }}</span>\n <span class=\"font-medium text-sm\">{{ status[booking().status] }}</span>\n </div>\n @if (booking().product) {\n <div class=\"flex items-center justify-between\">\n <div>\n <span class=\"font-bold break-words line-clamp-2\">\u5546\u54C1: {{ booking().product.name }}</span>\n @if (booking().items) {\n <span class=\"font-bold break-words line-clamp-2\">\u6559\u5BA4: {{ booking().items[0].variant.classroom.name }}</span>\n }\n <span class=\"mt-2 text-md\">\u91D1\u989D: \u00A5{{ booking().total / 100 }}</span>\n </div>\n <div class=\"pl-2\">\n <mat-icon>navigate_next</mat-icon>\n </div>\n </div>\n }\n</div>\n<hr />\n" }]
|
|
349
|
+
}] });
|
|
350
|
+
|
|
3
351
|
/**
|
|
4
352
|
* Generated bundle index. Do not edit.
|
|
5
353
|
*/
|
|
6
354
|
|
|
7
|
-
export { bookingRoutes };
|
|
355
|
+
export { BookingItemComponent, BookingItemStatus, BookingReturnItemComponent, BookingReturnRequestComponent, BookingReturnStatus, BookingStatus, BookingTimelineStatus, PeriodDate, PeriodItemComponent, ResourceStatus, ResourceType, SessionItemComponent, bookingRoutes };
|
|
8
356
|
//# sourceMappingURL=rolatech-angular-booking.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rolatech-angular-booking.mjs","sources":["../../../../packages/angular-booking/src/lib/pages/booking.routes.ts","../../../../packages/angular-booking/src/rolatech-angular-booking.ts"],"sourcesContent":["export const bookingRoutes = [];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAO,MAAM,aAAa,GAAG;;ACA7B;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"rolatech-angular-booking.mjs","sources":["../../../../packages/angular-booking/src/lib/pages/booking.routes.ts","../../../../packages/angular-booking/src/lib/components/booking-return-item/booking-return-item.component.ts","../../../../packages/angular-booking/src/lib/components/booking-return-item/booking-return-item.component.html","../../../../packages/angular-booking/src/lib/components/booking-return-request/booking-return-request.component.ts","../../../../packages/angular-booking/src/lib/components/booking-return-request/booking-return-request.component.html","../../../../packages/angular-booking/src/lib/interfaces/resource.ts","../../../../packages/angular-booking/src/lib/components/period-item/period-item.component.ts","../../../../packages/angular-booking/src/lib/components/period-item/period-item.component.html","../../../../packages/angular-booking/src/lib/components/session-item/session-item.component.ts","../../../../packages/angular-booking/src/lib/components/session-item/session-item.component.html","../../../../packages/angular-booking/src/lib/interfaces/booking.ts","../../../../packages/angular-booking/src/lib/components/booking-item/booking-item.component.ts","../../../../packages/angular-booking/src/lib/components/booking-item/booking-item.component.html","../../../../packages/angular-booking/src/rolatech-angular-booking.ts"],"sourcesContent":["export const bookingRoutes = [];\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-booking-return-item',\n imports: [CommonModule],\n templateUrl: './booking-return-item.component.html',\n styleUrl: './booking-return-item.component.scss',\n})\nexport class BookingReturnItemComponent {}\n","<p>booking-return-item works!</p>\n","import { Component, DoCheck, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { map } from 'lodash';\n\n@Component({\n selector: 'rolatech-booking-return-request',\n imports: [MatCheckboxModule, FormsModule],\n templateUrl: './booking-return-request.component.html',\n styleUrl: './booking-return-request.component.scss',\n})\nexport class BookingReturnRequestComponent implements DoCheck {\n items = input.required<any>();\n allComplete = false;\n total = 0;\n selectedItems: any;\n output = output<any>();\n\n updateAllComplete() {\n this.allComplete = this.items() != null && this.items().every((t: any) => t.completed);\n }\n someComplete(): boolean {\n if (this.items() == null) {\n return false;\n }\n return this.items().filter((t: any) => t.completed).length > 0 && !this.allComplete;\n }\n\n setAll(completed: boolean) {\n this.allComplete = completed;\n if (this.items() == null) {\n return;\n }\n this.items().forEach((t: any) => (t.completed = completed));\n }\n\n ngDoCheck(): void {\n const filterItems = this.items().filter((item: any) => item.completed);\n const items = map(filterItems, 'id');\n this.output.emit(items);\n }\n}\n","<div>\n <div class=\"flex justify-between items-center\">\n <div class=\"flex items-center gap-3\">\n <mat-checkbox [checked]=\"allComplete\" [indeterminate]=\"someComplete()\" (change)=\"setAll($event.checked)\"> </mat-checkbox>\n <div>全选</div>\n </div>\n <div>退款金额: ¥{{ total.toFixed(2) }}</div>\n </div>\n @for (item of items(); track item) {\n <div class=\"flex flex-col\">\n <div class=\"hover:bg-[--rt-raised-background] cursor-pointer py-2\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex flex-row w-full\">\n <mat-checkbox [(ngModel)]=\"item.completed\" (ngModelChange)=\"updateAllComplete()\"> </mat-checkbox>\n <div class=\"w-2/5 sm:w-1/4 bg-[--rt-raised-background]\">\n @if (item.variant) {\n <img class=\"w-full h-full object-cover sm:aspect-video\" [src]=\"item.variant.classroom.media[0].url\" alt />\n }\n </div>\n <div class=\"w-3/5 sm:w-3/4 ml-3 flex flex-col py-1\">\n <span class=\"font-bold break-words line-clamp-2\">教室: {{ item.variant.classroom.name }}</span>\n <span class=\"font-thin text-md\">可用时间: {{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Booking } from './booking';\nimport { Category } from './category';\nimport { Facility } from './facility';\nimport { Media } from './media';\n\nexport interface Resource {\n id: string;\n createdAt: string;\n updatedAt: string;\n name: number;\n description: string;\n status: ResourceStatus;\n type: ResourceType;\n price: number;\n partnerId: string;\n location?: ResourceLocation;\n bookings: Booking[];\n sessions: ResourceSession[];\n media: Media[];\n categories: Category[];\n details: ResourceDetail[];\n facilities?: Facility[];\n periods: any;\n}\nexport enum ResourceStatus {\n DRAFT = <any>'草稿',\n AWAITING = <any>'审核中',\n PENDING = <any>'审核中',\n ACTIVE = <any>'已发布',\n ACCEPTED = <any>'已通过',\n DELETED = <any>'已删除',\n}\nexport enum ResourceType {\n CLASSROOM = <any>'教室',\n}\nexport interface ResourceSession {\n id?: string;\n name: string;\n startDate: string;\n endDate: string;\n}\nexport interface ResourcePeriod {\n id?: string;\n name: string;\n startTime: string;\n endTime: string;\n}\nexport interface ResourceRate {\n userId: string;\n rate: number;\n}\nexport interface ResourceLocation {\n id: string;\n name: string;\n contact: string;\n phone: string;\n province: string;\n city: string;\n county: string;\n town: string;\n address: string;\n detail: string;\n latitude: string;\n longitude: string;\n}\nexport interface ResourceDetail {\n id: string;\n title: string;\n description: string;\n content: string;\n media: Media[];\n isUploading?: boolean;\n}\nexport interface ResourceClassroom {\n id: string;\n name: string;\n capacity: number;\n area: number;\n contact: string;\n phone: string;\n notes: string;\n facilities?: Facility[];\n media: Media[];\n productId?: string;\n isUploading?: boolean;\n}\nexport const PeriodDate = [\n '00:00',\n '00:15',\n '00:30',\n '00:45',\n\n '01:00',\n '01:15',\n '01:30',\n '01:45',\n\n '02:00',\n '02:15',\n '02:30',\n '02:45',\n '03:00',\n '03:15',\n '03:30',\n '03:45',\n\n '04:00',\n '04:15',\n '04:30',\n '04:45',\n '05:00',\n '05:15',\n '05:30',\n '05:45',\n\n '06:00',\n '06:15',\n '06:30',\n '06:45',\n '07:00',\n '07:15',\n '07:30',\n '07:45',\n\n '08:00',\n '08:15',\n '08:30',\n '08:45',\n '09:00',\n '09:15',\n '09:30',\n '09:45',\n\n '10:00',\n '10:15',\n '10:30',\n '10:45',\n '11:00',\n '11:15',\n '11:30',\n '11:45',\n\n '12:00',\n '12:15',\n '12:30',\n '12:45',\n '13:00',\n '13:15',\n '13:30',\n '13:45',\n\n '14:00',\n '14:15',\n '14:30',\n '14:45',\n '15:00',\n '15:15',\n '15:30',\n '15:45',\n\n '16:00',\n '16:15',\n '16:30',\n '16:45',\n '17:00',\n '17:15',\n '17:30',\n '17:45',\n\n '18:00',\n '18:15',\n '18:30',\n '18:45',\n '19:00',\n '19:15',\n '19:30',\n '19:45',\n\n '20:00',\n '20:15',\n '20:30',\n '20:45',\n '21:00',\n '21:15',\n '21:30',\n '21:45',\n\n '22:00',\n '22:15',\n '22:30',\n '22:45',\n '23:00',\n '23:15',\n '23:30',\n '23:45',\n];\n","import { DatePipe } from '@angular/common';\nimport { Component, DoCheck, OnInit, input, model, output } from '@angular/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS, MatOptionModule } from '@angular/material/core';\nimport moment from 'moment';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { ResourcePeriod, PeriodDate } from '../../interfaces/resource';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n@Component({\n selector: 'rolatech-period-item',\n templateUrl: './period-item.component.html',\n styleUrls: ['./period-item.component.scss'],\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n DatePipe,\n ],\n imports: [MatFormFieldModule, MatInputModule, FormsModule, MatSelectModule, MatOptionModule, MatButtonModule],\n})\nexport class PeriodItemComponent implements OnInit, DoCheck {\n period = model.required<ResourcePeriod>();\n actions = input<boolean>(false);\n delete = output<ResourcePeriod>();\n save = output<ResourcePeriod>();\n output = output<any>();\n date = PeriodDate;\n\n ngOnInit(): void {\n // this.period.startTime = moment(this.period.startTime).format('HH:mm');\n // this.period.endTime = moment(this.period.endTime).format('HH:mm');\n }\n startTimeChanged(event: any) {}\n endTimeChanged(event: any) {}\n\n onSave(period: ResourcePeriod) {\n this.save.emit(period);\n }\n onDelete(period: ResourcePeriod) {\n this.delete.emit(period);\n }\n ngDoCheck(): void {\n this.output.emit(this.period());\n }\n}\n","<div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> 名称 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"period().name\" name=\"name\" required />\n </mat-form-field>\n <div class=\"flex flex-row gap-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>开始时间</mat-label>\n <mat-select [(ngModel)]=\"period().startTime\" (selectionChange)=\"startTimeChanged($event)\" required readonly>\n @for (d of date; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>结束时间</mat-label>\n <mat-select [(ngModel)]=\"period().endTime\" (selectionChange)=\"endTimeChanged($event)\" required readonly>\n @for (d of date; track d) {\n <mat-option [value]=\"d\">\n {{ d }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button (click)=\"onDelete(period())\">删除</button>\n <button mat-flat-button (click)=\"onSave(period())\">保存</button>\n </div>\n }\n</div>\n","import { Component, DoCheck, OnInit, input, model, output } from '@angular/core';\nimport moment from 'moment';\nimport { DatePipe } from '@angular/common';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { FormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { PeriodDate, ResourceSession } from '../../interfaces/resource';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-session-item',\n templateUrl: './session-item.component.html',\n styleUrls: ['./session-item.component.scss'],\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n DatePipe,\n ],\n imports: [MatFormFieldModule, MatInputModule, FormsModule, MatDatepickerModule, MatButtonModule],\n})\nexport class SessionItemComponent implements OnInit, DoCheck {\n session = model.required<ResourceSession>();\n actions = input<boolean>(false);\n delete = output<ResourceSession>();\n save = output<ResourceSession>();\n date = PeriodDate;\n output = output<any>();\n\n ngOnInit(): void {\n this.session().startDate = moment(this.session().startDate).format('YYYY-MM-DD');\n this.session().endDate = moment(this.session().endDate).format('YYYY-MM-DD');\n }\n onSave(session: ResourceSession) {\n this.save.emit(session);\n }\n onDelete(session: ResourceSession) {\n this.delete.emit(session);\n }\n ngDoCheck(): void {\n this.output.emit(this.session());\n }\n}\n","<div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> 名称 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"session().name\" name=\"name\" required />\n </mat-form-field>\n <div class=\"flex flex-row gap-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>开始日期</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n (focus)=\"picker.open()\"\n name=\"startAt\"\n [(ngModel)]=\"session().startDate\"\n (dateInput)=\"session().startDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>结束日期</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker2\"\n name=\"endAt\"\n (focus)=\"picker2.open()\"\n [(ngModel)]=\"session().endDate\"\n (dateInput)=\"session().endDate = $event.value.format('YYYY-MM-DD')\"\n readonly\n required\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </mat-form-field>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button (click)=\"onDelete(session())\">删除</button>\n <button mat-flat-button (click)=\"onSave(session())\">保存</button>\n </div>\n }\n</div>\n","import { Resource, ResourceType } from './resource';\nimport { ResourceVariant } from './resource-variant';\n\nexport interface Booking {\n id?: string;\n createdAt: string;\n bookingNo?: string;\n total: number;\n status: BookingStatus | string;\n userId: string;\n partnerId: string;\n notes: string;\n type: ResourceType;\n items: BookingItem[];\n product: Resource;\n}\nexport enum BookingStatus {\n CREATED = <any>'待付款',\n PAID = <any>'已支付',\n COMPLETED = <any>'已完成',\n CLOSED = <any>'交易关闭',\n CANCELED = <any>'交易取消',\n REFUNDED = <any>'已退款',\n}\nexport enum BookingReturnStatus {\n CREATED = <any>'等待审核',\n CANCELED = <any>'用户取消',\n APPROVED = <any>'已通过',\n REJECTED = <any>'已拒绝',\n PROCESSING = <any>'平台处理中',\n RETURNED = <any>'已退款',\n}\n\nexport interface BookingItem {\n total: number;\n variant: ResourceVariant;\n startAt: string;\n endAt: string;\n status: BookingItemStatus;\n}\nexport enum BookingItemStatus {\n CREATED = <any>'创建',\n CANCELED = <any>'已取消',\n CLOSED = <any>'已关闭',\n RETURN_REQUESTED = <any>'等待审核',\n RETURN_APPROVED = <any>'商家同意退款',\n RETURN_REJECTED = <any>'商家拒绝退款',\n RETURN_PROCESSING = <any>'退款处理中',\n REFUNDED = <any>'已退款',\n}\nexport enum BookingTimelineStatus {\n BOOKING_CREATE = <any>'交易创建',\n BOOKING_CLOSED = <any>'交易关闭',\n BOOKING_CANCELED = <any>'交易取消',\n BOOKING_PAID = <any>'订单已支付',\n BOOKING_REFUNDED = <any>'订单已退款',\n BOOKING_COMPLETED = <any>'订单已完成',\n BOOKING_RETURN_REQUESTED = <any>'退款申请',\n BOOKING_RETURN_APPROVED = <any>'商家同意退款',\n BOOKING_RETURN_REJECTED = <any>'商家拒绝退款',\n BOOKING_RETURN_PROCESSING = <any>'退款处理中',\n BOOKING_RETURN_REFUNDED = <any>'退款处理完成,已入账',\n}\n","import { Component, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Booking, BookingStatus } from '../../interfaces/booking';\n\n@Component({\n selector: 'rolatech-booking-item',\n imports: [MatIconModule],\n templateUrl: './booking-item.component.html',\n styleUrl: './booking-item.component.scss',\n})\nexport class BookingItemComponent {\n booking = input.required<Booking>();\n status: any = BookingStatus;\n}\n","<div class=\"flex flex-col p-3 hover:bg-[--rt-raised-background] cursor-pointer\">\n <div class=\"flex justify-between w-full\">\n <span>预订号: {{ booking().bookingNo }}</span>\n <span class=\"font-medium text-sm\">{{ status[booking().status] }}</span>\n </div>\n @if (booking().product) {\n <div class=\"flex items-center justify-between\">\n <div>\n <span class=\"font-bold break-words line-clamp-2\">商品: {{ booking().product.name }}</span>\n @if (booking().items) {\n <span class=\"font-bold break-words line-clamp-2\">教室: {{ booking().items[0].variant.classroom.name }}</span>\n }\n <span class=\"mt-2 text-md\">金额: ¥{{ booking().total / 100 }}</span>\n </div>\n <div class=\"pl-2\">\n <mat-icon>navigate_next</mat-icon>\n </div>\n </div>\n }\n</div>\n<hr />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","MY_FORMATS","i1","i4","i5"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Booking } from '../../interfaces/booking';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class BookingItemComponent {
|
|
4
|
+
booking: import("@angular/core").InputSignal<Booking>;
|
|
5
|
+
status: any;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BookingItemComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BookingItemComponent, "rolatech-booking-item", never, { "booking": { "alias": "booking"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class BookingReturnItemComponent {
|
|
3
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BookingReturnItemComponent, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BookingReturnItemComponent, "rolatech-booking-return-item", never, {}, {}, never, never, true, never>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DoCheck } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class BookingReturnRequestComponent implements DoCheck {
|
|
4
|
+
items: import("@angular/core").InputSignal<any>;
|
|
5
|
+
allComplete: boolean;
|
|
6
|
+
total: number;
|
|
7
|
+
selectedItems: any;
|
|
8
|
+
output: import("@angular/core").OutputEmitterRef<any>;
|
|
9
|
+
updateAllComplete(): void;
|
|
10
|
+
someComplete(): boolean;
|
|
11
|
+
setAll(completed: boolean): void;
|
|
12
|
+
ngDoCheck(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BookingReturnRequestComponent, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BookingReturnRequestComponent, "rolatech-booking-return-request", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "output": "output"; }, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BookingReturnItemComponent } from './booking-return-item/booking-return-item.component';
|
|
2
|
+
export { BookingReturnRequestComponent } from './booking-return-request/booking-return-request.component';
|
|
3
|
+
export { PeriodItemComponent } from './period-item/period-item.component';
|
|
4
|
+
export { SessionItemComponent } from './session-item/session-item.component';
|
|
5
|
+
export { BookingItemComponent } from './booking-item/booking-item.component';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DoCheck, OnInit } from '@angular/core';
|
|
2
|
+
import { ResourcePeriod } from '../../interfaces/resource';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare const MY_FORMATS: {
|
|
5
|
+
parse: {
|
|
6
|
+
dateInput: string;
|
|
7
|
+
};
|
|
8
|
+
display: {
|
|
9
|
+
dateInput: string;
|
|
10
|
+
monthYearLabel: string;
|
|
11
|
+
dateA11yLabel: string;
|
|
12
|
+
monthYearA11yLabel: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare class PeriodItemComponent implements OnInit, DoCheck {
|
|
16
|
+
period: import("@angular/core").ModelSignal<ResourcePeriod>;
|
|
17
|
+
actions: import("@angular/core").InputSignal<boolean>;
|
|
18
|
+
delete: import("@angular/core").OutputEmitterRef<ResourcePeriod>;
|
|
19
|
+
save: import("@angular/core").OutputEmitterRef<ResourcePeriod>;
|
|
20
|
+
output: import("@angular/core").OutputEmitterRef<any>;
|
|
21
|
+
date: string[];
|
|
22
|
+
ngOnInit(): void;
|
|
23
|
+
startTimeChanged(event: any): void;
|
|
24
|
+
endTimeChanged(event: any): void;
|
|
25
|
+
onSave(period: ResourcePeriod): void;
|
|
26
|
+
onDelete(period: ResourcePeriod): void;
|
|
27
|
+
ngDoCheck(): void;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PeriodItemComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PeriodItemComponent, "rolatech-period-item", never, { "period": { "alias": "period"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; }, { "period": "periodChange"; "delete": "delete"; "save": "save"; "output": "output"; }, never, never, true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DoCheck, OnInit } from '@angular/core';
|
|
2
|
+
import { ResourceSession } from '../../interfaces/resource';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare const MY_FORMATS: {
|
|
5
|
+
parse: {
|
|
6
|
+
dateInput: string;
|
|
7
|
+
};
|
|
8
|
+
display: {
|
|
9
|
+
dateInput: string;
|
|
10
|
+
monthYearLabel: string;
|
|
11
|
+
dateA11yLabel: string;
|
|
12
|
+
monthYearA11yLabel: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare class SessionItemComponent implements OnInit, DoCheck {
|
|
16
|
+
session: import("@angular/core").ModelSignal<ResourceSession>;
|
|
17
|
+
actions: import("@angular/core").InputSignal<boolean>;
|
|
18
|
+
delete: import("@angular/core").OutputEmitterRef<ResourceSession>;
|
|
19
|
+
save: import("@angular/core").OutputEmitterRef<ResourceSession>;
|
|
20
|
+
date: string[];
|
|
21
|
+
output: import("@angular/core").OutputEmitterRef<any>;
|
|
22
|
+
ngOnInit(): void;
|
|
23
|
+
onSave(session: ResourceSession): void;
|
|
24
|
+
onDelete(session: ResourceSession): void;
|
|
25
|
+
ngDoCheck(): void;
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SessionItemComponent, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SessionItemComponent, "rolatech-session-item", never, { "session": { "alias": "session"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; }, { "session": "sessionChange"; "delete": "delete"; "save": "save"; "output": "output"; }, never, never, true, never>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Resource, ResourceType } from './resource';
|
|
2
|
+
import { ResourceVariant } from './resource-variant';
|
|
3
|
+
export interface Booking {
|
|
4
|
+
id?: string;
|
|
5
|
+
createdAt: string;
|
|
6
|
+
bookingNo?: string;
|
|
7
|
+
total: number;
|
|
8
|
+
status: BookingStatus | string;
|
|
9
|
+
userId: string;
|
|
10
|
+
partnerId: string;
|
|
11
|
+
notes: string;
|
|
12
|
+
type: ResourceType;
|
|
13
|
+
items: BookingItem[];
|
|
14
|
+
product: Resource;
|
|
15
|
+
}
|
|
16
|
+
export declare enum BookingStatus {
|
|
17
|
+
CREATED,
|
|
18
|
+
PAID,
|
|
19
|
+
COMPLETED,
|
|
20
|
+
CLOSED,
|
|
21
|
+
CANCELED,
|
|
22
|
+
REFUNDED
|
|
23
|
+
}
|
|
24
|
+
export declare enum BookingReturnStatus {
|
|
25
|
+
CREATED,
|
|
26
|
+
CANCELED,
|
|
27
|
+
APPROVED,
|
|
28
|
+
REJECTED,
|
|
29
|
+
PROCESSING,
|
|
30
|
+
RETURNED
|
|
31
|
+
}
|
|
32
|
+
export interface BookingItem {
|
|
33
|
+
total: number;
|
|
34
|
+
variant: ResourceVariant;
|
|
35
|
+
startAt: string;
|
|
36
|
+
endAt: string;
|
|
37
|
+
status: BookingItemStatus;
|
|
38
|
+
}
|
|
39
|
+
export declare enum BookingItemStatus {
|
|
40
|
+
CREATED,
|
|
41
|
+
CANCELED,
|
|
42
|
+
CLOSED,
|
|
43
|
+
RETURN_REQUESTED,
|
|
44
|
+
RETURN_APPROVED,
|
|
45
|
+
RETURN_REJECTED,
|
|
46
|
+
RETURN_PROCESSING,
|
|
47
|
+
REFUNDED
|
|
48
|
+
}
|
|
49
|
+
export declare enum BookingTimelineStatus {
|
|
50
|
+
BOOKING_CREATE,
|
|
51
|
+
BOOKING_CLOSED,
|
|
52
|
+
BOOKING_CANCELED,
|
|
53
|
+
BOOKING_PAID,
|
|
54
|
+
BOOKING_REFUNDED,
|
|
55
|
+
BOOKING_COMPLETED,
|
|
56
|
+
BOOKING_RETURN_REQUESTED,
|
|
57
|
+
BOOKING_RETURN_APPROVED,
|
|
58
|
+
BOOKING_RETURN_REJECTED,
|
|
59
|
+
BOOKING_RETURN_PROCESSING,
|
|
60
|
+
BOOKING_RETURN_REFUNDED
|
|
61
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Category {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
media: CategoryMedia[];
|
|
5
|
+
createdAt: string;
|
|
6
|
+
originId: string;
|
|
7
|
+
children: Category;
|
|
8
|
+
parent: Category;
|
|
9
|
+
}
|
|
10
|
+
export interface CategoryMedia {
|
|
11
|
+
id: string;
|
|
12
|
+
url: string;
|
|
13
|
+
alt: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Facility } from './facility';
|
|
2
|
+
import { Media } from './media';
|
|
3
|
+
export interface Partner {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PartnerClassroom {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
capacity: number;
|
|
11
|
+
area: number;
|
|
12
|
+
contact: string;
|
|
13
|
+
phone: string;
|
|
14
|
+
notes: string;
|
|
15
|
+
facilities?: Facility[];
|
|
16
|
+
media: Media[];
|
|
17
|
+
isUploading?: boolean;
|
|
18
|
+
variants: Variant[];
|
|
19
|
+
productId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface Variant {
|
|
22
|
+
id: string;
|
|
23
|
+
period: {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
startTime: string;
|
|
27
|
+
endTime: string;
|
|
28
|
+
};
|
|
29
|
+
pricing: {
|
|
30
|
+
total: number;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Booking } from './booking';
|
|
2
|
+
import { Category } from './category';
|
|
3
|
+
import { Facility } from './facility';
|
|
4
|
+
import { Media } from './media';
|
|
5
|
+
export interface Resource {
|
|
6
|
+
id: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
updatedAt: string;
|
|
9
|
+
name: number;
|
|
10
|
+
description: string;
|
|
11
|
+
status: ResourceStatus;
|
|
12
|
+
type: ResourceType;
|
|
13
|
+
price: number;
|
|
14
|
+
partnerId: string;
|
|
15
|
+
location?: ResourceLocation;
|
|
16
|
+
bookings: Booking[];
|
|
17
|
+
sessions: ResourceSession[];
|
|
18
|
+
media: Media[];
|
|
19
|
+
categories: Category[];
|
|
20
|
+
details: ResourceDetail[];
|
|
21
|
+
facilities?: Facility[];
|
|
22
|
+
periods: any;
|
|
23
|
+
}
|
|
24
|
+
export declare enum ResourceStatus {
|
|
25
|
+
DRAFT,
|
|
26
|
+
AWAITING,
|
|
27
|
+
PENDING,
|
|
28
|
+
ACTIVE,
|
|
29
|
+
ACCEPTED,
|
|
30
|
+
DELETED
|
|
31
|
+
}
|
|
32
|
+
export declare enum ResourceType {
|
|
33
|
+
CLASSROOM
|
|
34
|
+
}
|
|
35
|
+
export interface ResourceSession {
|
|
36
|
+
id?: string;
|
|
37
|
+
name: string;
|
|
38
|
+
startDate: string;
|
|
39
|
+
endDate: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ResourcePeriod {
|
|
42
|
+
id?: string;
|
|
43
|
+
name: string;
|
|
44
|
+
startTime: string;
|
|
45
|
+
endTime: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ResourceRate {
|
|
48
|
+
userId: string;
|
|
49
|
+
rate: number;
|
|
50
|
+
}
|
|
51
|
+
export interface ResourceLocation {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
contact: string;
|
|
55
|
+
phone: string;
|
|
56
|
+
province: string;
|
|
57
|
+
city: string;
|
|
58
|
+
county: string;
|
|
59
|
+
town: string;
|
|
60
|
+
address: string;
|
|
61
|
+
detail: string;
|
|
62
|
+
latitude: string;
|
|
63
|
+
longitude: string;
|
|
64
|
+
}
|
|
65
|
+
export interface ResourceDetail {
|
|
66
|
+
id: string;
|
|
67
|
+
title: string;
|
|
68
|
+
description: string;
|
|
69
|
+
content: string;
|
|
70
|
+
media: Media[];
|
|
71
|
+
isUploading?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface ResourceClassroom {
|
|
74
|
+
id: string;
|
|
75
|
+
name: string;
|
|
76
|
+
capacity: number;
|
|
77
|
+
area: number;
|
|
78
|
+
contact: string;
|
|
79
|
+
phone: string;
|
|
80
|
+
notes: string;
|
|
81
|
+
facilities?: Facility[];
|
|
82
|
+
media: Media[];
|
|
83
|
+
productId?: string;
|
|
84
|
+
isUploading?: boolean;
|
|
85
|
+
}
|
|
86
|
+
export declare const PeriodDate: string[];
|