@rolatech/angular-order 18.0.0
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/README.md +7 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/lib/components/order-course-item/order-course-item.component.mjs +19 -0
- package/esm2022/lib/components/order-item/order-item.component.mjs +26 -0
- package/esm2022/lib/components/order-product-item/order-product-item.component.mjs +23 -0
- package/esm2022/lib/components/order-return-request/order-return-request.component.mjs +19 -0
- package/esm2022/lib/components/order-variant-item/order-variant-item.component.mjs +12 -0
- package/esm2022/lib/interfaces/index.mjs +2 -0
- package/esm2022/lib/interfaces/order.mjs +64 -0
- package/esm2022/lib/orders.routes.mjs +18 -0
- package/esm2022/lib/pages/order-detail/order-detail.component.mjs +156 -0
- package/esm2022/lib/pages/order-qrcodepay/order-qrcodepay.component.mjs +70 -0
- package/esm2022/lib/pages/orders-index/order-index.component.mjs +87 -0
- package/esm2022/rolatech-angular-order.mjs +5 -0
- package/fesm2022/rolatech-angular-order.mjs +453 -0
- package/fesm2022/rolatech-angular-order.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/lib/components/order-course-item/order-course-item.component.d.ts +8 -0
- package/lib/components/order-item/order-item.component.d.ts +10 -0
- package/lib/components/order-product-item/order-product-item.component.d.ts +11 -0
- package/lib/components/order-return-request/order-return-request.component.d.ts +7 -0
- package/lib/components/order-variant-item/order-variant-item.component.d.ts +5 -0
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/interfaces/order.d.ts +103 -0
- package/lib/orders.routes.d.ts +2 -0
- package/lib/pages/order-detail/order-detail.component.d.ts +36 -0
- package/lib/pages/order-qrcodepay/order-qrcodepay.component.d.ts +22 -0
- package/lib/pages/orders-index/order-index.component.d.ts +27 -0
- package/package.json +25 -0
- package/src/assets/pay_wechat.png +0 -0
- package/themes/_default.scss +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { orderRoutes } from './lib/orders.routes';
|
|
2
|
+
export * from './lib/interfaces';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgb3JkZXJSb3V0ZXMgfSBmcm9tICcuL2xpYi9vcmRlcnMucm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMnO1xuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { CourseType } from '@rolatech/angular-course';
|
|
4
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/icon";
|
|
7
|
+
export class OrderCourseItemComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.course = input.required();
|
|
10
|
+
this.type = CourseType;
|
|
11
|
+
}
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderCourseItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: OrderCourseItemComponent, isStandalone: true, selector: "rolatech-order-course-item", inputs: { course: { classPropertyName: "course", publicName: "course", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <div class=\"hover:!bg-[--rt-base-background] cursor-pointer py-2\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex flex-row w-full\">\n <div class=\"w-2/5 sm:w-1/4 aspect-video bg-[--rt-raised-background] h-fit\">\n @if (course().media) {\n <div class=\"object-cover aspect-video\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"course().media[0].url + '!w400'\" size=\"medium\"> </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-raised-background] h-full w-full object-cover aspect-video\"></div>\n }\n </div>\n }\n </div>\n <div class=\"w-3/5 sm:w-3/4 ml-3 flex flex-col justify-between\">\n <span class=\"font-bold break-words line-clamp-2\">{{ course().name }}</span>\n <span class=\"text-sm text-gray-600\">\u7C7B\u578B: {{ type[course().type] }}</span>\n </div>\n </div>\n <div class=\"pl-2\">\n <mat-icon>navigate_next</mat-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], deferBlockDependencies: [() => [import("@rolatech/angular-components").then(m => m.ThumbnailComponent)]] }); }
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.1.4", ngImport: i0, type: OrderCourseItemComponent, resolveDeferredDeps: () => [import("@rolatech/angular-components").then(m => m.ThumbnailComponent)], resolveMetadata: ThumbnailComponent => ({ decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{ selector: 'rolatech-order-course-item', standalone: true, imports: [CommonModule, ThumbnailComponent, MatIconModule], template: "<div class=\"flex flex-col\">\n <div class=\"hover:!bg-[--rt-base-background] cursor-pointer py-2\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex flex-row w-full\">\n <div class=\"w-2/5 sm:w-1/4 aspect-video bg-[--rt-raised-background] h-fit\">\n @if (course().media) {\n <div class=\"object-cover aspect-video\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"course().media[0].url + '!w400'\" size=\"medium\"> </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-raised-background] h-full w-full object-cover aspect-video\"></div>\n }\n </div>\n }\n </div>\n <div class=\"w-3/5 sm:w-3/4 ml-3 flex flex-col justify-between\">\n <span class=\"font-bold break-words line-clamp-2\">{{ course().name }}</span>\n <span class=\"text-sm text-gray-600\">\u7C7B\u578B: {{ type[course().type] }}</span>\n </div>\n </div>\n <div class=\"pl-2\">\n <mat-icon>navigate_next</mat-icon>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
18
|
+
}], ctorParameters: null, propDecorators: null }) });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY291cnNlLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLW9yZGVyL3NyYy9saWIvY29tcG9uZW50cy9vcmRlci1jb3Vyc2UtaXRlbS9vcmRlci1jb3Vyc2UtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9jb21wb25lbnRzL29yZGVyLWNvdXJzZS1pdGVtL29yZGVyLWNvdXJzZS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFTdkQsTUFBTSxPQUFPLHdCQUF3QjtJQVByQztRQVFFLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDbEMsU0FBSSxHQUFHLFVBQVUsQ0FBQztLQUNuQjs4R0FIWSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw0TkNickMsNm5DQTBCQSx5RERqQlksWUFBWSw4QkFBc0IsYUFBYTs7Z0dBSTlDLHdCQUF3QjtzQkFQcEMsU0FBUzttQ0FDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb3Vyc2UsIENvdXJzZVR5cGUgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb3Vyc2UnO1xuaW1wb3J0IHsgVGh1bWJuYWlsQ29tcG9uZW50IH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLW9yZGVyLWNvdXJzZS1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVGh1bWJuYWlsQ29tcG9uZW50LCBNYXRJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL29yZGVyLWNvdXJzZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL29yZGVyLWNvdXJzZS1pdGVtLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgT3JkZXJDb3Vyc2VJdGVtQ29tcG9uZW50IHtcbiAgY291cnNlID0gaW5wdXQucmVxdWlyZWQ8Q291cnNlPigpO1xuICB0eXBlID0gQ291cnNlVHlwZTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gIDxkaXYgY2xhc3M9XCJob3ZlcjohYmctWy0tcnQtYmFzZS1iYWNrZ3JvdW5kXSBjdXJzb3ItcG9pbnRlciBweS0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdy1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTIvNSBzbTp3LTEvNCBhc3BlY3QtdmlkZW8gYmctWy0tcnQtcmFpc2VkLWJhY2tncm91bmRdIGgtZml0XCI+XG4gICAgICAgICAgQGlmIChjb3Vyc2UoKS5tZWRpYSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC1jb3ZlciBhc3BlY3QtdmlkZW9cIj5cbiAgICAgICAgICAgICAgQGRlZmVyIChvbiB2aWV3cG9ydCgpKSB7XG4gICAgICAgICAgICAgICAgPHJvbGF0ZWNoLXRodW1ibmFpbCBbc3JjXT1cImNvdXJzZSgpLm1lZGlhWzBdLnVybCArICchdzQwMCdcIiBzaXplPVwibWVkaXVtXCI+IDwvcm9sYXRlY2gtdGh1bWJuYWlsPlxuICAgICAgICAgICAgICB9IEBwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLVstLXJ0LXJhaXNlZC1iYWNrZ3JvdW5kXSBoLWZ1bGwgdy1mdWxsIG9iamVjdC1jb3ZlciBhc3BlY3QtdmlkZW9cIj48L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMy81IHNtOnctMy80IG1sLTMgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCBicmVhay13b3JkcyBsaW5lLWNsYW1wLTJcIj57eyBjb3Vyc2UoKS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+57G75Z6LOiB7eyB0eXBlW2NvdXJzZSgpLnR5cGVdIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBsLTJcIj5cbiAgICAgICAgPG1hdC1pY29uPm5hdmlnYXRlX25leHQ8L21hdC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Component, computed, input } from '@angular/core';
|
|
2
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
3
|
+
import { OrderStatus } from '../../interfaces';
|
|
4
|
+
import { NgClass } from '@angular/common';
|
|
5
|
+
import { sumBy } from 'lodash';
|
|
6
|
+
import { ImagePlaceholderComponent, ThumbnailComponent } from '@rolatech/angular-components';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class OrderItemComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.order = input.required();
|
|
11
|
+
this.status = OrderStatus;
|
|
12
|
+
this.total = computed(() => {
|
|
13
|
+
return (this.order().total / 100).toFixed(2);
|
|
14
|
+
// const price = sumBy(this.order().items, (item: any) => item.total);
|
|
15
|
+
// return (price / 100).toFixed(2);
|
|
16
|
+
});
|
|
17
|
+
this.quantity = computed(() => sumBy(this.order().items, (item) => item.quantity));
|
|
18
|
+
}
|
|
19
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
20
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: OrderItemComponent, isStandalone: true, selector: "rolatech-order-item", inputs: { order: { classPropertyName: "order", publicName: "order", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col hover:bg-[--rt-raised-background] cursor-pointer p-3\">\n <div class=\"flex justify-between w-full mb-2\">\n <span>\u8BA2\u5355\u53F7: {{ order().orderNo }}</span>\n <span class=\"font-medium text-sm\">{{ status[order().status] }}</span>\n </div>\n <div>\n @if (order().items; as items) {\n @if (items.length > 1) {\n } @else {}\n <div class=\"flex flex-col overflow-x-scroll scrollbar-hide\">\n @for (item of items; track $index) {\n <div class=\"flex flex-row py-2\">\n @if (item.media) {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"item.media[0].url + '!w400'\" size=\"medium\"> </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-gray-200 h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n </div>\n } @else {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n <rolatech-image-placeholder></rolatech-image-placeholder>\n </div>\n }\n <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div>\n <div>{{ item.name }}</div>\n </div>\n <div>\n <div class=\"text-sm\">\u00A5{{ (item.total / 100).toFixed(2) }}</div>\n <div class=\"text-sm mt-2\">\u6570\u91CF{{ item.quantity }}</div>\n </div>\n <!-- <div>\n <div class=\"text-sm\">\u00A5{{ total() }}</div>\n <div class=\"text-sm mt-2\">\u6570\u91CF{{ quantity() }}</div>\n </div> -->\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n<hr />\n", styles: [".scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: ImagePlaceholderComponent, selector: "rolatech-image-placeholder" }], deferBlockDependencies: [() => [ThumbnailComponent]] }); }
|
|
21
|
+
}
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderItemComponent, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
args: [{ selector: 'rolatech-order-item', standalone: true, imports: [MatIconModule, ThumbnailComponent, ImagePlaceholderComponent, NgClass], template: "<div class=\"flex flex-col hover:bg-[--rt-raised-background] cursor-pointer p-3\">\n <div class=\"flex justify-between w-full mb-2\">\n <span>\u8BA2\u5355\u53F7: {{ order().orderNo }}</span>\n <span class=\"font-medium text-sm\">{{ status[order().status] }}</span>\n </div>\n <div>\n @if (order().items; as items) {\n @if (items.length > 1) {\n } @else {}\n <div class=\"flex flex-col overflow-x-scroll scrollbar-hide\">\n @for (item of items; track $index) {\n <div class=\"flex flex-row py-2\">\n @if (item.media) {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"item.media[0].url + '!w400'\" size=\"medium\"> </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-gray-200 h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n </div>\n } @else {\n <div class=\"min-w-24 w-36 object-cover aspect-video rounded-lg mr-3\">\n <rolatech-image-placeholder></rolatech-image-placeholder>\n </div>\n }\n <div class=\"flex w-full justify-between\">\n <div class=\"flex justify-between w-full\">\n <div>\n <div>{{ item.name }}</div>\n </div>\n <div>\n <div class=\"text-sm\">\u00A5{{ (item.total / 100).toFixed(2) }}</div>\n <div class=\"text-sm mt-2\">\u6570\u91CF{{ item.quantity }}</div>\n </div>\n <!-- <div>\n <div class=\"text-sm\">\u00A5{{ total() }}</div>\n <div class=\"text-sm mt-2\">\u6570\u91CF{{ quantity() }}</div>\n </div> -->\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n<hr />\n", styles: [".scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}\n"] }]
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9jb21wb25lbnRzL29yZGVyLWl0ZW0vb3JkZXItaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9jb21wb25lbnRzL29yZGVyLWl0ZW0vb3JkZXItaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBUyxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFTN0YsTUFBTSxPQUFPLGtCQUFrQjtJQVAvQjtRQVFFLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFTLENBQUM7UUFDaEMsV0FBTSxHQUFRLFdBQVcsQ0FBQztRQUMxQixVQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0Msc0VBQXNFO1lBQ3RFLG1DQUFtQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ3BGOzhHQVRZLGtCQUFrQjtrR0FBbEIsa0JBQWtCLGtOQ2QvQix3N0RBK0NBLHdLRHJDWSxhQUFhLCtCQUFzQix5QkFBeUIsNkVBQTdDLGtCQUFrQjs7MkZBSWhDLGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE9yZGVyLCBPcmRlclN0YXR1cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBzdW1CeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbWFnZVBsYWNlaG9sZGVyQ29tcG9uZW50LCBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtb3JkZXItaXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBUaHVtYm5haWxDb21wb25lbnQsIEltYWdlUGxhY2Vob2xkZXJDb21wb25lbnQsIE5nQ2xhc3NdLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9vcmRlci1pdGVtLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgT3JkZXJJdGVtQ29tcG9uZW50IHtcbiAgb3JkZXIgPSBpbnB1dC5yZXF1aXJlZDxPcmRlcj4oKTtcbiAgc3RhdHVzOiBhbnkgPSBPcmRlclN0YXR1cztcbiAgdG90YWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICh0aGlzLm9yZGVyKCkudG90YWwgLyAxMDApLnRvRml4ZWQoMik7XG4gICAgLy8gY29uc3QgcHJpY2UgPSBzdW1CeSh0aGlzLm9yZGVyKCkuaXRlbXMsIChpdGVtOiBhbnkpID0+IGl0ZW0udG90YWwpO1xuICAgIC8vIHJldHVybiAocHJpY2UgLyAxMDApLnRvRml4ZWQoMik7XG4gIH0pO1xuICBxdWFudGl0eSA9IGNvbXB1dGVkKCgpID0+IHN1bUJ5KHRoaXMub3JkZXIoKS5pdGVtcywgKGl0ZW06IGFueSkgPT4gaXRlbS5xdWFudGl0eSkpO1xufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaG92ZXI6YmctWy0tcnQtcmFpc2VkLWJhY2tncm91bmRdIGN1cnNvci1wb2ludGVyIHAtM1wiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIG1iLTJcIj5cbiAgICA8c3Bhbj7orqLljZXlj7c6IHt7IG9yZGVyKCkub3JkZXJObyB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtc21cIj57eyBzdGF0dXNbb3JkZXIoKS5zdGF0dXNdIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdj5cbiAgICBAaWYgKG9yZGVyKCkuaXRlbXM7IGFzIGl0ZW1zKSB7XG4gICAgICBAaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgIH0gQGVsc2Uge31cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG92ZXJmbG93LXgtc2Nyb2xsIHNjcm9sbGJhci1oaWRlXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHB5LTJcIj5cbiAgICAgICAgICAgIEBpZiAoaXRlbS5tZWRpYSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctMjQgdy0zNiBvYmplY3QtY292ZXIgYXNwZWN0LXZpZGVvIHJvdW5kZWQtbGcgbXItM1wiPlxuICAgICAgICAgICAgICAgIEBkZWZlciAob24gdmlld3BvcnQoKSkge1xuICAgICAgICAgICAgICAgICAgPHJvbGF0ZWNoLXRodW1ibmFpbCBbc3JjXT1cIml0ZW0ubWVkaWFbMF0udXJsICsgJyF3NDAwJ1wiIHNpemU9XCJtZWRpdW1cIj4gPC9yb2xhdGVjaC10aHVtYm5haWw+XG4gICAgICAgICAgICAgICAgfSBAcGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLWdyYXktMjAwIGgtZnVsbCB3LWZ1bGwgb2JqZWN0LWNvdmVyIGFzcGVjdC12aWRlbyByb3VuZGVkLWxnXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctMjQgdy0zNiBvYmplY3QtY292ZXIgYXNwZWN0LXZpZGVvIHJvdW5kZWQtbGcgbXItM1wiPlxuICAgICAgICAgICAgICAgIDxyb2xhdGVjaC1pbWFnZS1wbGFjZWhvbGRlcj48L3JvbGF0ZWNoLWltYWdlLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0ubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbVwiPsKle3sgKGl0ZW0udG90YWwgLyAxMDApLnRvRml4ZWQoMikgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG10LTJcIj7mlbDph497eyBpdGVtLnF1YW50aXR5IH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc21cIj7CpXt7IHRvdGFsKCkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG10LTJcIj7mlbDph497eyBxdWFudGl0eSgpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG48aHIgLz5cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component, computed, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { MatIcon } from '@angular/material/icon';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class OrderProductItemComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.thumbnail = input();
|
|
8
|
+
this.title = input.required();
|
|
9
|
+
this.description = input();
|
|
10
|
+
this.quantity = input(0);
|
|
11
|
+
this.total = input.required();
|
|
12
|
+
this.priceDisplay = computed(() => {
|
|
13
|
+
return (this.total() / 100)?.toFixed(2);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderProductItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: OrderProductItemComponent, isStandalone: true, selector: "rolatech-order-product-item", inputs: { thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, quantity: { classPropertyName: "quantity", publicName: "quantity", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex justify-between py-3\">\n <div class=\"flex w-full\">\n <div class=\"w-1/4 aspect-video bg-gray-200 rounded-lg h-fit\">\n <div class=\"object-cover aspect-video\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"thumbnail()\" size=\"medium\" mode=\"full\"> </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-gray-200 h-full w-full object-cover aspect-video\"></div>\n }\n </div>\n </div>\n <div class=\"w-3/4 ml-3 flex flex-col justify-between\">\n <!-- info -->\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col\">\n <span class=\"text-lg font-bold\">{{ title() }}</span>\n <span class=\"text-sm text-gray-600 mt-2\">{{ description() }}</span>\n </div>\n <div>\u00A5{{ priceDisplay() }}</div>\n </div>\n <!-- action -->\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex items-center text-sm\">\n <span class=\"mr-3\">\u6570\u91CF</span>\n <span class=\"w-11 text-center\">{{ quantity() }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], deferBlockDependencies: [() => [import("@rolatech/angular-components").then(m => m.ThumbnailComponent)]] }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.1.4", ngImport: i0, type: OrderProductItemComponent, resolveDeferredDeps: () => [import("@rolatech/angular-components").then(m => m.ThumbnailComponent)], resolveMetadata: ThumbnailComponent => ({ decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{ selector: 'rolatech-order-product-item', standalone: true, imports: [CommonModule, ThumbnailComponent, MatIcon], template: "<div class=\"flex justify-between py-3\">\n <div class=\"flex w-full\">\n <div class=\"w-1/4 aspect-video bg-gray-200 rounded-lg h-fit\">\n <div class=\"object-cover aspect-video\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"thumbnail()\" size=\"medium\" mode=\"full\"> </rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-gray-200 h-full w-full object-cover aspect-video\"></div>\n }\n </div>\n </div>\n <div class=\"w-3/4 ml-3 flex flex-col justify-between\">\n <!-- info -->\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col\">\n <span class=\"text-lg font-bold\">{{ title() }}</span>\n <span class=\"text-sm text-gray-600 mt-2\">{{ description() }}</span>\n </div>\n <div>\u00A5{{ priceDisplay() }}</div>\n </div>\n <!-- action -->\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex items-center text-sm\">\n <span class=\"mr-3\">\u6570\u91CF</span>\n <span class=\"w-11 text-center\">{{ quantity() }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
22
|
+
}], ctorParameters: null, propDecorators: null }) });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcHJvZHVjdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1vcmRlci9zcmMvbGliL2NvbXBvbmVudHMvb3JkZXItcHJvZHVjdC1pdGVtL29yZGVyLXByb2R1Y3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9jb21wb25lbnRzL29yZGVyLXByb2R1Y3QtaXRlbS9vcmRlci1wcm9kdWN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBU2pELE1BQU0sT0FBTyx5QkFBeUI7SUFQdEM7UUFRRSxjQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDNUIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQzlCLGFBQVEsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7S0FDSjs4R0FUWSx5QkFBeUI7a0dBQXpCLHlCQUF5QixndUJDWnRDLHNxQ0E4QkEseUREdEJZLFlBQVk7O2dHQUlYLHlCQUF5QjtzQkFQckMsU0FBUzttQ0FDRSw2QkFBNkIsY0FDM0IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGh1bWJuYWlsQ29tcG9uZW50IH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLW9yZGVyLXByb2R1Y3QtaXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRodW1ibmFpbENvbXBvbmVudCwgTWF0SWNvbl0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1wcm9kdWN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vb3JkZXItcHJvZHVjdC1pdGVtLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgT3JkZXJQcm9kdWN0SXRlbUNvbXBvbmVudCB7XG4gIHRodW1ibmFpbCA9IGlucHV0PHN0cmluZz4oKTtcbiAgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIGRlc2NyaXB0aW9uID0gaW5wdXQ8c3RyaW5nPigpO1xuICBxdWFudGl0eSA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHRvdGFsID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBwcmljZURpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICh0aGlzLnRvdGFsKCkgLyAxMDApPy50b0ZpeGVkKDIpO1xuICB9KTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBweS0zXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEvNCBhc3BlY3QtdmlkZW8gYmctZ3JheS0yMDAgcm91bmRlZC1sZyBoLWZpdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC1jb3ZlciBhc3BlY3QtdmlkZW9cIj5cbiAgICAgICAgQGRlZmVyIChvbiB2aWV3cG9ydCgpKSB7XG4gICAgICAgICAgPHJvbGF0ZWNoLXRodW1ibmFpbCBbc3JjXT1cInRodW1ibmFpbCgpXCIgc2l6ZT1cIm1lZGl1bVwiIG1vZGU9XCJmdWxsXCI+IDwvcm9sYXRlY2gtdGh1bWJuYWlsPlxuICAgICAgICB9IEBwbGFjZWhvbGRlciB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJnLWdyYXktMjAwIGgtZnVsbCB3LWZ1bGwgb2JqZWN0LWNvdmVyIGFzcGVjdC12aWRlb1wiPjwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidy0zLzQgbWwtMyBmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPCEtLSBpbmZvIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPnt7IHRpdGxlKCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbXQtMlwiPnt7IGRlc2NyaXB0aW9uKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PsKle3sgcHJpY2VEaXNwbGF5KCkgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBhY3Rpb24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItM1wiPuaVsOmHjzwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMTEgdGV4dC1jZW50ZXJcIj57eyBxdWFudGl0eSgpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component, model, output } from '@angular/core';
|
|
2
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
3
|
+
import { MatInputModule } from '@angular/material/input';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/form-field";
|
|
6
|
+
import * as i2 from "@angular/material/input";
|
|
7
|
+
export class OrderReturnRequestComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.output = output();
|
|
10
|
+
this.reason = model();
|
|
11
|
+
}
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderReturnRequestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.4", type: OrderReturnRequestComponent, isStandalone: true, selector: "rolatech-order-return-request", inputs: { reason: { classPropertyName: "reason", publicName: "reason", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { output: "output", reason: "reasonChange" }, ngImport: i0, template: "<div class=\"py-2\">\n <h2 class=\"mb-2\">\u5728\u4E0B\u9762\u8F93\u5165\u9000\u6B3E\u7406\u7531</h2>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u9000\u6B3E\u7406\u7531 </mat-label>\n <textarea matInput required [value]=\"reason()\"></textarea>\n </mat-form-field>\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.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"], exportAs: ["matInput"] }] }); }
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderReturnRequestComponent, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{ selector: 'rolatech-order-return-request', standalone: true, imports: [MatFormFieldModule, MatInputModule], template: "<div class=\"py-2\">\n <h2 class=\"mb-2\">\u5728\u4E0B\u9762\u8F93\u5165\u9000\u6B3E\u7406\u7531</h2>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u9000\u6B3E\u7406\u7531 </mat-label>\n <textarea matInput required [value]=\"reason()\"></textarea>\n </mat-form-field>\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcmV0dXJuLXJlcXVlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLW9yZGVyL3NyYy9saWIvY29tcG9uZW50cy9vcmRlci1yZXR1cm4tcmVxdWVzdC9vcmRlci1yZXR1cm4tcmVxdWVzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9jb21wb25lbnRzL29yZGVyLXJldHVybi1yZXF1ZXN0L29yZGVyLXJldHVybi1yZXF1ZXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFTekQsTUFBTSxPQUFPLDJCQUEyQjtJQVB4QztRQVFFLFdBQU0sR0FBRyxNQUFNLEVBQU8sQ0FBQztRQUN2QixXQUFNLEdBQUcsS0FBSyxFQUFPLENBQUM7S0FDdkI7OEdBSFksMkJBQTJCO2tHQUEzQiwyQkFBMkIsdVJDWHhDLHdTQU9BLHFGREFZLGtCQUFrQiwwU0FBRSxjQUFjOzsyRkFJakMsMkJBQTJCO2tCQVB2QyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIG1vZGVsLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLW9yZGVyLXJldHVybi1yZXF1ZXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItcmV0dXJuLXJlcXVlc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vb3JkZXItcmV0dXJuLXJlcXVlc3QuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBPcmRlclJldHVyblJlcXVlc3RDb21wb25lbnQge1xuICBvdXRwdXQgPSBvdXRwdXQ8YW55PigpO1xuICByZWFzb24gPSBtb2RlbDxhbnk+KCk7XG59XG4iLCI8ZGl2IGNsYXNzPVwicHktMlwiPlxuICA8aDIgY2xhc3M9XCJtYi0yXCI+5Zyo5LiL6Z2i6L6T5YWl6YCA5qy+55CG55SxPC9oMj5cbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgPG1hdC1sYWJlbD4g6YCA5qy+55CG55SxIDwvbWF0LWxhYmVsPlxuICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCByZXF1aXJlZCBbdmFsdWVdPVwicmVhc29uKClcIj48L3RleHRhcmVhPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class OrderVariantItemComponent {
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderVariantItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: OrderVariantItemComponent, isStandalone: true, selector: "rolatech-order-variant-item", ngImport: i0, template: "<p>order-variant-item works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderVariantItemComponent, decorators: [{
|
|
9
|
+
type: Component,
|
|
10
|
+
args: [{ selector: 'rolatech-order-variant-item', standalone: true, imports: [CommonModule], template: "<p>order-variant-item works!</p>\n" }]
|
|
11
|
+
}] });
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItdmFyaWFudC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1vcmRlci9zcmMvbGliL2NvbXBvbmVudHMvb3JkZXItdmFyaWFudC1pdGVtL29yZGVyLXZhcmlhbnQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9jb21wb25lbnRzL29yZGVyLXZhcmlhbnQtaXRlbS9vcmRlci12YXJpYW50LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBUy9DLE1BQU0sT0FBTyx5QkFBeUI7OEdBQXpCLHlCQUF5QjtrR0FBekIseUJBQXlCLHVGQ1Z0QyxvQ0FDQSx5RERLWSxZQUFZOzsyRkFJWCx5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtb3JkZXItdmFyaWFudC1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmRlci12YXJpYW50LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vb3JkZXItdmFyaWFudC1pdGVtLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgT3JkZXJWYXJpYW50SXRlbUNvbXBvbmVudCB7fVxuIiwiPHA+b3JkZXItdmFyaWFudC1pdGVtIHdvcmtzITwvcD5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './order';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG4iXX0=
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export var OrderStatus;
|
|
2
|
+
(function (OrderStatus) {
|
|
3
|
+
OrderStatus[OrderStatus["CREATED"] = '待付款'] = "CREATED";
|
|
4
|
+
OrderStatus[OrderStatus["PAID"] = '已支付'] = "PAID";
|
|
5
|
+
OrderStatus[OrderStatus["COMPLETED"] = '已完成'] = "COMPLETED";
|
|
6
|
+
OrderStatus[OrderStatus["CLOSED"] = '交易关闭'] = "CLOSED";
|
|
7
|
+
OrderStatus[OrderStatus["CANCELED"] = '交易取消'] = "CANCELED";
|
|
8
|
+
OrderStatus[OrderStatus["REFUNDED"] = '已退款'] = "REFUNDED";
|
|
9
|
+
})(OrderStatus || (OrderStatus = {}));
|
|
10
|
+
export var OrderType;
|
|
11
|
+
(function (OrderType) {
|
|
12
|
+
OrderType[OrderType["COURSE"] = '课程'] = "COURSE";
|
|
13
|
+
OrderType[OrderType["PRODUCT"] = '商品'] = "PRODUCT";
|
|
14
|
+
OrderType[OrderType["BOOKING"] = '预定'] = "BOOKING";
|
|
15
|
+
})(OrderType || (OrderType = {}));
|
|
16
|
+
export var OrderReturnStatus;
|
|
17
|
+
(function (OrderReturnStatus) {
|
|
18
|
+
OrderReturnStatus[OrderReturnStatus["CREATED"] = '等待审核'] = "CREATED";
|
|
19
|
+
OrderReturnStatus[OrderReturnStatus["CANCELED"] = '用户取消'] = "CANCELED";
|
|
20
|
+
OrderReturnStatus[OrderReturnStatus["APPROVED"] = '已通过'] = "APPROVED";
|
|
21
|
+
OrderReturnStatus[OrderReturnStatus["REJECTED"] = '已拒绝'] = "REJECTED";
|
|
22
|
+
OrderReturnStatus[OrderReturnStatus["PROCESSING"] = '平台处理中'] = "PROCESSING";
|
|
23
|
+
OrderReturnStatus[OrderReturnStatus["RETURNED"] = '已退款'] = "RETURNED";
|
|
24
|
+
})(OrderReturnStatus || (OrderReturnStatus = {}));
|
|
25
|
+
export var OrderItemStatus;
|
|
26
|
+
(function (OrderItemStatus) {
|
|
27
|
+
OrderItemStatus[OrderItemStatus["CREATED"] = '创建'] = "CREATED";
|
|
28
|
+
OrderItemStatus[OrderItemStatus["CANCELED"] = '已取消'] = "CANCELED";
|
|
29
|
+
OrderItemStatus[OrderItemStatus["CLOSED"] = '已关闭'] = "CLOSED";
|
|
30
|
+
OrderItemStatus[OrderItemStatus["RETURN_REQUESTED"] = '等待审核'] = "RETURN_REQUESTED";
|
|
31
|
+
OrderItemStatus[OrderItemStatus["RETURN_APPROVED"] = '商家同意退款'] = "RETURN_APPROVED";
|
|
32
|
+
OrderItemStatus[OrderItemStatus["RETURN_REJECTED"] = '商家拒绝退款'] = "RETURN_REJECTED";
|
|
33
|
+
OrderItemStatus[OrderItemStatus["RETURN_PROCESSING"] = '退款处理中'] = "RETURN_PROCESSING";
|
|
34
|
+
OrderItemStatus[OrderItemStatus["REFUNDED"] = '已退款'] = "REFUNDED";
|
|
35
|
+
})(OrderItemStatus || (OrderItemStatus = {}));
|
|
36
|
+
export var OrderTimelineStatus;
|
|
37
|
+
(function (OrderTimelineStatus) {
|
|
38
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_CREATE"] = '交易创建'] = "ORDER_CREATE";
|
|
39
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_CLOSED"] = '交易关闭'] = "ORDER_CLOSED";
|
|
40
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_CANCELED"] = '交易取消'] = "ORDER_CANCELED";
|
|
41
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_PAID"] = '订单已支付'] = "ORDER_PAID";
|
|
42
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_REFUNDED"] = '订单已退款'] = "ORDER_REFUNDED";
|
|
43
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_COMPLETED"] = '订单已完成'] = "ORDER_COMPLETED";
|
|
44
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_RETURN_REQUESTED"] = '退款申请'] = "ORDER_RETURN_REQUESTED";
|
|
45
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_RETURN_APPROVED"] = '商家同意退款'] = "ORDER_RETURN_APPROVED";
|
|
46
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_RETURN_REJECTED"] = '商家拒绝退款'] = "ORDER_RETURN_REJECTED";
|
|
47
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_RETURN_PROCESSING"] = '退款处理中'] = "ORDER_RETURN_PROCESSING";
|
|
48
|
+
OrderTimelineStatus[OrderTimelineStatus["ORDER_RETURN_REFUNDED"] = '退款处理完成,已入账'] = "ORDER_RETURN_REFUNDED";
|
|
49
|
+
})(OrderTimelineStatus || (OrderTimelineStatus = {}));
|
|
50
|
+
export var OrderPayoutStatus;
|
|
51
|
+
(function (OrderPayoutStatus) {
|
|
52
|
+
OrderPayoutStatus[OrderPayoutStatus["CREATED"] = '创建'] = "CREATED";
|
|
53
|
+
OrderPayoutStatus[OrderPayoutStatus["PENDING"] = '处理中'] = "PENDING";
|
|
54
|
+
OrderPayoutStatus[OrderPayoutStatus["PAID"] = '已支付'] = "PAID";
|
|
55
|
+
OrderPayoutStatus[OrderPayoutStatus["CANCELED"] = '已取消'] = "CANCELED";
|
|
56
|
+
OrderPayoutStatus[OrderPayoutStatus["FAILED"] = '失败'] = "FAILED";
|
|
57
|
+
})(OrderPayoutStatus || (OrderPayoutStatus = {}));
|
|
58
|
+
export var OrderPayoutType;
|
|
59
|
+
(function (OrderPayoutType) {
|
|
60
|
+
OrderPayoutType[OrderPayoutType["BANK"] = '银行转账'] = "BANK";
|
|
61
|
+
OrderPayoutType[OrderPayoutType["CARD"] = '银行卡'] = "CARD";
|
|
62
|
+
OrderPayoutType[OrderPayoutType["WECHAT"] = '微信零钱'] = "WECHAT";
|
|
63
|
+
})(OrderPayoutType || (OrderPayoutType = {}));
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItb3JkZXIvc3JjL2xpYi9pbnRlcmZhY2VzL29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sQ0FBTixJQUFZLFdBT1g7QUFQRCxXQUFZLFdBQVc7SUFDckIscUNBQWUsS0FBSyxhQUFBLENBQUE7SUFDcEIsa0NBQVksS0FBSyxVQUFBLENBQUE7SUFDakIsdUNBQWlCLEtBQUssZUFBQSxDQUFBO0lBQ3RCLG9DQUFjLE1BQU0sWUFBQSxDQUFBO0lBQ3BCLHNDQUFnQixNQUFNLGNBQUEsQ0FBQTtJQUN0QixzQ0FBZ0IsS0FBSyxjQUFBLENBQUE7QUFDdkIsQ0FBQyxFQVBXLFdBQVcsS0FBWCxXQUFXLFFBT3RCO0FBQ0QsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQixnQ0FBYyxJQUFJLFlBQUEsQ0FBQTtJQUNsQixpQ0FBZSxJQUFJLGFBQUEsQ0FBQTtJQUNuQixpQ0FBZSxJQUFJLGFBQUEsQ0FBQTtBQUNyQixDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEI7QUFZRCxNQUFNLENBQU4sSUFBWSxpQkFPWDtBQVBELFdBQVksaUJBQWlCO0lBQzNCLGlEQUFlLE1BQU0sYUFBQSxDQUFBO0lBQ3JCLGtEQUFnQixNQUFNLGNBQUEsQ0FBQTtJQUN0QixrREFBZ0IsS0FBSyxjQUFBLENBQUE7SUFDckIsa0RBQWdCLEtBQUssY0FBQSxDQUFBO0lBQ3JCLG9EQUFrQixPQUFPLGdCQUFBLENBQUE7SUFDekIsa0RBQWdCLEtBQUssY0FBQSxDQUFBO0FBQ3ZCLENBQUMsRUFQVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBTzVCO0FBZUQsTUFBTSxDQUFOLElBQVksZUFTWDtBQVRELFdBQVksZUFBZTtJQUN6Qiw2Q0FBZSxJQUFJLGFBQUEsQ0FBQTtJQUNuQiw4Q0FBZ0IsS0FBSyxjQUFBLENBQUE7SUFDckIsNENBQWMsS0FBSyxZQUFBLENBQUE7SUFDbkIsc0RBQXdCLE1BQU0sc0JBQUEsQ0FBQTtJQUM5QixxREFBdUIsUUFBUSxxQkFBQSxDQUFBO0lBQy9CLHFEQUF1QixRQUFRLHFCQUFBLENBQUE7SUFDL0IsdURBQXlCLE9BQU8sdUJBQUEsQ0FBQTtJQUNoQyw4Q0FBZ0IsS0FBSyxjQUFBLENBQUE7QUFDdkIsQ0FBQyxFQVRXLGVBQWUsS0FBZixlQUFlLFFBUzFCO0FBQ0QsTUFBTSxDQUFOLElBQVksbUJBWVg7QUFaRCxXQUFZLG1CQUFtQjtJQUM3QiwwREFBb0IsTUFBTSxrQkFBQSxDQUFBO0lBQzFCLDBEQUFvQixNQUFNLGtCQUFBLENBQUE7SUFDMUIsNERBQXNCLE1BQU0sb0JBQUEsQ0FBQTtJQUM1Qix3REFBa0IsT0FBTyxnQkFBQSxDQUFBO0lBQ3pCLDREQUFzQixPQUFPLG9CQUFBLENBQUE7SUFDN0IsNkRBQXVCLE9BQU8scUJBQUEsQ0FBQTtJQUM5QixvRUFBOEIsTUFBTSw0QkFBQSxDQUFBO0lBQ3BDLG1FQUE2QixRQUFRLDJCQUFBLENBQUE7SUFDckMsbUVBQTZCLFFBQVEsMkJBQUEsQ0FBQTtJQUNyQyxxRUFBK0IsT0FBTyw2QkFBQSxDQUFBO0lBQ3RDLG1FQUE2QixZQUFZLDJCQUFBLENBQUE7QUFDM0MsQ0FBQyxFQVpXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFZOUI7QUFZRCxNQUFNLENBQU4sSUFBWSxpQkFNWDtBQU5ELFdBQVksaUJBQWlCO0lBQzNCLGlEQUFlLElBQUksYUFBQSxDQUFBO0lBQ25CLGlEQUFlLEtBQUssYUFBQSxDQUFBO0lBQ3BCLDhDQUFZLEtBQUssVUFBQSxDQUFBO0lBQ2pCLGtEQUFnQixLQUFLLGNBQUEsQ0FBQTtJQUNyQixnREFBYyxJQUFJLFlBQUEsQ0FBQTtBQUNwQixDQUFDLEVBTlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQU01QjtBQUNELE1BQU0sQ0FBTixJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsMENBQVksTUFBTSxVQUFBLENBQUE7SUFDbEIsMENBQVksS0FBSyxVQUFBLENBQUE7SUFDakIsNENBQWMsTUFBTSxZQUFBLENBQUE7QUFDdEIsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBPcmRlciB7XG4gIGlkPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgb3JkZXJObz86IHN0cmluZztcbiAgdG90YWw6IG51bWJlcjtcbiAgc3RhdHVzOiBPcmRlclN0YXR1cyB8IHN0cmluZztcbiAgaXRlbXM6IE9yZGVySXRlbVtdO1xuICBjdXN0b21lcklkOiBzdHJpbmc7XG4gIG93bmVySWQ6IHN0cmluZztcbiAgdHlwZTogT3JkZXJUeXBlO1xufVxuZXhwb3J0IGVudW0gT3JkZXJTdGF0dXMge1xuICBDUkVBVEVEID0gPGFueT4n5b6F5LuY5qy+JyxcbiAgUEFJRCA9IDxhbnk+J+W3suaUr+S7mCcsXG4gIENPTVBMRVRFRCA9IDxhbnk+J+W3suWujOaIkCcsXG4gIENMT1NFRCA9IDxhbnk+J+S6pOaYk+WFs+mXrScsXG4gIENBTkNFTEVEID0gPGFueT4n5Lqk5piT5Y+W5raIJyxcbiAgUkVGVU5ERUQgPSA8YW55Piflt7LpgIDmrL4nLFxufVxuZXhwb3J0IGVudW0gT3JkZXJUeXBlIHtcbiAgQ09VUlNFID0gPGFueT4n6K++56iLJyxcbiAgUFJPRFVDVCA9IDxhbnk+J+WVhuWTgScsXG4gIEJPT0tJTkcgPSA8YW55PifpooTlrponLFxufVxuZXhwb3J0IGludGVyZmFjZSBPcmRlclJldHVybiB7XG4gIHN0YXR1czogT3JkZXJSZXR1cm5TdGF0dXMgfCBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBjdXN0b21lcklkOiBzdHJpbmc7XG4gIG93bmVySWQ6IHN0cmluZztcbiAgaXRlbXM6IE9yZGVySXRlbVJldHVybltdO1xufVxuZXhwb3J0IGludGVyZmFjZSBPcmRlckl0ZW1SZXR1cm4ge1xuICBvcmRlckl0ZW06IE9yZGVySXRlbTtcbn1cbmV4cG9ydCBlbnVtIE9yZGVyUmV0dXJuU3RhdHVzIHtcbiAgQ1JFQVRFRCA9IDxhbnk+J+etieW+heWuoeaguCcsXG4gIENBTkNFTEVEID0gPGFueT4n55So5oi35Y+W5raIJyxcbiAgQVBQUk9WRUQgPSA8YW55Piflt7LpgJrov4cnLFxuICBSRUpFQ1RFRCA9IDxhbnk+J+W3suaLkue7nScsXG4gIFBST0NFU1NJTkcgPSA8YW55PiflubPlj7DlpITnkIbkuK0nLFxuICBSRVRVUk5FRCA9IDxhbnk+J+W3sumAgOasvicsXG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZGVySXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvZHVjdElkOiBzdHJpbmc7XG4gIHZhcmlhbnRJZDogc3RyaW5nO1xuICBzdGF0dXM6IE9yZGVySXRlbVN0YXR1cztcbiAgdG90YWw6IG51bWJlcjtcbiAgcXVhbnRpdHk6IG51bWJlcjtcbiAgbWVkaWE6IE9yZGVySXRlbU1lZGlhW107XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZGVySXRlbU1lZGlhIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGFsdDogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG59XG5leHBvcnQgZW51bSBPcmRlckl0ZW1TdGF0dXMge1xuICBDUkVBVEVEID0gPGFueT4n5Yib5bu6JyxcbiAgQ0FOQ0VMRUQgPSA8YW55Piflt7Llj5bmtognLFxuICBDTE9TRUQgPSA8YW55Piflt7LlhbPpl60nLFxuICBSRVRVUk5fUkVRVUVTVEVEID0gPGFueT4n562J5b6F5a6h5qC4JyxcbiAgUkVUVVJOX0FQUFJPVkVEID0gPGFueT4n5ZWG5a625ZCM5oSP6YCA5qy+JyxcbiAgUkVUVVJOX1JFSkVDVEVEID0gPGFueT4n5ZWG5a625ouS57ud6YCA5qy+JyxcbiAgUkVUVVJOX1BST0NFU1NJTkcgPSA8YW55PifpgIDmrL7lpITnkIbkuK0nLFxuICBSRUZVTkRFRCA9IDxhbnk+J+W3sumAgOasvicsXG59XG5leHBvcnQgZW51bSBPcmRlclRpbWVsaW5lU3RhdHVzIHtcbiAgT1JERVJfQ1JFQVRFID0gPGFueT4n5Lqk5piT5Yib5bu6JyxcbiAgT1JERVJfQ0xPU0VEID0gPGFueT4n5Lqk5piT5YWz6ZetJyxcbiAgT1JERVJfQ0FOQ0VMRUQgPSA8YW55PifkuqTmmJPlj5bmtognLFxuICBPUkRFUl9QQUlEID0gPGFueT4n6K6i5Y2V5bey5pSv5LuYJyxcbiAgT1JERVJfUkVGVU5ERUQgPSA8YW55PiforqLljZXlt7LpgIDmrL4nLFxuICBPUkRFUl9DT01QTEVURUQgPSA8YW55PiforqLljZXlt7LlrozmiJAnLFxuICBPUkRFUl9SRVRVUk5fUkVRVUVTVEVEID0gPGFueT4n6YCA5qy+55Sz6K+3JyxcbiAgT1JERVJfUkVUVVJOX0FQUFJPVkVEID0gPGFueT4n5ZWG5a625ZCM5oSP6YCA5qy+JyxcbiAgT1JERVJfUkVUVVJOX1JFSkVDVEVEID0gPGFueT4n5ZWG5a625ouS57ud6YCA5qy+JyxcbiAgT1JERVJfUkVUVVJOX1BST0NFU1NJTkcgPSA8YW55PifpgIDmrL7lpITnkIbkuK0nLFxuICBPUkRFUl9SRVRVUk5fUkVGVU5ERUQgPSA8YW55PifpgIDmrL7lpITnkIblrozmiJDvvIzlt7LlhaXotKYnLFxufVxuZXhwb3J0IGludGVyZmFjZSBPcmRlclBheW91dCB7XG4gIGlkOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgc3RhdHVzOiBPcmRlclBheW91dFN0YXR1cyB8IHN0cmluZztcbiAgdHlwZTogT3JkZXJQYXlvdXRUeXBlO1xuICBmZWU6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgb3JkZXJJZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuZXhwb3J0IGVudW0gT3JkZXJQYXlvdXRTdGF0dXMge1xuICBDUkVBVEVEID0gPGFueT4n5Yib5bu6JyxcbiAgUEVORElORyA9IDxhbnk+J+WkhOeQhuS4rScsXG4gIFBBSUQgPSA8YW55Piflt7LmlK/ku5gnLFxuICBDQU5DRUxFRCA9IDxhbnk+J+W3suWPlua2iCcsXG4gIEZBSUxFRCA9IDxhbnk+J+Wksei0pScsXG59XG5leHBvcnQgZW51bSBPcmRlclBheW91dFR5cGUge1xuICBCQU5LID0gPGFueT4n6ZO26KGM6L2s6LSmJyxcbiAgQ0FSRCA9IDxhbnk+J+mTtuihjOWNoScsXG4gIFdFQ0hBVCA9IDxhbnk+J+W+ruS/oembtumSsScsXG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OrderIndexComponent } from './pages/orders-index/order-index.component';
|
|
2
|
+
import { OrderDetailComponent } from './pages/order-detail/order-detail.component';
|
|
3
|
+
import { OrderQrcodepayComponent } from './pages/order-qrcodepay/order-qrcodepay.component';
|
|
4
|
+
export const orderRoutes = [
|
|
5
|
+
{
|
|
6
|
+
path: '',
|
|
7
|
+
component: OrderIndexComponent,
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
path: ':id',
|
|
11
|
+
component: OrderDetailComponent,
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
path: ':id/qrcodepay',
|
|
15
|
+
component: OrderQrcodepayComponent,
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLnJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1vcmRlci9zcmMvbGliL29yZGVycy5yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFNUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFXO0lBQ2pDO1FBQ0UsSUFBSSxFQUFFLEVBQUU7UUFDUixTQUFTLEVBQUUsbUJBQW1CO0tBQy9CO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsS0FBSztRQUNYLFNBQVMsRUFBRSxvQkFBb0I7S0FDaEM7SUFDRDtRQUNFLElBQUksRUFBRSxlQUFlO1FBQ3JCLFNBQVMsRUFBRSx1QkFBdUI7S0FDbkM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9yZGVySW5kZXhDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL29yZGVycy1pbmRleC9vcmRlci1pbmRleC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JkZXJEZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL29yZGVyLWRldGFpbC9vcmRlci1kZXRhaWwuY29tcG9uZW50JztcbmltcG9ydCB7IE9yZGVyUXJjb2RlcGF5Q29tcG9uZW50IH0gZnJvbSAnLi9wYWdlcy9vcmRlci1xcmNvZGVwYXkvb3JkZXItcXJjb2RlcGF5LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBvcmRlclJvdXRlczogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY29tcG9uZW50OiBPcmRlckluZGV4Q29tcG9uZW50LFxuICB9LFxuICB7XG4gICAgcGF0aDogJzppZCcsXG4gICAgY29tcG9uZW50OiBPcmRlckRldGFpbENvbXBvbmVudCxcbiAgfSxcbiAge1xuICAgIHBhdGg6ICc6aWQvcXJjb2RlcGF5JyxcbiAgICBjb21wb25lbnQ6IE9yZGVyUXJjb2RlcGF5Q29tcG9uZW50LFxuICB9LFxuXTtcbiJdfQ==
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { AsyncPipe, NgClass } from '@angular/common';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
+
import { RouterLink } from '@angular/router';
|
|
6
|
+
import moment from 'moment';
|
|
7
|
+
import { map } from 'rxjs';
|
|
8
|
+
import { ContainerComponent, BaseComponent, SpinnerComponent, ThumbnailComponent, TitleComponent, ToolbarComponent, } from '@rolatech/angular-components';
|
|
9
|
+
import { CourseType, CourseService } from '@rolatech/angular-course';
|
|
10
|
+
import { NavigationService } from '@rolatech/angular-services';
|
|
11
|
+
import { OrderService } from '@rolatech/angular-services';
|
|
12
|
+
import { OrderStatus, OrderTimelineStatus, OrderType } from '../../interfaces';
|
|
13
|
+
import { OrderReturnRequestComponent } from '../../components/order-return-request/order-return-request.component';
|
|
14
|
+
import { ProductService } from '@rolatech/angular-services';
|
|
15
|
+
import { OrderCourseItemComponent } from '../../components/order-course-item/order-course-item.component';
|
|
16
|
+
import { OrderVariantItemComponent } from '../../components/order-variant-item/order-variant-item.component';
|
|
17
|
+
import { OrderProductItemComponent } from '../../components/order-product-item/order-product-item.component';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "@angular/material/button";
|
|
20
|
+
import * as i2 from "@angular/material/icon";
|
|
21
|
+
export class OrderDetailComponent extends BaseComponent {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
this.status = OrderStatus;
|
|
25
|
+
this.type = CourseType;
|
|
26
|
+
this.orderType = OrderType;
|
|
27
|
+
this.orderService = inject(OrderService);
|
|
28
|
+
this.courseService = inject(CourseService);
|
|
29
|
+
this.productService = inject(ProductService);
|
|
30
|
+
this.navigationService = inject(NavigationService);
|
|
31
|
+
this.info = false;
|
|
32
|
+
this.loadingTimeline = false;
|
|
33
|
+
this.timelineStatus = OrderTimelineStatus;
|
|
34
|
+
this.countDown = '';
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.get();
|
|
38
|
+
}
|
|
39
|
+
get() {
|
|
40
|
+
this.orderService.get(this.id).subscribe({
|
|
41
|
+
next: (res) => {
|
|
42
|
+
this.order = res.data;
|
|
43
|
+
if (this.order.type?.toString() === 'PRODUCT') {
|
|
44
|
+
this.getVariant();
|
|
45
|
+
}
|
|
46
|
+
else if (this.order.type?.toString() === 'COURSE') {
|
|
47
|
+
this.getCourse();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.getCourse();
|
|
51
|
+
}
|
|
52
|
+
if (this.order.status === 'CREATED') {
|
|
53
|
+
setInterval(() => {
|
|
54
|
+
const start = moment();
|
|
55
|
+
const end = moment(this.order.createdAt).add(15, 'minute');
|
|
56
|
+
const diff = end.diff(start);
|
|
57
|
+
const duration = moment.duration(diff);
|
|
58
|
+
this.countDown = moment.utc(duration.as('milliseconds')).format('mm:ss');
|
|
59
|
+
}, 1000);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
back() {
|
|
65
|
+
this.navigationService.back();
|
|
66
|
+
}
|
|
67
|
+
getCourse() {
|
|
68
|
+
const { productId } = this.order.items[0];
|
|
69
|
+
this.course$ = this.courseService.get(productId).pipe(map((res) => res.data));
|
|
70
|
+
}
|
|
71
|
+
getVariant() {
|
|
72
|
+
const { variantId } = this.order.items[0];
|
|
73
|
+
if (variantId) {
|
|
74
|
+
this.productService
|
|
75
|
+
.getVariant(variantId)
|
|
76
|
+
.pipe(map((res) => res.data))
|
|
77
|
+
.subscribe({
|
|
78
|
+
next: (res) => { },
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
refund() {
|
|
83
|
+
const options = {
|
|
84
|
+
width: '500px',
|
|
85
|
+
title: '申请退款',
|
|
86
|
+
height: '90%',
|
|
87
|
+
cancelText: '取消',
|
|
88
|
+
confirmText: '确认',
|
|
89
|
+
component: OrderReturnRequestComponent,
|
|
90
|
+
data: {
|
|
91
|
+
reason: '',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
this.dialogService.open(options);
|
|
95
|
+
this.dialogService.confirmed().subscribe((res) => {
|
|
96
|
+
if (res) {
|
|
97
|
+
this.orderService.refund(this.id, res).subscribe({
|
|
98
|
+
next: (res) => {
|
|
99
|
+
this.snackBarService.open('退款申请成功, 等待审核');
|
|
100
|
+
},
|
|
101
|
+
error: (error) => {
|
|
102
|
+
this.snackBarService.open(error.message);
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
cancel() {
|
|
109
|
+
this.orderService.cancel(this.id).subscribe({
|
|
110
|
+
next: (res) => {
|
|
111
|
+
this.order.status = OrderStatus[OrderStatus.CANCELED];
|
|
112
|
+
this.snackBarService.open('取消成功');
|
|
113
|
+
},
|
|
114
|
+
error: (error) => {
|
|
115
|
+
this.snackBarService.open(error.message);
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
pay() {
|
|
120
|
+
this.router.navigateByUrl(`/orders/${this.id}/qrcodepay`);
|
|
121
|
+
}
|
|
122
|
+
timeline() {
|
|
123
|
+
this.info = true;
|
|
124
|
+
this.loadingTimeline = true;
|
|
125
|
+
this.orderService.timeline(this.id).subscribe({
|
|
126
|
+
next: (res) => {
|
|
127
|
+
this.timelineData = res.data;
|
|
128
|
+
this.loadingTimeline = false;
|
|
129
|
+
},
|
|
130
|
+
error: (error) => {
|
|
131
|
+
this.loadingTimeline = false;
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderDetailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
136
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.4", type: OrderDetailComponent, isStandalone: true, selector: "rolatech-order-detail", usesInheritance: true, ngImport: i0, template: "@if (order) {\n <rolatech-container>\n <rolatech-toolbar [title]=\"status[order.status]\" large link=\"../\">\n <button mat-button (click)=\"timeline()\">\n <mat-icon>history</mat-icon>\n <span>\u8BA2\u5355\u72B6\u6001</span>\n </button>\n </rolatech-toolbar>\n <div>\n <div>\n @if (order.status === 'CREATED') {\n <div class=\"text-orange-600 font-bold\">\u652F\u4ED8\u5012\u8BA1\u65F6: {{ countDown }}</div>\n }\n </div>\n <div>\n <div>\n @if (course$ | async; as course) {\n <div class=\"text-lg py-3\">\u8BFE\u7A0B\u4FE1\u606F</div>\n <rolatech-order-course-item [routerLink]=\"['/courses/', course.id]\" [course]=\"course\"></rolatech-order-course-item>\n } @else {\n <div class=\"text-lg py-3\">\u5546\u54C1\u4FE1\u606F</div>\n @for (item of order.items; track $index) {\n <!-- [description]=\"variant.options | options\"\n [thumbnail]=\"variant.media ? variant.media[0].url + '!w200' : product.media[0].url + '!w200'\" -->\n <rolatech-order-product-item\n [thumbnail]=\"item.media[0].url + '!w200 '\"\n [routerLink]=\"['/products/', item.productId]\"\n [title]=\"item.name\"\n [total]=\"item.total\"\n [quantity]=\"item.quantity\"\n ></rolatech-order-product-item>\n }\n }\n </div>\n <div class=\"mt-3\">\n <div class=\"text-lg py-3 font-medium\">\u8BA2\u5355\u4FE1\u606F</div>\n <div class=\"flex items-center justify-between py-1\">\n <label class=\"font-medium\">\u8BA2\u5355\u53F7</label>\n <span class=\"text-sm\"> {{ order.orderNo }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <label class=\"font-medium\">\u4E0B\u5355\u65F6\u95F4</label>\n <span class=\"text-sm\"> {{ order.createdAt }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <label class=\"font-medium\">\u5E94\u4ED8\u91D1\u989D</label>\n <span class=\"text-sm\">\u00A5{{ order.total / 100 }}</span>\n </div>\n </div>\n @if (order.status.toString() === 'CREATED' || order.status.toString() === 'PAID') {\n <div class=\"mt-6\">\n <div class=\"text-lg pb-3 font-medium\">\u652F\u4ED8\u65B9\u5F0F</div>\n <div class=\"flex\">\n <img class=\"w-6 h-6\" src=\"assets/pay_wechat.png\" />\n <span class=\"ml-1\">\u5FAE\u4FE1\u652F\u4ED8</span>\n </div>\n </div>\n }\n </div>\n <!-- safe area -->\n <div class=\"pb-16 sm:pb-3\"></div>\n <div class=\"\">\n @if (order.status.toString() === 'PAID') {\n <button mat-flat-button class=\"w-32 min-h-11\" (click)=\"refund()\">\u7533\u8BF7\u9000\u6B3E</button>\n }\n <div class=\"flex items-center justify-end\">\n @if (order.status.toString() === 'CREATED') {\n <span class=\"underline text-sm underline-offset-4 mr-6 cursor-pointer hover:text-orange-400\" (click)=\"cancel()\"\n >\u53D6\u6D88\u8BA2\u5355</span\n >\n }\n @if (order.status.toString() === 'CREATED') {\n <button mat-flat-button class=\"w-32 min-h-11\" (click)=\"pay()\">\u652F\u4ED8\u8BA2\u5355</button>\n }\n </div>\n </div>\n </div>\n </rolatech-container>\n}\n<div\n [ngClass]=\"info ? 'translate-none' : 'translate-x-full'\"\n class=\"fixed top-0 right-0 z-[1001] h-screen p-4 overflow-y-auto transition-transform bg-[--rt-raised-background] w-80 sm:w-[300px] shadow-xl\"\n>\n <div class=\"flex justify-between items-center sm:p-4\">\n <div class=\"text-xl font-bold\">\u8BA2\u5355\u72B6\u6001</div>\n <button mat-icon-button (click)=\"info = !info\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n @if (!loadingTimeline) {\n <div class=\"mt-3 p-1 sm:p-4\">\n <ol class=\"relative border-l border-[--rt-border-color]\">\n @for (item of timelineData; track item) {\n <li class=\"mb-8 ml-4\">\n <div\n class=\"absolute w-3 h-3 rounded-full mt-1.5 -left-1.5 border border-[--rt-raised-background] bg-[--rt-text-primary]\"\n ></div>\n <div class=\"text-md font-bold mb-1\">{{ timelineStatus[item.status] }}</div>\n @if (item.status === 'BOOKING_RETURN_REJECTED') {\n <div class=\"text-sm mb-1\">{{ item.return.note }}</div>\n }\n @if (item.status === 'BOOKING_RETURN_REQUESTED') {\n <div class=\"text-sm mb-1\">{{ item.return.reason }}</div>\n }\n <div class=\"text-sm text-gray-400\">{{ item.date }}</div>\n </li>\n }\n </ol>\n </div>\n }\n @if (loadingTimeline) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n }\n</div>\n<div\n (click)=\"info = !info\"\n [ngClass]=\"info ? 'visible' : 'invisible'\"\n class=\"bg-[--rt-10-percent-layer] fixed inset-0 z-[1000]\"\n></div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: OrderCourseItemComponent, selector: "rolatech-order-course-item", inputs: ["course"] }, { kind: "component", type: OrderProductItemComponent, selector: "rolatech-order-product-item", inputs: ["thumbnail", "title", "description", "quantity", "total"] }] }); }
|
|
137
|
+
}
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: OrderDetailComponent, decorators: [{
|
|
139
|
+
type: Component,
|
|
140
|
+
args: [{ selector: 'rolatech-order-detail', standalone: true, imports: [
|
|
141
|
+
MatButtonModule,
|
|
142
|
+
MatIconModule,
|
|
143
|
+
RouterLink,
|
|
144
|
+
NgClass,
|
|
145
|
+
AsyncPipe,
|
|
146
|
+
SpinnerComponent,
|
|
147
|
+
ContainerComponent,
|
|
148
|
+
ThumbnailComponent,
|
|
149
|
+
ToolbarComponent,
|
|
150
|
+
TitleComponent,
|
|
151
|
+
OrderCourseItemComponent,
|
|
152
|
+
OrderProductItemComponent,
|
|
153
|
+
OrderVariantItemComponent,
|
|
154
|
+
], template: "@if (order) {\n <rolatech-container>\n <rolatech-toolbar [title]=\"status[order.status]\" large link=\"../\">\n <button mat-button (click)=\"timeline()\">\n <mat-icon>history</mat-icon>\n <span>\u8BA2\u5355\u72B6\u6001</span>\n </button>\n </rolatech-toolbar>\n <div>\n <div>\n @if (order.status === 'CREATED') {\n <div class=\"text-orange-600 font-bold\">\u652F\u4ED8\u5012\u8BA1\u65F6: {{ countDown }}</div>\n }\n </div>\n <div>\n <div>\n @if (course$ | async; as course) {\n <div class=\"text-lg py-3\">\u8BFE\u7A0B\u4FE1\u606F</div>\n <rolatech-order-course-item [routerLink]=\"['/courses/', course.id]\" [course]=\"course\"></rolatech-order-course-item>\n } @else {\n <div class=\"text-lg py-3\">\u5546\u54C1\u4FE1\u606F</div>\n @for (item of order.items; track $index) {\n <!-- [description]=\"variant.options | options\"\n [thumbnail]=\"variant.media ? variant.media[0].url + '!w200' : product.media[0].url + '!w200'\" -->\n <rolatech-order-product-item\n [thumbnail]=\"item.media[0].url + '!w200 '\"\n [routerLink]=\"['/products/', item.productId]\"\n [title]=\"item.name\"\n [total]=\"item.total\"\n [quantity]=\"item.quantity\"\n ></rolatech-order-product-item>\n }\n }\n </div>\n <div class=\"mt-3\">\n <div class=\"text-lg py-3 font-medium\">\u8BA2\u5355\u4FE1\u606F</div>\n <div class=\"flex items-center justify-between py-1\">\n <label class=\"font-medium\">\u8BA2\u5355\u53F7</label>\n <span class=\"text-sm\"> {{ order.orderNo }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <label class=\"font-medium\">\u4E0B\u5355\u65F6\u95F4</label>\n <span class=\"text-sm\"> {{ order.createdAt }}</span>\n </div>\n <div class=\"flex items-center justify-between py-1\">\n <label class=\"font-medium\">\u5E94\u4ED8\u91D1\u989D</label>\n <span class=\"text-sm\">\u00A5{{ order.total / 100 }}</span>\n </div>\n </div>\n @if (order.status.toString() === 'CREATED' || order.status.toString() === 'PAID') {\n <div class=\"mt-6\">\n <div class=\"text-lg pb-3 font-medium\">\u652F\u4ED8\u65B9\u5F0F</div>\n <div class=\"flex\">\n <img class=\"w-6 h-6\" src=\"assets/pay_wechat.png\" />\n <span class=\"ml-1\">\u5FAE\u4FE1\u652F\u4ED8</span>\n </div>\n </div>\n }\n </div>\n <!-- safe area -->\n <div class=\"pb-16 sm:pb-3\"></div>\n <div class=\"\">\n @if (order.status.toString() === 'PAID') {\n <button mat-flat-button class=\"w-32 min-h-11\" (click)=\"refund()\">\u7533\u8BF7\u9000\u6B3E</button>\n }\n <div class=\"flex items-center justify-end\">\n @if (order.status.toString() === 'CREATED') {\n <span class=\"underline text-sm underline-offset-4 mr-6 cursor-pointer hover:text-orange-400\" (click)=\"cancel()\"\n >\u53D6\u6D88\u8BA2\u5355</span\n >\n }\n @if (order.status.toString() === 'CREATED') {\n <button mat-flat-button class=\"w-32 min-h-11\" (click)=\"pay()\">\u652F\u4ED8\u8BA2\u5355</button>\n }\n </div>\n </div>\n </div>\n </rolatech-container>\n}\n<div\n [ngClass]=\"info ? 'translate-none' : 'translate-x-full'\"\n class=\"fixed top-0 right-0 z-[1001] h-screen p-4 overflow-y-auto transition-transform bg-[--rt-raised-background] w-80 sm:w-[300px] shadow-xl\"\n>\n <div class=\"flex justify-between items-center sm:p-4\">\n <div class=\"text-xl font-bold\">\u8BA2\u5355\u72B6\u6001</div>\n <button mat-icon-button (click)=\"info = !info\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n @if (!loadingTimeline) {\n <div class=\"mt-3 p-1 sm:p-4\">\n <ol class=\"relative border-l border-[--rt-border-color]\">\n @for (item of timelineData; track item) {\n <li class=\"mb-8 ml-4\">\n <div\n class=\"absolute w-3 h-3 rounded-full mt-1.5 -left-1.5 border border-[--rt-raised-background] bg-[--rt-text-primary]\"\n ></div>\n <div class=\"text-md font-bold mb-1\">{{ timelineStatus[item.status] }}</div>\n @if (item.status === 'BOOKING_RETURN_REJECTED') {\n <div class=\"text-sm mb-1\">{{ item.return.note }}</div>\n }\n @if (item.status === 'BOOKING_RETURN_REQUESTED') {\n <div class=\"text-sm mb-1\">{{ item.return.reason }}</div>\n }\n <div class=\"text-sm text-gray-400\">{{ item.date }}</div>\n </li>\n }\n </ol>\n </div>\n }\n @if (loadingTimeline) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n }\n</div>\n<div\n (click)=\"info = !info\"\n [ngClass]=\"info ? 'visible' : 'invisible'\"\n class=\"bg-[--rt-10-percent-layer] fixed inset-0 z-[1000]\"\n></div>\n" }]
|
|
155
|
+
}] });
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1vcmRlci9zcmMvbGliL3BhZ2VzL29yZGVyLWRldGFpbC9vcmRlci1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLW9yZGVyL3NyYy9saWIvcGFnZXMvb3JkZXItZGV0YWlsL29yZGVyLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixHQUNqQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQVUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBUyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtC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QUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUMvQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBakhVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHdHQzdDakMsa21LQXlIQSx5REQ3RkksZUFBZSx3VUFDZixhQUFhLG9MQUNiLFVBQVUsb09BQ1YsT0FBTywrRUFDUCxTQUFTLDhDQUNULGdCQUFnQixnRkFDaEIsa0JBQWtCLCtEQUVsQixnQkFBZ0IsZ0lBRWhCLHdCQUF3QiwyRkFDeEIseUJBQXlCOzsyRkFNaEIsb0JBQW9CO2tCQXJCaEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixVQUFVO3dCQUNWLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLHlCQUF5QjtxQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDb250YWluZXJDb21wb25lbnQsXG4gIEJhc2VDb21wb25lbnQsXG4gIFNwaW5uZXJDb21wb25lbnQsXG4gIFRodW1ibmFpbENvbXBvbmVudCxcbiAgVGl0bGVDb21wb25lbnQsXG4gIFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ291cnNlVHlwZSwgQ291cnNlLCBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY291cnNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItc2VydmljZXMnO1xuaW1wb3J0IHsgT3JkZXJTZXJ2aWNlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItc2VydmljZXMnO1xuaW1wb3J0IHsgT3JkZXIsIE9yZGVyU3RhdHVzLCBPcmRlclRpbWVsaW5lU3RhdHVzLCBPcmRlclR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9yZGVyUmV0dXJuUmVxdWVzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvb3JkZXItcmV0dXJuLXJlcXVlc3Qvb3JkZXItcmV0dXJuLXJlcXVlc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RTZXJ2aWNlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItc2VydmljZXMnO1xuaW1wb3J0IHsgT3JkZXJDb3Vyc2VJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9vcmRlci1jb3Vyc2UtaXRlbS9vcmRlci1jb3Vyc2UtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JkZXJWYXJpYW50SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvb3JkZXItdmFyaWFudC1pdGVtL29yZGVyLXZhcmlhbnQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JkZXJQcm9kdWN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvb3JkZXItcHJvZHVjdC1pdGVtL29yZGVyLXByb2R1Y3QtaXRlbS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtb3JkZXItZGV0YWlsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIFJvdXRlckxpbmssXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgU3Bpbm5lckNvbXBvbmVudCxcbiAgICBDb250YWluZXJDb21wb25lbnQsXG4gICAgVGh1bWJuYWlsQ29tcG9uZW50LFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgT3JkZXJDb3Vyc2VJdGVtQ29tcG9uZW50LFxuICAgIE9yZGVyUHJvZHVjdEl0ZW1Db21wb25lbnQsXG4gICAgT3JkZXJWYXJpYW50SXRlbUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL29yZGVyLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9vcmRlci1kZXRhaWwuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBPcmRlckRldGFpbENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBvcmRlciE6IE9yZGVyO1xuICBzdGF0dXM6IGFueSA9IE9yZGVyU3RhdHVzO1xuICB0eXBlID0gQ291cnNlVHlwZTtcbiAgb3JkZXJUeXBlID0gT3JkZXJUeXBlO1xuICBvcmRlclNlcnZpY2UgPSBpbmplY3QoT3JkZXJTZXJ2aWNlKTtcbiAgY291cnNlU2VydmljZSA9IGluamVjdChDb3Vyc2VTZXJ2aWNlKTtcbiAgcHJvZHVjdFNlcnZpY2UgPSBpbmplY3QoUHJvZHVjdFNlcnZpY2UpO1xuICBuYXZpZ2F0aW9uU2VydmljZSA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHRpbWVsaW5lRGF0YTogYW55O1xuICBpbmZvID0gZmFsc2U7XG4gIGxvYWRpbmdUaW1lbGluZSA9IGZhbHNlO1xuICB0aW1lbGluZVN0YXR1czogYW55ID0gT3JkZXJUaW1lbGluZVN0YXR1cztcblxuICAvLyBvcmRlciQ6IE9ic2VydmFibGU8T3JkZXI+O1xuICBjb3Vyc2UkPzogT2JzZXJ2YWJsZTxDb3Vyc2U+O1xuICBjb3VudERvd24gPSAnJztcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXQoKTtcbiAgfVxuICBnZXQoKSB7XG4gICAgdGhpcy5vcmRlclNlcnZpY2UuZ2V0KHRoaXMuaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vcmRlciA9IHJlcy5kYXRhO1xuICAgICAgICBpZiAodGhpcy5vcmRlci50eXBlPy50b1N0cmluZygpID09PSAnUFJPRFVDVCcpIHtcbiAgICAgICAgICB0aGlzLmdldFZhcmlhbnQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9yZGVyLnR5cGU/LnRvU3RyaW5nKCkgPT09ICdDT1VSU0UnKSB7XG4gICAgICAgICAgdGhpcy5nZXRDb3Vyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdldENvdXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yZGVyLnN0YXR1cyA9PT0gJ0NSRUFURUQnKSB7XG4gICAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBtb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG1vbWVudCh0aGlzLm9yZGVyLmNyZWF0ZWRBdCkuYWRkKDE1LCAnbWludXRlJyk7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gZW5kLmRpZmYoc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBtb21lbnQuZHVyYXRpb24oZGlmZik7XG4gICAgICAgICAgICB0aGlzLmNvdW50RG93biA9IG1vbWVudC51dGMoZHVyYXRpb24uYXMoJ21pbGxpc2Vjb25kcycpKS5mb3JtYXQoJ21tOnNzJyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgYmFjaygpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgfVxuICBnZXRDb3Vyc2UoKSB7XG4gICAgY29uc3QgeyBwcm9kdWN0SWQgfSA9IHRoaXMub3JkZXIuaXRlbXNbMF07XG4gICAgdGhpcy5jb3Vyc2UkID0gdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldChwcm9kdWN0SWQpLnBpcGUobWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEpKTtcbiAgfVxuICBnZXRWYXJpYW50KCkge1xuICAgIGNvbnN0IHsgdmFyaWFudElkIH0gPSB0aGlzLm9yZGVyLml0ZW1zWzBdO1xuICAgIGlmICh2YXJpYW50SWQpIHtcbiAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgICAgLmdldFZhcmlhbnQodmFyaWFudElkKVxuICAgICAgICAucGlwZShtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YSkpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHt9LFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVmdW5kKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIHRpdGxlOiAn55Sz6K+36YCA5qy+JyxcbiAgICAgIGhlaWdodDogJzkwJScsXG4gICAgICBjYW5jZWxUZXh0OiAn5Y+W5raIJyxcbiAgICAgIGNvbmZpcm1UZXh0OiAn56Gu6K6kJyxcbiAgICAgIGNvbXBvbmVudDogT3JkZXJSZXR1cm5SZXF1ZXN0Q29tcG9uZW50LFxuICAgICAgZGF0YToge1xuICAgICAgICByZWFzb246ICcnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKG9wdGlvbnMpO1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5yZWZ1bmQodGhpcy5pZCwgcmVzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ+mAgOasvueUs+ivt+aIkOWKnywg562J5b6F5a6h5qC4Jyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9yZGVyU2VydmljZS5jYW5jZWwodGhpcy5pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5vcmRlci5zdGF0dXMgPSBPcmRlclN0YXR1c1tPcmRlclN0YXR1cy5DQU5DRUxFRF07XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ+WPlua2iOaIkOWKnycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcGF5KCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9vcmRlcnMvJHt0aGlzLmlkfS9xcmNvZGVwYXlgKTtcbiAgfVxuICB0aW1lbGluZSgpIHtcbiAgICB0aGlzLmluZm8gPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZ1RpbWVsaW5lID0gdHJ1ZTtcbiAgICB0aGlzLm9yZGVyU2VydmljZS50aW1lbGluZSh0aGlzLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnRpbWVsaW5lRGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lbGluZSA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGltZWxpbmUgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIkBpZiAob3JkZXIpIHtcbiAgPHJvbGF0ZWNoLWNvbnRhaW5lcj5cbiAgICA8cm9sYXRlY2gtdG9vbGJhciBbdGl0bGVdPVwic3RhdHVzW29yZGVyLnN0YXR1c11cIiBsYXJnZSBsaW5rPVwiLi4vXCI+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInRpbWVsaW5lKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmhpc3Rvcnk8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj7orqLljZXnirbmgIE8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3JvbGF0ZWNoLXRvb2xiYXI+XG4gICAgPGRpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAob3JkZXIuc3RhdHVzID09PSAnQ1JFQVRFRCcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1vcmFuZ2UtNjAwIGZvbnQtYm9sZFwiPuaUr+S7mOWAkuiuoeaXtjoge3sgY291bnREb3duIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBAaWYgKGNvdXJzZSQgfCBhc3luYzsgYXMgY291cnNlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZyBweS0zXCI+6K++56iL5L+h5oGvPC9kaXY+XG4gICAgICAgICAgICA8cm9sYXRlY2gtb3JkZXItY291cnNlLWl0ZW0gW3JvdXRlckxpbmtdPVwiWycvY291cnNlcy8nLCBjb3Vyc2UuaWRdXCIgW2NvdXJzZV09XCJjb3Vyc2VcIj48L3JvbGF0ZWNoLW9yZGVyLWNvdXJzZS1pdGVtPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGcgcHktM1wiPuWVhuWTgeS/oeaBrzwvZGl2PlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBvcmRlci5pdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDwhLS0gW2Rlc2NyaXB0aW9uXT1cInZhcmlhbnQub3B0aW9ucyB8IG9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFt0aHVtYm5haWxdPVwidmFyaWFudC5tZWRpYSA/IHZhcmlhbnQubWVkaWFbMF0udXJsICsgJyF3MjAwJyA6IHByb2R1Y3QubWVkaWFbMF0udXJsICsgJyF3MjAwJ1wiIC0tPlxuICAgICAgICAgICAgICA8cm9sYXRlY2gtb3JkZXItcHJvZHVjdC1pdGVtXG4gICAgICAgICAgICAgICAgW3RodW1ibmFpbF09XCJpdGVtLm1lZGlhWzBdLnVybCArICchdzIwMCAnXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9wcm9kdWN0cy8nLCBpdGVtLnByb2R1Y3RJZF1cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgIFt0b3RhbF09XCJpdGVtLnRvdGFsXCJcbiAgICAgICAgICAgICAgICBbcXVhbnRpdHldPVwiaXRlbS5xdWFudGl0eVwiXG4gICAgICAgICAgICAgID48L3JvbGF0ZWNoLW9yZGVyLXByb2R1Y3QtaXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxnIHB5LTMgZm9udC1tZWRpdW1cIj7orqLljZXkv6Hmga88L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTFcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtbWVkaXVtXCI+6K6i5Y2V5Y+3PC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbVwiPiB7eyBvcmRlci5vcmRlck5vIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktMVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1tZWRpdW1cIj7kuIvljZXml7bpl7Q8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+IHt7IG9yZGVyLmNyZWF0ZWRBdCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTFcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtbWVkaXVtXCI+5bqU5LuY6YeR6aKdPC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbVwiPsKle3sgb3JkZXIudG90YWwgLyAxMDAgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKG9yZGVyLnN0YXR1cy50b1N0cmluZygpID09PSAnQ1JFQVRFRCcgfHwgb3JkZXIuc3RhdHVzLnRvU3RyaW5nKCkgPT09ICdQQUlEJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC02XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZyBwYi0zIGZvbnQtbWVkaXVtXCI+5pSv5LuY5pa55byPPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy02IGgtNlwiIHNyYz1cImFzc2V0cy9wYXlfd2VjaGF0LnBuZ1wiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMVwiPuW+ruS/oeaUr+S7mDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gc2FmZSBhcmVhIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBiLTE2IHNtOnBiLTNcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgQGlmIChvcmRlci5zdGF0dXMudG9TdHJpbmcoKSA9PT0gJ1BBSUQnKSB7XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJ3LTMyIG1pbi1oLTExXCIgKGNsaWNrKT1cInJlZnVuZCgpXCI+55Sz6K+36YCA5qy+PC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgQGlmIChvcmRlci5zdGF0dXMudG9TdHJpbmcoKSA9PT0gJ0NSRUFURUQnKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuZGVybGluZSB0ZXh0LXNtIHVuZGVybGluZS1vZmZzZXQtNCBtci02IGN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtb3JhbmdlLTQwMFwiIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICAgICAgICAgID7lj5bmtojorqLljZU8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChvcmRlci5zdGF0dXMudG9TdHJpbmcoKSA9PT0gJ0NSRUFURUQnKSB7XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInctMzIgbWluLWgtMTFcIiAoY2xpY2spPVwicGF5KClcIj7mlK/ku5jorqLljZU8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvcm9sYXRlY2gtY29udGFpbmVyPlxufVxuPGRpdlxuICBbbmdDbGFzc109XCJpbmZvID8gJ3RyYW5zbGF0ZS1ub25lJyA6ICd0cmFuc2xhdGUteC1mdWxsJ1wiXG4gIGNsYXNzPVwiZml4ZWQgdG9wLTAgcmlnaHQtMCB6LVsxMDAxXSBoLXNjcmVlbiBwLTQgb3ZlcmZsb3cteS1hdXRvIHRyYW5zaXRpb24tdHJhbnNmb3JtIGJnLVstLXJ0LXJhaXNlZC1iYWNrZ3JvdW5kXSB3LTgwIHNtOnctWzMwMHB4XSBzaGFkb3cteGxcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHNtOnAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtYm9sZFwiPuiuouWNleeKtuaAgTwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJpbmZvID0gIWluZm9cIj5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICBAaWYgKCFsb2FkaW5nVGltZWxpbmUpIHtcbiAgICA8ZGl2IGNsYXNzPVwibXQtMyBwLTEgc206cC00XCI+XG4gICAgICA8b2wgY2xhc3M9XCJyZWxhdGl2ZSBib3JkZXItbCBib3JkZXItWy0tcnQtYm9yZGVyLWNvbG9yXVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIHRpbWVsaW5lRGF0YTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTggbWwtNFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHctMyBoLTMgcm91bmRlZC1mdWxsIG10LTEuNSAtbGVmdC0xLjUgYm9yZGVyIGJvcmRlci1bLS1ydC1yYWlzZWQtYmFja2dyb3VuZF0gYmctWy0tcnQtdGV4dC1wcmltYXJ5XVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbWItMVwiPnt7IHRpbWVsaW5lU3RhdHVzW2l0ZW0uc3RhdHVzXSB9fTwvZGl2PlxuICAgICAgICAgICAgQGlmIChpdGVtLnN0YXR1cyA9PT0gJ0JPT0tJTkdfUkVUVVJOX1JFSkVDVEVEJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBtYi0xXCI+e3sgaXRlbS5yZXR1cm4ubm90ZSB9fTwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpdGVtLnN0YXR1cyA9PT0gJ0JPT0tJTkdfUkVUVVJOX1JFUVVFU1RFRCcpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gbWItMVwiPnt7IGl0ZW0ucmV0dXJuLnJlYXNvbiB9fTwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTQwMFwiPnt7IGl0ZW0uZGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICAgIDwvb2w+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChsb2FkaW5nVGltZWxpbmUpIHtcbiAgICA8ZGl2PlxuICAgICAgPHJvbGF0ZWNoLXNwaW5uZXI+PC9yb2xhdGVjaC1zcGlubmVyPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxkaXZcbiAgKGNsaWNrKT1cImluZm8gPSAhaW5mb1wiXG4gIFtuZ0NsYXNzXT1cImluZm8gPyAndmlzaWJsZScgOiAnaW52aXNpYmxlJ1wiXG4gIGNsYXNzPVwiYmctWy0tcnQtMTAtcGVyY2VudC1sYXllcl0gZml4ZWQgaW5zZXQtMCB6LVsxMDAwXVwiXG4+PC9kaXY+XG4iXX0=
|