Browse Source

糖油盐

main
kkerwin 1 year ago
parent
commit
26f42c272f
  1. 6
      projects/admin/src/app/pages/dish/dish.component.html
  2. 6
      projects/cdk/src/services/api.service.ts
  3. 2
      projects/client/src/app/app-routing.module.ts
  4. 13
      projects/client/src/app/app.module.ts
  5. 11
      projects/client/src/app/components/app-layout/app-layout.component.html
  6. 6
      projects/client/src/app/pages/dish/dish.component.html
  7. 47
      projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.html
  8. 258
      projects/client/src/app/pages/salt-oil-sugar/salt-oil-sugar.component.ts
  9. 1
      projects/client/src/assets/k-icon/sugar.svg

6
projects/admin/src/app/pages/dish/dish.component.html

@ -111,18 +111,18 @@
<tr>
<th class="text-left">名称</th>
<th class="text-center">每100克(g)</th>
<th class="text-center">营养参考值%(NVR%)</th>
<th class="text-center">营养参考值%(NRV%)</th>
</tr>
</tbody>
<tbody>
<tr *ngFor="let th of item.component">
<td [width]="'38.2%'">{{ th.name }}</td>
<td class="text-center">{{ th.nutrition }}</td>
<td class="text-center">{{ th.nvr }}</td>
<td class="text-center">{{ th.nrv }}</td>
</tr>
</tbody>
</table>
<div>主要原料:{{ item.ingredients.join(',') }}</div>
<div *ngIf="item.ingredients.length > 0">主要原料:{{ item.ingredients.join(',') }}</div>
<div>1毫克(mg)钠相当于2.5毫克食盐</div>
</div>
</ng-template>

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

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

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

@ -54,7 +54,7 @@ const routes: Routes = [
canActivate: [ngxPermissionsGuard],
data: {
permissions: {
only: ['18'],
only: ['38'],
redirectTo: '/forbidden',
},
},

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

@ -1,7 +1,7 @@
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { NZ_I18N } from 'ng-zorro-antd/i18n'
import { NZ_DATE_CONFIG, NZ_DATE_LOCALE, NZ_I18N } from 'ng-zorro-antd/i18n'
import { zh_CN } from 'ng-zorro-antd/i18n'
import { registerLocaleData } from '@angular/common'
import zh from '@angular/common/locales/zh'
@ -13,6 +13,7 @@ import { AppRoutingModule } from './app-routing.module'
import { AppComponent } from './app.component'
import { IconsProviderModule, PROJECT_NAME, TableListModule } from '@cdk/public-api'
import { SharedModule } from '@cdk/shared/shared.module'
import { zhCN } from 'date-fns/locale'
import {
AppLayoutComponent,
OrgFormComponent,
@ -84,6 +85,16 @@ registerLocaleData(zh)
{ provide: NZ_I18N, useValue: zh_CN },
{ provide: HTTP_INTERCEPTORS, useClass: HTTPInterceptor, multi: true },
{ provide: TitleStrategy, useClass: TemplatePageTitleStrategy },
{
provide: NZ_DATE_LOCALE,
useValue: zhCN,
},
{
provide: NZ_DATE_CONFIG,
useValue: {
firstDayOfWeek: 1,
},
},
],
bootstrap: [AppComponent],
})

11
projects/client/src/app/components/app-layout/app-layout.component.html

@ -106,6 +106,17 @@
</ul>
</li>
<li
nz-menu-item
class="k-icon"
[routerLink]="['/', 'salt-oil-sugar']"
nzMatchRouter
*ngxPermissionsOnly="['38']"
>
<span nz-icon nzType="k-icon:sugar" nzTheme="outline"></span>
<span>糖油盐管理</span>
</li>
<li
nz-submenu
nzTitle="基础信息设置"

6
projects/client/src/app/pages/dish/dish.component.html

