@rolatech/angular-product 17.1.10 → 19.0.0-beta.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/fesm2022/{rolatech-angular-product-product-index.component-sLpwxg6g.mjs → rolatech-angular-product-product-index.component-Dy6tCxJf.mjs} +6 -7
- package/fesm2022/rolatech-angular-product-product-index.component-Dy6tCxJf.mjs.map +1 -0
- package/fesm2022/rolatech-angular-product.mjs +271 -224
- package/fesm2022/rolatech-angular-product.mjs.map +1 -1
- package/lib/pages/product/product-category/product-category.component.d.ts +1 -2
- package/lib/pages/product/product-layout/product-layout.component.d.ts +1 -2
- package/lib/pages/product-manage/product-manage-info/product-manage-info.component.d.ts +1 -2
- package/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.d.ts +26 -2
- package/lib/services/index.d.ts +0 -2
- package/package.json +8 -6
- package/themes/_default.scss +1 -1
- package/esm2022/index.mjs +0 -7
- package/esm2022/lib/components/index.mjs +0 -12
- package/esm2022/lib/components/product-action/product-action.component.mjs +0 -32
- package/esm2022/lib/components/product-info/product-info.component.mjs +0 -19
- package/esm2022/lib/components/product-item/product-item.component.mjs +0 -17
- package/esm2022/lib/components/product-manage-option-add/product-manage-option-add.component.mjs +0 -68
- package/esm2022/lib/components/product-manage-option-item/product-manage-option-item.component.mjs +0 -49
- package/esm2022/lib/components/product-manage-variant/product-manage-variant.component.mjs +0 -127
- package/esm2022/lib/components/product-mange-option-action/product-manage-option-action.component.mjs +0 -22
- package/esm2022/lib/components/product-mange-section-item/product-mange-section-item.component.mjs +0 -89
- package/esm2022/lib/components/product-media/product-media.component.mjs +0 -34
- package/esm2022/lib/components/product-option/product-option.component.mjs +0 -23
- package/esm2022/lib/components/product-owner-renderer/product-owner-renderer.component.mjs +0 -20
- package/esm2022/lib/components/product-pricing/product-pricing.component.mjs +0 -31
- package/esm2022/lib/components/product-section/product-section.component.mjs +0 -26
- package/esm2022/lib/interfaces/category.mjs +0 -2
- package/esm2022/lib/interfaces/index.mjs +0 -2
- package/esm2022/lib/interfaces/product.mjs +0 -36
- package/esm2022/lib/pages/product/product-category/product-category.component.mjs +0 -74
- package/esm2022/lib/pages/product/product-details/product-details.component.mjs +0 -185
- package/esm2022/lib/pages/product/product-details/selected.pipe.mjs +0 -18
- package/esm2022/lib/pages/product/product-index/product-index.component.mjs +0 -43
- package/esm2022/lib/pages/product/product-layout/product-layout.component.mjs +0 -50
- package/esm2022/lib/pages/product/product.routes.mjs +0 -24
- package/esm2022/lib/pages/product-manage/product-manage-content/product-manage-content.component.mjs +0 -12
- package/esm2022/lib/pages/product-manage/product-manage-create/product-manage-create.component.mjs +0 -61
- package/esm2022/lib/pages/product-manage/product-manage-index/product-manage-index.component.mjs +0 -155
- package/esm2022/lib/pages/product-manage/product-manage-info/product-manage-info.component.mjs +0 -112
- package/esm2022/lib/pages/product-manage/product-manage-inventory/product-manage-inventory.component.mjs +0 -14
- package/esm2022/lib/pages/product-manage/product-manage-item/product-manage-item.component.mjs +0 -28
- package/esm2022/lib/pages/product-manage/product-manage-item-header/product-manage-item-header.component.mjs +0 -12
- package/esm2022/lib/pages/product-manage/product-manage-layout/product-manage-layout.component.mjs +0 -55
- package/esm2022/lib/pages/product-manage/product-manage-media/product-manage-media.component.mjs +0 -137
- package/esm2022/lib/pages/product-manage/product-manage-options/product-manage-options.component.mjs +0 -102
- package/esm2022/lib/pages/product-manage/product-manage-pricing/product-manage-pricing.component.mjs +0 -12
- package/esm2022/lib/pages/product-manage/product-manage-schedule/product-manage-schedule.component.mjs +0 -14
- package/esm2022/lib/pages/product-manage/product-manage-sections/product-manage-sections.component.mjs +0 -171
- package/esm2022/lib/pages/product-manage/product-manage-variants/product-manage-variants.component.mjs +0 -133
- package/esm2022/lib/pages/product-manage/product-manage.routes.mjs +0 -60
- package/esm2022/lib/services/index.mjs +0 -4
- package/esm2022/lib/services/product-category.service.mjs +0 -38
- package/esm2022/provider.mjs +0 -13
- package/esm2022/rolatech-angular-product.mjs +0 -5
- package/fesm2022/rolatech-angular-product-product-index.component-sLpwxg6g.mjs.map +0 -1
- package/lib/components/product-mange-option-action/product-manage-option-action.component.d.ts +0 -10
- package/lib/services/product-category.service.d.ts +0 -12
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { inject, Component, input, ViewEncapsulation, booleanAttribute, output, computed, model, Pipe, signal, effect, viewChild, ChangeDetectorRef, importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { AngularCommonModule, OptionsFormatPipe, DecimalDirective, FixedPipe } from '@rolatech/angular-common';
|
|
4
|
-
import { BaseComponent, AngularComponentsModule, ContainerComponent,
|
|
5
|
-
import {
|
|
4
|
+
import { BaseComponent, AngularComponentsModule, ContainerComponent, RichViewComponent, RichItemComponent, ImagePreviewDialogComponent, ThumbnailComponent, ToolbarComponent, ConfirmationDialogComponent, MediaListComponent, MediaListItemComponent, ImagePlaceholderComponent, SpinnerComponent } from '@rolatech/angular-components';
|
|
5
|
+
import { ProductCategoryService, ProductService, CartService, CartEventType, InventoryService } from '@rolatech/angular-services';
|
|
6
6
|
import * as i1 from '@angular/router';
|
|
7
7
|
import { RouterModule, ActivatedRoute, RouterLink, RouterLinkActive, RouterOutlet, Router } from '@angular/router';
|
|
8
8
|
import * as i2$1 from '@angular/material/icon';
|
|
9
9
|
import { MatIconModule, MatIcon } from '@angular/material/icon';
|
|
10
10
|
import * as i1$1 from '@angular/common';
|
|
11
|
-
import { NgClass, ViewportScroller, CommonModule, KeyValuePipe
|
|
11
|
+
import { NgClass, ViewportScroller, CommonModule, KeyValuePipe } from '@angular/common';
|
|
12
12
|
import { MatDialog } from '@angular/material/dialog';
|
|
13
13
|
import * as i1$2 from '@angular/material/button';
|
|
14
14
|
import { MatButtonModule } from '@angular/material/button';
|
|
@@ -34,7 +34,7 @@ import { MatChipsModule } from '@angular/material/chips';
|
|
|
34
34
|
import { CommentsComponent } from '@rolatech/angular-comment';
|
|
35
35
|
import { AuthService, AuthUserService } from '@rolatech/angular-auth';
|
|
36
36
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
37
|
-
import * as
|
|
37
|
+
import * as i2$2 from '@angular/material/core';
|
|
38
38
|
import { MatOptionModule } from '@angular/material/core';
|
|
39
39
|
import * as i5 from '@angular/material/select';
|
|
40
40
|
import { MatSelectModule } from '@angular/material/select';
|
|
@@ -42,44 +42,7 @@ import * as i3$1 from '@angular/material/paginator';
|
|
|
42
42
|
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
43
43
|
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
|
44
44
|
import * as i8$1 from '@angular/material/progress-spinner';
|
|
45
|
-
import * as i2$
|
|
46
|
-
|
|
47
|
-
class ProductCategoryService extends BaseService {
|
|
48
|
-
init() {
|
|
49
|
-
this.endpoint = 'products/categories';
|
|
50
|
-
super.init();
|
|
51
|
-
}
|
|
52
|
-
uploadMedia(id, data) {
|
|
53
|
-
return this.http.post(`${this.actionUrl}/${id}/media`, data, {
|
|
54
|
-
withCredentials: true,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
deleteMedia(id, mediaId) {
|
|
58
|
-
return this.http.delete(`${this.actionUrl}/${id}/media/${mediaId}`, {
|
|
59
|
-
withCredentials: true,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
importFromExcel(data) {
|
|
63
|
-
return this.http.post(`${this.actionUrl}/excel`, data, {
|
|
64
|
-
withCredentials: true,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
createFromExcel(data) {
|
|
68
|
-
return this.http.post(`${this.actionUrl}/list`, data, {
|
|
69
|
-
withCredentials: true,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductCategoryService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
73
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductCategoryService, providedIn: 'root' }); }
|
|
74
|
-
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductCategoryService, decorators: [{
|
|
76
|
-
type: Injectable,
|
|
77
|
-
args: [{
|
|
78
|
-
providedIn: 'root',
|
|
79
|
-
}]
|
|
80
|
-
}] });
|
|
81
|
-
|
|
82
|
-
const services = [ProductCategoryService];
|
|
45
|
+
import * as i2$3 from '@angular/material/slide-toggle';
|
|
83
46
|
|
|
84
47
|
class ProductLayoutComponent extends BaseComponent {
|
|
85
48
|
constructor() {
|
|
@@ -93,7 +56,7 @@ class ProductLayoutComponent extends BaseComponent {
|
|
|
93
56
|
this.findCategories();
|
|
94
57
|
}
|
|
95
58
|
findCategories() {
|
|
96
|
-
this.categoryService.find({}).subscribe({
|
|
59
|
+
this.categoryService.find({}, false).subscribe({
|
|
97
60
|
next: (res) => {
|
|
98
61
|
this.categories = res.data;
|
|
99
62
|
},
|
|
@@ -116,12 +79,12 @@ class ProductLayoutComponent extends BaseComponent {
|
|
|
116
79
|
}
|
|
117
80
|
}
|
|
118
81
|
nextCategory() { }
|
|
119
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductLayoutComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
83
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductLayoutComponent, isStandalone: true, selector: "rolatech-product-layout", usesInheritance: true, ngImport: i0, template: "@if (categories) {\n <rolatech-container>\n <div class=\"flex flex-col md:flex-row min-w-[320px] max-w-[1280px] m-auto\">\n <div class=\"h-14 md:h-auto min-w-[240px]\">\n <div class=\"hidden md:block text-2xl font-medium py-3 md:px-1 px-3\">\u5206\u7C7B</div>\n <div\n class=\"flex flex-row md:flex-col md:h-full items-center md:items-start h-14 overflow-x-scroll overflow-y-hidden scrollbar-hide whitespace-pre\"\n >\n <a\n class=\"cursor-pointer h-8 bg-[--rt-badge-chip-background] md:bg-[--rt-base-background] rounded-md flex items-center md:mb-1 mr-2 md:mr-0\"\n routerLinkActive=\"product-layout-active\"\n routerLink=\"./\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n <span class=\"md:px-1 px-3 text-md md:text-lg\">\u5168\u90E8</span>\n </a>\n @for (category of categories; track category; let index = $index) {\n <a\n class=\"cursor-pointer h-8 bg-[--rt-badge-chip-background] md:bg-[--rt-base-background] rounded-md flex items-center mr-2 md:mr-0 md:mb-1\"\n routerLinkActive=\"product-layout-active\"\n [routerLink]=\"['./categories/', category.id]\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n <span class=\"md:px-1 px-3 text-md md:text-lg\">{{ category.name }}</span>\n </a>\n }\n </div>\n </div>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n </div>\n </rolatech-container>\n}\n", styles: [".product-layout-active{border-radius:var(--rt-rounded-base, 8px);background-color:var(-rt-base-background, #fff);color:var(--rt-brand-color, #000)}@media (max-width: 768px){.product-layout-active{background-color:var(--rt-text-primary, #000);color:var(--rt-text-primary-inverse, #000)}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }] }); }
|
|
121
84
|
}
|
|
122
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductLayoutComponent, decorators: [{
|
|
123
86
|
type: Component,
|
|
124
|
-
args: [{ selector: 'rolatech-product-layout',
|
|
87
|
+
args: [{ selector: 'rolatech-product-layout', imports: [AngularCommonModule, AngularComponentsModule, ContainerComponent], template: "@if (categories) {\n <rolatech-container>\n <div class=\"flex flex-col md:flex-row min-w-[320px] max-w-[1280px] m-auto\">\n <div class=\"h-14 md:h-auto min-w-[240px]\">\n <div class=\"hidden md:block text-2xl font-medium py-3 md:px-1 px-3\">\u5206\u7C7B</div>\n <div\n class=\"flex flex-row md:flex-col md:h-full items-center md:items-start h-14 overflow-x-scroll overflow-y-hidden scrollbar-hide whitespace-pre\"\n >\n <a\n class=\"cursor-pointer h-8 bg-[--rt-badge-chip-background] md:bg-[--rt-base-background] rounded-md flex items-center md:mb-1 mr-2 md:mr-0\"\n routerLinkActive=\"product-layout-active\"\n routerLink=\"./\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n <span class=\"md:px-1 px-3 text-md md:text-lg\">\u5168\u90E8</span>\n </a>\n @for (category of categories; track category; let index = $index) {\n <a\n class=\"cursor-pointer h-8 bg-[--rt-badge-chip-background] md:bg-[--rt-base-background] rounded-md flex items-center mr-2 md:mr-0 md:mb-1\"\n routerLinkActive=\"product-layout-active\"\n [routerLink]=\"['./categories/', category.id]\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n <span class=\"md:px-1 px-3 text-md md:text-lg\">{{ category.name }}</span>\n </a>\n }\n </div>\n </div>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n </div>\n </rolatech-container>\n}\n", styles: [".product-layout-active{border-radius:var(--rt-rounded-base, 8px);background-color:var(-rt-base-background, #fff);color:var(--rt-brand-color, #000)}@media (max-width: 768px){.product-layout-active{background-color:var(--rt-text-primary, #000);color:var(--rt-text-primary-inverse, #000)}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}\n"] }]
|
|
125
88
|
}] });
|
|
126
89
|
|
|
127
90
|
class ProductCategoryComponent extends BaseComponent {
|
|
@@ -183,12 +146,12 @@ class ProductCategoryComponent extends BaseComponent {
|
|
|
183
146
|
relativeTo: this.route,
|
|
184
147
|
});
|
|
185
148
|
}
|
|
186
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
187
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
149
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductCategoryComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
150
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductCategoryComponent, isStandalone: true, selector: "rolatech-product-category", usesInheritance: true, ngImport: i0, template: "<div>\n @if (category) {\n <div class=\"p-3 hidden md:block text-2xl font-medium\">{{ category.name }}</div>\n } @else {\n <div class=\"flex flex-row animate-pulse w-full\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n </div>\n }\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view list>\n @for (item of products; track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['../../', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: RichViewComponent, selector: "rolatech-rich-view", inputs: ["list", "wrap"] }], deferBlockDependencies: [() => [i1.RouterLink, RichItemComponent]] }); }
|
|
188
151
|
}
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductCategoryComponent, decorators: [{
|
|
190
153
|
type: Component,
|
|
191
|
-
args: [{ selector: 'rolatech-product-category',
|
|
154
|
+
args: [{ selector: 'rolatech-product-category', imports: [AngularCommonModule, AngularComponentsModule, RichViewComponent, RichItemComponent], template: "<div>\n @if (category) {\n <div class=\"p-3 hidden md:block text-2xl font-medium\">{{ category.name }}</div>\n } @else {\n <div class=\"flex flex-row animate-pulse w-full\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n </div>\n }\n @if (loading) {\n @for (number of [0, 1, 2, 3, 4, 5]; track number) {\n <div class=\"flex flex-row animate-pulse mt-3 mr-4 cursor-pointer w-full\">\n <div class=\"h-fit w-2/5 md:w-1/4 aspect-video bg-[--rt-base-background] rounded-lg\"></div>\n <div class=\"w-3/5 md:w-3/4 ml-3 py-1 flex flex-col justify-between\">\n <div class=\"space-y-3\">\n <div class=\"h-4 bg-[--rt-base-background] rounded col-span-2\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1\"></div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-1 py-1\"></div>\n </div>\n <div>\n <div class=\"h-2 bg-[--rt-base-background] rounded col-span-2 py-1\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n <rolatech-rich-view list>\n @for (item of products; track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['../../', item.id]\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"item.price / 100\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n }\n</div>\n" }]
|
|
192
155
|
}] });
|
|
193
156
|
|
|
194
157
|
class ProductInfoComponent {
|
|
@@ -196,12 +159,12 @@ class ProductInfoComponent {
|
|
|
196
159
|
this.name = input.required();
|
|
197
160
|
this.description = input();
|
|
198
161
|
}
|
|
199
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
200
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
162
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
163
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: ProductInfoComponent, isStandalone: true, selector: "rolatech-product-info", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "id": "rolatech-product-info" } }, ngImport: i0, template: "<div>\n <div class=\"text-2xl font-medium\">{{ name() }}</div>\n <div>\n {{ description() }}\n </div>\n</div>\n", styles: ["rolatech-product-info mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
201
164
|
}
|
|
202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductInfoComponent, decorators: [{
|
|
203
166
|
type: Component,
|
|
204
|
-
args: [{ selector: 'rolatech-product-info',
|
|
167
|
+
args: [{ selector: 'rolatech-product-info', imports: [MatIconModule, RouterModule], encapsulation: ViewEncapsulation.None, host: {
|
|
205
168
|
id: 'rolatech-product-info',
|
|
206
169
|
}, template: "<div>\n <div class=\"text-2xl font-medium\">{{ name() }}</div>\n <div>\n {{ description() }}\n </div>\n</div>\n", styles: ["rolatech-product-info mat-icon{transform:scale(.8)}\n"] }]
|
|
207
170
|
}] });
|
|
@@ -227,12 +190,12 @@ class ProductMediaComponent {
|
|
|
227
190
|
});
|
|
228
191
|
dialogRef.afterClosed().subscribe((result) => { });
|
|
229
192
|
}
|
|
230
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
231
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
193
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
194
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductMediaComponent, isStandalone: true, selector: "rolatech-product-media", inputs: { media: { classPropertyName: "media", publicName: "media", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (media()) {\n <div>\n <div class=\"object-cover aspect-video bg-[--rt-raised-background]\">\n <rolatech-thumbnail [src]=\"media()[mediaIndex].url\" size=\"small\" mode=\"full\"></rolatech-thumbnail>\n </div>\n @for (media of media(); track media; let index = $index) {\n <div\n class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer w-28 p-2 bg-[--rt-10-percent-layer]\"\n (click)=\"mediaIndex = index\"\n [ngClass]=\"mediaIndex === index ? 'border border-black' : 'opacity-70'\"\n >\n <rolatech-thumbnail [src]=\"media.url\" mode=\"full\"></rolatech-thumbnail>\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
232
195
|
}
|
|
233
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductMediaComponent, decorators: [{
|
|
234
197
|
type: Component,
|
|
235
|
-
args: [{ selector: 'rolatech-product-media',
|
|
198
|
+
args: [{ selector: 'rolatech-product-media', imports: [NgClass, ThumbnailComponent], encapsulation: ViewEncapsulation.None, template: "@if (media()) {\n <div>\n <div class=\"object-cover aspect-video bg-[--rt-raised-background]\">\n <rolatech-thumbnail [src]=\"media()[mediaIndex].url\" size=\"small\" mode=\"full\"></rolatech-thumbnail>\n </div>\n @for (media of media(); track media; let index = $index) {\n <div\n class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer w-28 p-2 bg-[--rt-10-percent-layer]\"\n (click)=\"mediaIndex = index\"\n [ngClass]=\"mediaIndex === index ? 'border border-black' : 'opacity-70'\"\n >\n <rolatech-thumbnail [src]=\"media.url\" mode=\"full\"></rolatech-thumbnail>\n </div>\n }\n </div>\n}\n" }]
|
|
236
199
|
}] });
|
|
237
200
|
|
|
238
201
|
class ProductSectionComponent {
|
|
@@ -248,24 +211,24 @@ class ProductSectionComponent {
|
|
|
248
211
|
onClickScroller(id) {
|
|
249
212
|
this.viewportScroller.scrollToAnchor(id);
|
|
250
213
|
}
|
|
251
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
252
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductSectionComponent, isStandalone: true, selector: "rolatech-product-section", inputs: { section: { classPropertyName: "section", publicName: "section", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null }, row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: false, transformFunction: null }, reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (section(); as section) {\n @if (row()) {\n <div>\n @if (section.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-[--rt-brand-color] inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ section.title }}</span>\n </div>\n }\n @if (section.description) {\n <div>\n {{ section.description }}\n </div>\n }\n @if (section.media) {\n <div class=\"w-80%\">\n @for (item of section.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div\n class=\"flex w-full p-3\"\n [ngClass]=\"reverse() ? 'flex-col-reverse md:flex-row-reverse' : 'flex-col-reverse md:flex-row'\"\n >\n <div\n class=\"w-full md:w-1/2 py-3 flex flex-col justify-center items-center gap-3\"\n [ngClass]=\"reverse() ? ' md:ml-16' : 'md:mr-16'\"\n >\n <span class=\"text-3xl font-bold py-1\"> {{ section.title }}</span>\n <span>\n {{ section.description }}\n </span>\n </div>\n <div class=\"w-full md:w-1/2 py-11\">\n @for (item of section.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n </div>\n }\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThumbnailComponent, selector: "rolatech-thumbnail", inputs: ["src", "size", "mode", "ratio", "width", "height"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
253
216
|
}
|
|
254
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductSectionComponent, decorators: [{
|
|
255
218
|
type: Component,
|
|
256
|
-
args: [{ selector: 'rolatech-product-section',
|
|
219
|
+
args: [{ selector: 'rolatech-product-section', imports: [CommonModule, ThumbnailComponent], encapsulation: ViewEncapsulation.None, template: "@if (section(); as section) {\n @if (row()) {\n <div>\n @if (section.title) {\n <div class=\"py-3 flex items-center gap-3\">\n <span class=\"h-4 w-1 bg-[--rt-brand-color] inline-block\"></span>\n <span class=\"text-lg font-medium py-1\"> {{ section.title }}</span>\n </div>\n }\n @if (section.description) {\n <div>\n {{ section.description }}\n </div>\n }\n @if (section.media) {\n <div class=\"w-80%\">\n @for (item of section.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div\n class=\"flex w-full p-3\"\n [ngClass]=\"reverse() ? 'flex-col-reverse md:flex-row-reverse' : 'flex-col-reverse md:flex-row'\"\n >\n <div\n class=\"w-full md:w-1/2 py-3 flex flex-col justify-center items-center gap-3\"\n [ngClass]=\"reverse() ? ' md:ml-16' : 'md:mr-16'\"\n >\n <span class=\"text-3xl font-bold py-1\"> {{ section.title }}</span>\n <span>\n {{ section.description }}\n </span>\n </div>\n <div class=\"w-full md:w-1/2 py-11\">\n @for (item of section.media; track item) {\n <div class=\"py-3\">\n <rolatech-thumbnail\n [src]=\"item.url\"\n size=\"small\"\n mode=\"full\"\n [width]=\"item.width\"\n [height]=\"item.height\"\n ></rolatech-thumbnail>\n </div>\n }\n </div>\n </div>\n }\n}\n" }]
|
|
257
220
|
}] });
|
|
258
221
|
|
|
259
222
|
class ProductItemComponent {
|
|
260
223
|
constructor() {
|
|
261
224
|
this.product = input.required();
|
|
262
225
|
}
|
|
263
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
264
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
226
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
227
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: ProductItemComponent, isStandalone: true, selector: "rolatech-product-item", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<rolatech-rich-item\n [routerLink]=\"['./', product().id]\"\n [thumbnail]=\"product().media[0].url + '!w400'\"\n [title]=\"product().name\"\n [subtitle]=\"product().description\"\n [price]=\"product().price / 100\"\n></rolatech-rich-item>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: RichItemComponent, selector: "rolatech-rich-item", inputs: ["list", "thumbnail", "avatar", "title", "subtitle", "price", "thumbnailRatio"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
265
228
|
}
|
|
266
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductItemComponent, decorators: [{
|
|
267
230
|
type: Component,
|
|
268
|
-
args: [{ selector: 'rolatech-product-item',
|
|
231
|
+
args: [{ selector: 'rolatech-product-item', imports: [AngularCommonModule, AngularComponentsModule, RichItemComponent], encapsulation: ViewEncapsulation.None, template: "<rolatech-rich-item\n [routerLink]=\"['./', product().id]\"\n [thumbnail]=\"product().media[0].url + '!w400'\"\n [title]=\"product().name\"\n [subtitle]=\"product().description\"\n [price]=\"product().price / 100\"\n></rolatech-rich-item>\n" }]
|
|
269
232
|
}] });
|
|
270
233
|
|
|
271
234
|
class ProductActionComponent {
|
|
@@ -287,12 +250,12 @@ class ProductActionComponent {
|
|
|
287
250
|
onDeposit(product) {
|
|
288
251
|
this.deposit.emit(product);
|
|
289
252
|
}
|
|
290
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
291
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
253
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
254
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductActionComponent, isStandalone: true, selector: "rolatech-product-action", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cart: "cart", checkout: "checkout", deposit: "deposit" }, ngImport: i0, template: "<div class=\"flex gap-3\">\n <a mat-stroked-button class=\"\" (click)=\"onCart(product())\">\u52A0\u5165\u8D2D\u7269\u8F66</a>\n @if (product().priceType && product().priceType.toString() === 'PARTIAL') {\n <a mat-flat-button class=\"\" (click)=\"onDeposit(product())\">\u652F\u4ED8\u5B9A\u91D1 \u00A5{{ displayDeposit() }}</a>\n } @else {\n <a mat-flat-button class=\"\" (click)=\"onCheckout(product())\">\u7ACB\u5373\u8D2D\u4E70</a>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
292
255
|
}
|
|
293
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductActionComponent, decorators: [{
|
|
294
257
|
type: Component,
|
|
295
|
-
args: [{ selector: 'rolatech-product-action',
|
|
258
|
+
args: [{ selector: 'rolatech-product-action', imports: [CommonModule, MatButtonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex gap-3\">\n <a mat-stroked-button class=\"\" (click)=\"onCart(product())\">\u52A0\u5165\u8D2D\u7269\u8F66</a>\n @if (product().priceType && product().priceType.toString() === 'PARTIAL') {\n <a mat-flat-button class=\"\" (click)=\"onDeposit(product())\">\u652F\u4ED8\u5B9A\u91D1 \u00A5{{ displayDeposit() }}</a>\n } @else {\n <a mat-flat-button class=\"\" (click)=\"onCheckout(product())\">\u7ACB\u5373\u8D2D\u4E70</a>\n }\n</div>\n" }]
|
|
296
259
|
}] });
|
|
297
260
|
|
|
298
261
|
class ProductPricingComponent {
|
|
@@ -311,12 +274,12 @@ class ProductPricingComponent {
|
|
|
311
274
|
onWish(product) {
|
|
312
275
|
this.wish.emit(product);
|
|
313
276
|
}
|
|
314
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
315
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
277
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductPricingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
278
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductPricingComponent, isStandalone: true, selector: "rolatech-product-pricing", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: true, transformFunction: null }, inWishList: { classPropertyName: "inWishList", publicName: "inWishList", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { wish: "wish" }, ngImport: i0, template: "<div class=\"py-3\">\n <div class=\"flex justify-between items-center\">\n <div class=\"text-xl font-bold py-3\">\u00A5 {{ displayPrice() }}</div>\n <button mat-icon-button (click)=\"onWish(product())\">\n @if (inWishList()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m293-203.08 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08Z\"\n />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z\"\n />\n </svg>\n }\n </button>\n </div>\n <mat-divider></mat-divider>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
316
279
|
}
|
|
317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
280
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductPricingComponent, decorators: [{
|
|
318
281
|
type: Component,
|
|
319
|
-
args: [{ selector: 'rolatech-product-pricing',
|
|
282
|
+
args: [{ selector: 'rolatech-product-pricing', imports: [CommonModule, MatButtonModule, MatDivider], encapsulation: ViewEncapsulation.None, template: "<div class=\"py-3\">\n <div class=\"flex justify-between items-center\">\n <div class=\"text-xl font-bold py-3\">\u00A5 {{ displayPrice() }}</div>\n <button mat-icon-button (click)=\"onWish(product())\">\n @if (inWishList()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m293-203.08 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08Z\"\n />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-61 83.92 49.62-212.54-164.93-142.84 217.23-18.85L480-777.69l85.08 200.38 217.23 18.85-164.93 142.84L667-203.08 480-315.92 293-203.08ZM480-470Z\"\n />\n </svg>\n }\n </button>\n </div>\n <mat-divider></mat-divider>\n</div>\n" }]
|
|
320
283
|
}] });
|
|
321
284
|
|
|
322
285
|
class ProductOptionComponent {
|
|
@@ -330,12 +293,12 @@ class ProductOptionComponent {
|
|
|
330
293
|
this.value.set(value);
|
|
331
294
|
this.change.emit({ option: this.option(), value: value });
|
|
332
295
|
}
|
|
333
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
334
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
296
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
297
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductOptionComponent, isStandalone: true, selector: "rolatech-product-option", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change", selected: "selectedChange", value: "valueChange" }, ngImport: i0, template: "<div class=\"mb-3\">\n <div class=\"text-xl font-bold py-3\">{{ option().name }}</div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of option().values; track $index) {\n <div\n class=\"w-24 h-12 border border-[--rt-border-color] rounded flex justify-center items-center hover:text-[--rt-text-primary-inverse] hover:bg-[--rt-base-background-inverse] cursor-pointer\"\n (click)=\"onChange(item)\"\n [ngClass]=\"value()?.id === item.id ? 'bg-[--rt-base-background-inverse] text-[--rt-text-primary-inverse]' : ''\"\n >\n {{ item.name }}\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
335
298
|
}
|
|
336
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductOptionComponent, decorators: [{
|
|
337
300
|
type: Component,
|
|
338
|
-
args: [{ selector: 'rolatech-product-option',
|
|
301
|
+
args: [{ selector: 'rolatech-product-option', imports: [CommonModule], template: "<div class=\"mb-3\">\n <div class=\"text-xl font-bold py-3\">{{ option().name }}</div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of option().values; track $index) {\n <div\n class=\"w-24 h-12 border border-[--rt-border-color] rounded flex justify-center items-center hover:text-[--rt-text-primary-inverse] hover:bg-[--rt-base-background-inverse] cursor-pointer\"\n (click)=\"onChange(item)\"\n [ngClass]=\"value()?.id === item.id ? 'bg-[--rt-base-background-inverse] text-[--rt-text-primary-inverse]' : ''\"\n >\n {{ item.name }}\n </div>\n }\n </div>\n</div>\n" }]
|
|
339
302
|
}] });
|
|
340
303
|
|
|
341
304
|
class ProductManageSectionItemComponent {
|
|
@@ -373,8 +336,8 @@ class ProductManageSectionItemComponent {
|
|
|
373
336
|
this.deleteMedia.emit({ section: this.section(), media });
|
|
374
337
|
this.selectedImg = this.section().media ? first(this.section().media) : null;
|
|
375
338
|
}
|
|
376
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
377
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
339
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageSectionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
340
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageSectionItemComponent, isStandalone: true, selector: "rolatech-product-manage-section-item", inputs: { isUploading: { classPropertyName: "isUploading", publicName: "isUploading", isSignal: true, isRequired: false, transformFunction: null }, section: { classPropertyName: "section", publicName: "section", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, selectMedia: { classPropertyName: "selectMedia", publicName: "selectMedia", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { upload: "upload", delete: "delete", save: "save", deleteMedia: "deleteMedia" }, ngImport: i0, template: "<div class=\"px-3\">\n <div\n class=\"h-14 py-3 flex items-center justify-between cursor-pointer\"\n (click)=\"expanded = !expanded; $event.stopPropagation()\"\n >\n <div class=\"flex\">\n <div class=\"w-32 line-clamp-1\">{{ section().title }}</div>\n <div class=\"line-clamp-1\">{{ section().description }}</div>\n </div>\n <div>\n <button mat-icon-button aria-label=\"expand row\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n @if (expanded) {\n <mat-icon>keyboard_arrow_up</mat-icon>\n } @else {\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 w-full overflow-hidden\" [@detailExpand]=\"expanded ? 'expanded' : 'collapsed'\">\n <div class=\"flex flex-col lg:flex-row\">\n <div class=\"flex flex-col grow\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u6807\u9898</mat-label>\n <input matInput placeholder=\"\u6807\u9898\" [(ngModel)]=\"section().title\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" [hideRequiredMarker]=\"true\">\n <mat-label>\u63CF\u8FF0</mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n placeholder=\"\u63CF\u8FF0\"\n [(ngModel)]=\"section().description\"\n ></textarea>\n </mat-form-field>\n </div>\n <!-- media -->\n <div class=\"lg:basis-1/2 px-0 lg:px-3\">\n @if (selectedImg) {\n <div class=\"flex flex-row justify-center relative aspect-video\">\n <img class=\"object-contain w-full\" [src]=\"selectedImg.url\" [alt]=\"selectedImg.alt\" />\n <div class=\"absolute z-30 right-0\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"beforeMenu\"\n class=\"ml-auto focus:outline-none hover:bg-[--rt-base-background] p-1\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"onDeleteMedia(selectedImg)\">\n <span>\u5220\u9664</span>\n </button>\n </mat-menu>\n </div>\n </div>\n }\n\n <!-- media -->\n <div>\n <div class=\"flex flex-row flex-wrap cursor-pointer relative box-border\" fxLayout=\"row\">\n <div class=\"progress-bar\">\n @if (section().isUploading) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n @for (media of section().media; track media) {\n <div class=\"media-list-item\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media.url\" [alt]=\"media.alt\" />\n </div>\n }\n <input style=\"display: none\" type=\"file\" accept=\"image/*\" (change)=\"onUpload($event)\" #fileInput />\n <div class=\"add-button\">\n <div (click)=\"fileInput.click()\" class=\"tile-media flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"48px\" viewBox=\"0 -960 960 960\" width=\"48px\" fill=\"#5f6368\">\n <path d=\"M444-444H240v-72h204v-204h72v204h204v72H516v204h-72v-204Z\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onDelete(section())\">\u5220\u9664</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n }\n </div>\n</div>\n\n<mat-divider></mat-divider>\n", styles: [".media-list{flex-wrap:wrap;box-sizing:border-box}.progress-bar{display:block;min-height:6px;width:100%}.media-list-item{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}.tile-media{height:64px;width:64px;object-fit:contain;cursor:pointer;border:1px solid grey;position:relative;box-sizing:border-box;border-radius:8px}.add-button{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: "directive", type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.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: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], animations: [
|
|
378
341
|
trigger('detailExpand', [
|
|
379
342
|
state('collapsed', style({ height: '0px' })),
|
|
380
343
|
state('expanded', style({ height: '*' })),
|
|
@@ -382,10 +345,9 @@ class ProductManageSectionItemComponent {
|
|
|
382
345
|
]),
|
|
383
346
|
] }); }
|
|
384
347
|
}
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
348
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageSectionItemComponent, decorators: [{
|
|
386
349
|
type: Component,
|
|
387
|
-
args: [{ selector: 'rolatech-product-manage-section-item',
|
|
388
|
-
NgClass,
|
|
350
|
+
args: [{ selector: 'rolatech-product-manage-section-item', imports: [
|
|
389
351
|
MatFormFieldModule,
|
|
390
352
|
MatInputModule,
|
|
391
353
|
FormsModule,
|
|
@@ -404,25 +366,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
404
366
|
], template: "<div class=\"px-3\">\n <div\n class=\"h-14 py-3 flex items-center justify-between cursor-pointer\"\n (click)=\"expanded = !expanded; $event.stopPropagation()\"\n >\n <div class=\"flex\">\n <div class=\"w-32 line-clamp-1\">{{ section().title }}</div>\n <div class=\"line-clamp-1\">{{ section().description }}</div>\n </div>\n <div>\n <button mat-icon-button aria-label=\"expand row\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n @if (expanded) {\n <mat-icon>keyboard_arrow_up</mat-icon>\n } @else {\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 w-full overflow-hidden\" [@detailExpand]=\"expanded ? 'expanded' : 'collapsed'\">\n <div class=\"flex flex-col lg:flex-row\">\n <div class=\"flex flex-col grow\">\n <mat-form-field appearance=\"fill\">\n <mat-label>\u6807\u9898</mat-label>\n <input matInput placeholder=\"\u6807\u9898\" [(ngModel)]=\"section().title\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" [hideRequiredMarker]=\"true\">\n <mat-label>\u63CF\u8FF0</mat-label>\n <textarea\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n placeholder=\"\u63CF\u8FF0\"\n [(ngModel)]=\"section().description\"\n ></textarea>\n </mat-form-field>\n </div>\n <!-- media -->\n <div class=\"lg:basis-1/2 px-0 lg:px-3\">\n @if (selectedImg) {\n <div class=\"flex flex-row justify-center relative aspect-video\">\n <img class=\"object-contain w-full\" [src]=\"selectedImg.url\" [alt]=\"selectedImg.alt\" />\n <div class=\"absolute z-30 right-0\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"beforeMenu\"\n class=\"ml-auto focus:outline-none hover:bg-[--rt-base-background] p-1\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #beforeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item (click)=\"onDeleteMedia(selectedImg)\">\n <span>\u5220\u9664</span>\n </button>\n </mat-menu>\n </div>\n </div>\n }\n\n <!-- media -->\n <div>\n <div class=\"flex flex-row flex-wrap cursor-pointer relative box-border\" fxLayout=\"row\">\n <div class=\"progress-bar\">\n @if (section().isUploading) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n @for (media of section().media; track media) {\n <div class=\"media-list-item\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media.url\" [alt]=\"media.alt\" />\n </div>\n }\n <input style=\"display: none\" type=\"file\" accept=\"image/*\" (change)=\"onUpload($event)\" #fileInput />\n <div class=\"add-button\">\n <div (click)=\"fileInput.click()\" class=\"tile-media flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"48px\" viewBox=\"0 -960 960 960\" width=\"48px\" fill=\"#5f6368\">\n <path d=\"M444-444H240v-72h204v-204h72v204h204v72H516v204h-72v-204Z\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n @if (actions()) {\n <div class=\"flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onDelete(section())\">\u5220\u9664</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n }\n </div>\n</div>\n\n<mat-divider></mat-divider>\n", styles: [".media-list{flex-wrap:wrap;box-sizing:border-box}.progress-bar{display:block;min-height:6px;width:100%}.media-list-item{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}.tile-media{height:64px;width:64px;object-fit:contain;cursor:pointer;border:1px solid grey;position:relative;box-sizing:border-box;border-radius:8px}.add-button{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}\n"] }]
|
|
405
367
|
}], ctorParameters: () => [] });
|
|
406
368
|
|
|
407
|
-
class ProductManageOptionActionComponent {
|
|
408
|
-
constructor() {
|
|
409
|
-
this.delete = output();
|
|
410
|
-
this.save = output();
|
|
411
|
-
}
|
|
412
|
-
onDelete(option) {
|
|
413
|
-
this.delete.emit(option);
|
|
414
|
-
}
|
|
415
|
-
onSave(option) {
|
|
416
|
-
this.save.emit(option);
|
|
417
|
-
}
|
|
418
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductManageOptionActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
419
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProductManageOptionActionComponent, isStandalone: true, selector: "rolatech-product-manage-option-action", outputs: { delete: "delete", save: "save" }, ngImport: i0, template: "<div>\n <!-- <button mat-button color=\"primary\" (click)=\"onDelete(item)\">\u5220\u9664</button>\n <button mat-button color=\"primary\" (click)=\"onSave(item)\">\u4FDD\u5B58</button> -->\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatButtonModule }] }); }
|
|
420
|
-
}
|
|
421
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductManageOptionActionComponent, decorators: [{
|
|
422
|
-
type: Component,
|
|
423
|
-
args: [{ selector: 'rolatech-product-manage-option-action', standalone: true, imports: [MatButtonModule], template: "<div>\n <!-- <button mat-button color=\"primary\" (click)=\"onDelete(item)\">\u5220\u9664</button>\n <button mat-button color=\"primary\" (click)=\"onSave(item)\">\u4FDD\u5B58</button> -->\n</div>\n" }]
|
|
424
|
-
}] });
|
|
425
|
-
|
|
426
369
|
class ProductManageOptionAddComponent {
|
|
427
370
|
constructor() {
|
|
428
371
|
this.option = {
|
|
@@ -452,27 +395,19 @@ class ProductManageOptionAddComponent {
|
|
|
452
395
|
}
|
|
453
396
|
removeValue(value) {
|
|
454
397
|
if (value) {
|
|
455
|
-
|
|
398
|
+
const index = this.option.values.findIndex((item) => item.name === value.name);
|
|
456
399
|
this.option.values?.splice(index, 1);
|
|
457
400
|
}
|
|
458
401
|
}
|
|
459
402
|
ngDoCheck() {
|
|
460
403
|
this.output.emit(this.option);
|
|
461
404
|
}
|
|
462
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
463
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
405
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageOptionAddComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
406
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageOptionAddComponent, isStandalone: true, selector: "rolatech-product-manage-option-add", outputs: { cancel: "cancel", save: "save", output: "output" }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <div class=\"p-1\">\u9009\u9879</div>\n <form>\n <mat-form-field appearance=\"fill\">\n <input matInput placeholder=\"\u540D\u79F0\" type=\"text\" [(ngModel)]=\"option.name\" [ngModelOptions]=\"{ standalone: true }\" />\n </mat-form-field>\n <mat-form-field>\n <mat-chip-grid #chipGrid aria-label=\"Enter values\">\n @for (value of option.values; track value) {\n <mat-chip-row\n (removed)=\"removeValue(value)\"\n [editable]=\"true\"\n [aria-description]=\"'press enter to edit ' + value.name\"\n >\n {{ value.name }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + value.name\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n placeholder=\"\u9009\u9879\u503C\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"addOptionValues($event)\"\n />\n </mat-chip-grid>\n </mat-form-field>\n </form>\n</div>\n@if (action) {\n <div class=\"flex items-center justify-end\">\n <button mat-button (click)=\"onCancel()\">\u53D6\u6D88</button>\n <button mat-button color=\"primary\" (click)=\"onSave()\">\u4FDD\u5B58</button>\n </div>\n}\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i1$4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i1$4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i1$4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.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: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.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: MatIconModule }] }); }
|
|
464
407
|
}
|
|
465
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageOptionAddComponent, decorators: [{
|
|
466
409
|
type: Component,
|
|
467
|
-
args: [{ selector: 'rolatech-product-manage-option-add', standalone: true,
|
|
468
|
-
MatChipsModule,
|
|
469
|
-
MatButtonModule,
|
|
470
|
-
MatFormFieldModule,
|
|
471
|
-
AngularCommonModule,
|
|
472
|
-
AngularComponentsModule,
|
|
473
|
-
MatIconModule,
|
|
474
|
-
ProductManageOptionActionComponent,
|
|
475
|
-
], template: "<div class=\"flex flex-col\">\n <div class=\"p-1\">\u9009\u9879</div>\n <form>\n <mat-form-field appearance=\"fill\">\n <input matInput placeholder=\"\u540D\u79F0\" type=\"text\" [(ngModel)]=\"option.name\" [ngModelOptions]=\"{ standalone: true }\" />\n </mat-form-field>\n <mat-form-field>\n <mat-chip-grid #chipGrid aria-label=\"Enter values\">\n @for (value of option.values; track value) {\n <mat-chip-row\n (removed)=\"removeValue(value)\"\n [editable]=\"true\"\n [aria-description]=\"'press enter to edit ' + value.name\"\n >\n {{ value.name }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + value.name\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n placeholder=\"\u9009\u9879\u503C\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"addOptionValues($event)\"\n />\n </mat-chip-grid>\n </mat-form-field>\n </form>\n</div>\n@if (action) {\n <div class=\"flex items-center justify-end\">\n <button mat-button (click)=\"onCancel()\">\u53D6\u6D88</button>\n <button mat-button color=\"primary\" (click)=\"onSave()\">\u4FDD\u5B58</button>\n </div>\n}\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
410
|
+
args: [{ selector: 'rolatech-product-manage-option-add', imports: [MatChipsModule, MatButtonModule, MatFormFieldModule, AngularCommonModule, AngularComponentsModule, MatIconModule], template: "<div class=\"flex flex-col\">\n <div class=\"p-1\">\u9009\u9879</div>\n <form>\n <mat-form-field appearance=\"fill\">\n <input matInput placeholder=\"\u540D\u79F0\" type=\"text\" [(ngModel)]=\"option.name\" [ngModelOptions]=\"{ standalone: true }\" />\n </mat-form-field>\n <mat-form-field>\n <mat-chip-grid #chipGrid aria-label=\"Enter values\">\n @for (value of option.values; track value) {\n <mat-chip-row\n (removed)=\"removeValue(value)\"\n [editable]=\"true\"\n [aria-description]=\"'press enter to edit ' + value.name\"\n >\n {{ value.name }}\n <button matChipRemove [attr.aria-label]=\"'remove ' + value.name\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n placeholder=\"\u9009\u9879\u503C\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"addOptionValues($event)\"\n />\n </mat-chip-grid>\n </mat-form-field>\n </form>\n</div>\n@if (action) {\n <div class=\"flex items-center justify-end\">\n <button mat-button (click)=\"onCancel()\">\u53D6\u6D88</button>\n <button mat-button color=\"primary\" (click)=\"onSave()\">\u4FDD\u5B58</button>\n </div>\n}\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
476
411
|
}] });
|
|
477
412
|
|
|
478
413
|
class ProductManageOptionItemComponent {
|
|
@@ -492,20 +427,18 @@ class ProductManageOptionItemComponent {
|
|
|
492
427
|
onEdit() {
|
|
493
428
|
this.edit.emit(this.option());
|
|
494
429
|
}
|
|
495
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
496
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
430
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageOptionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
431
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: ProductManageOptionItemComponent, isStandalone: true, selector: "rolatech-product-manage-option-item", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { delete: "delete", save: "save", edit: "edit" }, ngImport: i0, template: "<div class=\"group flex justify-between items-center h-14 hover:bg-[--rt-raised-background] cursor-pointer px-2\">\n <div class=\"flex\">\n <div class=\"min-w-[100px]\">{{ option().name }}</div>\n <div class=\"overflow-hidden line-clamp-1\">\n {{ option().values! | options }}\n </div>\n </div>\n <div class=\"flex justify-end max-w-24 w-24 invisible group-hover:visible\">\n <button mat-icon-button (click)=\"onEdit()\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onDelete()\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n</div>\n<mat-divider></mat-divider>\n", styles: ["mat-icon{scale:.9}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "pipe", type: OptionsFormatPipe, name: "options" }] }); }
|
|
497
432
|
}
|
|
498
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageOptionItemComponent, decorators: [{
|
|
499
434
|
type: Component,
|
|
500
|
-
args: [{ selector: 'rolatech-product-manage-option-item',
|
|
435
|
+
args: [{ selector: 'rolatech-product-manage-option-item', imports: [
|
|
501
436
|
MatChipsModule,
|
|
502
437
|
MatButtonModule,
|
|
503
438
|
MatFormFieldModule,
|
|
504
439
|
AngularCommonModule,
|
|
505
440
|
AngularComponentsModule,
|
|
506
441
|
MatIconModule,
|
|
507
|
-
ProductManageOptionActionComponent,
|
|
508
|
-
ProductManageOptionAddComponent,
|
|
509
442
|
OptionsFormatPipe,
|
|
510
443
|
], template: "<div class=\"group flex justify-between items-center h-14 hover:bg-[--rt-raised-background] cursor-pointer px-2\">\n <div class=\"flex\">\n <div class=\"min-w-[100px]\">{{ option().name }}</div>\n <div class=\"overflow-hidden line-clamp-1\">\n {{ option().values! | options }}\n </div>\n </div>\n <div class=\"flex justify-end max-w-24 w-24 invisible group-hover:visible\">\n <button mat-icon-button (click)=\"onEdit()\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onDelete()\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n</div>\n<mat-divider></mat-divider>\n", styles: ["mat-icon{scale:.9}\n"] }]
|
|
511
444
|
}] });
|
|
@@ -515,14 +448,13 @@ class SelectedPipe {
|
|
|
515
448
|
const findedOption = variant.options.find((item) => item.option.id === option.id);
|
|
516
449
|
return findedOption?.value;
|
|
517
450
|
}
|
|
518
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
519
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
451
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SelectedPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
452
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: SelectedPipe, isStandalone: true, name: "selected" }); }
|
|
520
453
|
}
|
|
521
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SelectedPipe, decorators: [{
|
|
522
455
|
type: Pipe,
|
|
523
456
|
args: [{
|
|
524
457
|
name: 'selected',
|
|
525
|
-
standalone: true,
|
|
526
458
|
}]
|
|
527
459
|
}] });
|
|
528
460
|
|
|
@@ -532,12 +464,12 @@ class ProductOwnerRendererComponent {
|
|
|
532
464
|
this.avatar = input();
|
|
533
465
|
this.username = input();
|
|
534
466
|
}
|
|
535
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
536
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
467
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductOwnerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
468
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductOwnerRendererComponent, isStandalone: true, selector: "rolatech-product-owner-renderer", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null }, username: { classPropertyName: "username", publicName: "username", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-row items-center py-3\">\n <div class=\"flex mr-3 gap-2 items-center\">\n @if (avatar()) {\n <div class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <img [src]=\"avatar()\" class=\"w-11 h-11 rounded-full\" alt />\n </div>\n } @else {\n <div class=\"w-11 h-11 rounded-full bg-[--rt-brand-color]\"></div>\n }\n <div class=\"flex items-center text-lg font-bold cursor-pointer\">\n <a [routerLink]=\"['/', '@' + username()]\">\n <span>{{ name() }}</span>\n </a>\n <mat-icon color=\"primary\">verified</mat-icon>\n </div>\n </div>\n</div>\n", styles: ["mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
537
469
|
}
|
|
538
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
470
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductOwnerRendererComponent, decorators: [{
|
|
539
471
|
type: Component,
|
|
540
|
-
args: [{ selector: 'rolatech-product-owner-renderer',
|
|
472
|
+
args: [{ selector: 'rolatech-product-owner-renderer', imports: [AngularCommonModule, MatIconModule], template: "<div class=\"flex flex-row items-center py-3\">\n <div class=\"flex mr-3 gap-2 items-center\">\n @if (avatar()) {\n <div class=\"cursor-pointer\" [routerLink]=\"['/', '@' + username()]\">\n <img [src]=\"avatar()\" class=\"w-11 h-11 rounded-full\" alt />\n </div>\n } @else {\n <div class=\"w-11 h-11 rounded-full bg-[--rt-brand-color]\"></div>\n }\n <div class=\"flex items-center text-lg font-bold cursor-pointer\">\n <a [routerLink]=\"['/', '@' + username()]\">\n <span>{{ name() }}</span>\n </a>\n <mat-icon color=\"primary\">verified</mat-icon>\n </div>\n </div>\n</div>\n", styles: ["mat-icon{transform:scale(.8)}\n"] }]
|
|
541
473
|
}] });
|
|
542
474
|
|
|
543
475
|
class ProductDetailsComponent extends BaseComponent {
|
|
@@ -662,7 +594,7 @@ class ProductDetailsComponent extends BaseComponent {
|
|
|
662
594
|
}
|
|
663
595
|
}
|
|
664
596
|
onOptionChange(e) {
|
|
665
|
-
|
|
597
|
+
const criteria = [];
|
|
666
598
|
this.selectedVariant.options.map((item) => {
|
|
667
599
|
criteria.push({
|
|
668
600
|
optionId: item.option.id === e.option.id ? e.option.id : item.option.id,
|
|
@@ -691,12 +623,12 @@ class ProductDetailsComponent extends BaseComponent {
|
|
|
691
623
|
this.selectedVariant = matchingVariant;
|
|
692
624
|
// const updatedCriteria = matchingVariant ? updateCriteriaFromVariant(matchingVariant) : [];
|
|
693
625
|
}
|
|
694
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
695
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
626
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
627
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductDetailsComponent, isStandalone: true, selector: "rolatech-product-details", usesInheritance: true, ngImport: i0, template: "@if (product) {\n <rolatech-container>\n <div class=\"flex flex-col md:flex-row w-full\">\n <div class=\"md:w-1/2 md:p-3 py-3\">\n <rolatech-product-media [media]=\"product.media\"></rolatech-product-media>\n </div>\n <div class=\"md:w-1/2 md:p-3 py-3\">\n <rolatech-product-info [name]=\"product.name\" [description]=\"product.description\"> </rolatech-product-info>\n @for (option of product.options; track $index) {\n <rolatech-product-option\n [option]=\"option\"\n [value]=\"selectedVariant | selected: option\"\n (change)=\"onOptionChange($event)\"\n ></rolatech-product-option>\n }\n <rolatech-product-pricing\n (wish)=\"onWish($event)\"\n [inWishList]=\"inWishList\"\n [product]=\"product\"\n [price]=\"selectedVariant ? selectedVariant.price : product.price\"\n ></rolatech-product-pricing>\n <rolatech-product-action\n [product]=\"product\"\n (checkout)=\"checkout($event)\"\n (deposit)=\"checkout($event)\"\n (cart)=\"onCart($event)\"\n ></rolatech-product-action>\n </div>\n </div>\n <div class=\"py-3\">\n <mat-divider></mat-divider>\n <rolatech-product-owner-renderer\n [name]=\"fullname\"\n [avatar]=\"user?.avatar\"\n [username]=\"username\"\n ></rolatech-product-owner-renderer>\n <mat-divider></mat-divider>\n </div>\n <div class=\"flex flex-col\">\n @for (section of product.sections; track $index) {\n <rolatech-product-section [section]=\"section\" [reverse]=\"$index % 2 !== 0\"></rolatech-product-section>\n }\n\n <rolatech-comments [itemId]=\"product.id\"></rolatech-comments>\n </div>\n </rolatech-container>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: ProductInfoComponent, selector: "rolatech-product-info", inputs: ["name", "description"] }, { kind: "component", type: ProductMediaComponent, selector: "rolatech-product-media", inputs: ["media", "min"] }, { kind: "component", type: ProductPricingComponent, selector: "rolatech-product-pricing", inputs: ["product", "price", "inWishList"], outputs: ["wish"] }, { kind: "component", type: ProductSectionComponent, selector: "rolatech-product-section", inputs: ["section", "user", "username", "row", "reverse"] }, { kind: "component", type: ProductActionComponent, selector: "rolatech-product-action", inputs: ["product"], outputs: ["cart", "checkout", "deposit"] }, { kind: "component", type: CommentsComponent, selector: "rolatech-comments", inputs: ["itemId"] }, { kind: "component", type: ProductOptionComponent, selector: "rolatech-product-option", inputs: ["option", "selected", "value"], outputs: ["change", "selectedChange", "valueChange"] }, { kind: "component", type: ProductOwnerRendererComponent, selector: "rolatech-product-owner-renderer", inputs: ["name", "avatar", "username"] }, { kind: "pipe", type: SelectedPipe, name: "selected" }] }); }
|
|
696
628
|
}
|
|
697
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
629
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductDetailsComponent, decorators: [{
|
|
698
630
|
type: Component,
|
|
699
|
-
args: [{ selector: 'rolatech-product-details',
|
|
631
|
+
args: [{ selector: 'rolatech-product-details', imports: [
|
|
700
632
|
AngularCommonModule,
|
|
701
633
|
AngularComponentsModule,
|
|
702
634
|
ContainerComponent,
|
|
@@ -719,7 +651,7 @@ const productRoutes = [
|
|
|
719
651
|
children: [
|
|
720
652
|
{
|
|
721
653
|
path: '',
|
|
722
|
-
loadComponent: () => import('./rolatech-angular-product-product-index.component-
|
|
654
|
+
loadComponent: () => import('./rolatech-angular-product-product-index.component-Dy6tCxJf.mjs').then((x) => x.ProductIndexComponent),
|
|
723
655
|
},
|
|
724
656
|
{
|
|
725
657
|
path: 'categories/:id',
|
|
@@ -769,15 +701,6 @@ var ProductScope;
|
|
|
769
701
|
ProductScope[ProductScope["GLOBAL"] = '全域'] = "GLOBAL";
|
|
770
702
|
})(ProductScope || (ProductScope = {}));
|
|
771
703
|
|
|
772
|
-
class ProductManageContentComponent {
|
|
773
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductManageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
774
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProductManageContentComponent, isStandalone: true, selector: "rolatech-product-manage-content", ngImport: i0, template: "<ng-content select=\"rolatech-toolbar\"></ng-content>\n<div class=\"p-3\">\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
775
|
-
}
|
|
776
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProductManageContentComponent, decorators: [{
|
|
777
|
-
type: Component,
|
|
778
|
-
args: [{ selector: 'rolatech-product-manage-content', standalone: true, imports: [CommonModule], template: "<ng-content select=\"rolatech-toolbar\"></ng-content>\n<div class=\"p-3\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
779
|
-
}] });
|
|
780
|
-
|
|
781
704
|
class ProductManageLayoutComponent {
|
|
782
705
|
constructor() {
|
|
783
706
|
this.submitted = false;
|
|
@@ -815,14 +738,23 @@ class ProductManageLayoutComponent {
|
|
|
815
738
|
},
|
|
816
739
|
});
|
|
817
740
|
}
|
|
818
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
819
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
741
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
742
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageLayoutComponent, isStandalone: true, selector: "rolatech-product-manage-layout", ngImport: i0, template: "<div class=\"flex flex-col md:flex-row m-auto\">\n <div\n class=\"min-w-[256px] px-3 md:px-0 flex flex-row md:flex-col md:h-full items-center md:items-start h-16 overflow-x-scroll overflow-y-hidden scrollbar-hide whitespace-pre\"\n >\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\">\u5546\u54C1\u4FE1\u606F</div>\n <a routerLink=\"./info\" routerLinkActive=\"manage-active\" class=\"p-2\">\u57FA\u672C\u4FE1\u606F</a>\n <a routerLink=\"./media\" routerLinkActive=\"manage-active\" class=\"p-2\">\u56FE\u7247</a>\n <a routerLink=\"./sections\" routerLinkActive=\"manage-active\" class=\"p-2\">\u8BE6\u60C5</a>\n <a routerLink=\"./options\" routerLinkActive=\"manage-active\" class=\"p-2\">\u9009\u9879</a>\n </div>\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\">\u5546\u54C1\u8BBE\u7F6E</div>\n <a routerLink=\"./variants\" routerLinkActive=\"manage-active\" class=\"p-2\">\u4EF7\u683C\u7B56\u7565</a>\n <a routerLink=\"./inventory\" routerLinkActive=\"manage-active\" class=\"p-2\">\u5E93\u5B58\u8BBE\u7F6E</a>\n <a routerLink=\"./schedule\" routerLinkActive=\"manage-active\" class=\"p-2\">\u53D1\u5E03\u8BBE\u7F6E</a>\n </div>\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\">\u5176\u4ED6\u4FE1\u606F</div>\n <a routerLink=\"./pricing\" routerLinkActive=\"manage-active\" class=\"p-2\">\u4EF7\u683C</a>\n </div>\n\n @if (isDraft) {\n <div class=\"md:mt-6 md:ml-2\">\n <button mat-flat-button color=\"primary\" (click)=\"publish()\">\u53D1\u5E03\u5546\u54C1</button>\n </div>\n }\n </div>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n</div>\n", styles: [".manage-active{background-color:var(--rt-10-percent-layer, rgba(0, 0, 0, .05));box-shadow:4px 0 var(--rt-base-background-inverse, #000) inset;font-weight:600}@media (max-width: 768px){.manage-active{box-shadow:inset 0 -4px 0 0 var(--rt-base-background-inverse, #000)}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
820
743
|
}
|
|
821
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
744
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageLayoutComponent, decorators: [{
|
|
822
745
|
type: Component,
|
|
823
|
-
args: [{ selector: 'rolatech-product-manage-layout',
|
|
746
|
+
args: [{ selector: 'rolatech-product-manage-layout', imports: [RouterLink, RouterLinkActive, MatButtonModule, RouterOutlet], template: "<div class=\"flex flex-col md:flex-row m-auto\">\n <div\n class=\"min-w-[256px] px-3 md:px-0 flex flex-row md:flex-col md:h-full items-center md:items-start h-16 overflow-x-scroll overflow-y-hidden scrollbar-hide whitespace-pre\"\n >\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\">\u5546\u54C1\u4FE1\u606F</div>\n <a routerLink=\"./info\" routerLinkActive=\"manage-active\" class=\"p-2\">\u57FA\u672C\u4FE1\u606F</a>\n <a routerLink=\"./media\" routerLinkActive=\"manage-active\" class=\"p-2\">\u56FE\u7247</a>\n <a routerLink=\"./sections\" routerLinkActive=\"manage-active\" class=\"p-2\">\u8BE6\u60C5</a>\n <a routerLink=\"./options\" routerLinkActive=\"manage-active\" class=\"p-2\">\u9009\u9879</a>\n </div>\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\">\u5546\u54C1\u8BBE\u7F6E</div>\n <a routerLink=\"./variants\" routerLinkActive=\"manage-active\" class=\"p-2\">\u4EF7\u683C\u7B56\u7565</a>\n <a routerLink=\"./inventory\" routerLinkActive=\"manage-active\" class=\"p-2\">\u5E93\u5B58\u8BBE\u7F6E</a>\n <a routerLink=\"./schedule\" routerLinkActive=\"manage-active\" class=\"p-2\">\u53D1\u5E03\u8BBE\u7F6E</a>\n </div>\n <div class=\"flex flex-row md:flex-col md:w-full\">\n <div class=\"hidden md:flex text-xl font-bold h-14 items-center px-2\">\u5176\u4ED6\u4FE1\u606F</div>\n <a routerLink=\"./pricing\" routerLinkActive=\"manage-active\" class=\"p-2\">\u4EF7\u683C</a>\n </div>\n\n @if (isDraft) {\n <div class=\"md:mt-6 md:ml-2\">\n <button mat-flat-button color=\"primary\" (click)=\"publish()\">\u53D1\u5E03\u5546\u54C1</button>\n </div>\n }\n </div>\n <div class=\"w-full\">\n <router-outlet></router-outlet>\n </div>\n</div>\n", styles: [".manage-active{background-color:var(--rt-10-percent-layer, rgba(0, 0, 0, .05));box-shadow:4px 0 var(--rt-base-background-inverse, #000) inset;font-weight:600}@media (max-width: 768px){.manage-active{box-shadow:inset 0 -4px 0 0 var(--rt-base-background-inverse, #000)}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}\n"] }]
|
|
824
747
|
}], ctorParameters: () => [] });
|
|
825
748
|
|
|
749
|
+
class ProductManageContentComponent {
|
|
750
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
751
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ProductManageContentComponent, isStandalone: true, selector: "rolatech-product-manage-content", ngImport: i0, template: "<ng-content select=\"rolatech-toolbar\"></ng-content>\n<div class=\"p-3\">\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
752
|
+
}
|
|
753
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageContentComponent, decorators: [{
|
|
754
|
+
type: Component,
|
|
755
|
+
args: [{ selector: 'rolatech-product-manage-content', imports: [CommonModule], template: "<ng-content select=\"rolatech-toolbar\"></ng-content>\n<div class=\"p-3\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
756
|
+
}] });
|
|
757
|
+
|
|
826
758
|
class ProductManageInfoComponent extends BaseComponent {
|
|
827
759
|
constructor() {
|
|
828
760
|
super(...arguments);
|
|
@@ -847,10 +779,10 @@ class ProductManageInfoComponent extends BaseComponent {
|
|
|
847
779
|
this.productService.get(this.id).subscribe({
|
|
848
780
|
next: (res) => {
|
|
849
781
|
this.product = res.data;
|
|
850
|
-
|
|
782
|
+
const price = (this.product.price / 100).toFixed(2);
|
|
851
783
|
this.price.set(price);
|
|
852
784
|
if (this.product.priceType.toString() === 'PARTIAL') {
|
|
853
|
-
|
|
785
|
+
const deposit = (this.product.deposit / 100).toFixed(2);
|
|
854
786
|
this.deposit.set(deposit);
|
|
855
787
|
}
|
|
856
788
|
},
|
|
@@ -891,12 +823,12 @@ class ProductManageInfoComponent extends BaseComponent {
|
|
|
891
823
|
},
|
|
892
824
|
});
|
|
893
825
|
}
|
|
894
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
895
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
826
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageInfoComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
827
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageInfoComponent, isStandalone: true, selector: "rolatech-product-manage-info", inputs: { price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: false, transformFunction: null }, deposit: { classPropertyName: "deposit", publicName: "deposit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { price: "priceChange", deposit: "depositChange" }, usesInheritance: true, ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u57FA\u672C\u4FE1\u606F\" class=\"hidden md:block\" divider></rolatech-toolbar>\n @if (product) {\n <div class=\"flex flex-col\">\n <form #productForm=\"ngForm\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5546\u54C1\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"product.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5546\u54C1\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"product.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" required>\n <mat-label>\u7C7B\u578B</mat-label>\n <mat-select\n name=\"type\"\n [compareWith]=\"typeCompareFn\"\n (selectionChange)=\"onTypeChange($event)\"\n [(ngModel)]=\"product.type\"\n >\n @for (type of productType | keyvalue; track type) {\n <mat-option [value]=\"type.key\">\n {{ type.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" ngModelGroup=\"categories\" required>\n <mat-label>\u5206\u7C7B</mat-label>\n <mat-select\n multiple\n name=\"id\"\n [compareWith]=\"compareFn\"\n [(ngModel)]=\"product.categories\"\n #select=\"matSelect\"\n (selectionChange)=\"onCategoryChange($event)\"\n >\n @for (item of categories; track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" required>\n <mat-label>\u4EF7\u683C\u7C7B\u578B</mat-label>\n <mat-select name=\"priceType\" [compareWith]=\"priceTypeCompareFn\" [(ngModel)]=\"product.priceType\">\n @for (type of priceType | keyvalue; track type) {\n <mat-option [value]=\"type.key\">\n {{ type.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u4EF7\u683C </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"price\" name=\"price\" required rolatechDecimal />\n </mat-form-field>\n @if (product.priceType && product.priceType.toString() === 'PARTIAL') {\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5B9A\u91D1 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"deposit\" name=\"deposit\" required rolatechDecimal />\n </mat-form-field>\n }\n </form>\n </div>\n <div>\n <button mat-flat-button type=\"primary\" (click)=\"update()\">\u4FDD\u5B58</button>\n </div>\n }\n</rolatech-product-manage-content>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.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: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: i1$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: "directive", type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.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"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }, { kind: "directive", type: DecimalDirective, selector: "[rolatechDecimal]" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
|
|
896
828
|
}
|
|
897
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
829
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageInfoComponent, decorators: [{
|
|
898
830
|
type: Component,
|
|
899
|
-
args: [{ selector: 'rolatech-product-manage-info',
|
|
831
|
+
args: [{ selector: 'rolatech-product-manage-info', imports: [
|
|
900
832
|
FormsModule,
|
|
901
833
|
MatFormFieldModule,
|
|
902
834
|
MatInputModule,
|
|
@@ -1060,12 +992,12 @@ class ProductManageSectionsComponent {
|
|
|
1060
992
|
}
|
|
1061
993
|
});
|
|
1062
994
|
}
|
|
1063
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1064
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
995
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageSectionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
996
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageSectionsComponent, isStandalone: true, selector: "rolatech-product-manage-sections", ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u8BE6\u60C5\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n <div>\n @for (section of sections; track section) {\n <rolatech-product-manage-section-item\n [section]=\"section\"\n (upload)=\"onUploadSectionMedia($event)\"\n (deleteMedia)=\"onDeleteSectionMedia($event)\"\n (save)=\"onSectionSave($event)\"\n (delete)=\"onSectionDelete($event)\"\n [actions]=\"true\"\n ></rolatech-product-manage-section-item>\n }\n </div>\n <button mat-stroked-button (click)=\"addSection()\" class=\"mt-3\">\n <mat-icon>add</mat-icon>\n <span>\u6DFB\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "component", type: ProductManageSectionItemComponent, selector: "rolatech-product-manage-section-item", inputs: ["isUploading", "section", "actions", "selectMedia"], outputs: ["upload", "delete", "save", "deleteMedia"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }] }); }
|
|
1065
997
|
}
|
|
1066
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
998
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageSectionsComponent, decorators: [{
|
|
1067
999
|
type: Component,
|
|
1068
|
-
args: [{ selector: 'rolatech-product-manage-sections',
|
|
1000
|
+
args: [{ selector: 'rolatech-product-manage-sections', imports: [ProductManageSectionItemComponent, MatButtonModule, MatIconModule, ToolbarComponent, ProductManageContentComponent], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u8BE6\u60C5\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n <div>\n @for (section of sections; track section) {\n <rolatech-product-manage-section-item\n [section]=\"section\"\n (upload)=\"onUploadSectionMedia($event)\"\n (deleteMedia)=\"onDeleteSectionMedia($event)\"\n (save)=\"onSectionSave($event)\"\n (delete)=\"onSectionDelete($event)\"\n [actions]=\"true\"\n ></rolatech-product-manage-section-item>\n }\n </div>\n <button mat-stroked-button (click)=\"addSection()\" class=\"mt-3\">\n <mat-icon>add</mat-icon>\n <span>\u6DFB\u52A0\u8BE6\u60C5</span>\n </button>\n </div>\n</rolatech-product-manage-content>\n" }]
|
|
1069
1001
|
}], ctorParameters: () => [] });
|
|
1070
1002
|
|
|
1071
1003
|
const SIZE = 10 * 1024 * 1024; // file slice size 10MB
|
|
@@ -1187,21 +1119,21 @@ class ProductManageMediaComponent {
|
|
|
1187
1119
|
}
|
|
1188
1120
|
});
|
|
1189
1121
|
}
|
|
1190
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1191
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1123
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageMediaComponent, isStandalone: true, selector: "rolatech-product-manage-media", ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u56FE\u7247\u4FE1\u606F\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n <p>*\u56FE\u7247\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u57285MB\u4EE5\u4E0B*</p>\n <rolatech-media-list (upload)=\"onUploadMedia($event)\" [isUploading]=\"isUploading\">\n @for (item of media; track item; let i = $index) {\n <rolatech-media-list-item\n [media]=\"item\"\n (mediaItemClick)=\"onImageClick(i)\"\n (deleteMedia)=\"onMediaDelete(item)\"\n ></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "component", type: MediaListComponent, selector: "rolatech-media-list", inputs: ["isUploading", "media", "showAdd"], outputs: ["mediaItemClick", "upload"] }, { kind: "component", type: MediaListItemComponent, selector: "rolatech-media-list-item", inputs: ["media", "uploadProgress"], outputs: ["mediaItemClick", "deleteMedia"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }] }); }
|
|
1192
1124
|
}
|
|
1193
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageMediaComponent, decorators: [{
|
|
1194
1126
|
type: Component,
|
|
1195
|
-
args: [{ selector: 'rolatech-product-manage-media',
|
|
1127
|
+
args: [{ selector: 'rolatech-product-manage-media', imports: [MediaListComponent, MediaListItemComponent, ToolbarComponent, ProductManageContentComponent], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u56FE\u7247\u4FE1\u606F\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div>\n <p>*\u56FE\u7247\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u57285MB\u4EE5\u4E0B*</p>\n <rolatech-media-list (upload)=\"onUploadMedia($event)\" [isUploading]=\"isUploading\">\n @for (item of media; track item; let i = $index) {\n <rolatech-media-list-item\n [media]=\"item\"\n (mediaItemClick)=\"onImageClick(i)\"\n (deleteMedia)=\"onMediaDelete(item)\"\n ></rolatech-media-list-item>\n }\n </rolatech-media-list>\n </div>\n</rolatech-product-manage-content>\n" }]
|
|
1196
1128
|
}], ctorParameters: () => [] });
|
|
1197
1129
|
|
|
1198
1130
|
class ProductManagePricingComponent {
|
|
1199
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1200
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManagePricingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ProductManagePricingComponent, isStandalone: true, selector: "rolatech-product-manage-pricing", ngImport: i0, template: "<p>product-manage-pricing works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
1201
1133
|
}
|
|
1202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManagePricingComponent, decorators: [{
|
|
1203
1135
|
type: Component,
|
|
1204
|
-
args: [{ selector: 'rolatech-product-manage-pricing',
|
|
1136
|
+
args: [{ selector: 'rolatech-product-manage-pricing', imports: [CommonModule], template: "<p>product-manage-pricing works!</p>\n" }]
|
|
1205
1137
|
}] });
|
|
1206
1138
|
|
|
1207
1139
|
class ProductManageItemComponent {
|
|
@@ -1213,21 +1145,21 @@ class ProductManageItemComponent {
|
|
|
1213
1145
|
publish() { }
|
|
1214
1146
|
archived() { }
|
|
1215
1147
|
delete() { }
|
|
1216
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1148
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1149
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageItemComponent, isStandalone: true, selector: "rolatech-product-manage-item", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex p-3 items-center hover:bg-[--rt-raised-background] cursor-pointer\">\n <div>\n @if (product().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]=\"product().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 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>\n <div class=\"px-3\">\n {{ product().name }}\n </div>\n <div class=\"flex-1\"></div>\n <div class=\"px-3 min-w-28 w-28\">\n {{ status[product().status] }}\n </div>\n <div class=\"px-3 min-w-28 w-28\">\u00A5{{ product().price | fixed }}</div>\n <div class=\"pr-4\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n aria-label=\"Example icon-button with a menu\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n @if (product().status === 'DRAFT') {\n <button mat-menu-item (click)=\"publish()\">\n <span> \u4E0A\u67B6 </span>\n </button>\n }\n @if (product().status === 'STARTED') {\n <button mat-menu-item (click)=\"archived()\">\n <span> \u7ED3\u675F </span>\n </button>\n }\n @if (product().status !== 'ACTIVE') {\n <button mat-menu-item (click)=\"delete()\">\n <span> \u5220\u9664 </span>\n </button>\n }\n </mat-menu>\n </div>\n</div>\n<div class=\"h-[1px] px-3 bg-[--rt-raised-background]\"></div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ImagePlaceholderComponent, selector: "rolatech-image-placeholder" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: FixedPipe, name: "fixed" }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [ThumbnailComponent]] }); }
|
|
1218
1150
|
}
|
|
1219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageItemComponent, decorators: [{
|
|
1220
1152
|
type: Component,
|
|
1221
|
-
args: [{ selector: 'rolatech-product-manage-item',
|
|
1153
|
+
args: [{ selector: 'rolatech-product-manage-item', imports: [CommonModule, ThumbnailComponent, ImagePlaceholderComponent, MatButtonModule, MatMenuModule, MatIcon, FixedPipe], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex p-3 items-center hover:bg-[--rt-raised-background] cursor-pointer\">\n <div>\n @if (product().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]=\"product().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 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>\n <div class=\"px-3\">\n {{ product().name }}\n </div>\n <div class=\"flex-1\"></div>\n <div class=\"px-3 min-w-28 w-28\">\n {{ status[product().status] }}\n </div>\n <div class=\"px-3 min-w-28 w-28\">\u00A5{{ product().price | fixed }}</div>\n <div class=\"pr-4\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n aria-label=\"Example icon-button with a menu\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n @if (product().status === 'DRAFT') {\n <button mat-menu-item (click)=\"publish()\">\n <span> \u4E0A\u67B6 </span>\n </button>\n }\n @if (product().status === 'STARTED') {\n <button mat-menu-item (click)=\"archived()\">\n <span> \u7ED3\u675F </span>\n </button>\n }\n @if (product().status !== 'ACTIVE') {\n <button mat-menu-item (click)=\"delete()\">\n <span> \u5220\u9664 </span>\n </button>\n }\n </mat-menu>\n </div>\n</div>\n<div class=\"h-[1px] px-3 bg-[--rt-raised-background]\"></div>\n" }]
|
|
1222
1154
|
}] });
|
|
1223
1155
|
|
|
1224
1156
|
class ProductManageItemHeaderComponent {
|
|
1225
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1226
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1157
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageItemHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1158
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ProductManageItemHeaderComponent, isStandalone: true, selector: "rolatech-product-manage-item-header", ngImport: i0, template: "<div class=\"flex h-11 items-center\">\n <div class=\"text-md font-bold px-3 min-w-[320px]\">\u5546\u54C1</div>\n <div class=\"flex-1\"></div>\n <div class=\"text-md font-bold px-3 w-28\">\u72B6\u6001</div>\n <div class=\"text-md font-bold px-3 w-28\">\u4EF7\u683C</div>\n <div class=\"text-md px-3 w-16\"></div>\n</div>\n<div class=\"h-[1px] px-3 bg-[--rt-raised-background]\"></div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
1227
1159
|
}
|
|
1228
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageItemHeaderComponent, decorators: [{
|
|
1229
1161
|
type: Component,
|
|
1230
|
-
args: [{ selector: 'rolatech-product-manage-item-header',
|
|
1162
|
+
args: [{ selector: 'rolatech-product-manage-item-header', imports: [CommonModule], template: "<div class=\"flex h-11 items-center\">\n <div class=\"text-md font-bold px-3 min-w-[320px]\">\u5546\u54C1</div>\n <div class=\"flex-1\"></div>\n <div class=\"text-md font-bold px-3 w-28\">\u72B6\u6001</div>\n <div class=\"text-md font-bold px-3 w-28\">\u4EF7\u683C</div>\n <div class=\"text-md px-3 w-16\"></div>\n</div>\n<div class=\"h-[1px] px-3 bg-[--rt-raised-background]\"></div>\n" }]
|
|
1231
1163
|
}] });
|
|
1232
1164
|
|
|
1233
1165
|
class ProductManageIndexComponent {
|
|
@@ -1348,12 +1280,12 @@ class ProductManageIndexComponent {
|
|
|
1348
1280
|
}
|
|
1349
1281
|
});
|
|
1350
1282
|
}
|
|
1351
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1352
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1283
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageIndexComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1284
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageIndexComponent, isStandalone: true, selector: "rolatech-product-manage-index", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, isSignal: true }], ngImport: i0, template: "<rolatech-toolbar title=\"\u5546\u54C1\">\n <div class=\"flex items-center gap-2\">\n <button mat-button routerLink=\"./create\">\n <mat-icon>add</mat-icon>\n \u521B\u5EFA\u5546\u54C1\n </button>\n </div>\n</rolatech-toolbar>\n@if (isLoading) {\n <div class=\"flex justify-center items-center\">\n <rolatech-spinner></rolatech-spinner>\n </div>\n} @else {\n <rolatech-product-manage-item-header></rolatech-product-manage-item-header>\n @for (item of products; track $index) {\n <rolatech-product-manage-item [product]=\"item\" routerLink=\"./{{ item.id }}/manage/info\"></rolatech-product-manage-item>\n }\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"pageEvent = find($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n}\n", styles: ["mat-form-field{width:100%}table{width:100%}td.mat-column-actions{text-align:right;max-width:64px;font-size:.8rem;padding:0 8px}.mat-mdc-header-cell.actions{text-align:right;max-width:64px;width:64px}.mat-mdc-cell:nth-last-child(2),.mat-mdc-header-cell:nth-last-child(2),.mat-mdc-footer-cell:nth-last-child(2){text-align:right;max-width:180px;width:180px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{text-align:right;padding-right:8px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i3$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }, { kind: "component", type: ProductManageItemComponent, selector: "rolatech-product-manage-item", inputs: ["product", "thumbnail"] }, { kind: "component", type: ProductManageItemHeaderComponent, selector: "rolatech-product-manage-item-header" }] }); }
|
|
1353
1285
|
}
|
|
1354
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageIndexComponent, decorators: [{
|
|
1355
1287
|
type: Component,
|
|
1356
|
-
args: [{ selector: 'rolatech-product-manage-index',
|
|
1288
|
+
args: [{ selector: 'rolatech-product-manage-index', imports: [
|
|
1357
1289
|
MatButtonModule,
|
|
1358
1290
|
RouterLink,
|
|
1359
1291
|
MatIconModule,
|
|
@@ -1391,12 +1323,12 @@ class ProductManageCreateComponent {
|
|
|
1391
1323
|
},
|
|
1392
1324
|
});
|
|
1393
1325
|
}
|
|
1394
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1395
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1326
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1327
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ProductManageCreateComponent, isStandalone: true, selector: "rolatech-product-manage-create", ngImport: i0, template: "<rolatech-toolbar title=\"\u521B\u5EFA\u5546\u54C1\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-3\">\n <section>\n <form #productForm=\"ngForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5546\u54C1\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"product.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5546\u54C1\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"product.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n </div>\n </form>\n </section>\n <div class=\"mt-3\">\n <button mat-flat-button [disabled]=\"!productForm.valid\" class=\"w-28\" (click)=\"create()\">\u521B\u5EFA</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.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: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.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: "directive", type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
|
|
1396
1328
|
}
|
|
1397
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1329
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageCreateComponent, decorators: [{
|
|
1398
1330
|
type: Component,
|
|
1399
|
-
args: [{ selector: 'rolatech-product-manage-create',
|
|
1331
|
+
args: [{ selector: 'rolatech-product-manage-create', imports: [
|
|
1400
1332
|
ToolbarComponent,
|
|
1401
1333
|
FormsModule,
|
|
1402
1334
|
MatFormFieldModule,
|
|
@@ -1404,8 +1336,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
1404
1336
|
TextFieldModule,
|
|
1405
1337
|
MatSelectModule,
|
|
1406
1338
|
MatOptionModule,
|
|
1407
|
-
MediaListComponent,
|
|
1408
|
-
MediaListItemComponent,
|
|
1409
1339
|
MatButtonModule,
|
|
1410
1340
|
], template: "<rolatech-toolbar title=\"\u521B\u5EFA\u5546\u54C1\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-3\">\n <section>\n <form #productForm=\"ngForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5546\u54C1\u540D\u79F0 </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"product.name\" name=\"name\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u5546\u54C1\u63CF\u8FF0 </mat-label>\n <textarea\n matInput\n type=\"text\"\n [(ngModel)]=\"product.description\"\n name=\"description\"\n required\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n ></textarea>\n </mat-form-field>\n </div>\n </form>\n </section>\n <div class=\"mt-3\">\n <button mat-flat-button [disabled]=\"!productForm.valid\" class=\"w-28\" (click)=\"create()\">\u521B\u5EFA</button>\n </div>\n</div>\n" }]
|
|
1411
1341
|
}] });
|
|
@@ -1480,12 +1410,12 @@ class ProductManageOptionsComponent extends BaseComponent {
|
|
|
1480
1410
|
}
|
|
1481
1411
|
});
|
|
1482
1412
|
}
|
|
1483
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1484
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1413
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageOptionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1414
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageOptionsComponent, isStandalone: true, selector: "rolatech-product-manage-options", usesInheritance: true, ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u9009\u9879\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n @for (item of options; track $index) {\n <rolatech-product-manage-option-item\n [option]=\"item\"\n (delete)=\"onDeleteOption($event)\"\n (edit)=\"onUpdateOption($event)\"\n ></rolatech-product-manage-option-item>\n }\n <div class=\"mt-3\">\n @if (add) {\n <rolatech-product-manage-option-add\n (save)=\"saveOption($event)\"\n (cancel)=\"add = false\"\n ></rolatech-product-manage-option-add>\n } @else {\n <button mat-stroked-button (click)=\"add = true\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0</span>\n </button>\n }\n </div>\n </div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: ProductManageOptionItemComponent, selector: "rolatech-product-manage-option-item", inputs: ["option"], outputs: ["delete", "save", "edit"] }, { kind: "component", type: ProductManageOptionAddComponent, selector: "rolatech-product-manage-option-add", outputs: ["cancel", "save", "output"] }] }); }
|
|
1485
1415
|
}
|
|
1486
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageOptionsComponent, decorators: [{
|
|
1487
1417
|
type: Component,
|
|
1488
|
-
args: [{ selector: 'rolatech-product-manage-options',
|
|
1418
|
+
args: [{ selector: 'rolatech-product-manage-options', imports: [
|
|
1489
1419
|
ProductManageContentComponent,
|
|
1490
1420
|
ToolbarComponent,
|
|
1491
1421
|
MatButtonModule,
|
|
@@ -1493,8 +1423,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
1493
1423
|
AngularCommonModule,
|
|
1494
1424
|
AngularComponentsModule,
|
|
1495
1425
|
MatIconModule,
|
|
1496
|
-
AccordionComponent,
|
|
1497
|
-
PanelComponent,
|
|
1498
1426
|
ProductManageOptionItemComponent,
|
|
1499
1427
|
ProductManageOptionAddComponent,
|
|
1500
1428
|
], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u9009\u9879\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div>\n @for (item of options; track $index) {\n <rolatech-product-manage-option-item\n [option]=\"item\"\n (delete)=\"onDeleteOption($event)\"\n (edit)=\"onUpdateOption($event)\"\n ></rolatech-product-manage-option-item>\n }\n <div class=\"mt-3\">\n @if (add) {\n <rolatech-product-manage-option-add\n (save)=\"saveOption($event)\"\n (cancel)=\"add = false\"\n ></rolatech-product-manage-option-add>\n } @else {\n <button mat-stroked-button (click)=\"add = true\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0</span>\n </button>\n }\n </div>\n </div>\n</rolatech-product-manage-content>\n" }]
|
|
@@ -1568,8 +1496,8 @@ class ProductManageVariantComponent {
|
|
|
1568
1496
|
return { ...currentVariant };
|
|
1569
1497
|
});
|
|
1570
1498
|
}
|
|
1571
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1572
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1499
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageVariantComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1500
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageVariantComponent, isStandalone: true, selector: "rolatech-product-manage-variant", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { variant: "variantChange", upload: "upload" }, ngImport: i0, template: "<div class=\"flex items-center h-[72px] cursor-pointer px-2\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n <div>{{ variant().options | options }}</div>\n <div class=\"flex-1\"></div>\n <div class=\"px-3 dense-2\" (click)=\"$event.stopPropagation()\">\n <mat-form-field subscriptSizing=\"dynamic\" class=\"h-12\">\n <span matTextPrefix> \u00A5 </span>\n <input matInput type=\"text\" [value]=\"price()\" (change)=\"onPriceChange($event)\" rolatechDecimal />\n </mat-form-field>\n </div>\n <div class=\"px-3\">\n <mat-form-field class=\"dense-2\" (click)=\"$event.stopPropagation()\" subscriptSizing=\"dynamic\">\n <mat-select\n name=\"type\"\n [compareWith]=\"statusCompareFn\"\n (selectionChange)=\"onStatusChange($event)\"\n [(ngModel)]=\"variant().status\"\n >\n @for (key of enumKeys; track key) {\n <mat-option [value]=\"variantStatus[key]\">\n {{ variantStatus[key] }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"block w-20 text-right\">\n <button mat-icon-button aria-label=\"expand row\" (click)=\"expanded = !expanded; $event.stopPropagation()\">\n @if (expanded) {\n <mat-icon>keyboard_arrow_up</mat-icon>\n } @else {\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </div>\n</div>\n<div>\n <div class=\"flex flex-col gap-3 w-full overflow-hidden\" [@detailExpand]=\"expanded ? 'expanded' : 'collapsed'\">\n <div class=\"flex flex-col my-3 md:w-1/2\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\" class=\"h-12\">\n <span matTextPrefix> \u00A5 </span>\n <input matInput type=\"number\" [value]=\"price()\" rolatechDecimal />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>\u5E93\u5B58</mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"variant().price\" />\n </mat-form-field>\n </div>\n <div class=\"flex flex-col items-start my-3 md:w-1/2\">\n <div class=\"flex flex-wrap\">\n @for (media of variant().media; track $index) {\n <div class=\"media-list-item\">\n <div class=\"inner-media\">\n @defer (on viewport()) {\n <img (click)=\"onMediaClick($index)\" [src]=\"media.url\" [alt]=\"media.alt\" />\n } @placeholder {\n <div class=\"bg-[--rt-raised-background] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n @if (media.uploading) {\n <div class=\"absolute flex items-center justify-center p-4 w-full h-full bg-[--rt-20-percent-layer]\">\n <mat-spinner></mat-spinner>\n <!--\n <svg\n viewBox=\"0 0 24 24\"\n preserveAspectRatio=\"xMidYMid meet\"\n focusable=\"false\"\n class=\"style-scope tp-yt-iron-icon\"\n style=\"pointer-events: none; display: block; width: 100%; height: 100%\"\n >\n <g class=\"style-scope tp-yt-iron-icon\">\n <path\n d=\"M17,18v1H6V18ZM6.49,9l.71.71L11,5.91V16h1V5.91l3.8,3.81L16.51,9l-5-5Z\"\n class=\"style-scope tp-yt-iron-icon\"\n ></path>\n </g>\n </svg>\n <span>Uploading\u2026</span> -->\n </div>\n }\n </div>\n </div>\n }\n <div class=\"media-list-item\">\n <div class=\"inner-media\" (click)=\"fileInput.click()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"48px\" viewBox=\"0 -960 960 960\" width=\"48px\" fill=\"#5f6368\">\n <path d=\"M444-444H240v-72h204v-204h72v204h204v72H516v204h-72v-204Z\" />\n </svg>\n </div>\n </div>\n <input style=\"display: none\" type=\"file\" accept=\"image/*\" (change)=\"onUpload($event)\" #fileInput />\n </div>\n </div>\n </div>\n</div>\n<mat-divider></mat-divider>\n", styles: [".media-list-item{cursor:pointer;position:relative;padding:2px}.inner-media{display:flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:4px;border:1px solid grey;position:relative;cursor:pointer;overflow:hidden}mat-form-field{width:160px}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1$3.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: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.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: "component", type: i8$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.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"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: OptionsFormatPipe, name: "options" }, { kind: "ngmodule", type: MatTableModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: DecimalDirective, selector: "[rolatechDecimal]" }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "ngmodule", type: MatSelectModule }], animations: [
|
|
1573
1501
|
trigger('detailExpand', [
|
|
1574
1502
|
state('collapsed', style({ height: '0px' })),
|
|
1575
1503
|
state('expanded', style({ height: '*' })),
|
|
@@ -1577,23 +1505,18 @@ class ProductManageVariantComponent {
|
|
|
1577
1505
|
]),
|
|
1578
1506
|
] }); }
|
|
1579
1507
|
}
|
|
1580
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1508
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageVariantComponent, decorators: [{
|
|
1581
1509
|
type: Component,
|
|
1582
|
-
args: [{ selector: 'rolatech-product-manage-variant',
|
|
1510
|
+
args: [{ selector: 'rolatech-product-manage-variant', imports: [
|
|
1583
1511
|
AngularCommonModule,
|
|
1584
1512
|
AngularComponentsModule,
|
|
1585
1513
|
OptionsFormatPipe,
|
|
1586
|
-
ProductManageContentComponent,
|
|
1587
|
-
ToolbarComponent,
|
|
1588
1514
|
MatTableModule,
|
|
1589
1515
|
MatIcon,
|
|
1590
1516
|
MatFormFieldModule,
|
|
1591
|
-
ThumbnailComponent,
|
|
1592
|
-
ImageComponent,
|
|
1593
1517
|
DecimalDirective,
|
|
1594
1518
|
MatProgressBarModule,
|
|
1595
1519
|
MatSelectModule,
|
|
1596
|
-
DecimalPipe,
|
|
1597
1520
|
], animations: [
|
|
1598
1521
|
trigger('detailExpand', [
|
|
1599
1522
|
state('collapsed', style({ height: '0px' })),
|
|
@@ -1653,10 +1576,7 @@ class ProductManageVariantsComponent extends BaseComponent {
|
|
|
1653
1576
|
});
|
|
1654
1577
|
}
|
|
1655
1578
|
}
|
|
1656
|
-
onInventorySlideToggle(e) {
|
|
1657
|
-
if (e.checked) {
|
|
1658
|
-
}
|
|
1659
|
-
}
|
|
1579
|
+
onInventorySlideToggle(e) { }
|
|
1660
1580
|
saveVariants() {
|
|
1661
1581
|
this.productService.updateVariants(this.id, this.variants).subscribe({
|
|
1662
1582
|
next: (res) => {
|
|
@@ -1699,47 +1619,173 @@ class ProductManageVariantsComponent extends BaseComponent {
|
|
|
1699
1619
|
this.variants = this.product.variants;
|
|
1700
1620
|
this.variantPriceChecked = this.variants ? this.variants.length > 0 : false;
|
|
1701
1621
|
this.options.set(res.data.options || []);
|
|
1702
|
-
|
|
1622
|
+
const price = (res.data.price / 100).toFixed(2);
|
|
1703
1623
|
this.productPrice.set(price);
|
|
1704
1624
|
this.loading = false;
|
|
1705
1625
|
},
|
|
1706
1626
|
});
|
|
1707
1627
|
}
|
|
1708
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1709
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1628
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageVariantsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1629
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageVariantsComponent, isStandalone: true, selector: "rolatech-product-manage-variants", inputs: { productPrice: { classPropertyName: "productPrice", publicName: "productPrice", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { productPrice: "productPriceChange" }, usesInheritance: true, ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u4EF7\u683C\u7B56\u7565\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n @if (loading) {\n <rolatech-spinner></rolatech-spinner>\n } @else {\n <div class=\"flex items-center\">\n <mat-slide-toggle\n color=\"primary\"\n #slide\n [checked]=\"variantPriceChecked\"\n (change)=\"onVariantSlideToggle($event)\"\n [disabled]=\"options().length <= 0\"\n ></mat-slide-toggle>\n <div>\u6839\u636E\u5546\u54C1\u9009\u9879\u8BBE\u7F6E\u4E0D\u540C\u7684\u4EF7\u683C\u548C\u5E93\u5B58</div>\n </div>\n <div class=\"flex items-center\">\n <mat-slide-toggle color=\"primary\" #inventorySlide (change)=\"onInventorySlideToggle($event)\"></mat-slide-toggle>\n <div>\u8DDF\u8E2A\u5E93\u5B58</div>\n </div>\n\n @if (slide.checked) {\n <div>\n <div class=\"header flex gap-3 h-14 items-center\">\n <div class=\"px-3\">\u540D\u79F0</div>\n <div class=\"flex-1\"></div>\n <div class=\"w-[160px]\">\u4EF7\u683C</div>\n <div class=\"w-[160px]\">\u72B6\u6001</div>\n @if (inventorySlide.checked) {\n <div class=\"w-[160px]\">\u5E93\u5B58</div>\n }\n\n <div class=\"block w-20 text-right\">\u5C55\u5F00/\u6298\u53E0</div>\n </div>\n @for (item of variants; track $index) {\n <rolatech-product-manage-variant [variant]=\"item\" (upload)=\"onUpload(item, $event)\"></rolatech-product-manage-variant>\n }\n </div>\n <div class=\"mt-3\">\n <button mat-button (click)=\"saveVariants()\">\u4FDD\u5B58</button>\n </div>\n }\n }\n</rolatech-product-manage-content>\n", styles: ["mat-slide-toggle{scale:.8}mat-form-field{width:72px}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: ProductManageVariantComponent, selector: "rolatech-product-manage-variant", inputs: ["variant"], outputs: ["variantChange", "upload"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }] }); }
|
|
1710
1630
|
}
|
|
1711
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageVariantsComponent, decorators: [{
|
|
1712
1632
|
type: Component,
|
|
1713
|
-
args: [{ selector: 'rolatech-product-manage-variants',
|
|
1633
|
+
args: [{ selector: 'rolatech-product-manage-variants', imports: [
|
|
1714
1634
|
AngularCommonModule,
|
|
1715
1635
|
AngularComponentsModule,
|
|
1716
1636
|
ProductManageContentComponent,
|
|
1717
1637
|
ToolbarComponent,
|
|
1718
|
-
MatIcon,
|
|
1719
1638
|
MatFormFieldModule,
|
|
1720
|
-
ThumbnailComponent,
|
|
1721
|
-
ImageComponent,
|
|
1722
1639
|
ProductManageVariantComponent,
|
|
1723
1640
|
SpinnerComponent,
|
|
1724
1641
|
], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u4EF7\u683C\u7B56\u7565\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n @if (loading) {\n <rolatech-spinner></rolatech-spinner>\n } @else {\n <div class=\"flex items-center\">\n <mat-slide-toggle\n color=\"primary\"\n #slide\n [checked]=\"variantPriceChecked\"\n (change)=\"onVariantSlideToggle($event)\"\n [disabled]=\"options().length <= 0\"\n ></mat-slide-toggle>\n <div>\u6839\u636E\u5546\u54C1\u9009\u9879\u8BBE\u7F6E\u4E0D\u540C\u7684\u4EF7\u683C\u548C\u5E93\u5B58</div>\n </div>\n <div class=\"flex items-center\">\n <mat-slide-toggle color=\"primary\" #inventorySlide (change)=\"onInventorySlideToggle($event)\"></mat-slide-toggle>\n <div>\u8DDF\u8E2A\u5E93\u5B58</div>\n </div>\n\n @if (slide.checked) {\n <div>\n <div class=\"header flex gap-3 h-14 items-center\">\n <div class=\"px-3\">\u540D\u79F0</div>\n <div class=\"flex-1\"></div>\n <div class=\"w-[160px]\">\u4EF7\u683C</div>\n <div class=\"w-[160px]\">\u72B6\u6001</div>\n @if (inventorySlide.checked) {\n <div class=\"w-[160px]\">\u5E93\u5B58</div>\n }\n\n <div class=\"block w-20 text-right\">\u5C55\u5F00/\u6298\u53E0</div>\n </div>\n @for (item of variants; track $index) {\n <rolatech-product-manage-variant [variant]=\"item\" (upload)=\"onUpload(item, $event)\"></rolatech-product-manage-variant>\n }\n </div>\n <div class=\"mt-3\">\n <button mat-button (click)=\"saveVariants()\">\u4FDD\u5B58</button>\n </div>\n }\n }\n</rolatech-product-manage-content>\n", styles: ["mat-slide-toggle{scale:.8}mat-form-field{width:72px}\n"] }]
|
|
1725
1642
|
}] });
|
|
1726
1643
|
|
|
1727
1644
|
class ProductManageScheduleComponent {
|
|
1728
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1729
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
1645
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageScheduleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1646
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ProductManageScheduleComponent, isStandalone: true, selector: "rolatech-product-manage-schedule", ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u53D1\u5E03\u8BBE\u7F6E\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div></div>\n</rolatech-product-manage-content>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }] }); }
|
|
1730
1647
|
}
|
|
1731
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1648
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageScheduleComponent, decorators: [{
|
|
1732
1649
|
type: Component,
|
|
1733
|
-
args: [{ selector: 'rolatech-product-manage-schedule',
|
|
1650
|
+
args: [{ selector: 'rolatech-product-manage-schedule', imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent, ProductManageContentComponent], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u53D1\u5E03\u8BBE\u7F6E\" class=\"hidden md:block\" divider> </rolatech-toolbar>\n <div></div>\n</rolatech-product-manage-content>\n" }]
|
|
1734
1651
|
}] });
|
|
1735
1652
|
|
|
1736
|
-
class ProductManageInventoryComponent {
|
|
1737
|
-
|
|
1738
|
-
|
|
1653
|
+
class ProductManageInventoryComponent extends BaseComponent {
|
|
1654
|
+
constructor() {
|
|
1655
|
+
super(...arguments);
|
|
1656
|
+
this.productService = inject(ProductService);
|
|
1657
|
+
this.inventoryService = inject(InventoryService);
|
|
1658
|
+
this.inventoryEnabled = false;
|
|
1659
|
+
this.loading = false;
|
|
1660
|
+
this.locations = model();
|
|
1661
|
+
this.amount = 0;
|
|
1662
|
+
this.inventoryItem = {
|
|
1663
|
+
levels: [],
|
|
1664
|
+
};
|
|
1665
|
+
}
|
|
1666
|
+
ngOnInit() {
|
|
1667
|
+
this.id = this.route.parent?.snapshot.paramMap.get('id');
|
|
1668
|
+
this.getProduct();
|
|
1669
|
+
this.findInventoryLocations();
|
|
1670
|
+
this.findInventoryItemsByProductId();
|
|
1671
|
+
}
|
|
1672
|
+
getProduct() {
|
|
1673
|
+
this.loading = true;
|
|
1674
|
+
this.productService.get(this.id).subscribe({
|
|
1675
|
+
next: (res) => {
|
|
1676
|
+
this.product = res.data;
|
|
1677
|
+
this.loading = false;
|
|
1678
|
+
},
|
|
1679
|
+
});
|
|
1680
|
+
}
|
|
1681
|
+
findInventoryItemsByProductId() {
|
|
1682
|
+
this.inventoryService.findInventoryItemByProductId(this.id).subscribe({
|
|
1683
|
+
next: (res) => {
|
|
1684
|
+
if (res.data) {
|
|
1685
|
+
this.inventoryEnabled = true;
|
|
1686
|
+
this.inventoryItem = res.data;
|
|
1687
|
+
}
|
|
1688
|
+
},
|
|
1689
|
+
});
|
|
1690
|
+
}
|
|
1691
|
+
findInventoryLocations() {
|
|
1692
|
+
this.inventoryService.findLocations({}).subscribe({
|
|
1693
|
+
next: (res) => {
|
|
1694
|
+
this.locations.set(res.data);
|
|
1695
|
+
this.selectedLocation = res.data[0];
|
|
1696
|
+
},
|
|
1697
|
+
});
|
|
1698
|
+
}
|
|
1699
|
+
onInventorySlideToggle(event) {
|
|
1700
|
+
const newState = event.checked;
|
|
1701
|
+
this.inventoryEnabled = newState;
|
|
1702
|
+
if (!newState) {
|
|
1703
|
+
const options = {
|
|
1704
|
+
title: '取消库存策略吗',
|
|
1705
|
+
message: '这会删除现有策略, 确定吗?',
|
|
1706
|
+
cancelText: '取消',
|
|
1707
|
+
confirmText: '确认',
|
|
1708
|
+
};
|
|
1709
|
+
this.dialogService.open(options);
|
|
1710
|
+
this.dialogService.confirmed().subscribe({
|
|
1711
|
+
next: (res) => {
|
|
1712
|
+
if (res) {
|
|
1713
|
+
this.inventoryService.deleteInventoryItemsByProductId(this.id).subscribe({
|
|
1714
|
+
next: (res) => {
|
|
1715
|
+
this.inventoryEnabled = false;
|
|
1716
|
+
this.inventoryItem = {};
|
|
1717
|
+
},
|
|
1718
|
+
});
|
|
1719
|
+
}
|
|
1720
|
+
else {
|
|
1721
|
+
event.source.checked = !newState;
|
|
1722
|
+
}
|
|
1723
|
+
},
|
|
1724
|
+
});
|
|
1725
|
+
}
|
|
1726
|
+
}
|
|
1727
|
+
onSelectionChange(item, event) {
|
|
1728
|
+
item.locationId = event.value.id;
|
|
1729
|
+
}
|
|
1730
|
+
compareFn(o1, o2) {
|
|
1731
|
+
return o1.id === o2.id;
|
|
1732
|
+
}
|
|
1733
|
+
add() {
|
|
1734
|
+
const level = {
|
|
1735
|
+
location: {},
|
|
1736
|
+
amount: 0,
|
|
1737
|
+
};
|
|
1738
|
+
this.inventoryItem.levels.push(level);
|
|
1739
|
+
}
|
|
1740
|
+
save() {
|
|
1741
|
+
const locationIds = _.map(this.inventoryItem.levels, 'location.id');
|
|
1742
|
+
const duplicated = new Set(locationIds).size !== locationIds.length;
|
|
1743
|
+
if (duplicated) {
|
|
1744
|
+
this.snackBarService.open('仓库重复');
|
|
1745
|
+
return;
|
|
1746
|
+
}
|
|
1747
|
+
const data = {
|
|
1748
|
+
productId: this.id,
|
|
1749
|
+
levels: [],
|
|
1750
|
+
};
|
|
1751
|
+
this.inventoryItem.levels.forEach((item) => {
|
|
1752
|
+
data.levels.push({
|
|
1753
|
+
locationId: item.location.id,
|
|
1754
|
+
amount: item.amount,
|
|
1755
|
+
});
|
|
1756
|
+
});
|
|
1757
|
+
this.inventoryService.addInventoryItem(data).subscribe({
|
|
1758
|
+
next: (res) => {
|
|
1759
|
+
this.snackBarService.open('保存成功');
|
|
1760
|
+
},
|
|
1761
|
+
});
|
|
1762
|
+
}
|
|
1763
|
+
deleteLevel(index, level) {
|
|
1764
|
+
const options = {
|
|
1765
|
+
title: '确定删除吗',
|
|
1766
|
+
message: `这会删除现有仓库${level.location.name}商品库存数据, 确定吗?`,
|
|
1767
|
+
cancelText: '取消',
|
|
1768
|
+
confirmText: '确认',
|
|
1769
|
+
};
|
|
1770
|
+
this.dialogService.open(options);
|
|
1771
|
+
this.dialogService.confirmed().subscribe({
|
|
1772
|
+
next: (res) => {
|
|
1773
|
+
if (res) {
|
|
1774
|
+
this.inventoryService.deleteInventoryLevel(level.id).subscribe({
|
|
1775
|
+
next: (res) => {
|
|
1776
|
+
this.inventoryItem.levels.splice(index, 1);
|
|
1777
|
+
},
|
|
1778
|
+
});
|
|
1779
|
+
}
|
|
1780
|
+
},
|
|
1781
|
+
});
|
|
1782
|
+
}
|
|
1783
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageInventoryComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1784
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ProductManageInventoryComponent, isStandalone: true, selector: "rolatech-product-manage-inventory", inputs: { locations: { classPropertyName: "locations", publicName: "locations", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { locations: "locationsChange" }, usesInheritance: true, ngImport: i0, template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u5E93\u5B58\u8BBE\u7F6E\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div class=\"flex items-center\">\n <mat-slide-toggle\n color=\"primary\"\n #inventorySlide\n [checked]=\"inventoryEnabled\"\n (change)=\"onInventorySlideToggle($event)\"\n ></mat-slide-toggle>\n <div>\u8DDF\u8E2A\u5E93\u5B58</div>\n </div>\n @if (inventoryEnabled) {\n @for (item of inventoryItem.levels; track $index) {\n <div class=\"flex gap-3 items-center py-2\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>\u4ED3\u5E93</mat-label>\n <mat-select [compareWith]=\"compareFn\" (selectionChange)=\"onSelectionChange(item, $event)\" [(ngModel)]=\"item.location\">\n @for (item of locations(); track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label> \u6570\u91CF </mat-label>\n <input matInput [(ngModel)]=\"item.amount\" required />\n </mat-form-field>\n <button mat-button (click)=\"deleteLevel($index, item)\">\u5220\u9664</button>\n </div>\n }\n }\n <div class=\"flex gap-3\">\n <button mat-stroked-button (click)=\"add()\">\u6DFB\u52A0</button>\n <button mat-flat-button (click)=\"save()\">\u4FDD\u5B58</button>\n </div>\n</rolatech-product-manage-content>\n", styles: ["mat-slide-toggle{scale:.8}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1$3.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: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i1$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.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: "component", type: i5.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"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ProductManageContentComponent, selector: "rolatech-product-manage-content" }, { kind: "ngmodule", type: MatSelectModule }] }); }
|
|
1739
1785
|
}
|
|
1740
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1786
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ProductManageInventoryComponent, decorators: [{
|
|
1741
1787
|
type: Component,
|
|
1742
|
-
args: [{ selector: 'rolatech-product-manage-inventory',
|
|
1788
|
+
args: [{ selector: 'rolatech-product-manage-inventory', imports: [AngularCommonModule, AngularComponentsModule, ToolbarComponent, ProductManageContentComponent, MatSelectModule], template: "<rolatech-product-manage-content>\n <rolatech-toolbar title=\"\u5E93\u5B58\u8BBE\u7F6E\" class=\"hidden md:block\" divider></rolatech-toolbar>\n <div class=\"flex items-center\">\n <mat-slide-toggle\n color=\"primary\"\n #inventorySlide\n [checked]=\"inventoryEnabled\"\n (change)=\"onInventorySlideToggle($event)\"\n ></mat-slide-toggle>\n <div>\u8DDF\u8E2A\u5E93\u5B58</div>\n </div>\n @if (inventoryEnabled) {\n @for (item of inventoryItem.levels; track $index) {\n <div class=\"flex gap-3 items-center py-2\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>\u4ED3\u5E93</mat-label>\n <mat-select [compareWith]=\"compareFn\" (selectionChange)=\"onSelectionChange(item, $event)\" [(ngModel)]=\"item.location\">\n @for (item of locations(); track item) {\n <mat-option [value]=\"item\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label> \u6570\u91CF </mat-label>\n <input matInput [(ngModel)]=\"item.amount\" required />\n </mat-form-field>\n <button mat-button (click)=\"deleteLevel($index, item)\">\u5220\u9664</button>\n </div>\n }\n }\n <div class=\"flex gap-3\">\n <button mat-stroked-button (click)=\"add()\">\u6DFB\u52A0</button>\n <button mat-flat-button (click)=\"save()\">\u4FDD\u5B58</button>\n </div>\n</rolatech-product-manage-content>\n", styles: ["mat-slide-toggle{scale:.8}\n"] }]
|
|
1743
1789
|
}] });
|
|
1744
1790
|
|
|
1745
1791
|
const productManageRoutes = [
|
|
@@ -1793,15 +1839,16 @@ const productManageRoutes = [
|
|
|
1793
1839
|
|
|
1794
1840
|
function provideAngularProduct() {
|
|
1795
1841
|
const providers = [
|
|
1796
|
-
...services,
|
|
1797
1842
|
importProvidersFrom(CommonModule, ReactiveFormsModule, FormsModule, RouterModule),
|
|
1798
1843
|
];
|
|
1799
1844
|
return makeEnvironmentProviders(providers);
|
|
1800
1845
|
}
|
|
1801
1846
|
|
|
1847
|
+
const services = [];
|
|
1848
|
+
|
|
1802
1849
|
/**
|
|
1803
1850
|
* Generated bundle index. Do not edit.
|
|
1804
1851
|
*/
|
|
1805
1852
|
|
|
1806
|
-
export { ProductActionComponent,
|
|
1853
|
+
export { ProductActionComponent, ProductInfoComponent, ProductInventoryStatus, ProductItemComponent, ProductManageOptionAddComponent, ProductManageOptionItemComponent, ProductManageSectionItemComponent, ProductMediaComponent, ProductOptionComponent, ProductPriceType, ProductPricingComponent, ProductScope, ProductSectionComponent, ProductStatus, ProductType, productManageRoutes, productRoutes, provideAngularProduct, services };
|
|
1807
1854
|
//# sourceMappingURL=rolatech-angular-product.mjs.map
|