Browse Source

糖油盐管理 界面

main
kely 2 years ago
parent
commit
5eee0b4fce
  1. 16
      projects/cdk/src/services/api.service.ts
  2. 148
      projects/client/src/app/app-routing.module.ts
  3. 46
      projects/client/src/app/app.module.ts
  4. 25
      projects/client/src/app/pages/index.ts
  5. 147
      projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.html
  6. 0
      projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.less
  7. 163
      projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.ts

16
projects/cdk/src/services/api.service.ts

@ -595,4 +595,20 @@ export class ApiService {
// return this.http.get<ResponseType>(`/api/menu/dish`); // return this.http.get<ResponseType>(`/api/menu/dish`);
return this.http.get<ResponseType>(`/api/menu/display?menuId=${menuId}&day=${day}`) return this.http.get<ResponseType>(`/api/menu/display?menuId=${menuId}&day=${day}`)
} }
getSaltOilSugarPage(p: {}, q: {}) {
const params = Utils.objectStringify({ ...p, ...q })
return this.http.get<ResponseType<PageResult>>(`/api/menu?${params}`)
}
saveSaltOilSugar(v: AnyObject) {
const body = Utils.objectToFormData(v)
const method = v['id'] ? 'post' : 'put'
return this.http[method]<ResponseType>('/api/dish', body)
}
deleteSaltOilSugar(id: string | number) {
const params = Utils.objectToFormData({ id })
return this.http.delete<ResponseType>(`/api/menu`, { body: params })
}
} }

148
projects/client/src/app/app-routing.module.ts