@ -122,18 +122,18 @@
<tr>
<th class="text-left">名称</th>
<th class="text-center">每100克(g)</th>
<th class="text-center">营养参考值%(NVR%)</th>
<th class="text-center">营养参考值%(NRV%)</th>
</tr>
</tbody>
<tbody>
<tr *ngFor="let th of item.component">
<td [width]="'38.2%'">{{ th.name }}</td>
<td class="text-center">{{ th.nutrition }}</td>
<td class="text-center">{{ th.nvr }}</td>
<td class="text-center">{{ th.nrv }}</td>
</tr>
</tbody>
</table>
<div>主要原料:{{ item.ingredients.join(',') }}</div>
<div *ngIf="item.ingredients.length > 0">主要原料:{{ item.ingredients.join(',') }}</div>
<div>1毫克(mg)钠相当于2.5毫克食盐</div>
</div>
</ng-template>

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

@ -26,32 +26,16 @@
</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 *ngSwitchCase="'startTime'">
{{ data | date : 'yyyy-MM-dd' }} ~ {{ row['endTime'] | date : 'yyyy-MM-dd' }}
</ng-container>
<ng-container *ngSwitchCase="'vender'">
{{ tableOrg[data] ? tableOrg[data].name : '-' }}
<ng-container *ngSwitchCase="'day'"> {{ data }}天 </ng-container>
<ng-container *ngSwitchCase="'sugarWeek'">
{{ data }}g/日均{{ row['sugarDay'] }}g
</ng-container>
<ng-container *ngSwitchCase="'saltWeek'"> {{ data }}g/日均{{ row['saltDay'] }}g </ng-container>
<ng-container *ngSwitchCase="'oilWeek'"> {{ data }}g/日均{{ row['oilDay'] }}g </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>
@ -93,7 +77,7 @@
[nzMin]="0"
[nzPrecision]="0"
nzPlaceHolder="请输入糖用量"
formControlName="sugar"
formControlName="sugarWeek"
></nz-input-number>
</nz-input-group>
</nz-form-control>
@ -107,7 +91,7 @@
[nzPrecision]="0"
[nzMin]="0"
nzPlaceHolder="请输入油用量"
formControlName="oil"
formControlName="oilWeek"
></nz-input-number>
</nz-input-group>
</nz-form-control>
@ -121,7 +105,7 @@
[nzMin]="0"
[nzPrecision]="0"
nzPlaceHolder="请输入盐用量"
formControlName="salt"
formControlName="saltWeek"
></nz-input-number>
<!-- <input nz-input type="number" placeholder="请输入盐用量" formControlName="salt" /> -->
</nz-input-group>
@ -135,13 +119,18 @@
</ng-template>
<ng-template #trendTpl>
<div class="flex items-center justify-between">
<div class="flex items-center justify-between" *ngIf="thisYearTrend.length > 0">
<div class="flex-1">
<nz-segmented [nzOptions]="['日均用量趋势', '周用量趋势']"></nz-segmented>
<nz-segmented [nzOptions]="['日均用量趋势', '周用量趋势']" (nzValueChange)="onTrendTypeChange($event)">
</nz-segmented>
</div>
<div>
<button nz-button nzType="link" (click)="saveToImage()">保存为图片</button>
</div>
</div>
<div #trendElementTpl class="h-80"></div>
<ng-container *ngIf="thisYearTrend.length === 0">
<nz-empty></nz-empty>
</ng-container>
<div #trendElementTpl class="h-96" [ngStyle]="{ display: thisYearTrend.length === 0 ? 'none' : 'block' }"></div>
</ng-template>

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

