@rolatech/angular-course 17.2.0 → 17.2.2
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/esm2022/index.mjs +2 -1
- package/esm2022/lib/components/course-details-dialog/course-details-dialog.component.mjs +92 -0
- package/esm2022/lib/components/course-edit-dialog/course-edit-dialog.component.mjs +233 -0
- package/esm2022/lib/components/course-item/course-item.component.mjs +3 -3
- package/esm2022/lib/components/course-preview/course-preview.component.mjs +11 -0
- package/esm2022/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.mjs +33 -0
- package/esm2022/lib/components/course-pricing-dialog/course-pricing-dialog.component.mjs +59 -0
- package/esm2022/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.mjs +34 -0
- package/esm2022/lib/components/course-schedule-dialog/course-schedule-dialog.component.mjs +63 -0
- package/esm2022/lib/components/course-section-item/course-section-item.component.mjs +52 -0
- package/esm2022/lib/components/course-section-lecture-item/course-section-lecture-item.component.mjs +113 -0
- package/esm2022/lib/components/course-section-lecture-video-dialog/course-section-lecture-video-dialog.component.mjs +112 -0
- package/esm2022/lib/components/course-section-lecture-video-item/course-section-lecture-video-item.component.mjs +11 -0
- package/esm2022/lib/components/detail-item/detail-item.component.mjs +73 -0
- package/esm2022/lib/components/index.mjs +24 -0
- package/esm2022/lib/components/pricing-item/pricing-item.component.mjs +45 -0
- package/esm2022/lib/components/schedule-item/schedule-item.component.mjs +124 -0
- package/fesm2022/rolatech-angular-course.mjs +1027 -153
- package/fesm2022/rolatech-angular-course.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/components/course-details-dialog/course-details-dialog.component.d.ts +23 -0
- package/lib/components/course-edit-dialog/course-edit-dialog.component.d.ts +51 -0
- package/lib/components/course-preview/course-preview.component.d.ts +5 -0
- package/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.d.ts +12 -0
- package/lib/components/course-pricing-dialog/course-pricing-dialog.component.d.ts +19 -0
- package/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.d.ts +12 -0
- package/lib/components/course-schedule-dialog/course-schedule-dialog.component.d.ts +19 -0
- package/lib/components/course-section-item/course-section-item.component.d.ts +24 -0
- package/lib/components/course-section-lecture-item/course-section-lecture-item.component.d.ts +40 -0
- package/lib/components/course-section-lecture-video-dialog/course-section-lecture-video-dialog.component.d.ts +29 -0
- package/lib/components/course-section-lecture-video-item/course-section-lecture-video-item.component.d.ts +5 -0
- package/lib/components/detail-item/detail-item.component.d.ts +32 -0
- package/lib/components/index.d.ts +23 -0
- package/lib/components/pricing-item/pricing-item.component.d.ts +17 -0
- package/lib/components/schedule-item/schedule-item.component.d.ts +34 -0
- package/package.json +1 -1
- package/themes/_default.scss +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
|
|
3
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
4
|
+
import { CourseService } from '../../services';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import { PricingItemComponent } from '../pricing-item/pricing-item.component';
|
|
7
|
+
import { MatStepperModule } from '@angular/material/stepper';
|
|
8
|
+
import { FormsModule } from '@angular/forms';
|
|
9
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
10
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/material/dialog";
|
|
13
|
+
import * as i2 from "../../services";
|
|
14
|
+
import * as i3 from "@angular/material/snack-bar";
|
|
15
|
+
import * as i4 from "@angular/material/icon";
|
|
16
|
+
import * as i5 from "@angular/material/divider";
|
|
17
|
+
import * as i6 from "@angular/forms";
|
|
18
|
+
import * as i7 from "@angular/material/stepper";
|
|
19
|
+
import * as i8 from "@angular/material/button";
|
|
20
|
+
export class CoursePricingDialogComponent {
|
|
21
|
+
constructor(dialogRef, data, courseService, snackBar, dialog) {
|
|
22
|
+
this.dialogRef = dialogRef;
|
|
23
|
+
this.data = data;
|
|
24
|
+
this.courseService = courseService;
|
|
25
|
+
this.snackBar = snackBar;
|
|
26
|
+
this.dialog = dialog;
|
|
27
|
+
this.pricing = [];
|
|
28
|
+
this.courseId = data.courseId;
|
|
29
|
+
this.pricing = data.pricing;
|
|
30
|
+
}
|
|
31
|
+
close() {
|
|
32
|
+
this.dialogRef.close();
|
|
33
|
+
}
|
|
34
|
+
addPricing() {
|
|
35
|
+
this.pricing.push({
|
|
36
|
+
min: 0,
|
|
37
|
+
max: 0,
|
|
38
|
+
total: 0,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePricingDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CoursePricingDialogComponent, isStandalone: true, selector: "rolatech-course-pricing-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto w-2/3 max-h-[55vh]\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "directive", type: i7.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "shadow", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CoursePricingDialogComponent, decorators: [{
|
|
45
|
+
type: Component,
|
|
46
|
+
args: [{ selector: 'rolatech-course-pricing-dialog', standalone: true, imports: [
|
|
47
|
+
MatIconModule,
|
|
48
|
+
MatDividerModule,
|
|
49
|
+
FormsModule,
|
|
50
|
+
MatStepperModule,
|
|
51
|
+
PricingItemComponent,
|
|
52
|
+
MatButtonModule,
|
|
53
|
+
MatDialogClose,
|
|
54
|
+
], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto w-2/3 max-h-[55vh]\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
|
|
55
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
56
|
+
type: Inject,
|
|
57
|
+
args: [MAT_DIALOG_DATA]
|
|
58
|
+
}] }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByaWNpbmctZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1wcmljaW5nLWRpYWxvZy9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmctZGlhbG9nL2NvdXJzZS1wcmljaW5nLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQWlCdkQsTUFBTSxPQUFPLDRCQUE0QjtJQUd2QyxZQUNVLFNBQXFELEVBQzdCLElBQVMsRUFDakMsYUFBNEIsRUFDNUIsUUFBcUIsRUFDckIsTUFBaUI7UUFKakIsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFOM0IsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQVF0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdEJVLDRCQUE0Qiw4Q0FLN0IsZUFBZTtrR0FMZCw0QkFBNEIsMEZDM0J6Qyw2bENBNkJBLHlERFhJLGFBQWEsbUxBQ2IsZ0JBQWdCLGtJQUNoQixXQUFXLHVkQUNYLGdCQUFnQix5R0FDaEIsb0JBQW9CLHlKQUNwQixlQUFlLDROQUNmLGNBQWM7OzJGQUdMLDRCQUE0QjtrQkFmeEMsU0FBUzsrQkFDRSxnQ0FBZ0MsY0FHOUIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLGNBQWM7cUJBQ2Y7OzBCQU9FLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBQcmljaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFByaWNpbmdJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJpY2luZy1pdGVtL3ByaWNpbmctaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U3RlcHBlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1wcmljaW5nLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTdGVwcGVyTW9kdWxlLFxuICAgIFByaWNpbmdJdGVtQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaWFsb2dDbG9zZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlUHJpY2luZ0RpYWxvZ0NvbXBvbmVudCB7XG4gIGNvdXJzZUlkITogc3RyaW5nO1xuICBwcmljaW5nOiBQcmljaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb3Vyc2VQcmljaW5nRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG4gICAgdGhpcy5jb3Vyc2VJZCA9IGRhdGEuY291cnNlSWQ7XG4gICAgdGhpcy5wcmljaW5nID0gZGF0YS5wcmljaW5nO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYWRkUHJpY2luZygpIHtcbiAgICB0aGlzLnByaWNpbmcucHVzaCh7XG4gICAgICBtaW46IDAsXG4gICAgICBtYXg6IDAsXG4gICAgICB0b3RhbDogMCxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1tZWRpdW1cIj57eyBkYXRhLnRpdGxlIH19PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gbXQtMyBvdmVyZmxvdy15LWF1dG8gdy0yLzMgbWF4LWgtWzU1dmhdXCI+XG4gICAgPGZvcm0gI2RldGFpbEZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInAtM1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD7or6bmg4U8L25nLXRlbXBsYXRlPlxuICAgICAgQGZvciAoaXRlbSBvZiBwcmljaW5nOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxyb2xhdGVjaC1wcmljaW5nLWl0ZW0gW3ByaWNpbmddPVwiaXRlbVwiPiA8L3JvbGF0ZWNoLXByaWNpbmctaXRlbT5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiYWRkUHJpY2luZygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+5aKe5Yqg5Lu35qC8PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBweC01XCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cInByaWNpbmdcIiBjZGtGb2N1c0luaXRpYWw+5L+d5a2YPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
package/esm2022/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.mjs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
|
|
5
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/material/dialog";
|
|
8
|
+
import * as i2 from "@angular/material/icon";
|
|
9
|
+
import * as i3 from "@angular/material/button";
|
|
10
|
+
export class CourseScheduleAddDialogComponent {
|
|
11
|
+
constructor(dialogRef, data) {
|
|
12
|
+
this.dialogRef = dialogRef;
|
|
13
|
+
this.data = data;
|
|
14
|
+
this.schedule = {
|
|
15
|
+
title: '',
|
|
16
|
+
content: '',
|
|
17
|
+
startAt: '',
|
|
18
|
+
endAt: '',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
close() {
|
|
22
|
+
this.dialogRef.close();
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseScheduleAddDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseScheduleAddDialogComponent, isStandalone: true, selector: "rolatech-course-schedule-add-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-xl font-bold\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <div class=\"flex-1 overflow-y-auto max-h-[55vh] px-3\">\n <rolatech-schedule-item [value]=\"schedule\" [shadow]=\"false\"></rolatech-schedule-item>\n </div>\n <div class=\"h-16 flex justify-end items-center px-5 gap-3\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n <button mat-button [mat-dialog-close]=\"schedule\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ScheduleItemComponent, selector: "rolatech-schedule-item", inputs: ["value", "actions", "shadow"], outputs: ["delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseScheduleAddDialogComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'rolatech-course-schedule-add-dialog', standalone: true, imports: [MatIconModule, ScheduleItemComponent, MatButtonModule, MatDialogClose], template: "<div class=\"flex flex-col h-full\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-xl font-bold\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <div class=\"flex-1 overflow-y-auto max-h-[55vh] px-3\">\n <rolatech-schedule-item [value]=\"schedule\" [shadow]=\"false\"></rolatech-schedule-item>\n </div>\n <div class=\"h-16 flex justify-end items-center px-5 gap-3\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n <button mat-button [mat-dialog-close]=\"schedule\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
|
|
30
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
31
|
+
type: Inject,
|
|
32
|
+
args: [MAT_DIALOG_DATA]
|
|
33
|
+
}] }] });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFTdkQsTUFBTSxPQUFPLGdDQUFnQztJQU8zQyxZQUNVLFNBQXlELEVBQ2pDLElBQVM7UUFEakMsY0FBUyxHQUFULFNBQVMsQ0FBZ0Q7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBSztRQVIzQyxhQUFRLEdBQWE7WUFDbkIsS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBSUMsQ0FBQztJQUVKLEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBZFUsZ0NBQWdDLDhDQVNqQyxlQUFlO2tHQVRkLGdDQUFnQywrRkNkN0Msd3RCQWlCQSx5RERMWSxhQUFhLG9MQUFFLHFCQUFxQix1SUFBRSxlQUFlLDROQUFFLGNBQWM7OzJGQUVwRSxnQ0FBZ0M7a0JBUDVDLFNBQVM7K0JBQ0UscUNBQXFDLGNBR25DLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDOzswQkFXN0UsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZWR1bGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFNjaGVkdWxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NjaGVkdWxlLWl0ZW0vc2NoZWR1bGUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2NoZWR1bGUtYWRkLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2Utc2NoZWR1bGUtYWRkLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1zY2hlZHVsZS1hZGQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBTY2hlZHVsZUl0ZW1Db21wb25lbnQsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RGlhbG9nQ2xvc2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VTY2hlZHVsZUFkZERpYWxvZ0NvbXBvbmVudCB7XG4gIHNjaGVkdWxlOiBTY2hlZHVsZSA9IHtcbiAgICB0aXRsZTogJycsXG4gICAgY29udGVudDogJycsXG4gICAgc3RhcnRBdDogJycsXG4gICAgZW5kQXQ6ICcnLFxuICB9O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvdXJzZVNjaGVkdWxlQWRkRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgKSB7fVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQteGwgZm9udC1ib2xkXCI+e3sgZGF0YS50aXRsZSB9fTwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gbWF4LWgtWzU1dmhdIHB4LTNcIj5cbiAgICA8cm9sYXRlY2gtc2NoZWR1bGUtaXRlbSBbdmFsdWVdPVwic2NoZWR1bGVcIiBbc2hhZG93XT1cImZhbHNlXCI+PC9yb2xhdGVjaC1zY2hlZHVsZS1pdGVtPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImgtMTYgZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgcHgtNSBnYXAtM1wiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPuWPlua2iDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJzY2hlZHVsZVwiIGNka0ZvY3VzSW5pdGlhbD7kv53lrZg8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogClose } from '@angular/material/dialog';
|
|
3
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
4
|
+
import { CourseService } from '../../services';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
|
|
7
|
+
import { MatStepperModule } from '@angular/material/stepper';
|
|
8
|
+
import { FormsModule } from '@angular/forms';
|
|
9
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
10
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/material/dialog";
|
|
13
|
+
import * as i2 from "../../services";
|
|
14
|
+
import * as i3 from "@angular/material/snack-bar";
|
|
15
|
+
import * as i4 from "@angular/material/icon";
|
|
16
|
+
import * as i5 from "@angular/material/divider";
|
|
17
|
+
import * as i6 from "@angular/forms";
|
|
18
|
+
import * as i7 from "@angular/material/stepper";
|
|
19
|
+
import * as i8 from "@angular/material/button";
|
|
20
|
+
export class CourseScheduleDialogComponent {
|
|
21
|
+
constructor(dialogRef, data, courseService, snackBar, dialog) {
|
|
22
|
+
this.dialogRef = dialogRef;
|
|
23
|
+
this.data = data;
|
|
24
|
+
this.courseService = courseService;
|
|
25
|
+
this.snackBar = snackBar;
|
|
26
|
+
this.dialog = dialog;
|
|
27
|
+
this.schedule = [];
|
|
28
|
+
this.courseId = data.courseId;
|
|
29
|
+
this.schedule = data.schedule;
|
|
30
|
+
}
|
|
31
|
+
close() {
|
|
32
|
+
this.dialogRef.close();
|
|
33
|
+
}
|
|
34
|
+
addSchedule() {
|
|
35
|
+
if (!this.schedule) {
|
|
36
|
+
this.schedule = [];
|
|
37
|
+
}
|
|
38
|
+
this.schedule.push({
|
|
39
|
+
title: '',
|
|
40
|
+
content: '',
|
|
41
|
+
startAt: '',
|
|
42
|
+
endAt: '',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseScheduleDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseScheduleDialogComponent, isStandalone: true, selector: "rolatech-course-schedule-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"schedule\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "directive", type: i7.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: ScheduleItemComponent, selector: "rolatech-schedule-item", inputs: ["value", "actions", "shadow"], outputs: ["delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseScheduleDialogComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'rolatech-course-schedule-dialog', standalone: true, imports: [
|
|
51
|
+
MatIconModule,
|
|
52
|
+
MatDividerModule,
|
|
53
|
+
FormsModule,
|
|
54
|
+
MatStepperModule,
|
|
55
|
+
ScheduleItemComponent,
|
|
56
|
+
MatButtonModule,
|
|
57
|
+
MatDialogClose,
|
|
58
|
+
], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"schedule\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
|
|
59
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
60
|
+
type: Inject,
|
|
61
|
+
args: [MAT_DIALOG_DATA]
|
|
62
|
+
}] }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2Utc2NoZWR1bGUtZGlhbG9nL2NvdXJzZS1zY2hlZHVsZS1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlLWRpYWxvZy9jb3Vyc2Utc2NoZWR1bGUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7O0FBaUJ2RCxNQUFNLE9BQU8sNkJBQTZCO0lBR3hDLFlBQ1UsU0FBc0QsRUFDOUIsSUFBUyxFQUNqQyxhQUE0QixFQUM1QixRQUFxQixFQUNyQixNQUFpQjtRQUpqQixjQUFTLEdBQVQsU0FBUyxDQUE2QztRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQU4zQixhQUFRLEdBQWUsRUFBRSxDQUFDO1FBUXhCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUNELEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDakIsS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTFCVSw2QkFBNkIsOENBSzlCLGVBQWU7a0dBTGQsNkJBQTZCLDJGQzNCMUMsNGtDQTZCQSx5RERYSSxhQUFhLG1MQUNiLGdCQUFnQixrSUFDaEIsV0FBVyx1ZEFDWCxnQkFBZ0IseUdBQ2hCLHFCQUFxQix1SUFDckIsZUFBZSw0TkFDZixjQUFjOzsyRkFHTCw2QkFBNkI7a0JBZnpDLFNBQVM7K0JBQ0UsaUNBQWlDLGNBRy9CLElBQUksV0FDUDt3QkFDUCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixjQUFjO3FCQUNmOzswQkFPRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU2NoZWR1bGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvdXJzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgU2NoZWR1bGVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2NoZWR1bGUtaXRlbS9zY2hlZHVsZS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXNjaGVkdWxlLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2Utc2NoZWR1bGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNjaGVkdWxlLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFN0ZXBwZXJNb2R1bGUsXG4gICAgU2NoZWR1bGVJdGVtQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaWFsb2dDbG9zZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlU2NoZWR1bGVEaWFsb2dDb21wb25lbnQge1xuICBjb3Vyc2VJZCE6IHN0cmluZztcbiAgc2NoZWR1bGU6IFNjaGVkdWxlW10gPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb3Vyc2VTY2hlZHVsZURpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICkge1xuICAgIHRoaXMuY291cnNlSWQgPSBkYXRhLmNvdXJzZUlkO1xuICAgIHRoaXMuc2NoZWR1bGUgPSBkYXRhLnNjaGVkdWxlO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYWRkU2NoZWR1bGUoKSB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlID0gW107XG4gICAgfVxuICAgIHRoaXMuc2NoZWR1bGUucHVzaCh7XG4gICAgICB0aXRsZTogJycsXG4gICAgICBjb250ZW50OiAnJyxcbiAgICAgIHN0YXJ0QXQ6ICcnLFxuICAgICAgZW5kQXQ6ICcnLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJoLTE2IGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBweC01XCI+XG4gICAgQGlmIChkYXRhLnRpdGxlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LW1lZGl1bVwiPnt7IGRhdGEudGl0bGUgfX08L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2IGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LWhpZGRlbiBtdC0zIG92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxmb3JtICNkZXRhaWxGb3JtPVwibmdGb3JtXCIgY2xhc3M9XCJwLTNcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+6K+m5oOFPC9uZy10ZW1wbGF0ZT5cbiAgICAgIEBmb3IgKGl0ZW0gb2Ygc2NoZWR1bGU7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgPHJvbGF0ZWNoLXNjaGVkdWxlLWl0ZW0gW3ZhbHVlXT1cIml0ZW1cIj48L3JvbGF0ZWNoLXNjaGVkdWxlLWl0ZW0+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImFkZFNjaGVkdWxlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj7lop7liqDor77ooag8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDxkaXYgY2xhc3M9XCJoLTE2IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIHB4LTVcIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwic2NoZWR1bGVcIiBjZGtGb2N1c0luaXRpYWw+5L+d5a2YPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Component, model, output } from '@angular/core';
|
|
2
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/icon";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "@angular/material/button";
|
|
9
|
+
export class CourseSectionItemComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.section = model.required();
|
|
12
|
+
this.actions = model();
|
|
13
|
+
this.hasUnsaved = model();
|
|
14
|
+
this.editId = model();
|
|
15
|
+
this.save = output();
|
|
16
|
+
this.cancel = output();
|
|
17
|
+
this.delete = output();
|
|
18
|
+
this.edit = output();
|
|
19
|
+
this.addLecture = output();
|
|
20
|
+
this.editing = false;
|
|
21
|
+
this.isExpand = false;
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() { }
|
|
24
|
+
onSave(section) {
|
|
25
|
+
this.editing = false;
|
|
26
|
+
this.editId.set(null);
|
|
27
|
+
this.save.emit(section);
|
|
28
|
+
}
|
|
29
|
+
onCancel(section) {
|
|
30
|
+
this.editing = false;
|
|
31
|
+
this.editId.set(null);
|
|
32
|
+
this.cancel.emit(section);
|
|
33
|
+
}
|
|
34
|
+
onDelete(section) {
|
|
35
|
+
this.delete.emit(section);
|
|
36
|
+
}
|
|
37
|
+
onEdit(section) {
|
|
38
|
+
this.editId.set(null);
|
|
39
|
+
this.editing = true;
|
|
40
|
+
this.edit.emit(section);
|
|
41
|
+
}
|
|
42
|
+
onAddLecture(section) {
|
|
43
|
+
this.addLecture.emit(section);
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseSectionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseSectionItemComponent, isStandalone: true, selector: "rolatech-course-section-item", inputs: { section: { classPropertyName: "section", publicName: "section", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, hasUnsaved: { classPropertyName: "hasUnsaved", publicName: "hasUnsaved", isSignal: true, isRequired: false, transformFunction: null }, editId: { classPropertyName: "editId", publicName: "editId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { section: "sectionChange", actions: "actionsChange", hasUnsaved: "hasUnsavedChange", editId: "editIdChange", save: "save", cancel: "cancel", delete: "delete", edit: "edit", addLecture: "addLecture" }, ngImport: i0, template: "<div class=\"flex flex-col grow\">\n @if (section().id !== editId()) {\n <div>\n <div class=\"flex justify-between items-center\">\n <div class=\"w-full flex gap-3 pl-3\">\n <span>{{ section().title }}</span>\n <mat-icon (click)=\"onEdit(section())\" class=\"cursor-pointer\">edit</mat-icon>\n <mat-icon class=\"cursor-pointer\" (click)=\"onDelete(section())\">delete</mat-icon>\n </div>\n <button mat-icon-button (click)=\"isExpand = !isExpand\">\n <mat-icon>{{ isExpand ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n @if (isExpand) {\n <div>\n <ng-content></ng-content>\n </div>\n }\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <input\n type=\"text\"\n class=\"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\"\n placeholder=\"\u6807\u9898\"\n [(ngModel)]=\"section().title\"\n />\n <div class=\"w-full flex flex-row justify-end p-4 gap-3\">\n <button mat-button (click)=\"onCancel(section())\">\u53D6\u6D88</button>\n <button mat-flat-button color=\"primary\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n <!-- <mat-form-field appearance=\"fill\">\n <mat-label>\u63CF\u8FF0</mat-label>\n <input matInput placeholder=\"\u63CF\u8FF0\" [(ngModel)]=\"section.description\" />\n </mat-form-field> -->\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseSectionItemComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'rolatech-course-section-item', standalone: true, imports: [MatIconModule, FormsModule, MatButtonModule], template: "<div class=\"flex flex-col grow\">\n @if (section().id !== editId()) {\n <div>\n <div class=\"flex justify-between items-center\">\n <div class=\"w-full flex gap-3 pl-3\">\n <span>{{ section().title }}</span>\n <mat-icon (click)=\"onEdit(section())\" class=\"cursor-pointer\">edit</mat-icon>\n <mat-icon class=\"cursor-pointer\" (click)=\"onDelete(section())\">delete</mat-icon>\n </div>\n <button mat-icon-button (click)=\"isExpand = !isExpand\">\n <mat-icon>{{ isExpand ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n @if (isExpand) {\n <div>\n <ng-content></ng-content>\n </div>\n }\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <input\n type=\"text\"\n class=\"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\"\n placeholder=\"\u6807\u9898\"\n [(ngModel)]=\"section().title\"\n />\n <div class=\"w-full flex flex-row justify-end p-4 gap-3\">\n <button mat-button (click)=\"onCancel(section())\">\u53D6\u6D88</button>\n <button mat-flat-button color=\"primary\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n <!-- <mat-form-field appearance=\"fill\">\n <mat-label>\u63CF\u8FF0</mat-label>\n <input matInput placeholder=\"\u63CF\u8FF0\" [(ngModel)]=\"section.description\" />\n </mat-form-field> -->\n</div>\n" }]
|
|
51
|
+
}] });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2Utc2VjdGlvbi1pdGVtL2NvdXJzZS1zZWN0aW9uLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24taXRlbS9jb3Vyc2Utc2VjdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBU3ZELE1BQU0sT0FBTywwQkFBMEI7SUFQdkM7UUFRRSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztRQUMxQyxZQUFPLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDM0IsZUFBVSxHQUFHLEtBQUssRUFBYSxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxLQUFLLEVBQU8sQ0FBQztRQUN0QixTQUFJLEdBQUcsTUFBTSxFQUFpQixDQUFDO1FBQy9CLFdBQU0sR0FBRyxNQUFNLEVBQWlCLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sRUFBaUIsQ0FBQztRQUNqQyxTQUFJLEdBQUcsTUFBTSxFQUFpQixDQUFDO1FBQy9CLGVBQVUsR0FBRyxNQUFNLEVBQWlCLENBQUM7UUFDckMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsS0FBSyxDQUFDO0tBeUJsQjtJQXZCQyxRQUFRLEtBQVUsQ0FBQztJQUVuQixNQUFNLENBQUMsT0FBc0I7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELFFBQVEsQ0FBQyxPQUFzQjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsUUFBUSxDQUFDLE9BQXNCO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxNQUFNLENBQUMsT0FBc0I7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELFlBQVksQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQW5DVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixvekJDYnZDLCtxREFzQ0EseUREM0JZLGFBQWEsbUxBQUUsV0FBVyw4bUJBQUUsZUFBZTs7MkZBRTFDLDBCQUEwQjtrQkFQdEMsU0FBUzsrQkFDRSw4QkFBOEIsY0FHNUIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvdXJzZVNlY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXNlY3Rpb24taXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2Utc2VjdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNlY3Rpb24taXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZVNlY3Rpb25JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2VjdGlvbiA9IG1vZGVsLnJlcXVpcmVkPENvdXJzZVNlY3Rpb24+KCk7XG4gIGFjdGlvbnMgPSBtb2RlbDxib29sZWFuPigpO1xuICBoYXNVbnNhdmVkID0gbW9kZWw8Ym9vbGVhbltdPigpO1xuICBlZGl0SWQgPSBtb2RlbDxhbnk+KCk7XG4gIHNhdmUgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbj4oKTtcbiAgY2FuY2VsID0gb3V0cHV0PENvdXJzZVNlY3Rpb24+KCk7XG4gIGRlbGV0ZSA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uPigpO1xuICBlZGl0ID0gb3V0cHV0PENvdXJzZVNlY3Rpb24+KCk7XG4gIGFkZExlY3R1cmUgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbj4oKTtcbiAgZWRpdGluZyA9IGZhbHNlO1xuICBpc0V4cGFuZCA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBvblNhdmUoc2VjdGlvbjogQ291cnNlU2VjdGlvbikge1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICB0aGlzLnNhdmUuZW1pdChzZWN0aW9uKTtcbiAgfVxuICBvbkNhbmNlbChzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uKSB7XG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0SWQuc2V0KG51bGwpO1xuICAgIHRoaXMuY2FuY2VsLmVtaXQoc2VjdGlvbik7XG4gIH1cbiAgb25EZWxldGUoc2VjdGlvbjogQ291cnNlU2VjdGlvbikge1xuICAgIHRoaXMuZGVsZXRlLmVtaXQoc2VjdGlvbik7XG4gIH1cbiAgb25FZGl0KHNlY3Rpb246IENvdXJzZVNlY3Rpb24pIHtcbiAgICB0aGlzLmVkaXRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXQuZW1pdChzZWN0aW9uKTtcbiAgfVxuICBvbkFkZExlY3R1cmUoc2VjdGlvbjogQ291cnNlU2VjdGlvbikge1xuICAgIHRoaXMuYWRkTGVjdHVyZS5lbWl0KHNlY3Rpb24pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBncm93XCI+XG4gIEBpZiAoc2VjdGlvbigpLmlkICE9PSBlZGl0SWQoKSkge1xuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBnYXAtMyBwbC0zXCI+XG4gICAgICAgICAgPHNwYW4+e3sgc2VjdGlvbigpLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwib25FZGl0KHNlY3Rpb24oKSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25EZWxldGUoc2VjdGlvbigpKVwiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiaXNFeHBhbmQgPSAhaXNFeHBhbmRcIj5cbiAgICAgICAgICA8bWF0LWljb24+e3sgaXNFeHBhbmQgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9fTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGlzRXhwYW5kKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJiZy1ncmF5LTUwIGJvcmRlciBib3JkZXItZ3JheS0zMDAgdGV4dC1ncmF5LTkwMCB0ZXh0LXNtIHJvdW5kZWQtbGcgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpib3JkZXItYmx1ZS01MDAgYmxvY2sgdy1mdWxsIHAtMi41IGRhcms6YmctZ3JheS03MDAgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpwbGFjZWhvbGRlci1ncmF5LTQwMCBkYXJrOnRleHQtd2hpdGUgZGFyazpmb2N1czpyaW5nLWJsdWUtNTAwIGRhcms6Zm9jdXM6Ym9yZGVyLWJsdWUtNTAwXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLmoIfpophcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlY3Rpb24oKS50aXRsZVwiXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIHAtNCBnYXAtM1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKHNlY3Rpb24oKSlcIj7lj5bmtog8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uU2F2ZShzZWN0aW9uKCkpXCI+5L+d5a2YPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8IS0tIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgPG1hdC1sYWJlbD7mj4/ov7A8L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIuaPj+i/sFwiIFsobmdNb2RlbCldPVwic2VjdGlvbi5kZXNjcmlwdGlvblwiIC8+XG4gICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/lib/components/course-section-lecture-item/course-section-lecture-item.component.mjs
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Component, ElementRef, PLATFORM_ID, inject, input, model, output, viewChild } from '@angular/core';
|
|
2
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
+
import { AngularComponentsModule } from '@rolatech/angular-components';
|
|
7
|
+
import { AngularCommonModule, DurationPipe } from '@rolatech/angular-common';
|
|
8
|
+
import { DialogService } from '@rolatech/angular-services';
|
|
9
|
+
import { CourseSectionLectureVideoDialogComponent } from '../course-section-lecture-video-dialog/course-section-lecture-video-dialog.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/material/icon";
|
|
12
|
+
import * as i2 from "@angular/forms";
|
|
13
|
+
import * as i3 from "@angular/material/button";
|
|
14
|
+
import * as i4 from "@angular/material/progress-bar";
|
|
15
|
+
export class CourseSectionLectureItemComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.platformId = inject(PLATFORM_ID);
|
|
18
|
+
this.el = inject(ElementRef);
|
|
19
|
+
this.dialogService = inject(DialogService);
|
|
20
|
+
this.myVideo = viewChild('video');
|
|
21
|
+
this.progress = input(0);
|
|
22
|
+
this.lecture = input.required();
|
|
23
|
+
this.actions = input(true);
|
|
24
|
+
this.hasUnsaved = input(false);
|
|
25
|
+
this.editId = model();
|
|
26
|
+
this.save = output();
|
|
27
|
+
this.cancel = output();
|
|
28
|
+
this.delete = output();
|
|
29
|
+
this.edit = output();
|
|
30
|
+
this.mediaEdit = output();
|
|
31
|
+
this.thumbnailUpload = output();
|
|
32
|
+
this.upload = output();
|
|
33
|
+
this.deleteMedia = output();
|
|
34
|
+
this.editing = false;
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() { }
|
|
37
|
+
onSave(lecture) {
|
|
38
|
+
this.editing = false;
|
|
39
|
+
this.editId.set(null);
|
|
40
|
+
this.save.emit(lecture);
|
|
41
|
+
}
|
|
42
|
+
onCancel(lecture) {
|
|
43
|
+
this.editing = false;
|
|
44
|
+
this.editId.set(null);
|
|
45
|
+
this.cancel.emit(lecture);
|
|
46
|
+
}
|
|
47
|
+
onDelete(lecture) {
|
|
48
|
+
this.delete.emit(lecture);
|
|
49
|
+
}
|
|
50
|
+
onEdit(lecture) {
|
|
51
|
+
this.editId.set(lecture.id);
|
|
52
|
+
this.editing = true;
|
|
53
|
+
this.edit.emit(lecture);
|
|
54
|
+
}
|
|
55
|
+
onMediaEdit(lecture) {
|
|
56
|
+
this.editId.set(lecture.id);
|
|
57
|
+
this.editing = true;
|
|
58
|
+
// this.mediaEdit.emit(lecture);
|
|
59
|
+
const options = {
|
|
60
|
+
title: '编辑视频',
|
|
61
|
+
cancelText: '取消',
|
|
62
|
+
confirmText: '确定',
|
|
63
|
+
data: this.lecture,
|
|
64
|
+
width: '80vw',
|
|
65
|
+
height: '100%',
|
|
66
|
+
component: CourseSectionLectureVideoDialogComponent,
|
|
67
|
+
};
|
|
68
|
+
this.dialogService.open(options);
|
|
69
|
+
this.dialogService.confirmed().subscribe({
|
|
70
|
+
next: (res) => {
|
|
71
|
+
if (res) {
|
|
72
|
+
const data = {
|
|
73
|
+
name: res,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
onVideoThumbnailUpload(video) {
|
|
80
|
+
this.thumbnailUpload.emit(video);
|
|
81
|
+
}
|
|
82
|
+
onUpload(id, data) {
|
|
83
|
+
this.lecture().isUploading = true;
|
|
84
|
+
this.upload.emit({ id, data });
|
|
85
|
+
}
|
|
86
|
+
onDeleteMedia(data) {
|
|
87
|
+
this.deleteMedia.emit(data);
|
|
88
|
+
}
|
|
89
|
+
onLoadedMetadata(event) {
|
|
90
|
+
if (this.lecture().item.duration) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const videoElement = event.target;
|
|
94
|
+
this.lecture().item.duration = videoElement.duration;
|
|
95
|
+
// console.log('Video Width:', videoElement.videoWidth);
|
|
96
|
+
// console.log('Video Height:', videoElement.videoHeight);
|
|
97
|
+
}
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseSectionLectureItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseSectionLectureItemComponent, isStandalone: true, selector: "rolatech-course-section-lecture-item", inputs: { progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, lecture: { classPropertyName: "lecture", publicName: "lecture", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, hasUnsaved: { classPropertyName: "hasUnsaved", publicName: "hasUnsaved", isSignal: true, isRequired: false, transformFunction: null }, editId: { classPropertyName: "editId", publicName: "editId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editId: "editIdChange", save: "save", cancel: "cancel", delete: "delete", edit: "edit", mediaEdit: "mediaEdit", thumbnailUpload: "thumbnailUpload", upload: "upload", deleteMedia: "deleteMedia" }, viewQueries: [{ propertyName: "myVideo", first: true, predicate: ["video"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col grow p-2\">\n @if (lecture().id !== editId()) {\n <div class=\"w-full flex gap-3 p-3\">\n <span>{{ lecture().title }}</span>\n <mat-icon (click)=\"onEdit(lecture())\" class=\"cursor-pointer\">edit</mat-icon>\n <mat-icon class=\"cursor-pointer\" (click)=\"onDelete(lecture())\">delete</mat-icon>\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <input\n type=\"text\"\n class=\"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\"\n placeholder=\"\u6807\u9898\"\n [(ngModel)]=\"lecture().title\"\n />\n <div class=\"w-full flex flex-row justify-end p-4 gap-3\">\n <button mat-button (click)=\"onCancel(lecture())\">\u53D6\u6D88</button>\n <button mat-flat-button color=\"primary\" (click)=\"onSave(lecture())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n\n <div>\n @if (lecture().item) {\n <div class=\"flex flex-row p-2 gap-3\">\n <div class=\"bg-black h-fit\">\n <video\n id=\"video\"\n #video\n [src]=\"lecture().item.url\"\n class=\"w-32 aspect-video\"\n (loadedmetadata)=\"onLoadedMetadata($event)\"\n [poster]=\"lecture().item.thumbnail\"\n ></video>\n </div>\n <div class=\"flex flex-col justify-between w-full\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center w-full px-2\">\n <span>\u89C6\u9891\u5185\u5BB9</span>\n </div>\n @if (lecture().isUploading) {\n <div>\n <span> {{ lecture().item.progress }}%</span>\n </div>\n }\n </div>\n <div class=\"flex justify-between items-center\">\n <div>\n <button mat-button (click)=\"onMediaEdit(lecture().item)\">\n <mat-icon>edit</mat-icon>\n <span>\u7F16\u8F91</span>\n </button>\n <button mat-button (click)=\"onDeleteMedia(lecture().item)\">\n <mat-icon>delete</mat-icon>\n <span>\u5220\u9664</span>\n </button>\n </div>\n <div>\n <span>{{ lecture().item.duration | duration }}</span>\n </div>\n </div>\n </div>\n </div>\n @if (lecture().isUploading) {\n <div class=\"p-2\">\n <mat-progress-bar color=\"primary\" mode=\"determinate\" [value]=\"lecture().item.progress\"> </mat-progress-bar>\n </div>\n }\n } @else {\n @if (lecture().id !== editId()) {\n <div class=\"px-3\">\n <input\n class=\"ud-sr-only\"\n type=\"file\"\n accept=\".avi,.mpg,.mpeg,.flv,.mov,.m2v,.m4v,.mp4,.rm,.ram,.vob,.ogv,.webm,.wmv\"\n (change)=\"onUpload(lecture().id, $event)\"\n #fileInput\n />\n <div class=\"flex justify-between items-center\">\n <div>\u65E0\u89C6\u9891\u6587\u4EF6</div>\n <button mat-flat-button color=\"primary\" (click)=\"fileInput.click()\">\u4E0A\u4F20\u89C6\u9891</button>\n </div>\n </div>\n }\n }\n </div>\n @if (!hasUnsaved) {\n <ng-content></ng-content>\n }\n</div>\n", styles: [".ud-sr-only{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: DurationPipe, name: "duration" }] }); }
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseSectionLectureItemComponent, decorators: [{
|
|
102
|
+
type: Component,
|
|
103
|
+
args: [{ selector: 'rolatech-course-section-lecture-item', standalone: true, imports: [
|
|
104
|
+
MatIconModule,
|
|
105
|
+
AngularCommonModule,
|
|
106
|
+
FormsModule,
|
|
107
|
+
MatButtonModule,
|
|
108
|
+
MatDividerModule,
|
|
109
|
+
AngularComponentsModule,
|
|
110
|
+
DurationPipe,
|
|
111
|
+
], template: "<div class=\"flex flex-col grow p-2\">\n @if (lecture().id !== editId()) {\n <div class=\"w-full flex gap-3 p-3\">\n <span>{{ lecture().title }}</span>\n <mat-icon (click)=\"onEdit(lecture())\" class=\"cursor-pointer\">edit</mat-icon>\n <mat-icon class=\"cursor-pointer\" (click)=\"onDelete(lecture())\">delete</mat-icon>\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <input\n type=\"text\"\n class=\"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\"\n placeholder=\"\u6807\u9898\"\n [(ngModel)]=\"lecture().title\"\n />\n <div class=\"w-full flex flex-row justify-end p-4 gap-3\">\n <button mat-button (click)=\"onCancel(lecture())\">\u53D6\u6D88</button>\n <button mat-flat-button color=\"primary\" (click)=\"onSave(lecture())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n\n <div>\n @if (lecture().item) {\n <div class=\"flex flex-row p-2 gap-3\">\n <div class=\"bg-black h-fit\">\n <video\n id=\"video\"\n #video\n [src]=\"lecture().item.url\"\n class=\"w-32 aspect-video\"\n (loadedmetadata)=\"onLoadedMetadata($event)\"\n [poster]=\"lecture().item.thumbnail\"\n ></video>\n </div>\n <div class=\"flex flex-col justify-between w-full\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center w-full px-2\">\n <span>\u89C6\u9891\u5185\u5BB9</span>\n </div>\n @if (lecture().isUploading) {\n <div>\n <span> {{ lecture().item.progress }}%</span>\n </div>\n }\n </div>\n <div class=\"flex justify-between items-center\">\n <div>\n <button mat-button (click)=\"onMediaEdit(lecture().item)\">\n <mat-icon>edit</mat-icon>\n <span>\u7F16\u8F91</span>\n </button>\n <button mat-button (click)=\"onDeleteMedia(lecture().item)\">\n <mat-icon>delete</mat-icon>\n <span>\u5220\u9664</span>\n </button>\n </div>\n <div>\n <span>{{ lecture().item.duration | duration }}</span>\n </div>\n </div>\n </div>\n </div>\n @if (lecture().isUploading) {\n <div class=\"p-2\">\n <mat-progress-bar color=\"primary\" mode=\"determinate\" [value]=\"lecture().item.progress\"> </mat-progress-bar>\n </div>\n }\n } @else {\n @if (lecture().id !== editId()) {\n <div class=\"px-3\">\n <input\n class=\"ud-sr-only\"\n type=\"file\"\n accept=\".avi,.mpg,.mpeg,.flv,.mov,.m2v,.m4v,.mp4,.rm,.ram,.vob,.ogv,.webm,.wmv\"\n (change)=\"onUpload(lecture().id, $event)\"\n #fileInput\n />\n <div class=\"flex justify-between items-center\">\n <div>\u65E0\u89C6\u9891\u6587\u4EF6</div>\n <button mat-flat-button color=\"primary\" (click)=\"fileInput.click()\">\u4E0A\u4F20\u89C6\u9891</button>\n </div>\n </div>\n }\n }\n </div>\n @if (!hasUnsaved) {\n <ng-content></ng-content>\n }\n</div>\n", styles: [".ud-sr-only{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}\n"] }]
|
|
112
|
+
}] });
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zZWN0aW9uLWxlY3R1cmUtaXRlbS9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtL2NvdXJzZS1zZWN0aW9uLWxlY3R1cmUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHNGQUFzRixDQUFDOzs7Ozs7QUFpQmhKLE1BQU0sT0FBTyxpQ0FBaUM7SUFmOUM7UUFnQkUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxPQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsYUFBUSxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QixZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBd0IsQ0FBQztRQUNqRCxZQUFPLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQy9CLGVBQVUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkMsV0FBTSxHQUFHLEtBQUssRUFBTyxDQUFDO1FBRXRCLFNBQUksR0FBRyxNQUFNLEVBQXdCLENBQUM7UUFDdEMsV0FBTSxHQUFHLE1BQU0sRUFBd0IsQ0FBQztRQUN4QyxXQUFNLEdBQUcsTUFBTSxFQUF3QixDQUFDO1FBQ3hDLFNBQUksR0FBRyxNQUFNLEVBQXdCLENBQUM7UUFDdEMsY0FBUyxHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUNoRCxvQkFBZSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUN0RCxXQUFNLEdBQUcsTUFBTSxFQUFzQyxDQUFDO1FBQ3RELGdCQUFXLEdBQUcsTUFBTSxFQUE0QixDQUFDO1FBRWpELFlBQU8sR0FBRyxLQUFLLENBQUM7S0FpRWpCO0lBaEVDLFFBQVEsS0FBVSxDQUFDO0lBRW5CLE1BQU0sQ0FBQyxPQUE2QjtRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsUUFBUSxDQUFDLE9BQTZCO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxRQUFRLENBQUMsT0FBNkI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE1BQU0sQ0FBQyxPQUE2QjtRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFrQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsZ0NBQWdDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDbEIsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSx3Q0FBd0M7U0FDcEQsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxJQUFJLEdBQUc7d0JBQ1gsSUFBSSxFQUFFLEdBQUc7cUJBQ1YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxLQUFnQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsUUFBUSxDQUFDLEVBQU8sRUFBRSxJQUFTO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFTO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxLQUFZO1FBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFxQixLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUN4RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ3JELHdEQUF3RDtRQUN4RCwwREFBMEQ7SUFDNUQsQ0FBQzs4R0FwRlUsaUNBQWlDO2tHQUFqQyxpQ0FBaUMsMmlDQzNCOUMsNCtHQTBGQSxtS0R4RUksYUFBYSxtTEFDYixtQkFBbUIsOG1CQUNuQixXQUFXLDhCQUNYLGVBQWUsMk5BQ2YsZ0JBQWdCLDhCQUNoQix1QkFBdUIsb05BQ3ZCLFlBQVk7OzJGQUdILGlDQUFpQztrQkFmN0MsU0FBUzsrQkFDRSxzQ0FBc0MsY0FHcEMsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLFlBQVk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUExBVEZPUk1fSUQsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbkxlY3R1cmUsIENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEFuZ3VsYXJDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tbW9uTW9kdWxlLCBEdXJhdGlvblBpcGUgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IENvdXJzZVNlY3Rpb25MZWN0dXJlSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY291cnNlJztcbmltcG9ydCB7IENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW9EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZy9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIEFuZ3VsYXJDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsXG4gICAgRHVyYXRpb25QaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VTZWN0aW9uTGVjdHVyZUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XG4gIG15VmlkZW8gPSB2aWV3Q2hpbGQoJ3ZpZGVvJyk7XG4gIHByb2dyZXNzID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgbGVjdHVyZSA9IGlucHV0LnJlcXVpcmVkPENvdXJzZVNlY3Rpb25MZWN0dXJlPigpO1xuICBhY3Rpb25zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIGhhc1Vuc2F2ZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGVkaXRJZCA9IG1vZGVsPGFueT4oKTtcblxuICBzYXZlID0gb3V0cHV0PENvdXJzZVNlY3Rpb25MZWN0dXJlPigpO1xuICBjYW5jZWwgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbkxlY3R1cmU+KCk7XG4gIGRlbGV0ZSA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uTGVjdHVyZT4oKTtcbiAgZWRpdCA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uTGVjdHVyZT4oKTtcbiAgbWVkaWFFZGl0ID0gb3V0cHV0PENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW8+KCk7XG4gIHRodW1ibmFpbFVwbG9hZCA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvPigpO1xuICB1cGxvYWQgPSBvdXRwdXQ8eyBpZDogYW55OyBkYXRhOiBGb3JtRGF0YSB8IG51bGwgfT4oKTtcbiAgZGVsZXRlTWVkaWEgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbkxlY3R1cmVJdGVtPigpO1xuXG4gIGVkaXRpbmcgPSBmYWxzZTtcbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIG9uU2F2ZShsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSkge1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICB0aGlzLnNhdmUuZW1pdChsZWN0dXJlKTtcbiAgfVxuICBvbkNhbmNlbChsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSkge1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KGxlY3R1cmUpO1xuICB9XG4gIG9uRGVsZXRlKGxlY3R1cmU6IENvdXJzZVNlY3Rpb25MZWN0dXJlKSB7XG4gICAgdGhpcy5kZWxldGUuZW1pdChsZWN0dXJlKTtcbiAgfVxuICBvbkVkaXQobGVjdHVyZTogQ291cnNlU2VjdGlvbkxlY3R1cmUpIHtcbiAgICB0aGlzLmVkaXRJZC5zZXQobGVjdHVyZS5pZCk7XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXQuZW1pdChsZWN0dXJlKTtcbiAgfVxuICBvbk1lZGlhRWRpdChsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvKSB7XG4gICAgdGhpcy5lZGl0SWQuc2V0KGxlY3R1cmUuaWQpO1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgLy8gdGhpcy5tZWRpYUVkaXQuZW1pdChsZWN0dXJlKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgdGl0bGU6ICfnvJbovpHop4bpopEnLFxuICAgICAgY2FuY2VsVGV4dDogJ+WPlua2iCcsXG4gICAgICBjb25maXJtVGV4dDogJ+ehruWumicsXG4gICAgICBkYXRhOiB0aGlzLmxlY3R1cmUsXG4gICAgICB3aWR0aDogJzgwdncnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBjb21wb25lbnQ6IENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW9EaWFsb2dDb21wb25lbnQsXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihvcHRpb25zKTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybWVkKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBuYW1lOiByZXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBvblZpZGVvVGh1bWJuYWlsVXBsb2FkKHZpZGVvOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvKSB7XG4gICAgdGhpcy50aHVtYm5haWxVcGxvYWQuZW1pdCh2aWRlbyk7XG4gIH1cbiAgb25VcGxvYWQoaWQ6IGFueSwgZGF0YTogYW55KSB7XG4gICAgdGhpcy5sZWN0dXJlKCkuaXNVcGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy51cGxvYWQuZW1pdCh7IGlkLCBkYXRhIH0pO1xuICB9XG4gIG9uRGVsZXRlTWVkaWEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5kZWxldGVNZWRpYS5lbWl0KGRhdGEpO1xuICB9XG4gIG9uTG9hZGVkTWV0YWRhdGEoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGVjdHVyZSgpLml0ZW0uZHVyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5sZWN0dXJlKCkuaXRlbS5kdXJhdGlvbiA9IHZpZGVvRWxlbWVudC5kdXJhdGlvbjtcbiAgICAvLyBjb25zb2xlLmxvZygnVmlkZW8gV2lkdGg6JywgdmlkZW9FbGVtZW50LnZpZGVvV2lkdGgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdWaWRlbyBIZWlnaHQ6JywgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ3JvdyBwLTJcIj5cbiAgQGlmIChsZWN0dXJlKCkuaWQgIT09IGVkaXRJZCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGdhcC0zIHAtM1wiPlxuICAgICAgPHNwYW4+e3sgbGVjdHVyZSgpLnRpdGxlIH19PC9zcGFuPlxuICAgICAgPG1hdC1pY29uIChjbGljayk9XCJvbkVkaXQobGVjdHVyZSgpKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uRGVsZXRlKGxlY3R1cmUoKSlcIj5kZWxldGU8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwIHRleHQtc20gcm91bmRlZC1sZyBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBibG9jayB3LWZ1bGwgcC0yLjUgZGFyazpiZy1ncmF5LTcwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOnBsYWNlaG9sZGVyLWdyYXktNDAwIGRhcms6dGV4dC13aGl0ZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS01MDAgZGFyazpmb2N1czpib3JkZXItYmx1ZS01MDBcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIuagh+mimFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwibGVjdHVyZSgpLnRpdGxlXCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgcC00IGdhcC0zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwobGVjdHVyZSgpKVwiPuWPlua2iDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25TYXZlKGxlY3R1cmUoKSlcIj7kv53lrZg8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPGRpdj5cbiAgICBAaWYgKGxlY3R1cmUoKS5pdGVtKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBwLTIgZ2FwLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLWJsYWNrIGgtZml0XCI+XG4gICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICBpZD1cInZpZGVvXCJcbiAgICAgICAgICAgICN2aWRlb1xuICAgICAgICAgICAgW3NyY109XCJsZWN0dXJlKCkuaXRlbS51cmxcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LTMyIGFzcGVjdC12aWRlb1wiXG4gICAgICAgICAgICAobG9hZGVkbWV0YWRhdGEpPVwib25Mb2FkZWRNZXRhZGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwb3N0ZXJdPVwibGVjdHVyZSgpLml0ZW0udGh1bWJuYWlsXCJcbiAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciB3LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgICAgICA8c3Bhbj7op4bpopHlhoXlrrk8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAobGVjdHVyZSgpLmlzVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7IGxlY3R1cmUoKS5pdGVtLnByb2dyZXNzIH19JTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbk1lZGlhRWRpdChsZWN0dXJlKCkuaXRlbSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+57yW6L6RPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbkRlbGV0ZU1lZGlhKGxlY3R1cmUoKS5pdGVtKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPuWIoOmZpDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGxlY3R1cmUoKS5pdGVtLmR1cmF0aW9uIHwgZHVyYXRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobGVjdHVyZSgpLmlzVXBsb2FkaW5nKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwibGVjdHVyZSgpLml0ZW0ucHJvZ3Jlc3NcIj4gPC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBpZiAobGVjdHVyZSgpLmlkICE9PSBlZGl0SWQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtM1wiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJ1ZC1zci1vbmx5XCJcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIGFjY2VwdD1cIi5hdmksLm1wZywubXBlZywuZmx2LC5tb3YsLm0ydiwubTR2LC5tcDQsLnJtLC5yYW0sLnZvYiwub2d2LC53ZWJtLC53bXZcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblVwbG9hZChsZWN0dXJlKCkuaWQsICRldmVudClcIlxuICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdj7ml6Dop4bpopHmlofku7Y8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPuS4iuS8oOinhumikTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKCFoYXNVbnNhdmVkKSB7XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICB9XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Component, ElementRef, Inject, PLATFORM_ID, inject, output } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatDialogClose, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
5
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
6
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
+
import { MatStepperModule } from '@angular/material/stepper';
|
|
8
|
+
import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
|
|
9
|
+
import { CourseSectionService, CourseService } from '../../services';
|
|
10
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
11
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
12
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/material/dialog";
|
|
15
|
+
import * as i2 from "@angular/material/icon";
|
|
16
|
+
import * as i3 from "@angular/material/checkbox";
|
|
17
|
+
export class CourseSectionLectureVideoDialogComponent {
|
|
18
|
+
constructor(dialogRef, data) {
|
|
19
|
+
this.dialogRef = dialogRef;
|
|
20
|
+
this.data = data;
|
|
21
|
+
this.thumbnailUpload = output();
|
|
22
|
+
this.courseService = inject(CourseService);
|
|
23
|
+
this.courseSectionService = inject(CourseSectionService);
|
|
24
|
+
this.snackBar = inject(MatSnackBar);
|
|
25
|
+
this.platformId = inject(PLATFORM_ID);
|
|
26
|
+
this.el = inject(ElementRef);
|
|
27
|
+
this.lecture = data.data;
|
|
28
|
+
}
|
|
29
|
+
ngAfterViewInit() {
|
|
30
|
+
this.initPlayer(this.lecture.item.url, this.lecture.item.thumbnail);
|
|
31
|
+
}
|
|
32
|
+
close() {
|
|
33
|
+
this.dialogRef.close();
|
|
34
|
+
}
|
|
35
|
+
initPlayer(url, thumbnail) {
|
|
36
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// 'https://cos-video-1258344699.cos.ap-guangzhou.tencentcos.cn/test.mp4',
|
|
40
|
+
if (!this.player) {
|
|
41
|
+
const playerContainer = this.el.nativeElement.querySelector('#dplayer');
|
|
42
|
+
this.player = new DPlayer({
|
|
43
|
+
container: playerContainer,
|
|
44
|
+
screenshot: true,
|
|
45
|
+
preload: 'metadata',
|
|
46
|
+
video: {
|
|
47
|
+
url: url,
|
|
48
|
+
pic: thumbnail,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
// this.player.on('loadedmetadata', () => {
|
|
52
|
+
// console.log('Video duration:', this.player.video.duration);
|
|
53
|
+
// });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
ngOnInit() { }
|
|
57
|
+
ngOnDestroy() {
|
|
58
|
+
if (this.player) {
|
|
59
|
+
this.player.destroy();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
onThumbnailUpload(event) {
|
|
63
|
+
const file = event.target.files[0];
|
|
64
|
+
if (file) {
|
|
65
|
+
const reader = new FileReader();
|
|
66
|
+
reader.readAsDataURL(file);
|
|
67
|
+
reader.onload = () => {
|
|
68
|
+
this.mediaSrc = reader.result;
|
|
69
|
+
const formData = new FormData();
|
|
70
|
+
formData.append('file', file);
|
|
71
|
+
this.courseService.uploadLectureVideoThumbnail(this.lecture.item.id, formData).subscribe({
|
|
72
|
+
next: (res) => {
|
|
73
|
+
this.lecture.item = res.data;
|
|
74
|
+
this.snackBar.open('上传成功');
|
|
75
|
+
this.player.switchVideo({
|
|
76
|
+
url: this.lecture.item.url,
|
|
77
|
+
pic: res.data.thumbnail,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
reader.onerror = (error) => { };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
onPreviewChange(event) {
|
|
86
|
+
this.courseSectionService.canBePreviewed(this.lecture.item.id, { canBePreviewed: event.checked }).subscribe({
|
|
87
|
+
next: (res) => {
|
|
88
|
+
this.lecture.item.canBePreviewed = res.data.canBePreviewed;
|
|
89
|
+
// this.lecture = res.data;
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseSectionLectureVideoDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: CourseSectionLectureVideoDialogComponent, isStandalone: true, selector: "rolatech-course-section-lecture-video-dialog", outputs: { thumbnailUpload: "thumbnailUpload" }, ngImport: i0, template: "<div class=\"flex flex-col-reverse sm:flex-row justify-between h-full gap-3\">\n <div class=\"w-full sm:w-1/2\">\n <div>\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u5C01\u9762 </span>\n <span class=\"text-sm\">\u4E00\u4E2A\u597D\u7684\u5C01\u9762\u53EF\u4EE5\u5F15\u8D77\u66F4\u591A\u7684\u5173\u6CE8</span>\n </div>\n\n <div class=\"flex gap-3\">\n <div\n class=\"p-3 w-36 flex flex-col items-center justify-center outline-dashed outline-1 rounded cursor-pointer\"\n (click)=\"fileInput.click()\"\n >\n <mat-icon>upload</mat-icon>\n <span class=\"text-sm\">\u4E0A\u4F20\u5C01\u9762</span>\n </div>\n <input type=\"file\" accept=\"image/*\" (change)=\"onThumbnailUpload($event)\" #fileInput style=\"display: none\" />\n @if (lecture.item.thumbnail) {\n <div class=\"aspect-video w-32 h-auto bg-black\">\n <img [src]=\"lecture.item.thumbnail\" class=\"aspect-video object-contain\" />\n </div>\n } @else {\n <div class=\"aspect-video w-32 h-auto\">\n <img [src]=\"mediaSrc\" class=\"aspect-video object-contain\" />\n </div>\n }\n </div>\n </div>\n <div class=\"mt-3\">\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u8BD5\u770B\u5185\u5BB9 </span>\n <span class=\"text-sm\">\u5C11\u91CF\u7684\u8BD5\u770B\u5185\u5BB9, \u53EF\u4EE5\u589E\u52A0\u8D2D\u4E70\u7387</span>\n </div>\n <mat-checkbox color=\"primary\" (change)=\"onPreviewChange($event)\" [checked]=\"lecture.item.canBePreviewed\"\n >\u5141\u8BB8\u8BD5\u770B</mat-checkbox\n >\n </div>\n </div>\n <div class=\"w-full sm:w-1/2\">\n @if (lecture) {\n <div>\n <div id=\"dplayer\" class=\"w-full h-auto aspect-video sm:rounded-xl\"></div>\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatStepperModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] }); }
|
|
95
|
+
}
|
|
96
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CourseSectionLectureVideoDialogComponent, decorators: [{
|
|
97
|
+
type: Component,
|
|
98
|
+
args: [{ selector: 'rolatech-course-section-lecture-video-dialog', standalone: true, imports: [
|
|
99
|
+
MatIconModule,
|
|
100
|
+
MatDividerModule,
|
|
101
|
+
FormsModule,
|
|
102
|
+
MatStepperModule,
|
|
103
|
+
ScheduleItemComponent,
|
|
104
|
+
MatButtonModule,
|
|
105
|
+
MatDialogClose,
|
|
106
|
+
MatCheckboxModule,
|
|
107
|
+
], template: "<div class=\"flex flex-col-reverse sm:flex-row justify-between h-full gap-3\">\n <div class=\"w-full sm:w-1/2\">\n <div>\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u5C01\u9762 </span>\n <span class=\"text-sm\">\u4E00\u4E2A\u597D\u7684\u5C01\u9762\u53EF\u4EE5\u5F15\u8D77\u66F4\u591A\u7684\u5173\u6CE8</span>\n </div>\n\n <div class=\"flex gap-3\">\n <div\n class=\"p-3 w-36 flex flex-col items-center justify-center outline-dashed outline-1 rounded cursor-pointer\"\n (click)=\"fileInput.click()\"\n >\n <mat-icon>upload</mat-icon>\n <span class=\"text-sm\">\u4E0A\u4F20\u5C01\u9762</span>\n </div>\n <input type=\"file\" accept=\"image/*\" (change)=\"onThumbnailUpload($event)\" #fileInput style=\"display: none\" />\n @if (lecture.item.thumbnail) {\n <div class=\"aspect-video w-32 h-auto bg-black\">\n <img [src]=\"lecture.item.thumbnail\" class=\"aspect-video object-contain\" />\n </div>\n } @else {\n <div class=\"aspect-video w-32 h-auto\">\n <img [src]=\"mediaSrc\" class=\"aspect-video object-contain\" />\n </div>\n }\n </div>\n </div>\n <div class=\"mt-3\">\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u8BD5\u770B\u5185\u5BB9 </span>\n <span class=\"text-sm\">\u5C11\u91CF\u7684\u8BD5\u770B\u5185\u5BB9, \u53EF\u4EE5\u589E\u52A0\u8D2D\u4E70\u7387</span>\n </div>\n <mat-checkbox color=\"primary\" (change)=\"onPreviewChange($event)\" [checked]=\"lecture.item.canBePreviewed\"\n >\u5141\u8BB8\u8BD5\u770B</mat-checkbox\n >\n </div>\n </div>\n <div class=\"w-full sm:w-1/2\">\n @if (lecture) {\n <div>\n <div id=\"dplayer\" class=\"w-full h-auto aspect-video sm:rounded-xl\"></div>\n </div>\n }\n </div>\n</div>\n" }]
|
|
108
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
109
|
+
type: Inject,
|
|
110
|
+
args: [MAT_DIALOG_DATA]
|
|
111
|
+
}] }] });
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9B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QkFDRSw4Q0FBOEMsY0FDNUMsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsaUJBQWlCO3FCQUNsQjs7MEJBa0JFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUExBVEZPUk1fSUQsIGluamVjdCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaWFsb2dDbG9zZSwgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0U3RlcHBlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbkxlY3R1cmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNjaGVkdWxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NjaGVkdWxlLWl0ZW0vc2NoZWR1bGUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvblNlcnZpY2UsIENvdXJzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmRlY2xhcmUgY29uc3QgRFBsYXllcjogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0U3RlcHBlck1vZHVsZSxcbiAgICBTY2hlZHVsZUl0ZW1Db21wb25lbnQsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBsZWN0dXJlITogQ291cnNlU2VjdGlvbkxlY3R1cmU7XG4gIHRodW1ibmFpbFVwbG9hZCA9IG91dHB1dDxhbnk+KCk7XG4gIGNvdXJzZVNlcnZpY2UgPSBpbmplY3QoQ291cnNlU2VydmljZSk7XG4gIGNvdXJzZVNlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KENvdXJzZVNlY3Rpb25TZXJ2aWNlKTtcblxuICBzbmFja0JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG4gIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgbWVkaWFTcmM6IGFueTtcbiAgcGxheWVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgKSB7XG4gICAgdGhpcy5sZWN0dXJlID0gZGF0YS5kYXRhO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRQbGF5ZXIodGhpcy5sZWN0dXJlLml0ZW0udXJsLCB0aGlzLmxlY3R1cmUuaXRlbS50aHVtYm5haWwpO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgaW5pdFBsYXllcih1cmw6IHN0cmluZywgdGh1bWJuYWlsPzogc3RyaW5nKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vICdodHRwczovL2Nvcy12aWRlby0xMjU4MzQ0Njk5LmNvcy5hcC1ndWFuZ3pob3UudGVuY2VudGNvcy5jbi90ZXN0Lm1wNCcsXG4gICAgaWYgKCF0aGlzLnBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyQ29udGFpbmVyID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkcGxheWVyJyk7XG4gICAgICB0aGlzLnBsYXllciA9IG5ldyBEUGxheWVyKHtcbiAgICAgICAgY29udGFpbmVyOiBwbGF5ZXJDb250YWluZXIsXG4gICAgICAgIHNjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIHByZWxvYWQ6ICdtZXRhZGF0YScsXG4gICAgICAgIHZpZGVvOiB7XG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgcGljOiB0aHVtYm5haWwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMucGxheWVyLm9uKCdsb2FkZWRtZXRhZGF0YScsICgpID0+IHtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ1ZpZGVvIGR1cmF0aW9uOicsIHRoaXMucGxheWVyLnZpZGVvLmR1cmF0aW9uKTtcbiAgICAgIC8vIH0pO1xuICAgIH1cbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsYXllcikge1xuICAgICAgdGhpcy5wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICBvblRodW1ibmFpbFVwbG9hZChldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5tZWRpYVNyYyA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgICAgICB0aGlzLmNvdXJzZVNlcnZpY2UudXBsb2FkTGVjdHVyZVZpZGVvVGh1bWJuYWlsKHRoaXMubGVjdHVyZS5pdGVtLmlkLCBmb3JtRGF0YSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxlY3R1cmUuaXRlbSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCfkuIrkvKDmiJDlip8nKTtcbiAgICAgICAgICAgIHRoaXMucGxheWVyLnN3aXRjaFZpZGVvKHtcbiAgICAgICAgICAgICAgdXJsOiB0aGlzLmxlY3R1cmUuaXRlbS51cmwsXG4gICAgICAgICAgICAgIHBpYzogcmVzLmRhdGEudGh1bWJuYWlsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHt9O1xuICAgIH1cbiAgfVxuICBvblByZXZpZXdDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY291cnNlU2VjdGlvblNlcnZpY2UuY2FuQmVQcmV2aWV3ZWQodGhpcy5sZWN0dXJlLml0ZW0uaWQsIHsgY2FuQmVQcmV2aWV3ZWQ6IGV2ZW50LmNoZWNrZWQgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5sZWN0dXJlLml0ZW0uY2FuQmVQcmV2aWV3ZWQgPSByZXMuZGF0YS5jYW5CZVByZXZpZXdlZDtcbiAgICAgICAgLy8gdGhpcy5sZWN0dXJlID0gcmVzLmRhdGE7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbC1yZXZlcnNlIHNtOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBoLWZ1bGwgZ2FwLTNcIj5cbiAgPGRpdiBjbGFzcz1cInctZnVsbCBzbTp3LTEvMlwiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicHktMyBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZyBmb250LWJvbGRcIj4g5bCB6Z2iIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+5LiA5Liq5aW955qE5bCB6Z2i5Y+v5Lul5byV6LW35pu05aSa55qE5YWz5rOoPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInAtMyB3LTM2IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG91dGxpbmUtZGFzaGVkIG91dGxpbmUtMSByb3VuZGVkIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+5LiK5Lyg5bCB6Z2iPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIChjaGFuZ2UpPVwib25UaHVtYm5haWxVcGxvYWQoJGV2ZW50KVwiICNmaWxlSW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgLz5cbiAgICAgICAgQGlmIChsZWN0dXJlLml0ZW0udGh1bWJuYWlsKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFzcGVjdC12aWRlbyB3LTMyIGgtYXV0byBiZy1ibGFja1wiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImxlY3R1cmUuaXRlbS50aHVtYm5haWxcIiBjbGFzcz1cImFzcGVjdC12aWRlbyBvYmplY3QtY29udGFpblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3BlY3QtdmlkZW8gdy0zMiBoLWF1dG9cIj5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVNyY1wiIGNsYXNzPVwiYXNwZWN0LXZpZGVvIG9iamVjdC1jb250YWluXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJweS0zIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPiDor5XnnIvlhoXlrrkgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc21cIj7lsJHph4/nmoTor5XnnIvlhoXlrrksIOWPr+S7peWinuWKoOi0reS5sOeOhzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiAoY2hhbmdlKT1cIm9uUHJldmlld0NoYW5nZSgkZXZlbnQpXCIgW2NoZWNrZWRdPVwibGVjdHVyZS5pdGVtLmNhbkJlUHJldmlld2VkXCJcbiAgICAgICAgPuWFgeiuuOivleecizwvbWF0LWNoZWNrYm94XG4gICAgICA+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIHNtOnctMS8yXCI+XG4gICAgQGlmIChsZWN0dXJlKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiZHBsYXllclwiIGNsYXNzPVwidy1mdWxsIGgtYXV0byBhc3BlY3QtdmlkZW8gc206cm91bmRlZC14bFwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|