@ -1,5 +1,5 @@
import { NgModule } from "@angular/core"; import { NgModule } from '@angular/core'
import { RouterModule, Routes } from "@angular/router"; import { RouterModule, Routes } from '@angular/router'
import { import {
DashboardComponent, DashboardComponent,
DataVisComponent, DataVisComponent,
@ -13,180 +13,194 @@ import {
IngredientListComponent, IngredientListComponent,
IngredientPreviewPageComponent, IngredientPreviewPageComponent,
IngredientReleaseComponent, IngredientReleaseComponent,
} from "./pages"; SaltOilSugarComponent,
import { AppLayoutComponent } from "./components"; } from './pages'
import { authGuard } from "./services/auth.guard"; import { AppLayoutComponent } from './components'
import { PermissionLoadGuard } from "./services/permisson.guard"; import { authGuard } from './services/auth.guard'
import { ForbiddenComponent, NotfoundComponent } from "@cdk/shared/components"; import { PermissionLoadGuard } from './services/permisson.guard'
import { ngxPermissionsGuard } from "ngx-permissions"; import { ForbiddenComponent, NotfoundComponent } from '@cdk/shared/components'
import { ngxPermissionsGuard } from 'ngx-permissions'
const routes: Routes = [ const routes: Routes = [
{ path: "login", component: LoginComponent }, { path: 'login', component: LoginComponent },
{ path: "forbidden", component: ForbiddenComponent }, { path: 'forbidden', component: ForbiddenComponent },
{ {
path: "", path: '',
component: AppLayoutComponent, component: AppLayoutComponent,
canActivate: [authGuard, PermissionLoadGuard], canActivate: [authGuard, PermissionLoadGuard],
children: [ children: [
{ {
path: "", path: '',
pathMatch: "full", pathMatch: 'full',
redirectTo: "dashboard", redirectTo: 'dashboard',
}, },
{ {
path: "dashboard", path: 'dashboard',
title: "使用流程", title: '使用流程',
component: DashboardComponent, component: DashboardComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
data: { data: {
permissions: { permissions: {
only: ["18"], only: ['18'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
{ {
path: "meal-setting", path: 'salt-oil-sugar',
component: SaltOilSugarComponent,
title: '盐油糖管理',
canActivate: [ngxPermissionsGuard],
data: {
permissions: {
only: ['18'],
redirectTo: '/forbidden',
},
},
},
{
path: 'meal-setting',
component: MealSettingComponent, component: MealSettingComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
data: { data: {
permissions: { permissions: {
only: ["21", "22"], only: ['21', '22'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
{ {
path: "data-vis", path: 'data-vis',
component: DataVisComponent, component: DataVisComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
data: { data: {
permissions: { permissions: {
only: ["19", "20"], only: ['19', '20'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
{ {
path: "food", path: 'food',
component: FoodComponent, component: FoodComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
title: "食材管理", title: '食材管理',
data: { data: {
permissions: { permissions: {
only: ["23", "24"], only: ['23', '24'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
{ {
path: "dish", path: 'dish',
component: DishComponent, component: DishComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
title: "菜品管理", title: '菜品管理',
data: { data: {
permissions: { permissions: {
only: ["25", "26"], only: ['25', '26'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
{ {
path: "ingredient", path: 'ingredient',
title: "食谱管理", title: '食谱管理',
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
data: { data: {
permissions: { permissions: {
only: ["27", "28", "29", "30", "31"], only: ['27', '28', '29', '30', '31'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
children: [ children: [
{ {
path: "", path: '',
pathMatch: "full", pathMatch: 'full',
redirectTo: "item", redirectTo: 'item',
}, },
{ {
path: "item", path: 'item',
title: "食谱库", title: '食谱库',
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
data: { data: {
permissions: { permissions: {
only: ["27", "28"], only: ['27', '28'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
children: [ children: [
{ {
path: "", path: '',
pathMatch: "full", pathMatch: 'full',
redirectTo: "list", redirectTo: 'list',
}, },
{ {
path: "list", path: 'list',
component: IngredientListComponent, component: IngredientListComponent,
}, },
{ {
path: "form/:id", path: 'form/:id',
component: IngredientFormComponent, component: IngredientFormComponent,
}, },
], ],
}, },
{ {
path: "preview", path: 'preview',
title: "食谱预览", title: '食谱预览',
component: IngredientPreviewPageComponent, component: IngredientPreviewPageComponent,
}, },
{ {
path: "release", path: 'release',
title: "食谱发布计划", title: '食谱发布计划',
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
component: IngredientReleaseComponent, component: IngredientReleaseComponent,
data: { data: {
permissions: { permissions: {
only: ["30", "31"], only: ['30', '31'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
], ],
}, },
{ {
path: "system", path: 'system',
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
data: { data: {
permissions: { permissions: {
only: ["33", "34", "35", "36", "37"], only: ['33', '34', '35', '36', '37'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
children: [ children: [
{ {
path: "org", path: 'org',
component: OrgInfoComponent, component: OrgInfoComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
title: "单位信息设置", title: '单位信息设置',
data: { data: {
permissions: { permissions: {
only: ["33", "34"], only: ['33', '34'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
{ {
path: "user", path: 'user',
component: ClientUserManageComponent, component: ClientUserManageComponent,
canActivate: [ngxPermissionsGuard], canActivate: [ngxPermissionsGuard],
title: "用户管理", title: '用户管理',
data: { data: {
permissions: { permissions: {
only: ["35", "36", "37"], only: ['35', '36', '37'],
redirectTo: "/forbidden", redirectTo: '/forbidden',
}, },
}, },
}, },
@ -196,10 +210,10 @@ const routes: Routes = [
}, },
{ {
path: "**", path: '**',
component: NotfoundComponent, component: NotfoundComponent,
}, },
]; ]
@NgModule({ @NgModule({
imports: [RouterModule.forRoot(routes)], imports: [RouterModule.forRoot(routes)],

46
projects/client/src/app/app.module.ts

@ -1,25 +1,25 @@
import { NgModule } from "@angular/core"; import { NgModule } from '@angular/core'
import { BrowserModule } from "@angular/platform-browser"; import { BrowserModule } from '@angular/platform-browser'
import { NZ_I18N } from "ng-zorro-antd/i18n"; import { NZ_I18N } from 'ng-zorro-antd/i18n'
import { zh_CN } from "ng-zorro-antd/i18n"; import { zh_CN } from 'ng-zorro-antd/i18n'
import { registerLocaleData } from "@angular/common"; import { registerLocaleData } from '@angular/common'
import zh from "@angular/common/locales/zh"; import zh from '@angular/common/locales/zh'
import { FormsModule } from "@angular/forms"; import { FormsModule } from '@angular/forms'
import { HTTP_INTERCEPTORS, HttpClientModule } from "@angular/common/http"; import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'
import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
import { AppRoutingModule } from "./app-routing.module"; import { AppRoutingModule } from './app-routing.module'
import { AppComponent } from "./app.component"; import { AppComponent } from './app.component'
import { IconsProviderModule, PROJECT_NAME, TableListModule } from "@cdk/public-api"; import { IconsProviderModule, PROJECT_NAME, TableListModule } from '@cdk/public-api'
import { SharedModule } from "@cdk/shared/shared.module"; import { SharedModule } from '@cdk/shared/shared.module'
import { import {
AppLayoutComponent, AppLayoutComponent,
OrgFormComponent, OrgFormComponent,
UserListComponent, UserListComponent,
RolePermissionComponent, RolePermissionComponent,
DishFormComponent, DishFormComponent,
} from "./components"; } from './components'
import { import {
DashboardComponent, DashboardComponent,
LoginComponent, LoginComponent,
@ -33,14 +33,15 @@ import {
IngredientListComponent, IngredientListComponent,
IngredientPreviewPageComponent, IngredientPreviewPageComponent,
IngredientReleaseComponent, IngredientReleaseComponent,
} from "./pages"; SaltOilSugarComponent,
import { HTTPInterceptor } from "./services/http.interceptor"; } from './pages'
import { IngredientModule } from "@cdk/ingredient/ingredient.module"; import { HTTPInterceptor } from './services/http.interceptor'
import { NgxPermissionsModule } from "ngx-permissions"; import { IngredientModule } from '@cdk/ingredient/ingredient.module'
import { TemplatePageTitleStrategy } from "./services/title.service"; import { NgxPermissionsModule } from 'ngx-permissions'
import { TitleStrategy } from "@angular/router"; import { TemplatePageTitleStrategy } from './services/title.service'
import { TitleStrategy } from '@angular/router'
registerLocaleData(zh); registerLocaleData(zh)
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -63,6 +64,7 @@ registerLocaleData(zh);
IngredientListComponent, IngredientListComponent,
IngredientPreviewPageComponent, IngredientPreviewPageComponent,
IngredientReleaseComponent, IngredientReleaseComponent,
SaltOilSugarComponent,
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
@ -78,7 +80,7 @@ registerLocaleData(zh);
NgxPermissionsModule.forRoot(), NgxPermissionsModule.forRoot(),
], ],
providers: [ providers: [
{ provide: PROJECT_NAME, useValue: "client" }, { provide: PROJECT_NAME, useValue: 'client' },
{ provide: NZ_I18N, useValue: zh_CN }, { provide: NZ_I18N, useValue: zh_CN },
{ provide: HTTP_INTERCEPTORS, useClass: HTTPInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: HTTPInterceptor, multi: true },
{ provide: TitleStrategy, useClass: TemplatePageTitleStrategy }, { provide: TitleStrategy, useClass: TemplatePageTitleStrategy },

25
projects/client/src/app/pages/index.ts

@ -1,14 +1,15 @@
export * from "./dashboard/dashboard.component"; export * from './dashboard/dashboard.component'
export * from "./login/login.component"; export * from './login/login.component'
export * from "./meal-setting/meal-setting.component"; export * from './meal-setting/meal-setting.component'
export * from "./data-vis/data-vis.component"; export * from './data-vis/data-vis.component'
export * from "./food/food.component"; export * from './food/food.component'
export * from "./dish/dish.component"; export * from './dish/dish.component'
export * from "./system/org-info/org-info.component"; export * from './system/org-info/org-info.component'
export * from "./system/user-manage/user-manage.component"; export * from './system/user-manage/user-manage.component'
export * from "./ingredients/ingredient-list/ingredient-list.component"; export * from './ingredients/ingredient-list/ingredient-list.component'
export * from "./ingredients/ingredient-form/ingredient-form.component"; export * from './ingredients/ingredient-form/ingredient-form.component'
export * from "./ingredients/ingredient-preview-page/ingredient-preview-page.component"; export * from './ingredients/ingredient-preview-page/ingredient-preview-page.component'
export * from "./ingredients/ingredient-release/ingredient-release.component"; export * from './ingredients/ingredient-release/ingredient-release.component'
export * from './salt-oil-sugar/salt-oil-sugar.component'

147
projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.html

@ -0,0 +1,147 @@
<app-page>
<ng-template #pageExtraTpl>
<nz-space>
<button nz-button *nzSpaceItem (click)="trend()">生成趋势图</button>
<a *nzSpaceItem nz-button nzType="primary" (click)="openModal()">
<i nz-icon nzType="plus"></i>
新增记录
</a>
</nz-space>
</ng-template>
<div class="h-full overflow-hidden bg-white rounded-lg">
<nz-card [nzBordered]="false" nzTitle="糖油盐管理">
<table-list
[props]="tableList"
[search]="searchTpl"
[action]="pageExtraTpl"
[formGroup]="queryForm"
[renderColumns]="renderColumnsTpl"
>
<ng-template #searchTpl>
<nz-form-item>
<nz-form-control>
<nz-range-picker formControlName="date"></nz-range-picker>
</nz-form-control>
</nz-form-item>
</ng-template>
<ng-template #renderColumnsTpl let-data let-key="key" let-row="row">
<ng-container [ngSwitch]="key">
<ng-container *ngSwitchCase="'modify'">
{{ data | date : 'yyyy-MM-dd HH:mm:ss' }}
</ng-container>
<ng-container *ngSwitchCase="'vender'">
{{ tableOrg[data] ? tableOrg[data].name : '-' }}
</ng-container>
<ng-container *ngSwitchCase="'meals'">
<nz-tag *ngFor="let item of data">{{ item }}</nz-tag>
</ng-container>
<ng-container *ngSwitchCase="'day'"> 周{{ data }} </ng-container>
<ng-container *ngSwitchCase="'status'">
{{ statusTextMap[data] }}
</ng-container>
<ng-container *ngSwitchCase="'month'">
<div class="flex flex-wrap">
<ng-container *ngIf="data.length === 12">
<nz-tag> 全年 </nz-tag>
</ng-container>
<ng-container *ngIf="data.length !== 12">
<nz-tag *ngFor="let item of data" class="mb-1">
{{ item }}
</nz-tag>
</ng-container>
</div>
</ng-container>
<ng-container *ngSwitchDefault>
{{ data }}
</ng-container>
</ng-container>
</ng-template>
</table-list>
</nz-card>
</div>
</app-page>
<ng-template #formTpl>
<form nz-form [formGroup]="recordForm">
<nz-form-item class="mt-4">
<nz-form-label nzSpan="6" [nzRequired]="true"> 选择周 </nz-form-label>
<nz-form-control nzSpan="12" [nzErrorTip]="formControlErrorTpl">
<nz-week-picker formControlName="week" nzFormat="yyyy-ww周" class="w-full"></nz-week-picker>
</nz-form-control>
</nz-form-item>
<nz-form-item class="mt-4">
<nz-form-label nzSpan="6" [nzRequired]="true"> 供餐天数 </nz-form-label>
<nz-form-control nzSpan="12" [nzErrorTip]="formControlErrorTpl">
<nz-select nzPlaceHolder="请选择供餐天数" formControlName="day">
<nz-option [nzValue]="1" nzLabel="1天"></nz-option>
<nz-option [nzValue]="2" nzLabel="2天"></nz-option>
<nz-option [nzValue]="3" nzLabel="3天"></nz-option>
<nz-option [nzValue]="4" nzLabel="4天"></nz-option>
<nz-option [nzValue]="5" nzLabel="5天"></nz-option>
<nz-option [nzValue]="6" nzLabel="6天"></nz-option>
<nz-option [nzValue]="7" nzLabel="7天"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
<nz-form-item class="mt-4">
<nz-form-label nzSpan="6"> 糖用量(周) </nz-form-label>
<nz-form-control nzSpan="12">
<nz-input-group nzAddOnAfter="g">
<nz-input-number
class="w-full"
[nzMin]="0"
[nzPrecision]="0"
nzPlaceHolder="请输入糖用量"
formControlName="sugar"
></nz-input-number>
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item class="mt-4">
<nz-form-label nzSpan="6"> 油用量(周) </nz-form-label>
<nz-form-control nzSpan="12">
<nz-input-group nzAddOnAfter="g">
<nz-input-number
class="w-full"
[nzPrecision]="0"
[nzMin]="0"
nzPlaceHolder="请输入油用量"
formControlName="oil"
></nz-input-number>
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item class="mt-4">
<nz-form-label nzSpan="6"> 盐用量(周) </nz-form-label>
<nz-form-control nzSpan="12">
<nz-input-group nzAddOnAfter="g">
<nz-input-number
class="w-full"
[nzMin]="0"
[nzPrecision]="0"
nzPlaceHolder="请输入盐用量"
formControlName="salt"
></nz-input-number>
<!-- <input nz-input type="number" placeholder="请输入盐用量" formControlName="salt" /> -->
</nz-input-group>
</nz-form-control>
</nz-form-item>
</form>
</ng-template>
<ng-template #formControlErrorTpl let-control>
<form-error-tips [control]="control"></form-error-tips>
</ng-template>
<ng-template #trendTpl>
<div class="flex items-center justify-between">
<div class="flex-1">
<nz-segmented [nzOptions]="['日均用量趋势', '周用量趋势']"></nz-segmented>
</div>
<div>
<button nz-button nzType="link" (click)="saveToImage()">保存为图片</button>
</div>
</div>
<div #trendElementTpl class="h-80"></div>
</ng-template>

0
projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.less

163
projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.ts

@ -0,0 +1,163 @@
import { Component, ElementRef, OnInit, TemplateRef, ViewChild } from '@angular/core'
import { FormControl, FormGroup } from '@angular/forms'
import { NzDrawerRef, NzDrawerService } from 'ng-zorro-antd/drawer'
import { AnyObject, FormValidators, OrgDTO, TableListOption, Utils } from '@cdk/public-api'
import { ApiService } from '@cdk/services'
import { NzModalService } from 'ng-zorro-antd/modal'
import { lastValueFrom, tap } from 'rxjs'
import { NzMessageService } from 'ng-zorro-antd/message'
import { Router } from '@angular/router'
import { format, getWeek } from 'date-fns'
import { EChartsType, init } from 'echarts'
@Component({
selector: 'app-salt-oil-sugar',
templateUrl: './salt-oil-sugar.component.html',
styleUrls: ['./salt-oil-sugar.component.less'],
})
export class SaltOilSugarComponent {
constructor(private api: ApiService, private modal: NzModalService, private msg: NzMessageService) {}
globalEnum = this.api.globalEnum
statusTextMap: Record<string, string> = {}
@ViewChild('formTpl') formTpl!: TemplateRef<{}>
@ViewChild('trendTpl') trendTpl!: TemplateRef<{}>
@ViewChild('trendElementTpl') trendElementTpl!: ElementRef<HTMLDivElement>
sugerRef?: EChartsType
public tableList = new TableListOption(this.fetchData.bind(this), {
frontPagination: false,
})
public queryForm = new FormGroup({
date: new FormControl([]),
})
public recordForm = new FormGroup({
week: new FormControl('', [FormValidators.required('请选择周')]),
day: new FormControl(5, [FormValidators.required('请选择供餐天数')]),
sugar: new FormControl('', []),
oil: new FormControl('', []),
salt: new FormControl('', []),
})
startTime: Date | null = null
tableOrg: { [k: number]: OrgDTO } = {}
ngOnInit(): void {
this.statusTextMap = this.globalEnum.menuStatus.reduce((a, c) => {
return {
...a,
[String(c.label)]: c.value,
}
}, {} as Record<string, string>)
this.initTableList()
}
initTableList() {
this.tableList.scroll = { x: '900px' }
this.tableList = this.tableList.setColumns([
{ key: 'name', title: '周' },
{ key: 'meals', title: '日期' },
{ key: 'month', title: '供餐天数' },
{ key: 'day', title: '糖用量(周)/日均用量' },
{ key: 'status', title: '油用量(周)/日均用量' },
{ key: 'modify', title: '盐用量(周)/日均用量' },
])
this.tableList = this.tableList.setOptions([
{
title: '编辑',
premissions: [],
onClick: this.openModal.bind(this),
},
{
title: '删除',
premissions: [],
onClick: this.deleteItem.bind(this),
},
])
}
fetchData(query: AnyObject, pager: AnyObject) {
return this.api.getSaltOilSugarPage(pager, query).pipe()
}
openModal(record?: any) {
this.modal.create({
nzTitle: record ? '编辑记录' : '新增记录',
nzContent: this.formTpl,
nzOnOk: async () => {
if (Utils.validateFormGroup(this.recordForm)) {
const res = await lastValueFrom(
this.api.saveSaltOilSugar({
...this.recordForm.value,
week: format(this.recordForm.value.week as unknown as Date, 'yyyy-ww'),
}),
)
this.msg.success(res.desc)
this.tableList.run()
}
return false
},
})
}
deleteItem({ id }: any) {
this.modal.confirm({
nzTitle: '警告',
nzContent: `是否要删除该记录?`,
nzOkDanger: true,
nzOnOk: async () => {
const res = await lastValueFrom(this.api.deleteSaltOilSugar(id))
this.msg.success(res.desc)
this.tableList.run()
},
})
}
trend() {
this.modal.create({
nzTitle: '糖油盐趋势',
nzContent: this.trendTpl,
nzWidth: 800,
nzFooter: null,
})
}
saveToImage() {}
genEchart() {
// const xAxis: string[] = Object.keys(this.suger['oil']).map((i: any) => weekdayMap[i])
// const series: any[] = []
// Object.entries(this.suger).forEach(([k, v]) => {
// if (k !== 'crow') {
// series.push({
// type: 'line',
// name: sugerMap.get(k),
// data: Object.values(v as any),
// })
// }
// })
// const option = {
// legend: {},
// tooltip: { trigger: 'axis' },
// xAxis: { type: 'category', data: xAxis },
// yAxis: {},
// series,
// }
// if (!this.sugerRef) {
// this.sugerRef = init(this.trendElementTpl.nativeElement)
// }
// this.sugerRef.setOption(option)
}
}
Loading…
Cancel
Save