@ -1,4 +1,4 @@
import { Component, ElementRef, OnInit, TemplateRef, ViewChild } from '@angular/core'
import { ChangeDetectorRef, 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'
@ -7,16 +7,89 @@ 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 { endOfWeek, format, getWeek, startOfWeek } from 'date-fns'
import { EChartsType, init } from 'echarts'
type SugarItemInterface = {
day: number
endTime: number
id: number
name: string
oilDay: number
oilWeek: number
saltDay: number
saltWeek: number
startTime: number
sugarDay: number
sugarWeek: number
vender: number
}
const trendTextMapping = new Map([
['oilDay', { text: '日均油用量/g' }],
['saltDay', { text: '日均盐用量/g' }],
['sugarDay', { text: '日均糖用量/g' }],
['oilWeek', { text: '油用量(周)/g' }],
['saltWeek', { text: '盐用量(周)/g' }],
['sugarWeek', { text: '糖用量(周)/g' }],
])
const defaultTrendSeriesObj = {
xAxis: [] as string[],
day: [
{
type: 'line',
name: 'oilDay',
key: 'oilDay',
data: [] as number[],
},
{
type: 'line',
name: 'saltDay',
key: 'saltDay',
data: [] as number[],
},
{
type: 'line',
name: 'sugarDay',
key: 'sugarDay',
data: [] as number[],
},
],
week: [
{
type: 'line',
name: 'oilWeek',
key: 'oilWeek',
data: [] as number[],
},
{
type: 'line',
name: 'saltWeek',
key: 'saltWeek',
data: [] as number[],
},
{
type: 'line',
name: 'sugarWeek',
key: 'sugarWeek',
data: [] as number[],
},
],
}
@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) {}
constructor(
private api: ApiService,
private modal: NzModalService,
private msg: NzMessageService,
private cdr: ChangeDetectorRef,
) {}
globalEnum = this.api.globalEnum
@ -41,9 +114,10 @@ export class SaltOilSugarComponent {
public recordForm = new FormGroup({
week: new FormControl('', [FormValidators.required('请选择周')]),
day: new FormControl(5, [FormValidators.required('请选择供餐天数')]),
sugar: new FormControl('', []),
oil: new FormControl('', []),
salt: new FormControl('', []),
sugarWeek: new FormControl('', []),
id: new FormControl('', []),
oilWeek: new FormControl('', []),
saltWeek: new FormControl('', []),
})
startTime: Date | null = null
@ -64,12 +138,11 @@ export class SaltOilSugarComponent {
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: '盐用量(周)/日均用量' },
{ key: 'startTime', title: '日期' },
{ key: 'day', title: '供餐天数' },
{ key: 'sugarWeek', title: '糖用量(周)/日均用量' },
{ key: 'oilWeek', title: '油用量(周)/日均用量' },
{ key: 'saltWeek', title: '盐用量(周)/日均用量' },
])
this.tableList = this.tableList.setOptions([
@ -87,24 +160,54 @@ export class SaltOilSugarComponent {
])
}
fetchData(query: AnyObject, pager: AnyObject) {
return this.api.getSaltOilSugarPage(pager, query).pipe()
fetchData(p: AnyObject, q: AnyObject) {
const range = q['date']
if (Array.isArray(range)) {
if (range[0]) {
q['startTime'] = format(range[0], 'yyyy-MM-dd')
}
if (range[1]) {
q['endTime'] = format(range[1], 'yyyy-MM-dd')
}
}
return this.api.getSaltOilSugarPage(p, q).pipe()
}
getWeekRange(date: Date | string) {
if (!(date instanceof Date)) {
date = new Date(date)
}
const startTime = format(startOfWeek(date, { weekStartsOn: 1 }), 'yyyy-MM-dd')
const endTime = format(endOfWeek(date, { weekStartsOn: 1 }), 'yyyy-MM-dd')
return {
startTime,
endTime,
}
}
openModal(record?: any) {
if (record) {
const week = new Date(record['startTime'])
this.recordForm.patchValue({ ...record, week })
}
this.modal.create({
nzTitle: record ? '编辑记录' : '新增记录',
nzContent: this.formTpl,
nzOnCancel: this.handleCancel.bind(this),
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.getWeekRange(this.recordForm.value.week!),
}),
)
this.msg.success(res.desc)
this.tableList.run()
this.handleCancel()
return true
}
return false
@ -112,6 +215,12 @@ export class SaltOilSugarComponent {
})
}
handleCancel() {
this.recordForm.reset({
day: 5,
})
}
deleteItem({ id }: any) {
this.modal.confirm({
nzTitle: '警告',
@ -125,7 +234,50 @@ export class SaltOilSugarComponent {
})
}
thisYearTrend: SugarItemInterface[] = []
trendSeriesObj = defaultTrendSeriesObj
trendType: 'day' | 'week' = 'day'
onTrendTypeChange(idx: number) {
this.trendType = idx === 0 ? 'day' : 'week'
this.genEchart()
}
trend() {
this.trendType = 'day'
this.trendSeriesObj = JSON.parse(JSON.stringify(defaultTrendSeriesObj))
this.fetchData({ pageNo: 0, pageSize: 60 }, { week: [] }).subscribe((res) => {
this.thisYearTrend = res.body.content
this.thisYearTrend
.sort((a, b) => a.endTime - b.endTime)
.forEach((i) => {
this.trendSeriesObj.xAxis.push(i.name)
this.trendSeriesObj.day.forEach((day) => {
day.data.push(i[day.key as keyof SugarItemInterface] as number)
day.name = trendTextMapping.get(day.key)!.text
//@ts-ignore
day.encode = {
x: 'category',
y: day.key,
}
})
this.trendSeriesObj.week.forEach((week) => {
week.data.push(i[week.key as keyof SugarItemInterface] as number)
week.name = trendTextMapping.get(week.key)!.text
//@ts-ignore
week.encode = {
x: 'category',
y: week.key,
}
})
})
this.cdr.markForCheck()
setTimeout(() => {
this.genEchart()
})
})
this.modal.create({
nzTitle: '糖油盐趋势',
nzContent: this.trendTpl,
@ -134,30 +286,58 @@ export class SaltOilSugarComponent {
})
}
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)
const option = {
color: ['#1191ff', '#facd0c', '#2bc35b'],
legend: {},
tooltip: {
trigger: 'axis',
// formatter: function (v: any[]) {
// return v.map((i) => `${trendTextMapping.get(i.seriesName)?.text ?? ''}:${i.data}`).join('<br/>')
// },
},
xAxis: { type: 'category', data: this.trendSeriesObj.xAxis },
yAxis: {},
series: this.trendSeriesObj[this.trendType],
}
if (this.sugerRef) {
this.sugerRef.dispose()
}
if (this.trendElementTpl?.nativeElement) {
this.sugerRef = init(this.trendElementTpl.nativeElement)
this.sugerRef.setOption(option)
}
}
saveToImage() {
const echart = this.sugerRef
if (!echart) {
this.msg.error('没有找到趋势图')
return
}
const base64String = echart.getDataURL()
const filename = `${this.trendType === 'day' ? '日均用量' : '周用量'}_${Date.now()}.png`
const byteString = atob(base64String.split(',')[1])
const mimeString = base64String.split(',')[0].split(':')[1].split(';')[0]
const ab = new ArrayBuffer(byteString.length)
const ia = new Uint8Array(ab)
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
const blob = new Blob([ab], { type: mimeString })
const url = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = filename
document.body.appendChild(link)
link.click()
setTimeout(() => {
document.body.removeChild(link)
URL.revokeObjectURL(url)
}, 0)
}
}

1
projects/client/src/assets/k-icon/sugar.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702782524067" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10610" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1023.855962 230.51638a31.439506 31.439506 0 0 0-31.135511-31.751501c-19.687691-0.199997-35.591441-15.663754-35.407444-34.471459 0.119998-13.311791-8.111873-24.623613-19.75169-29.327539a31.023513 31.023513 0 0 0-12.551803-2.807956c-19.319697-0.183997-34.767454-15.199761-35.135448-33.591473 0-0.031999 0.031999-0.047999 0.032-0.079999a31.359508 31.359508 0 0 0-2.423962-12.359805 31.327508 31.327508 0 0 0-28.927546-20.111685h-0.271996c-0.551991 0-1.047984 0.287995-1.599975 0.319995-8.967859-0.599991-17.319728-4.007937-23.55163-10.343837a33.14348 33.14348 0 0 1-9.54385-23.167636c0.583991-12.847798-6.503898-25.287603-19.1037-30.495522-12.959796-5.391915-27.231572-1.079983-35.831437 9.239855-2.271964 2.591959-4.295933 5.399915-5.615912 8.663864l-65.374973 157.693524a206.012765 206.012765 0 0 0-110.886259-32.255493c-55.351131 0-107.382314 21.551662-146.533699 60.703046L206.588796 440.01709c-39.151385 39.135385-60.727046 91.182568-60.735046 146.533699 0 39.919373 11.359822 78.030775 32.255493 110.886259l-158.55751 65.742968a31.455506 31.455506 0 0 0-17.007733 41.087354c1.615975 3.895939 4.087936 7.063889 6.879892 9.887845 0.351994 0.335995 0.735988 0.61599 1.103983 0.951985 2.391962 2.207965 5.047921 3.991937 7.983874 5.343916 0.703989 0.335995 1.351979 0.671989 2.071968 0.983985 3.511945 1.311979 7.199887 2.231965 11.023827 2.231965 0.047999 0 0.079999-0.031999 0.103998-0.032 0.047999 0 0.079999 0.031999 0.127998 0.032h0.351994c9.247855 0.031999 17.21573 3.319948 23.671629 9.647848 6.3599 6.231902 9.783846 14.61577 10.351837 23.543631-0.031999 0.64799-0.351994 1.199981-0.351994 1.87197a31.375507 31.375507 0 0 0 20.039685 28.863547c2.879955 1.191981 6.127904 1.559976 9.359853 1.871971 0.703989 0.031999 1.319979 0.399994 2.039968 0.399993 0.279996 0 0.495992 0.151998 0.767988 0.151998h0.287995c0.063999 0 0.111998-0.024 0.167998-0.024 18.343712 0.335995 33.319477 15.871751 33.535473 35.215447 0.047999 4.423931 1.055983 8.591865 2.743957 12.407805 4.639927 11.607818 15.831751 19.831689 29.063544 19.831689a1.88797 1.88797 0 0 1 0.59999 0c8.831861 0 17.21573 3.527945 23.615629 9.983843a36.247431 36.247431 0 0 1 10.487836 25.359602 31.439506 31.439506 0 0 0 31.447506 31.167511h0.295995c1.823971-0.031999 3.391947-0.775988 5.12792-1.079983 2.151966-0.303995 4.247933-0.60799 6.279901-1.351979 0.599991-0.207997 1.151982-0.519992 1.719973-0.799988 7.399884-3.071952 13.727784-8.687864 17.039733-16.671738l65.726967-158.57351a205.67677 205.67677 0 0 0 110.774261 32.239494c55.351131 0 107.414313-21.551662 146.597698-60.735046l233.652331-233.652331c69.806904-69.782904 79.222756-177.293216 28.527552-257.371959l158.54151-65.710968a31.511505 31.511505 0 0 0 19.407696-28.959545c0-0.263996 0.143998-0.495992 0.143997-0.775988z m-275.963666-9.591849l47.591252-114.822197a97.638467 97.638467 0 0 0 35.815438 19.175699c9.511851 31.751501 34.879452 56.623111 67.334943 65.710968a95.654498 95.654498 0 0 0 20.055685 36.663424l-115.91818 48.055246-54.879138-54.78314z m-556.999254 677.893355c-9.055858-32.49549-33.903468-57.831092-65.742967-67.342943a97.142475 97.142475 0 0 0-19.343696-35.991435l115.326189-47.815249 54.831139 54.81514-48.287242 116.50217a95.966493 95.966493 0 0 0-36.783423-20.167683z m581.878863-359.906349L539.119574 772.547869a143.533746 143.533746 0 0 1-102.134396 42.311335c-37.983404 0-73.662843-14.735769-100.766418-41.263352-0.687989-0.743988-1.471977-1.319979-2.239965-1.999968L252.124081 689.765169c-0.719989-0.831987-1.367979-1.655974-2.167966-2.399963-26.511584-27.111574-41.223353-62.767014-41.223353-100.782417 0-38.591394 15.031764-74.814825 42.319336-102.086397l233.652331-233.652331a143.437748 143.437748 0 0 1 102.070397-42.287336c38.015403 0 73.734842 14.711769 100.838416 41.271352 0.711989 0.735988 1.479977 1.319979 2.239965 2.007968l80.206741 80.102743c1.071983 1.407978 2.335963 2.591959 3.623943 3.79194 55.311131 56.327115 55.063135 147.173689-0.911986 203.180809z" fill="#838384" p-id="10611"></path></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

Loading…
Cancel
Save