From e1732480cd07ff9801f06f09c8ec5c308022d6cb Mon Sep 17 00:00:00 2001 From: Lingzi Date: Fri, 11 Mar 2022 16:14:32 +0800 Subject: [PATCH 1/6] fix bug --- .../routes/partner/partner-routing.module.ts | 4 +- src/app/routes/partner/partner.module.ts | 3 +- .../scrollimglist.component.html | 9 ++++ .../scrollimglist.component.spec.ts | 24 ++++++++++ .../scrollimglist/scrollimglist.component.ts | 45 +++++++++++++++++++ src/styles.less | 2 +- 6 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html create mode 100644 src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts create mode 100644 src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts diff --git a/src/app/routes/partner/partner-routing.module.ts b/src/app/routes/partner/partner-routing.module.ts index 42af70fc..1e743f92 100644 --- a/src/app/routes/partner/partner-routing.module.ts +++ b/src/app/routes/partner/partner-routing.module.ts @@ -38,6 +38,7 @@ import { AddPersonalPartnerComponent } from './partner-list/components/add-perso import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component'; import { PartnerListComponent } from './partner-list/components/index/partner-list.component'; import { ParterRebateManageMentAddComponent } from './rebate-management/components/rebate-setting/add/add.component'; +import { PartnerScrollimglistComponent } from './scroll-img/scrollimglist/scrollimglist.component'; const routes: Routes = [ { @@ -128,8 +129,7 @@ const routes: Routes = [ { path: 'record/detail/:id', component: PartnerRecordedDetailComponent } ] }, - -]; + { path: 'scrollimglist', component: PartnerScrollimglistComponent }]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] diff --git a/src/app/routes/partner/partner.module.ts b/src/app/routes/partner/partner.module.ts index 6eadaab1..3adfcb58 100644 --- a/src/app/routes/partner/partner.module.ts +++ b/src/app/routes/partner/partner.module.ts @@ -50,6 +50,7 @@ import { ParterRebateManageMenAbnormalFeedbackComponent } from './rebate-managem import { PartnerRecordedDetailComponent } from './recorded/components/detail/detail.component'; import { PartnerRecordedRecordComponent } from './recorded/components/record/record.component'; import { ParterRebateManageMentAddComponent } from './rebate-management/components/rebate-setting/add/add.component'; +import { PartnerScrollimglistComponent } from './scroll-img/scrollimglist/scrollimglist.component'; const COMPONENTS: any[] = [ PartnerBusinessStatisticsIndexComponent, @@ -90,7 +91,7 @@ const COMPONENTS: any[] = [ ParterRebateManageMentAddComponent, AddEtpPartnerComponent, AddPersonalPartnerComponent, - + PartnerScrollimglistComponent ]; @NgModule({ diff --git a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html new file mode 100644 index 00000000..482ccb06 --- /dev/null +++ b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts new file mode 100644 index 00000000..78d0192b --- /dev/null +++ b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts @@ -0,0 +1,24 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; +import { PartnerScrollimglistComponent } from './scrollimglist.component'; + +describe('PartnerScrollimglistComponent', () => { + let component: PartnerScrollimglistComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ PartnerScrollimglistComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PartnerScrollimglistComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts new file mode 100644 index 00000000..3cd34b22 --- /dev/null +++ b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts @@ -0,0 +1,45 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { STColumn, STComponent } from '@delon/abc/st'; +import { SFSchema } from '@delon/form'; +import { ModalHelper, _HttpClient } from '@delon/theme'; + +@Component({ + selector: 'app-partner-scrollimglist', + templateUrl: './scrollimglist.component.html', +}) +export class PartnerScrollimglistComponent implements OnInit { + url = `/user`; + searchSchema: SFSchema = { + properties: { + no: { + type: 'string', + title: '编号' + } + } + }; + @ViewChild('st') private readonly st!: STComponent; + columns: STColumn[] = [ + { title: '编号', index: 'no' }, + { title: '调用次数', type: 'number', index: 'callNo' }, + { title: '头像', type: 'img', width: '50px', index: 'avatar' }, + { title: '时间', type: 'date', index: 'updatedAt' }, + { + title: '', + buttons: [ + // { text: '查看', click: (item: any) => `/form/${item.id}` }, + // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' }, + ] + } + ]; + + constructor(private http: _HttpClient, private modal: ModalHelper) { } + + ngOnInit(): void { } + + add(): void { + // this.modal + // .createStatic(FormEditComponent, { i: { id: 0 } }) + // .subscribe(() => this.st.reload()); + } + +} diff --git a/src/styles.less b/src/styles.less index 2464d9a8..a25a53de 100644 --- a/src/styles.less +++ b/src/styles.less @@ -47,4 +47,4 @@ input[type="number"] { .break-word-all { word-break: break-all; word-wrap : break-word; -} +} \ No newline at end of file From 6e2b7d0b03a944a19df8b207200f1d03b5fe22ca Mon Sep 17 00:00:00 2001 From: Lingzi Date: Mon, 14 Mar 2022 13:22:37 +0800 Subject: [PATCH 2/6] fix bug --- .../ad/components/add/add.component.html | 24 ++ .../ad/components/add/add.component.spec.ts | 24 ++ .../ad/components/add/add.component.ts | 309 ++++++++++++++++++ .../routes/partner/ad/components/add/add.less | 119 +++++++ .../ad/components/list/list.component.html | 62 ++++ .../ad/components/list/list.component.less | 1 + .../ad/components/list/list.component.spec.ts | 24 ++ .../ad/components/list/list.component.ts | 281 ++++++++++++++++ .../partner/ad/components/list/list.less | 9 + .../partner/ad/services/scrollimg.service.ts | 12 + .../routes/partner/partner-routing.module.ts | 13 +- src/app/routes/partner/partner.module.ts | 6 +- .../scrollimglist.component.html | 9 - .../scrollimglist.component.spec.ts | 24 -- .../scrollimglist/scrollimglist.component.ts | 45 --- src/assets/mocks/menu-data.json | 3 +- 16 files changed, 881 insertions(+), 84 deletions(-) create mode 100644 src/app/routes/partner/ad/components/add/add.component.html create mode 100644 src/app/routes/partner/ad/components/add/add.component.spec.ts create mode 100644 src/app/routes/partner/ad/components/add/add.component.ts create mode 100644 src/app/routes/partner/ad/components/add/add.less create mode 100644 src/app/routes/partner/ad/components/list/list.component.html create mode 100644 src/app/routes/partner/ad/components/list/list.component.less create mode 100644 src/app/routes/partner/ad/components/list/list.component.spec.ts create mode 100644 src/app/routes/partner/ad/components/list/list.component.ts create mode 100644 src/app/routes/partner/ad/components/list/list.less create mode 100644 src/app/routes/partner/ad/services/scrollimg.service.ts delete mode 100644 src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html delete mode 100644 src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts delete mode 100644 src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts diff --git a/src/app/routes/partner/ad/components/add/add.component.html b/src/app/routes/partner/ad/components/add/add.component.html new file mode 100644 index 00000000..f6a39e94 --- /dev/null +++ b/src/app/routes/partner/ad/components/add/add.component.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/routes/partner/ad/components/add/add.component.spec.ts b/src/app/routes/partner/ad/components/add/add.component.spec.ts new file mode 100644 index 00000000..80b44d19 --- /dev/null +++ b/src/app/routes/partner/ad/components/add/add.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { AdComponentsAddComponent } from './add.component'; + +describe('AdComponentsAddComponent', () => { + let component: AdComponentsAddComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AdComponentsAddComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AdComponentsAddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/partner/ad/components/add/add.component.ts b/src/app/routes/partner/ad/components/add/add.component.ts new file mode 100644 index 00000000..f719a83a --- /dev/null +++ b/src/app/routes/partner/ad/components/add/add.component.ts @@ -0,0 +1,309 @@ +import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; +import { ModalHelper, _HttpClient } from '@delon/theme'; +import { EAEnvironmentService } from '@shared'; +import differenceInCalendarDays from 'date-fns/differenceInCalendarDays'; +import format from 'date-fns/format'; +import { NzMessageService } from 'ng-zorro-antd/message'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import { Observable, Observer, of } from 'rxjs'; +import { ScrollImgService } from '../../services/scrollimg.service'; +import { apiConf } from '@conf/api.conf'; + +@Component({ + selector: 'app-ad-components-add', + templateUrl: './add.component.html', + styleUrls: ['./add.less'] +}) +export class ScrollimgComponentsAddComponent implements OnInit { + @ViewChild('sf', { static: false }) sf!: SFComponent; + record: any = {}; + i: any; + schema: SFSchema = {}; + contentListData = []; + queryParams: any = {}; + oldTakeEffectTime = ''; + maxSort = 0; + isVisible = false; + validFalg = true; + detailData: any = { + advertisementContentDTOList: [] + }; + changeTimeFlag = false; + currentIndex = 0; + addFlag = true; + addId = 1; + inputPoint: any = { + lng: 0, + lat: 0 + }; + today = new Date(); + navData: any = []; + navigationName = ''; + ui: SFUISchema = { + '*': { + spanLabelFixed: 200, + grid: { span: 24 }, + }, + }; + constructor( + public msgSrv: NzMessageService, + public http: _HttpClient, + public service: ScrollImgService, + private route: ActivatedRoute, + private router: Router, + private modal: ModalHelper, + private modalSrv: NzModalService, + private cdr: ChangeDetectorRef, + private envSrv: EAEnvironmentService, + ) { } + + + ngOnInit(): void { + this.queryParams = this.route.snapshot.queryParams; + if (this.queryParams.type !== 'add') { + this.initDetailData(); + } + this.initSF(); + } + initDetailData() { + + } + initSF() { + this.schema = { + properties: { + name: { + type: 'string', + title: '轮播图名称', + maxLength: 10, + ui: { + showRequired: true, + placeholder: '请不要超过10个字', + } + }, + style: { + type: 'string', + title: '轮播图', + ui: { + showRequired: true, + widget: 'custom', + placeholder: '请选择轮播图', + } + }, + licensePhotoWatermark: { + type: 'string', + title: '轮播图', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过4M', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.enterpriseBaseDTO.licensePhoto = args.file.response.data.fullFilePath + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt4M = file.size / 1024 / 1024 < 4; + if (!isLt4M) { + this.service.msgSrv.warning('图片大小超过4M!'); + observer.complete(); + return; + } + observer.next(isLt4M); + observer.complete(); + }); + }, + previewFile: (file: NzUploadFile) => of(file.url), + }, + }, + takeEffectType: { + type: 'string', + title: '生效类型', + ui: { + showRequired: true, + widget: 'custom', + }, + default: 1 + }, + mainTitle: { + type: 'string', + title: '主标题', + maxLength: 20, + ui: { + visibleIf: { style: [1, 2, 3, 4, 5] }, + placeholder: '请输入主标题,不超过20个字', + change: (id: any) => { + this.validFalg = !this.sf?.valid; + } + } + }, + withTitle: { + type: 'string', + title: '副标题', + maxLength: 20, + ui: { + visibleIf: { style: [1, 2, 3, 4, 5] }, + placeholder: '请输入主标题,不超过20个字', + } + }, + sortId: { + type: 'string', + title: '显示顺序', + ui: { + showRequired: true, + widget: 'select', + serverSearch: true, + } as SFSelectWidgetSchema, + enum: [ + { label: 1, value: '1' }, + { label: 2, value: '2' }, + { label: 3, value: '3' }, + { label: 4, value: '4' }, + { label: 5, value: '5' }, + { label: 6, value: '6' }, + { label: 7, value: '7' }, + { label: 8, value: '8' }, + { label: 9, value: '9' }, + { label: 10, value: '10' }, + ] + }, + cooperationHotline: { + type: 'string', + title: '合作热线', + maxLength: 13, + ui: { + showRequired: true, + placeholder: '请输入电话号码', + visibleIf: { style: [6] }, + validator: val => { + const reg = /((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)/g; + let isValid: any; + isValid = reg.test(val); + if (!isValid) { + return [{ keyword: 'required', message: '格式不正确' }]; + } + return []; + }, + }, + }, + companyAddress: { + type: 'string', + title: '公司选址', + ui: { + widget: 'custom', + showRequired: true, + visibleIf: { style: [6] }, + }, + }, + advertisementContentDTOList: { + type: 'string', + title: '内容设置', + ui: { + widget: 'custom', + showRequired: true, + visibleIf: { style: [1, 2, 3, 4, 5] }, + }, + } + }, + required: ['name', 'navigationId', 'style', 'takeEffectType', 'cooperationHotline', 'companyAddress', 'advertisementContentDTOList'], + }; + if (this.queryParams.type === 'add'){ + setTimeout(() => { + this.sf.setValue('/takeEffectType', 1); + this.sf.setValue('/style', 1); + }, 500); + } + } + get reqParams() { + return {}; + } + disabledDate = (current: Date): boolean => { + // Can not select days before today and today + return differenceInCalendarDays(current, this.today) < 0; + } + changeTime(){ + this.changeTimeFlag = true; + } + + + checkSort(){ + const params: any = { + navigationId: this.sf?.value.navigationId, + sortId: this.sf?.value.sortId, + takeEffectType: this.sf?.value.takeEffectType, + }; + if (this.queryParams.id !== '0'){ + params.advertisementId = this.queryParams.id; + } + if (this.sf.value.takeEffectType === 2){ + if (this.changeTimeFlag) { + params.takeEffectTime = format(this.detailData.takeEffectTime, 'yyyy-MM-dd HH:mm'); + } else { + params.takeEffectTime = this.detailData.takeEffectTime; + } + } + + } + save() { + const params: any = { + ...this.sf?.value, + latitude: this.inputPoint.lat, + longitude: this.inputPoint.lng, + id: this.queryParams.id + }; + this.detailData.advertisementContentDTOList.forEach((item: any) => { + delete item.addId; + }); + if (this.queryParams.type === 'add') { + delete params.id; + } + if (this.sf.value.takeEffectType === 2){ + if (this.changeTimeFlag) { + params.takeEffectTime = format(this.detailData.takeEffectTime, 'yyyy-MM-dd HH:mm'); + } else { + params.takeEffectTime = this.detailData.takeEffectTime; + } + } else { + delete params.takeEffectTime; + } + this.service.request(this.service.$api_add_one, params).subscribe(res => { + if (res) { + this.service.msgSrv.success('保存成功'); + this.router.navigate(['../list'], {relativeTo: this.route}); + } + }); + } + + goBack() { + window.history.go(-1); + } + gotoMap() { + this.isVisible = true; + } + + handleOk(): void { + this.isVisible = false; + } + + handleCancel(): void { + this.isVisible = false; + } + outputPointAddress(data: any){ + this.sf.setValue('/companyAddress', data.address); + this.inputPoint = data.inputPoint; + } +} diff --git a/src/app/routes/partner/ad/components/add/add.less b/src/app/routes/partner/ad/components/add/add.less new file mode 100644 index 00000000..0a6adacb --- /dev/null +++ b/src/app/routes/partner/ad/components/add/add.less @@ -0,0 +1,119 @@ +:host { + .styleBox { + display: flex; + align-items: flex-end; + margin: 10px 0 0 0; + } + .imgBox { + position: relative; + width: 200px; + padding: 6px 0; + text-align: center; + border: solid 1px #eee; + .leftBox, + .rightBox { + position: absolute; + top: 50%; + transform: translate(0, -50%); + } + img { + width: 170px; + height: 40px; + } + .leftBox { + left: 3px; + } + .rightBox { + right: 3px; + } + } + .imgBox_two { + width: 200px; + padding: 6px; + text-align: center; + border: solid 1px #eee; + img { + width: 100%; + height: 40px; + } + } + .imgBox_three { + width: 200px; + padding: 6px 0; + text-align: center; + border: solid 1px #eee; + img { + width: 25%; + height: 40px; + margin: 0 6% 0 0; + &:first-child { + margin: 0 6%; + } + } + } + .imgBox_four { + width: 200px; + padding: 6px 0; + text-align: center; + border: solid 1px #eee; + img { + width: 22%; + height: 40px; + margin: 0 2% 0 0; + &:first-child { + margin: 0 2%; + } + } + } + .imgBox_one { + width: 60px; + padding: 6px; + text-align: center; + border: solid 1px #eee; + img { + width: 100%; + height: 40px; + } + } + .imgBox_info { + width: 200px; + padding: 6px; + overflow: hidden; + border: solid 1px #eee; + .title { + width: 100%; + line-height: 30px; + text-align: center; + } + .infoBox { + .name { + line-height: 28px; + } + .map { + width: 100%; + text-align: center; + img { + width: 90%; + } + } + } + } + .hint { + margin: 0 0 0 10px; + color: #f00; + } + .addBtn { + margin: 0 0 10px 0; + } + } + .overflowText { + display: -webkit-box; + max-width: 200px; + overflow: hidden; + text-align: left; + text-overflow: -o-ellipsis-lastline; + text-overflow: ellipsis; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; + } \ No newline at end of file diff --git a/src/app/routes/partner/ad/components/list/list.component.html b/src/app/routes/partner/ad/components/list/list.component.html new file mode 100644 index 00000000..caedd311 --- /dev/null +++ b/src/app/routes/partner/ad/components/list/list.component.html @@ -0,0 +1,62 @@ + + + + +
+ +
+ +
+ + + +
+ +
+
+ + + +
+
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + + +
diff --git a/src/app/routes/partner/ad/components/list/list.component.less b/src/app/routes/partner/ad/components/list/list.component.less new file mode 100644 index 00000000..0aae2779 --- /dev/null +++ b/src/app/routes/partner/ad/components/list/list.component.less @@ -0,0 +1 @@ +@import '~@delon/theme/index'; diff --git a/src/app/routes/partner/ad/components/list/list.component.spec.ts b/src/app/routes/partner/ad/components/list/list.component.spec.ts new file mode 100644 index 00000000..c8ac7672 --- /dev/null +++ b/src/app/routes/partner/ad/components/list/list.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { AdComponentsListComponent } from './list.component'; + +describe('AdComponentsListComponent', () => { + let component: AdComponentsListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AdComponentsListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AdComponentsListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/partner/ad/components/list/list.component.ts b/src/app/routes/partner/ad/components/list/list.component.ts new file mode 100644 index 00000000..a1c34480 --- /dev/null +++ b/src/app/routes/partner/ad/components/list/list.component.ts @@ -0,0 +1,281 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { STColumn, STComponent, STData } from '@delon/abc/st'; +import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; +import { ModalHelper } from '@delon/theme'; +import { NzMessageService } from 'ng-zorro-antd/message'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { ScrollImgService } from '../../services/scrollimg.service'; + +@Component({ + selector: 'app-scrollimg-components-list', + templateUrl: './list.component.html', + styleUrls: ['./list.component.less'] +}) + +export class ScrollImgComponentsListComponent implements OnInit { + schema: SFSchema = {}; + columns: STColumn[] = []; + ui: SFUISchema = {}; + appList: any[] = []; + _$expand = false; + selectApp = { + appName: '', + appId: '' + }; + + @ViewChild('st', { static: false }) st!: STComponent; + @ViewChild('sf', { static: false }) sf!: SFComponent; + constructor(public service: ScrollImgService, private modal: ModalHelper, private msg: NzMessageService, private router: Router, private modalSrv: NzModalService, private ar: ActivatedRoute) { } + + /** + * 查询字段个数 + */ + get queryFieldCount(): number { + return Object.keys(this.schema?.properties || {}).length; + } + + /** + * 查询参数 + */ + get reqParams() { + const params = Object.assign({}, this.sf?.value || {}); + delete params._$expand; + if (params.status === '') { + delete params.status; + } + if (params.style === '') { + delete params.style; + } + if (params.navigationId === '') { + delete params.navigationId; + } + return { ...params}; + } + + /** + * 选中行 + */ + get selectedRows() { + return this.st?.list.filter((item) => item.checked) || []; + } + ngOnInit() { + this.initSF(); + this.initST(); + } + selectAppFun(item: any) { + this.selectApp = item; + this.st.load(1); + } + dataProcess(data: STData[]): STData[] { + return data.map((i, index) => { + i.showSortFlag = false; + return i; + }); + } + initSF() { + this.schema = { + properties: { + _$expand: { + type: 'boolean', + ui: { + hidden: true, + }, + }, + name: { + type: 'string', + title: '轮播图名称', + maxLength: 10, + ui: { + widget: '', + placeholder: '请输入', + } + }, + status1: { + type: 'string', + title: '可见范围', + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + } as SFSelectWidgetSchema, + enum: [ + { label: '全部', value: 1 }, + { label: '全部可见', value: 2 }, + { label: '渠道销售可见', value: 3 }, + { label: '合伙人可见', value: 4 }, + ] + }, + status: { + type: 'string', + title: '状态', + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + } as SFSelectWidgetSchema, + enum: [ + { label: '全部', value: 1 }, + { label: '正常', value: 2 }, + { label: '禁用', value: 3 } + ] + }, + }, + }; + this.ui = { + '*': { + spanLabelFixed: 110, + grid: { span: 8 }, + }, + }; + } + + initST() { + this.columns = [ + { + title: '轮播图名称', // 位:px + index: 'name', + className: 'text-center' + }, + { + title: '轮播图', + index: 'navigationName', + className: 'text-center' + }, + { + title: '可见范围', + index: 'navigationName', + className: 'text-center' + }, + { + title: '排序', // 位 px + index: 'sortId', + className: 'text-center' + }, + { + title: '状态', // 位 px + index: 'style', + className: 'text-center', + type: 'enum', + enum: { + 1: '正常', + 2: '禁用', + } + }, + { + title: '最后修改时间', // 位 px + index: 'createTime', + className: 'text-center' + }, + { + title: '操作', + fixed: 'right', + className: 'text-center', + width: 280, + buttons: [ + { + text: '修改', + click: (item) => { + this.router.navigate(['../detail'], { queryParams: { id: item.id, type: 'edit' }, relativeTo: this.ar }); + } + }, + { + text: '禁用', + pop: { + title: `是否确认禁用?`, + okType: 'danger', + icon: 'alert', + }, + click: (item) => { + this.changeStatus(item.id); + }, + iif: (item) => item.status === 1 + }, + { + text: '启用', + pop: { + title: `是否确认启用?`, + okType: 'danger', + icon: 'alert', + }, + click: (item) => { + this.changeStatus(item); + }, + iif: (item) => item.status === 2 + }, + { + text: '查看', + click: (item) => { + this.router.navigate(['../view'], { queryParams: { id: item.id, type: 'view' }, relativeTo: this.ar }); + } + }, + { + text: '删除', + pop: { + title: `确定删除吗?`, + okType: 'danger', + icon: 'alert', + }, + click: (item) => { + this.del(item); + }, + iif: (item) => item.status === 2 + }, + { + text: '操作记录', + click: (item) => { + this.router.navigate(['../operatordata'], { queryParams: { id: item.id }, relativeTo: this.ar }); + } + }, + ], + }, + ]; + } + changeStatus(item: any) { + const params = { + status, + idList: [item.id] + }; + // this.service.request(this.service.$api_openOrClose, params).subscribe(res => { + // if (res) { + // this.st.reload(); + // } + // }); + } + /** + * 伸缩查询条件 + */ + expandToggle() { + this._$expand = !this._$expand; + this.sf?.setValue('/_$expand', this._$expand); + } + + /** + * 重置表单 + */ + resetSF() { + this.sf.reset(); + this._$expand = false; + } + + /** + * 新增单个实例 + */ + add() { + this.router.navigate(['../detail'], { queryParams: { id: 0, type: 'add' }, relativeTo: this.ar }); + } + + /** + * 删除单个实例 + */ + del(item: any) { + const ids = []; + ids.push(item.id); + this.service.request(this.service.$api_del_many, ids).subscribe(res => { + if (res) { + this.service.msgSrv.success('删除成功'); + this.st.reload(); + } + }); + } +} diff --git a/src/app/routes/partner/ad/components/list/list.less b/src/app/routes/partner/ad/components/list/list.less new file mode 100644 index 00000000..d9b6c73f --- /dev/null +++ b/src/app/routes/partner/ad/components/list/list.less @@ -0,0 +1,9 @@ +.selectApp { + display: flex; + .appTitle { + font-size: 14px; + } + } + .redfont{ + color: #f00; + } \ No newline at end of file diff --git a/src/app/routes/partner/ad/services/scrollimg.service.ts b/src/app/routes/partner/ad/services/scrollimg.service.ts new file mode 100644 index 00000000..0af4095c --- /dev/null +++ b/src/app/routes/partner/ad/services/scrollimg.service.ts @@ -0,0 +1,12 @@ +import { Injectable, Injector } from '@angular/core'; +import { BaseService } from '@shared'; + +@Injectable({ + providedIn: 'root', +}) +export class ScrollImgService extends BaseService { + + constructor(public injector: Injector) { + super(injector); + } +} diff --git a/src/app/routes/partner/partner-routing.module.ts b/src/app/routes/partner/partner-routing.module.ts index 1e743f92..c4eca158 100644 --- a/src/app/routes/partner/partner-routing.module.ts +++ b/src/app/routes/partner/partner-routing.module.ts @@ -38,7 +38,7 @@ import { AddPersonalPartnerComponent } from './partner-list/components/add-perso import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component'; import { PartnerListComponent } from './partner-list/components/index/partner-list.component'; import { ParterRebateManageMentAddComponent } from './rebate-management/components/rebate-setting/add/add.component'; -import { PartnerScrollimglistComponent } from './scroll-img/scrollimglist/scrollimglist.component'; +import { ScrollImgComponentsListComponent } from './ad/components/list/list.component'; const routes: Routes = [ { @@ -129,7 +129,16 @@ const routes: Routes = [ { path: 'record/detail/:id', component: PartnerRecordedDetailComponent } ] }, - { path: 'scrollimglist', component: PartnerScrollimglistComponent }]; + { + path: 'scroll-img', + children: [ + { path: '', component: ScrollImgComponentsListComponent }, + { path: 'list', component: ScrollImgComponentsListComponent }, + { path: 'channel-detail', component: ParterClaimAuditListChannelDetailComponent }, + { path: 'partner-detail', component: ParterClaimAuditListPartnerDetailComponent } + ] + }, +]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] diff --git a/src/app/routes/partner/partner.module.ts b/src/app/routes/partner/partner.module.ts index 3adfcb58..e44dd6dd 100644 --- a/src/app/routes/partner/partner.module.ts +++ b/src/app/routes/partner/partner.module.ts @@ -50,7 +50,8 @@ import { ParterRebateManageMenAbnormalFeedbackComponent } from './rebate-managem import { PartnerRecordedDetailComponent } from './recorded/components/detail/detail.component'; import { PartnerRecordedRecordComponent } from './recorded/components/record/record.component'; import { ParterRebateManageMentAddComponent } from './rebate-management/components/rebate-setting/add/add.component'; -import { PartnerScrollimglistComponent } from './scroll-img/scrollimglist/scrollimglist.component'; +import { ScrollImgComponentsListComponent } from './ad/components/list/list.component'; +import { ScrollimgComponentsAddComponent } from './ad/components/add/add.component'; const COMPONENTS: any[] = [ PartnerBusinessStatisticsIndexComponent, @@ -91,7 +92,8 @@ const COMPONENTS: any[] = [ ParterRebateManageMentAddComponent, AddEtpPartnerComponent, AddPersonalPartnerComponent, - PartnerScrollimglistComponent + ScrollImgComponentsListComponent, + ScrollimgComponentsAddComponent ]; @NgModule({ diff --git a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html deleted file mode 100644 index 482ccb06..00000000 --- a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts deleted file mode 100644 index 78d0192b..00000000 --- a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; -import { PartnerScrollimglistComponent } from './scrollimglist.component'; - -describe('PartnerScrollimglistComponent', () => { - let component: PartnerScrollimglistComponent; - let fixture: ComponentFixture; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [ PartnerScrollimglistComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(PartnerScrollimglistComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts b/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts deleted file mode 100644 index 3cd34b22..00000000 --- a/src/app/routes/partner/scroll-img/scrollimglist/scrollimglist.component.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { STColumn, STComponent } from '@delon/abc/st'; -import { SFSchema } from '@delon/form'; -import { ModalHelper, _HttpClient } from '@delon/theme'; - -@Component({ - selector: 'app-partner-scrollimglist', - templateUrl: './scrollimglist.component.html', -}) -export class PartnerScrollimglistComponent implements OnInit { - url = `/user`; - searchSchema: SFSchema = { - properties: { - no: { - type: 'string', - title: '编号' - } - } - }; - @ViewChild('st') private readonly st!: STComponent; - columns: STColumn[] = [ - { title: '编号', index: 'no' }, - { title: '调用次数', type: 'number', index: 'callNo' }, - { title: '头像', type: 'img', width: '50px', index: 'avatar' }, - { title: '时间', type: 'date', index: 'updatedAt' }, - { - title: '', - buttons: [ - // { text: '查看', click: (item: any) => `/form/${item.id}` }, - // { text: '编辑', type: 'static', component: FormEditComponent, click: 'reload' }, - ] - } - ]; - - constructor(private http: _HttpClient, private modal: ModalHelper) { } - - ngOnInit(): void { } - - add(): void { - // this.modal - // .createStatic(FormEditComponent, { i: { id: 0 } }) - // .subscribe(() => this.st.reload()); - } - -} diff --git a/src/assets/mocks/menu-data.json b/src/assets/mocks/menu-data.json index 2bcf0d4b..1bf2380e 100644 --- a/src/assets/mocks/menu-data.json +++ b/src/assets/mocks/menu-data.json @@ -596,8 +596,7 @@ }, { "text": "轮播图管理", - "link": "/partner/scroll-img/list", - "hide": true + "link": "/partner/scroll-img/list" }, { "text": "知识库管理", From 97a3aca60c3574665e61623c2b50e88e4fba55ac Mon Sep 17 00:00:00 2001 From: Lingzi Date: Mon, 14 Mar 2022 18:18:23 +0800 Subject: [PATCH 3/6] fix bug --- .../banner/components/add/add.component.html | 24 ++ .../components/add/add.component.spec.ts | 24 ++ .../banner}/components/add/add.component.ts | 132 +++------- .../banner}/components/add/add.less | 0 .../components/list/list.component.html | 62 +++++ .../components/list/list.component.less | 0 .../components/list/list.component.spec.ts | 24 ++ .../banner/components/list/list.component.ts | 237 +++++++++++++++++ .../banner}/components/list/list.less | 0 .../banner/services/banner.service.ts | 12 + .../routes/partner/partner-routing.module.ts | 21 +- src/app/routes/partner/partner.module.ts | 10 +- .../components/add/add.component.html | 0 .../components/add/add.component.spec.ts | 0 .../scrollimg/components/add/add.component.ts | 243 ++++++++++++++++++ .../partner/scrollimg/components/add/add.less | 119 +++++++++ .../components/list/list.component.html | 4 +- .../components/list/list.component.less | 1 + .../components/list/list.component.spec.ts | 0 .../components/list/list.component.ts | 0 .../scrollimg/components/list/list.less | 9 + .../services/scrollimg.service.ts | 0 .../components/freight/list/list.component.ts | 66 ++++- src/assets/mocks/menu-data.json | 6 +- 24 files changed, 882 insertions(+), 112 deletions(-) create mode 100644 src/app/routes/partner/knowledge/banner/components/add/add.component.html create mode 100644 src/app/routes/partner/knowledge/banner/components/add/add.component.spec.ts rename src/app/routes/partner/{ad => knowledge/banner}/components/add/add.component.ts (63%) rename src/app/routes/partner/{ad => knowledge/banner}/components/add/add.less (100%) create mode 100644 src/app/routes/partner/knowledge/banner/components/list/list.component.html rename src/app/routes/partner/{ad => knowledge/banner}/components/list/list.component.less (100%) create mode 100644 src/app/routes/partner/knowledge/banner/components/list/list.component.spec.ts create mode 100644 src/app/routes/partner/knowledge/banner/components/list/list.component.ts rename src/app/routes/partner/{ad => knowledge/banner}/components/list/list.less (100%) create mode 100644 src/app/routes/partner/knowledge/banner/services/banner.service.ts rename src/app/routes/partner/{ad => scrollimg}/components/add/add.component.html (100%) rename src/app/routes/partner/{ad => scrollimg}/components/add/add.component.spec.ts (100%) create mode 100644 src/app/routes/partner/scrollimg/components/add/add.component.ts create mode 100644 src/app/routes/partner/scrollimg/components/add/add.less rename src/app/routes/partner/{ad => scrollimg}/components/list/list.component.html (94%) create mode 100644 src/app/routes/partner/scrollimg/components/list/list.component.less rename src/app/routes/partner/{ad => scrollimg}/components/list/list.component.spec.ts (100%) rename src/app/routes/partner/{ad => scrollimg}/components/list/list.component.ts (100%) create mode 100644 src/app/routes/partner/scrollimg/components/list/list.less rename src/app/routes/partner/{ad => scrollimg}/services/scrollimg.service.ts (100%) diff --git a/src/app/routes/partner/knowledge/banner/components/add/add.component.html b/src/app/routes/partner/knowledge/banner/components/add/add.component.html new file mode 100644 index 00000000..6760c1a0 --- /dev/null +++ b/src/app/routes/partner/knowledge/banner/components/add/add.component.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/routes/partner/knowledge/banner/components/add/add.component.spec.ts b/src/app/routes/partner/knowledge/banner/components/add/add.component.spec.ts new file mode 100644 index 00000000..64562645 --- /dev/null +++ b/src/app/routes/partner/knowledge/banner/components/add/add.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { BannerComponentsAddComponent } from './add.component'; + +describe('BannerComponentsAddComponent', () => { + let component: BannerComponentsAddComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BannerComponentsAddComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BannerComponentsAddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/partner/ad/components/add/add.component.ts b/src/app/routes/partner/knowledge/banner/components/add/add.component.ts similarity index 63% rename from src/app/routes/partner/ad/components/add/add.component.ts rename to src/app/routes/partner/knowledge/banner/components/add/add.component.ts index f719a83a..132e6bb2 100644 --- a/src/app/routes/partner/ad/components/add/add.component.ts +++ b/src/app/routes/partner/knowledge/banner/components/add/add.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; +import { SFComponent, SFRadioWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; import { ModalHelper, _HttpClient } from '@delon/theme'; import { EAEnvironmentService } from '@shared'; import differenceInCalendarDays from 'date-fns/differenceInCalendarDays'; @@ -9,7 +9,7 @@ import { NzMessageService } from 'ng-zorro-antd/message'; import { NzModalService } from 'ng-zorro-antd/modal'; import { NzUploadFile } from 'ng-zorro-antd/upload'; import { Observable, Observer, of } from 'rxjs'; -import { ScrollImgService } from '../../services/scrollimg.service'; +import { BannerService } from '../../services/banner.service'; import { apiConf } from '@conf/api.conf'; @Component({ @@ -17,7 +17,7 @@ import { apiConf } from '@conf/api.conf'; templateUrl: './add.component.html', styleUrls: ['./add.less'] }) -export class ScrollimgComponentsAddComponent implements OnInit { +export class BannerComponentsAddComponent implements OnInit { @ViewChild('sf', { static: false }) sf!: SFComponent; record: any = {}; i: any; @@ -51,11 +51,9 @@ export class ScrollimgComponentsAddComponent implements OnInit { constructor( public msgSrv: NzMessageService, public http: _HttpClient, - public service: ScrollImgService, + public service: BannerService, private route: ActivatedRoute, private router: Router, - private modal: ModalHelper, - private modalSrv: NzModalService, private cdr: ChangeDetectorRef, private envSrv: EAEnvironmentService, ) { } @@ -76,25 +74,16 @@ export class ScrollimgComponentsAddComponent implements OnInit { properties: { name: { type: 'string', - title: '轮播图名称', + title: 'banner名称', maxLength: 10, ui: { showRequired: true, placeholder: '请不要超过10个字', } }, - style: { - type: 'string', - title: '轮播图', - ui: { - showRequired: true, - widget: 'custom', - placeholder: '请选择轮播图', - } - }, licensePhotoWatermark: { type: 'string', - title: '轮播图', + title: 'banner图', ui: { action: apiConf.fileUpload, accept: 'image/png,image/jpeg,image/jpg,image/gif', @@ -103,7 +92,7 @@ export class ScrollimgComponentsAddComponent implements OnInit { resReName: 'data.fullFileWatermarkPath', urlReName: 'data.fullFileWatermarkPath', widget: 'upload', - descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过4M', + descriptionI18n: '支持JPG、PNG格式,文件小于2M(建议尺寸 700px * 286px)。', data: { appId: this.envSrv.env.appId, }, @@ -117,9 +106,9 @@ export class ScrollimgComponentsAddComponent implements OnInit { }, beforeUpload: (file: any, _fileList: any) => { return new Observable((observer: Observer) => { - const isLt4M = file.size / 1024 / 1024 < 4; + const isLt4M = file.size / 1024 / 1024 < 2; if (!isLt4M) { - this.service.msgSrv.warning('图片大小超过4M!'); + this.service.msgSrv.warning('图片大小超过2M!'); observer.complete(); return; } @@ -130,96 +119,43 @@ export class ScrollimgComponentsAddComponent implements OnInit { previewFile: (file: NzUploadFile) => of(file.url), }, }, - takeEffectType: { - type: 'string', - title: '生效类型', - ui: { - showRequired: true, - widget: 'custom', - }, - default: 1 - }, - mainTitle: { - type: 'string', - title: '主标题', - maxLength: 20, - ui: { - visibleIf: { style: [1, 2, 3, 4, 5] }, - placeholder: '请输入主标题,不超过20个字', - change: (id: any) => { - this.validFalg = !this.sf?.valid; - } - } - }, - withTitle: { - type: 'string', - title: '副标题', - maxLength: 20, - ui: { - visibleIf: { style: [1, 2, 3, 4, 5] }, - placeholder: '请输入主标题,不超过20个字', - } - }, sortId: { type: 'string', - title: '显示顺序', + title: '顺序', ui: { showRequired: true, - widget: 'select', + widget: '=', + placeholder: '请输入0~99,数字越大,排序越靠前', serverSearch: true, } as SFSelectWidgetSchema, + }, + linkType: { + type: 'string', + title: '跳转路径', + ui: { + widget: 'radio', + showRequired: true, + } as SFRadioWidgetSchema, enum: [ - { label: 1, value: '1' }, - { label: 2, value: '2' }, - { label: 3, value: '3' }, - { label: 4, value: '4' }, - { label: 5, value: '5' }, - { label: 6, value: '6' }, - { label: 7, value: '7' }, - { label: 8, value: '8' }, - { label: 9, value: '9' }, - { label: 10, value: '10' }, - ] + { label: '文章ID', value: 1 }, + { label: '分类ID', value: 2 }, + { label: '自编辑', value: 3 }, + ], }, - cooperationHotline: { + content: { type: 'string', - title: '合作热线', - maxLength: 13, + title: '内容', ui: { - showRequired: true, - placeholder: '请输入电话号码', - visibleIf: { style: [6] }, - validator: val => { - const reg = /((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)/g; - let isValid: any; - isValid = reg.test(val); - if (!isValid) { - return [{ keyword: 'required', message: '格式不正确' }]; - } - return []; + widget: 'tinymce', + loadingTip: 'loading...', + config: { + height: 450 }, + visibleIf: { name5: (value: string) => value === '1' } }, }, - companyAddress: { - type: 'string', - title: '公司选址', - ui: { - widget: 'custom', - showRequired: true, - visibleIf: { style: [6] }, - }, - }, - advertisementContentDTOList: { - type: 'string', - title: '内容设置', - ui: { - widget: 'custom', - showRequired: true, - visibleIf: { style: [1, 2, 3, 4, 5] }, - }, - } }, - required: ['name', 'navigationId', 'style', 'takeEffectType', 'cooperationHotline', 'companyAddress', 'advertisementContentDTOList'], + required: [], }; if (this.queryParams.type === 'add'){ setTimeout(() => { @@ -302,8 +238,4 @@ export class ScrollimgComponentsAddComponent implements OnInit { handleCancel(): void { this.isVisible = false; } - outputPointAddress(data: any){ - this.sf.setValue('/companyAddress', data.address); - this.inputPoint = data.inputPoint; - } } diff --git a/src/app/routes/partner/ad/components/add/add.less b/src/app/routes/partner/knowledge/banner/components/add/add.less similarity index 100% rename from src/app/routes/partner/ad/components/add/add.less rename to src/app/routes/partner/knowledge/banner/components/add/add.less diff --git a/src/app/routes/partner/knowledge/banner/components/list/list.component.html b/src/app/routes/partner/knowledge/banner/components/list/list.component.html new file mode 100644 index 00000000..c8ac5ec4 --- /dev/null +++ b/src/app/routes/partner/knowledge/banner/components/list/list.component.html @@ -0,0 +1,62 @@ + + + + +
+ +
+ +
+ + + +
+ +
+
+ + + +
+
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + + +
diff --git a/src/app/routes/partner/ad/components/list/list.component.less b/src/app/routes/partner/knowledge/banner/components/list/list.component.less similarity index 100% rename from src/app/routes/partner/ad/components/list/list.component.less rename to src/app/routes/partner/knowledge/banner/components/list/list.component.less diff --git a/src/app/routes/partner/knowledge/banner/components/list/list.component.spec.ts b/src/app/routes/partner/knowledge/banner/components/list/list.component.spec.ts new file mode 100644 index 00000000..3bd8060c --- /dev/null +++ b/src/app/routes/partner/knowledge/banner/components/list/list.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { BannerComponentsListComponent } from './list.component'; + +describe('BannerComponentsListComponent', () => { + let component: BannerComponentsListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BannerComponentsListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BannerComponentsListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/partner/knowledge/banner/components/list/list.component.ts b/src/app/routes/partner/knowledge/banner/components/list/list.component.ts new file mode 100644 index 00000000..e1b86f66 --- /dev/null +++ b/src/app/routes/partner/knowledge/banner/components/list/list.component.ts @@ -0,0 +1,237 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { STColumn, STComponent, STData } from '@delon/abc/st'; +import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; +import { ModalHelper } from '@delon/theme'; +import { NzMessageService } from 'ng-zorro-antd/message'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { BannerService } from '../../services/banner.service'; + +@Component({ + selector: 'app-banner-components-list', + templateUrl: './list.component.html', + styleUrls: ['./list.component.less'] +}) + +export class BannerComponentsListComponent implements OnInit { + schema: SFSchema = {}; + columns: STColumn[] = []; + ui: SFUISchema = {}; + appList: any[] = []; + _$expand = false; + selectApp = { + appName: '', + appId: '' + }; + + @ViewChild('st', { static: false }) st!: STComponent; + @ViewChild('sf', { static: false }) sf!: SFComponent; + constructor(public service: BannerService, private modal: ModalHelper, private msg: NzMessageService, private router: Router, private modalSrv: NzModalService, private ar: ActivatedRoute) { } + + /** + * 查询字段个数 + */ + get queryFieldCount(): number { + return Object.keys(this.schema?.properties || {}).length; + } + + /** + * 查询参数 + */ + get reqParams() { + const params = Object.assign({}, this.sf?.value || {}); + delete params._$expand; + if (params.status === '') { + delete params.status; + } + if (params.style === '') { + delete params.style; + } + if (params.navigationId === '') { + delete params.navigationId; + } + return { ...params}; + } + + /** + * 选中行 + */ + get selectedRows() { + return this.st?.list.filter((item) => item.checked) || []; + } + ngOnInit() { + this.initSF(); + this.initST(); + } + selectAppFun(item: any) { + this.selectApp = item; + this.st.load(1); + } + dataProcess(data: STData[]): STData[] { + return data.map((i, index) => { + i.showSortFlag = false; + return i; + }); + } + initSF() { + this.schema = { + properties: { + _$expand: { + type: 'boolean', + ui: { + hidden: true, + }, + }, + name: { + type: 'string', + title: 'banner名称', + maxLength: 10, + ui: { + widget: '', + placeholder: '请输入', + } + }, + status: { + type: 'string', + title: '状态', + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + } as SFSelectWidgetSchema, + enum: [ + { label: '全部', value: 1 }, + { label: '正常', value: 2 }, + { label: '禁用', value: 3 } + ] + }, + }, + }; + this.ui = { + '*': { + spanLabelFixed: 110, + grid: { span: 8 }, + }, + }; + } + + initST() { + this.columns = [ + { + title: 'banner名称', // 位:px + index: 'name', + className: 'text-center' + }, + { + title: 'banner', + index: 'navigationName', + className: 'text-center' + }, + { + title: '排序', // 位 px + index: 'sortId', + className: 'text-center' + }, + { + title: '状态', // 位 px + index: 'style', + className: 'text-center', + type: 'enum', + enum: { + 1: '正常', + 2: '禁用', + } + }, + { + title: '最后修改时间', // 位 px + index: 'createTime', + className: 'text-center' + }, + { + title: '操作', + fixed: 'right', + className: 'text-center', + width: 280, + buttons: [ + { + text: '修改', + click: (item) => { + this.router.navigate(['../detail'], { queryParams: { id: item.id, type: 'edit' }, relativeTo: this.ar }); + } + }, + { + text: '禁用', + pop: { + title: `确定禁用此banner图吗??`, + okType: 'danger', + icon: 'alert', + }, + click: (item) => { + this.changeStatus(item.id); + }, + iif: (item) => item.status === 1 + }, + { + text: '启用', + pop: { + title: `确定启用此banner图吗?`, + okType: 'danger', + icon: 'success', + }, + click: (item) => { + this.changeStatus(item); + }, + iif: (item) => item.status === 2 + }, + ], + }, + ]; + } + changeStatus(item: any) { + const params = { + status, + idList: [item.id] + }; + // this.service.request(this.service.$api_openOrClose, params).subscribe(res => { + // if (res) { + // this.st.reload(); + // } + // }); + } + /** + * 伸缩查询条件 + */ + expandToggle() { + this._$expand = !this._$expand; + this.sf?.setValue('/_$expand', this._$expand); + } + + /** + * 重置表单 + */ + resetSF() { + this.sf.reset(); + this._$expand = false; + } + + /** + * 新增单个实例 + */ + add() { + this.router.navigate(['../banner/detail'], { queryParams: { id: 0, type: 'add' }, relativeTo: this.ar }); + } + + /** + * 删除单个实例 + */ + del(item: any) { + const ids = []; + ids.push(item.id); + this.service.request(this.service.$api_del_many, ids).subscribe(res => { + if (res) { + this.service.msgSrv.success('删除成功'); + this.st.reload(); + } + }); + } +} diff --git a/src/app/routes/partner/ad/components/list/list.less b/src/app/routes/partner/knowledge/banner/components/list/list.less similarity index 100% rename from src/app/routes/partner/ad/components/list/list.less rename to src/app/routes/partner/knowledge/banner/components/list/list.less diff --git a/src/app/routes/partner/knowledge/banner/services/banner.service.ts b/src/app/routes/partner/knowledge/banner/services/banner.service.ts new file mode 100644 index 00000000..6710ef04 --- /dev/null +++ b/src/app/routes/partner/knowledge/banner/services/banner.service.ts @@ -0,0 +1,12 @@ +import { Injectable, Injector } from '@angular/core'; +import { BaseService } from '@shared'; + +@Injectable({ + providedIn: 'root', +}) +export class BannerService extends BaseService { + + constructor(public injector: Injector) { + super(injector); + } +} diff --git a/src/app/routes/partner/partner-routing.module.ts b/src/app/routes/partner/partner-routing.module.ts index 2c25d6d6..6f0e0cc6 100644 --- a/src/app/routes/partner/partner-routing.module.ts +++ b/src/app/routes/partner/partner-routing.module.ts @@ -38,10 +38,13 @@ import { AddPersonalPartnerComponent } from './partner-list/components/add-perso import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component'; import { PartnerListComponent } from './partner-list/components/index/partner-list.component'; import { ParterRebateManageMentAddComponent } from './rebate-management/components/rebate-setting/add/add.component'; -import { ScrollImgComponentsListComponent } from './ad/components/list/list.component'; import { PartnerKnowledgeClassificationListComponent } from './knowledge/classification/components/list/list.component'; import { ParterArticleManagementListComponent } from './article-management/components/list/list.component'; import { ParterArticleManagementEditComponent } from './article-management/components/edit/edit.component'; +import { ScrollImgComponentsListComponent } from './scrollimg/components/list/list.component'; +import { BannerComponentsListComponent } from './knowledge/banner/components/list/list.component'; +import { ScrollimgComponentsAddComponent } from './scrollimg/components/add/add.component'; +import { BannerComponentsAddComponent } from './knowledge/banner/components/add/add.component'; const routes: Routes = [ { @@ -122,6 +125,14 @@ const routes: Routes = [ { path: 'partner-detail', component: ParterClaimAuditListPartnerDetailComponent } ] }, + { + path: 'scroll-img', + children: [ + { path: '', component: ScrollImgComponentsListComponent }, + { path: 'list', component: ScrollImgComponentsListComponent }, + { path: 'detail', component: ScrollimgComponentsAddComponent }, + ] + }, { path: 'recorded', children: [ @@ -133,9 +144,11 @@ const routes: Routes = [ path: 'knowledge', children: [ { path: 'classification', component: PartnerKnowledgeClassificationListComponent }, - { path: 'article-management-list', component: ParterArticleManagementListComponent}, - { path: 'article-management-add', component: ParterArticleManagementEditComponent}, - { path: 'article-management-edit', component: ParterArticleManagementEditComponent}, + { path: 'article-management-list', component: ParterArticleManagementListComponent }, + { path: 'article-management-add', component: ParterArticleManagementEditComponent }, + { path: 'article-management-edit', component: ParterArticleManagementEditComponent }, + { path: 'banner', component: BannerComponentsListComponent}, + { path: 'banner/detail', component: BannerComponentsAddComponent }, ] }, ]; diff --git a/src/app/routes/partner/partner.module.ts b/src/app/routes/partner/partner.module.ts index aee0c691..3ce63eef 100644 --- a/src/app/routes/partner/partner.module.ts +++ b/src/app/routes/partner/partner.module.ts @@ -50,12 +50,14 @@ import { ParterRebateManageMenAbnormalFeedbackComponent } from './rebate-managem import { PartnerRecordedDetailComponent } from './recorded/components/detail/detail.component'; import { PartnerRecordedRecordComponent } from './recorded/components/record/record.component'; import { ParterRebateManageMentAddComponent } from './rebate-management/components/rebate-setting/add/add.component'; -import { ScrollImgComponentsListComponent } from './ad/components/list/list.component'; -import { ScrollimgComponentsAddComponent } from './ad/components/add/add.component'; import { ParterArticleManagementEditComponent } from './article-management/components/edit/edit.component'; import { ParterArticleManagementListComponent } from './article-management/components/list/list.component'; import { PartnerKnowledgeClassificationListComponent } from './knowledge/classification/components/list/list.component'; import { PartnerEditComponent } from './knowledge/classification/components/edit/edit.component'; +import { ScrollimgComponentsAddComponent } from './scrollimg/components/add/add.component'; +import { ScrollImgComponentsListComponent } from './scrollimg/components/list/list.component'; +import { BannerComponentsListComponent } from './knowledge/banner/components/list/list.component'; +import { BannerComponentsAddComponent } from './knowledge/banner/components/add/add.component'; const COMPONENTS: any[] = [ PartnerBusinessStatisticsIndexComponent, @@ -101,7 +103,9 @@ const COMPONENTS: any[] = [ ParterArticleManagementEditComponent, ParterArticleManagementListComponent, PartnerKnowledgeClassificationListComponent, - PartnerEditComponent + PartnerEditComponent, + BannerComponentsListComponent, + BannerComponentsAddComponent ]; @NgModule({ diff --git a/src/app/routes/partner/ad/components/add/add.component.html b/src/app/routes/partner/scrollimg/components/add/add.component.html similarity index 100% rename from src/app/routes/partner/ad/components/add/add.component.html rename to src/app/routes/partner/scrollimg/components/add/add.component.html diff --git a/src/app/routes/partner/ad/components/add/add.component.spec.ts b/src/app/routes/partner/scrollimg/components/add/add.component.spec.ts similarity index 100% rename from src/app/routes/partner/ad/components/add/add.component.spec.ts rename to src/app/routes/partner/scrollimg/components/add/add.component.spec.ts diff --git a/src/app/routes/partner/scrollimg/components/add/add.component.ts b/src/app/routes/partner/scrollimg/components/add/add.component.ts new file mode 100644 index 00000000..e8345d9e --- /dev/null +++ b/src/app/routes/partner/scrollimg/components/add/add.component.ts @@ -0,0 +1,243 @@ +import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SFComponent, SFRadioWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; +import { _HttpClient } from '@delon/theme'; +import { EAEnvironmentService } from '@shared'; +import differenceInCalendarDays from 'date-fns/differenceInCalendarDays'; +import format from 'date-fns/format'; +import { NzMessageService } from 'ng-zorro-antd/message'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import { Observable, Observer, of } from 'rxjs'; +import { apiConf } from '@conf/api.conf'; +import { ScrollImgService } from '../../services/scrollimg.service'; + +@Component({ + selector: 'app-ad-components-add', + templateUrl: './add.component.html', + styleUrls: ['./add.less'] +}) +export class ScrollimgComponentsAddComponent implements OnInit { + @ViewChild('sf', { static: false }) sf!: SFComponent; + record: any = {}; + i: any; + schema: SFSchema = {}; + contentListData = []; + queryParams: any = {}; + oldTakeEffectTime = ''; + maxSort = 0; + isVisible = false; + validFalg = true; + detailData: any = { + advertisementContentDTOList: [] + }; + changeTimeFlag = false; + currentIndex = 0; + addFlag = true; + addId = 1; + inputPoint: any = { + lng: 0, + lat: 0 + }; + today = new Date(); + navData: any = []; + navigationName = ''; + ui: SFUISchema = { + '*': { + spanLabelFixed: 200, + grid: { span: 24 }, + }, + }; + constructor( + public msgSrv: NzMessageService, + public http: _HttpClient, + public service: ScrollImgService, + private route: ActivatedRoute, + private router: Router, + private envSrv: EAEnvironmentService, + ) { } + + + ngOnInit(): void { + this.queryParams = this.route.snapshot.queryParams; + if (this.queryParams.type !== 'add') { + this.initDetailData(); + } + this.initSF(); + } + initDetailData() { + + } + initSF() { + this.schema = { + properties: { + name: { + type: 'string', + title: '轮播图名称', + maxLength: 10, + ui: { + showRequired: true, + placeholder: '请不要超过10个字', + } + }, + licensePhotoWatermark: { + type: 'string', + title: '轮播图', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '图片支持JPG、PNG格式,文件小于2M(建议尺寸 702px * 280px)', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.enterpriseBaseDTO.licensePhoto = args.file.response.data.fullFilePath + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt4M = file.size / 1024 / 1024 < 2; + if (!isLt4M) { + this.service.msgSrv.warning('图片大小超过2M!'); + observer.complete(); + return; + } + observer.next(isLt4M); + observer.complete(); + }); + }, + previewFile: (file: NzUploadFile) => of(file.url), + }, + }, + linkType: { + type: 'string', + title: '可见范围', + ui: { + widget: 'radio', + showRequired: true, + } as SFRadioWidgetSchema, + enum: [ + { label: '全部可见', value: 1 }, + { label: '合伙人可见', value: 2 }, + { label: '销售渠道可见', value: 3 }, + ], + }, + sortId: { + type: 'string', + title: '顺序', + ui: { + showRequired: true, + widget: '=', + placeholder: '请输入0~99,数字越大,排序越靠前', + serverSearch: true, + } as SFSelectWidgetSchema, + }, + content: { + type: 'string', + title: '内容', + ui: { + widget: 'tinymce', + loadingTip: 'loading...', + config: { + height: 450 + }, + visibleIf: { name5: (value: string) => value === '1' } + }, + }, + }, + required: [], + }; + if (this.queryParams.type === 'add') { + setTimeout(() => { + this.sf.setValue('/takeEffectType', 1); + this.sf.setValue('/style', 1); + }, 500); + } + } + get reqParams() { + return {}; + } + disabledDate = (current: Date): boolean => { + // Can not select days before today and today + return differenceInCalendarDays(current, this.today) < 0; + } + changeTime() { + this.changeTimeFlag = true; + } + + + checkSort() { + const params: any = { + navigationId: this.sf?.value.navigationId, + sortId: this.sf?.value.sortId, + takeEffectType: this.sf?.value.takeEffectType, + }; + if (this.queryParams.id !== '0') { + params.advertisementId = this.queryParams.id; + } + if (this.sf.value.takeEffectType === 2) { + if (this.changeTimeFlag) { + params.takeEffectTime = format(this.detailData.takeEffectTime, 'yyyy-MM-dd HH:mm'); + } else { + params.takeEffectTime = this.detailData.takeEffectTime; + } + } + + } + save() { + const params: any = { + ...this.sf?.value, + latitude: this.inputPoint.lat, + longitude: this.inputPoint.lng, + id: this.queryParams.id + }; + this.detailData.advertisementContentDTOList.forEach((item: any) => { + delete item.addId; + }); + if (this.queryParams.type === 'add') { + delete params.id; + } + if (this.sf.value.takeEffectType === 2) { + if (this.changeTimeFlag) { + params.takeEffectTime = format(this.detailData.takeEffectTime, 'yyyy-MM-dd HH:mm'); + } else { + params.takeEffectTime = this.detailData.takeEffectTime; + } + } else { + delete params.takeEffectTime; + } + this.service.request(this.service.$api_add_one, params).subscribe(res => { + if (res) { + this.service.msgSrv.success('保存成功'); + this.router.navigate(['../list'], { relativeTo: this.route }); + } + }); + } + + goBack() { + window.history.go(-1); + } + gotoMap() { + this.isVisible = true; + } + + handleOk(): void { + this.isVisible = false; + } + + handleCancel(): void { + this.isVisible = false; + } + outputPointAddress(data: any) { + this.sf.setValue('/companyAddress', data.address); + this.inputPoint = data.inputPoint; + } +} diff --git a/src/app/routes/partner/scrollimg/components/add/add.less b/src/app/routes/partner/scrollimg/components/add/add.less new file mode 100644 index 00000000..0a6adacb --- /dev/null +++ b/src/app/routes/partner/scrollimg/components/add/add.less @@ -0,0 +1,119 @@ +:host { + .styleBox { + display: flex; + align-items: flex-end; + margin: 10px 0 0 0; + } + .imgBox { + position: relative; + width: 200px; + padding: 6px 0; + text-align: center; + border: solid 1px #eee; + .leftBox, + .rightBox { + position: absolute; + top: 50%; + transform: translate(0, -50%); + } + img { + width: 170px; + height: 40px; + } + .leftBox { + left: 3px; + } + .rightBox { + right: 3px; + } + } + .imgBox_two { + width: 200px; + padding: 6px; + text-align: center; + border: solid 1px #eee; + img { + width: 100%; + height: 40px; + } + } + .imgBox_three { + width: 200px; + padding: 6px 0; + text-align: center; + border: solid 1px #eee; + img { + width: 25%; + height: 40px; + margin: 0 6% 0 0; + &:first-child { + margin: 0 6%; + } + } + } + .imgBox_four { + width: 200px; + padding: 6px 0; + text-align: center; + border: solid 1px #eee; + img { + width: 22%; + height: 40px; + margin: 0 2% 0 0; + &:first-child { + margin: 0 2%; + } + } + } + .imgBox_one { + width: 60px; + padding: 6px; + text-align: center; + border: solid 1px #eee; + img { + width: 100%; + height: 40px; + } + } + .imgBox_info { + width: 200px; + padding: 6px; + overflow: hidden; + border: solid 1px #eee; + .title { + width: 100%; + line-height: 30px; + text-align: center; + } + .infoBox { + .name { + line-height: 28px; + } + .map { + width: 100%; + text-align: center; + img { + width: 90%; + } + } + } + } + .hint { + margin: 0 0 0 10px; + color: #f00; + } + .addBtn { + margin: 0 0 10px 0; + } + } + .overflowText { + display: -webkit-box; + max-width: 200px; + overflow: hidden; + text-align: left; + text-overflow: -o-ellipsis-lastline; + text-overflow: ellipsis; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; + } \ No newline at end of file diff --git a/src/app/routes/partner/ad/components/list/list.component.html b/src/app/routes/partner/scrollimg/components/list/list.component.html similarity index 94% rename from src/app/routes/partner/ad/components/list/list.component.html rename to src/app/routes/partner/scrollimg/components/list/list.component.html index caedd311..216788b4 100644 --- a/src/app/routes/partner/ad/components/list/list.component.html +++ b/src/app/routes/partner/scrollimg/components/list/list.component.html @@ -5,7 +5,7 @@
- +
@@ -14,7 +14,7 @@
- + + +
\ No newline at end of file diff --git a/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.less b/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.less new file mode 100644 index 00000000..e3f1fc3f --- /dev/null +++ b/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.less @@ -0,0 +1,123 @@ +.sfBox { + position: relative; + .example { + position: absolute; + top: 215px; + right: 265px; + color: #1890ff; + cursor: pointer; + .popBox { + position: absolute; + top: -170px; + left: -125px; + width: 300px; + padding: 20px; + text-align: center; + background: #fff; + border: solid 1px #eee; + border-radius: 6px; + box-shadow: 0 1px 5px 1px #ececec; + &::before { + position: absolute; + bottom: -5px; + left: 50%; + width: 10px; + height: 10px; + margin-left: -5px; + background: #fff; + box-shadow: 0 1px 5px 1px #ececec; + transform: rotate(45deg); + content: ''; + } + &::after { + position: absolute; + bottom: 0; + left: 0; + z-index: 10; + width: 100%; + height: 10px; + background: #fff; + content: ''; + } + img { + max-width: 100%; + max-height: 200px; + } + } + } + .positionSet{ + top: 356px; + right: 235px; + } + .positionSet01{ + top: 500px; + right: 200px; + } + .positionSet02{ + top: 664px; + right: 265px; + } + .positionSet03{ + top: 808px; + right: 205px; + + } +} +.exaA{ + position: absolute; + top: 0; + left: 300px +} +.pr { + position: relative; +} + +.pa { + position: absolute; + top: 35px; + left: 150px; +} + +.tips { + display: flex; + margin-bottom: 0; + color: #333; + + dt { + width: 150px; + } + + dd { + width: 190px; + margin-bottom: 0; + text-align: center; + } +} +.drivercard{ + position: absolute; + top: 0; + left: 330px; + border: solid 1px #ebf0fb; +} +.jopcard{ + position: absolute; + top: 1356px; + left: 330px; + border: solid 1px #ebf0fb; +} +.agreement{ + position: absolute; + top: 425px; + left: 330px; + border: solid 1px #ebf0fb; +} +:host{ + ::ng-deep { + .ant-input-borderless{ + padding: 0; + padding-top: 4px; + color: black; + resize:none; + } + } + } \ No newline at end of file diff --git a/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.spec.ts b/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.spec.ts new file mode 100644 index 00000000..8be64dc5 --- /dev/null +++ b/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.spec.ts @@ -0,0 +1,24 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; +import { CarCarauthComponent } from './carauth.component'; + +describe('CarCarauthComponent', () => { + let component: CarCarauthComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ CarCarauthComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CarCarauthComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.ts b/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.ts new file mode 100644 index 00000000..a43173ea --- /dev/null +++ b/src/app/routes/usercenter/components/freight/list/carauth/carauth.component.ts @@ -0,0 +1,654 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { apiConf } from '@conf/api.conf'; +import { cacheConf } from '@conf/cache.conf'; +import { SFUISchema, SFSchema, SFUploadWidgetSchema, SFComponent, SFSelectWidgetSchema } from '@delon/form'; +import { _HttpClient } from '@delon/theme'; +import { EACacheService, EAEnvironmentService } from '@shared'; +import { NzModalRef } from 'ng-zorro-antd/modal'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import { Observable, Observer, of } from 'rxjs'; +import { ListService } from '../../services/list.service'; + +@Component({ + selector: 'app-car-carauth', + templateUrl: './carauth.component.html', + styleUrls: ['./carauth.component.less'] +}) +export class CarCarauthComponent implements OnInit { + @ViewChild('sf', { static: false }) sf!: SFComponent; + record: any = {}; + i: any; + ui: SFUISchema = {}; + schema: SFSchema = {}; + showCardFlag = false; + showJopFlag = false; + companyData: any = {}; + detailData: any = {}; + carNo = '' + checked = false + + constructor( + private modal: NzModalRef, + public service: ListService, + private envSrv: EAEnvironmentService, + private eaCacheSrv: EACacheService, + ) { } + + ngOnInit(): void { + this.initData() + this.initSF() + } + initData() { + if(this.i.id){ + this.companyData = this.eaCacheSrv.get(cacheConf.env) + const params = { + id: this.i.id + } + this.service.request(this.service.$api_getShipperCar, params).subscribe(res => { + this.detailData = res + this.detailData.isSelf = res.isSelf ? 1 : 0 + this.detailData.isTrailer = res.isTrailer ? 1 : 0 + this.detailData.carFrontPhotoWatermark = [ + { + uid: -1, + name: 'LOGO', + status: 'done', + url: this.detailData.carFrontPhotoWatermark, + response:this.detailData.carFrontPhotoWatermark, + }, + ]; + this.detailData.carProtocalWatermark = [ + { + uid: -1, + name: 'LOGO', + status: 'done', + url: this.detailData.carProtocalWatermark, + response: this.detailData.carProtocalWatermark, + }, + ]; + this.detailData.certificatePhotoFrontWatermark = [ + { + uid: -1, + name: 'LOGO', + status: 'done', + url: this.detailData.certificatePhotoFrontWatermark, + response: this.detailData.certificatePhotoFrontWatermark, + }, + ]; + this.detailData.certificatePhotoBackWatermark = [ + { + uid: -1, + name: 'LOGO', + status: 'done', + url: this.detailData.certificatePhotoBackWatermark, + response: this.detailData.certificatePhotoBackWatermark, + }, + ]; + if(this.detailData.roadTransportPhotoWatermark !== null) { + this.detailData.roadTransportPhotoWatermark = [ + { + uid: -1, + name: 'LOGO', + status: 'done', + url: this.detailData.roadTransportPhotoWatermark, + response: this.detailData.roadTransportPhotoWatermark, + }, + ]; + } + + }) + } + } + initSF() { + this.schema = { + properties: { + carFrontPhotoWatermark: { + type: 'string', + title: '车头照照片', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '请上传车头照照片,支持JPG、PNG格式,文件小于5M。', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.carFrontPhoto = args.file.response.data.fullFilePath + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt2M = file.size / 1024 / 1024 < 5; + if (!isLt2M) { + this.service.msgSrv.warning('图片大小超过5M!'); + observer.complete(); + return; + } + observer.next(isLt2M); + observer.complete(); + }); + }, + previewFile: (file: NzUploadFile) => of(file.url), + }, + }, + carNo: { + title: '车牌号', + type: 'string', + maxLength: 9, + ui: { + placeholder: '请输入', + }, + }, + carNoColor: { + title: '车牌颜色', + type: 'string', + ui: { + widget: 'dict-select', + params: { dictKey: 'car:color' }, + placeholder: '请选择车牌颜色', + containsAllLabel:false, + } as SFSelectWidgetSchema, + }, + carModel: { + title: '车型', + type: 'string', + ui: { + widget: 'dict-select', + params: { dictKey: 'car:model' }, + placeholder: '请选择车型', + containsAllLabel:false, + } as SFSelectWidgetSchema, + }, + carLength: { + title: '车长', + type: 'string', + ui: { + widget: 'dict-select', + params: { dictKey: 'car:length' }, + placeholder: '请选择车长', + containsAllLabel:false, + } as SFSelectWidgetSchema, + }, + carLoad: { + title: '载重', + type: 'string', + ui: { + placeholder: '请输入', + change: (val: any) =>{ + const value = val.replace(/\D/g,'') + this.sf.setValue('/carLoad', value) + }, + } + }, + isSelf: { + title: '是否挂靠', + type: 'string', + enum: [ + { label: '否', value: 0 }, + { label: '是', value: 1 }, + ], + ui: { + widget: 'select', + placeholder: '请选择', + } + }, + isTrailer: { + title: '是否为挂车', + type: 'string', + enum: [ + { label: '否', value: 0 }, + { label: '是', value: 1 }, + ], + ui: { + widget: 'select', + placeholder: '请选择', + } + }, + carProtocalWatermark: { + type: 'string', + title: '挂靠协议', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '请上传挂靠协议,支持JPG、PNG格式,文件小于5M。', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.certificatePhotoFront = args.file.response.data.fullFilePath + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt2M = file.size / 1024 / 1024 < 5; + if (!isLt2M) { + this.service.msgSrv.warning('图片大小超过5M!'); + observer.complete(); + return; + } + observer.next(isLt2M); + observer.complete(); + }); + }, + previewFile: (file: NzUploadFile) => of(file.url), + }, + }, + titleA: { + title: '行驶证信息(必填)', + type: 'string', + ui: { + widget: 'textarea', + borderless:true, + }, + default: '照片上传后会自动识别文字并填充下列内容栏', + }, + tipsA: { + title: '', + type: 'string', + ui: { + widget: 'custom', + offsetControl: 6, + }, + }, + certificatePhotoFrontWatermark: { + type: 'string', + title: '行驶证首页照片', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '请上传行驶证首页照片,支持JPG、PNG格式,文件小于5M。照片信息缺失、拼凑、过度PS、模糊不清,都不会通过审核。', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.certificatePhotoFront = args.file.response.data.fullFilePath + this.checkCarCard(args.file.response.data.fullFilePath, 'front'); + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt2M = file.size / 1024 / 1024 < 5; + if (!isLt2M) { + this.service.msgSrv.warning('图片大小超过5M!'); + observer.complete(); + return; + } + observer.next(isLt2M); + observer.complete(); + }); + }, + }, + }, + tipsB: { + title: '', + type: 'string', + ui: { + widget: 'custom', + offsetControl: 6, + }, + }, + certificatePhotoBackWatermark: { + type: 'string', + title: '行驶证副页照片', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '请上传行驶证副业照片,支持JPG、PNG格式,文件小于5M。', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.certificatePhotoBack = args.file.response.data.fullFilePath + this.checkCarCard(args.file.response.data.fullFilePath, 'back'); + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt2M = file.size / 1024 / 1024 < 5; + if (!isLt2M) { + this.service.msgSrv.warning('图片大小超过5M!'); + observer.complete(); + return; + } + observer.next(isLt2M); + observer.complete(); + }); + }, + previewFile: (file: NzUploadFile) => of(file.url), + }, + }, + driverLicenseRegisterTime: { + title: '行驶证注册日期', + type: 'string', + format: 'date', + ui: { + placeholder: '请输入', + }, + }, + driverLicenseGetTime: { + title: '行驶证发证日期', + type: 'string', + format: 'date', + ui: { + placeholder: '请输入', + }, + }, + driverLicenseEndTime: { + title: '行驶证到期日期', + type: 'string', + format: 'date', + maxLength: 30, + ui: { + placeholder: '请输入', + }, + }, + driverLicenseSigningOrg: { + title: '行驶证签发机关', + type: 'string', + maxLength: 30, + ui: { + placeholder: '请输入', + }, + }, + carDistinguishCode: { + title: '车辆识别代码', + type: 'string', + maxLength: 30, + ui: { + placeholder: '请输入', + }, + }, + useNature: { + title: '使用性质', + type: 'string', + maxLength: 30, + enum: [ + {label: '非营运', value: 0}, + {label: '营运', value: 1}, + ], + ui: { + widget: 'select', + placeholder: '请选择', + }, + }, + curbWeight: { + title: '整备质量', + type: 'string', + ui: { + placeholder: '请输入', + }, + }, + carOwner: { + title: '所有人', + type: 'string', + maxLength: 30, + ui: { + placeholder: '请输入', + }, + }, + titleB: { + title: '道运证(选填)', + type: 'string', + ui: { + widget: 'text', + }, + default: '照片上传后会自动识别文字并填充下列内容栏', + }, + roadTransportPhotoWatermark: { + type: 'string', + title: '道运证照片', + ui: { + action: apiConf.fileUpload, + accept: 'image/png,image/jpeg,image/jpg,image/gif', + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + descriptionI18n: '请上传道运证照片,支持JPG、PNG格式,文件小于5M。蓝牌绿牌车辆,可不用传道运证', + data: { + appId: this.envSrv.env.appId, + }, + name: 'multipartFile', + multiple: false, + listType: 'picture-card', + change: (args: any) => { + if (args.type === 'success') { + this.detailData.roadTransportPhoto = args.file.response.data.fullFilePath + this.checkTransCard(args.file.response.data.fullFilePath); + } else { + this.detailData.roadTransportPhoto = '' + } + }, + beforeUpload: (file: any, _fileList: any) => { + return new Observable((observer: Observer) => { + const isLt2M = file.size / 1024 / 1024 < 5; + if (!isLt2M) { + this.service.msgSrv.warning('图片大小超过5M!'); + observer.complete(); + return; + } + observer.next(isLt2M); + observer.complete(); + }); + }, + previewFile: (file: NzUploadFile) => of(file.url), + }, + }, + roadTransportNo: { + title: '道运证号码', + type: 'string', + maxLength: 30, + ui: { + // widget: this.detailData.commitFlag !== 0 ? 'text' : '', + placeholder: '请输入', + }, + }, + roadTransportLicenceNo: { + title: '经营许可证号', + type: 'string', + maxLength: 30, + ui: { + // widget: this.detailData.commitFlag !== 0 ? 'text' : '', + placeholder: '请输入', + }, + }, + roadTransportStartTime: { + title: '发证日期', + type: 'string', + format: 'date', + ui: { + placeholder: '请输入', + }, + }, + roadTransportEndTime: { + title: '有效期至', + type: 'string', + format: 'date', + ui: { + placeholder: '请输入', + }, + }, + remarks: { + title: '备注', + type: 'string', + ui: { + placeholder: '请输入', + }, + }, + }, + required: [ + 'carFrontPhotoWatermark', + 'carNo', + 'carNoColor', + 'carModel', + 'carLength', + 'carLoad', + 'isSelf', + 'isTrailer', + 'certificatePhotoFrontWatermark', + 'certificatePhotoBackWatermark', + 'driverLicenseRegisterTime', + 'driverLicenseGetTime', + 'driverLicenseEndTime', + 'driverLicenseSigningOrg', + 'carDistinguishCode', + 'useNature', + 'carOwner' + ], + }; + + this.ui = { + '*': { + spanLabelFixed: 180, + grid: { span: 18 }, + width: 600, + }, + $title1: { + spanLabelFixed: 0, + }, + $title2: { + spanLabelFixed: 0, + }, + $title3: { + spanLabelFixed: 0, + }, + $enterpriseRegistrationTime: { + width: 680, + }, + $operatingEndTime: { + grid: { span: 9 }, + }, + $dateType: { + grid: { span: 4 }, + }, + $validEndTime: { + grid: { span: 9 }, + }, + $dateType01: { + grid: { span: 4 }, + }, + $registrationCapital: { + grid: { span: 12 }, + }, + $unit: { + spanLabelFixed: 20, + grid: { span: 3 }, + }, +}; + } +// 道路运输证识别 +checkTransCard(imgurl: any) { + const params = { + transportationLicenseUrl: imgurl, + }; + this.service.request(this.service.$api_recognizeTransportationLicense, params).subscribe((res) => { + if (res) { + this.sf.setValue('/roadTransportNo', res.number); + this.sf.setValue('/roadTransportLicenceNo', res.businessCertificate); + this.sf.setValue('/roadTransportStartTime', res.issueDate); + if(this.carNo === '') { + this.carNo = res.number + } else if(this.carNo && res.vehicleNumber.indexOf(this.carNo) === -1) { + this.service.msgSrv.warning('请上传同一认证车辆的相关证件') + } + } + }); +} +// 行驶证识别 +checkCarCard(imgurl: any, side: any) { + const params = { + vehicleLicenseUrl: imgurl, + side, + }; + this.service.request(this.service.$api_recognizeVehicleLicense, params).subscribe((res) => { + if (res) { + if (side === 'front') { // 正面 + this.sf.setValue('/driverLicenseRegisterTime', res.registerDate); + this.sf.setValue('/carNo', res.number); + this.sf.setValue('/driverLicenseGetTime', res.issueDate); + this.sf.setValue('/driverLicenseSigningOrg', res.issuingAuthority); + this.sf.setValue('/carDistinguishCode', res.vin); + this.sf.setValue('/carOwner', res.name); + this.sf.setValue('/useNature', res.useCharacter === '非营运' ? 0 : 1 ); + } else { + this.sf.setValue('/curbWeight', res.unladenMass); + this.sf.setValue('/remarks', res.remarks); + } + if(this.carNo === '') { + this.carNo = res.number + } else if(this.carNo && this.carNo !== res.number) { + this.service.msgSrv.warning('请上传同一认证车辆的相关证件') + } + } + }); +} + +close(): void { + this.modal.close(true) +} +showExample() { + this.showCardFlag = !this.showCardFlag +} +showJopExample() { + this.showJopFlag = !this.showJopFlag +} +submitForm(){ + const params:any = { + appUserId: this.i.appUserId, + ...this.sf.value, + bindType: this.i.bindType + }; + params.carFrontPhoto = this.detailData.carFrontPhoto + params.carProtocal = this.detailData.carProtocal + params.certificatePhotoFront = this.detailData.certificatePhotoFront + params.certificatePhotoBack = this.detailData.certificatePhotoBack + params.roadTransportPhoto = this.detailData.roadTransportPhoto + delete params.titleA + delete params.titleB + this.checked = true + this.service.request(this.service.$api_updateAssistCertification, params).subscribe(res => { + this.checked = false + if(res){ + this.service.msgSrv.success('添加成功') + this.modal.close(true) + } + }) +} +} From 6ccb5ced18b477c9f2fe9df1a0fa92f1a30614ac Mon Sep 17 00:00:00 2001 From: TaricXin <583259872@qq.com> Date: Tue, 15 Mar 2022 17:02:13 +0800 Subject: [PATCH 5/6] e --- src/app/core/startup/startup.service.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/core/startup/startup.service.ts b/src/app/core/startup/startup.service.ts index 5c3efc42..04aef8a0 100644 --- a/src/app/core/startup/startup.service.ts +++ b/src/app/core/startup/startup.service.ts @@ -49,9 +49,9 @@ export class StartupService { let data; if (this.coreSrv.loginStatus) { // 本地菜单 - data = this.loadMockData(); + // data = this.loadMockData(); // 远程菜单 - // data = this.loadRemoteData(); + data = this.loadRemoteData(); } else { data = this.loadMockData(); } @@ -134,12 +134,12 @@ export class StartupService { const userData = this.httpClient.post(this.userSrv.$api_get_user_by_token, {}).pipe(map((res: any) => res.data)); // 菜单数据 - const menuData = this.httpClient - .post(this.coreSrv.$api_get_current_user_menus, { - appId: this.coreSrv.envSrv.getEnvironment().appId - }) - .pipe(map((res: any) => res.data)); - // const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu)); + // const menuData = this.httpClient + // .post(this.coreSrv.$api_get_current_user_menus, { + // appId: this.coreSrv.envSrv.getEnvironment().appId + // }) + // .pipe(map((res: any) => res.data)); + const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu)); return zip(appData, userData, menuData); } From 3539bd2a079e47e14a792aec1af4f90673ba9b30 Mon Sep 17 00:00:00 2001 From: TaricXin <583259872@qq.com> Date: Tue, 15 Mar 2022 17:32:24 +0800 Subject: [PATCH 6/6] edit --- src/app/global-config.module.ts | 9 ++- .../dashboard/dashboard.component.html | 13 ++++ .../dashboard/dashboard.component.less | 0 .../dashboard/dashboard.component.ts | 66 +++++++++++++++++++ .../regulatory-data-routing.module.ts | 12 ++++ .../regulatory-data/regulatory-data.module.ts | 14 ++++ .../services/regulatory-data.service.ts | 9 +++ src/app/routes/routes-routing.module.ts | 4 +- src/app/shared/index.ts | 1 + src/app/shared/shared-g2.module.ts | 6 ++ src/assets/mocks/menu-data.json | 10 +++ 11 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 src/app/routes/regulatory-data/components/dashboard/dashboard.component.html create mode 100644 src/app/routes/regulatory-data/components/dashboard/dashboard.component.less create mode 100644 src/app/routes/regulatory-data/components/dashboard/dashboard.component.ts create mode 100644 src/app/routes/regulatory-data/regulatory-data-routing.module.ts create mode 100644 src/app/routes/regulatory-data/regulatory-data.module.ts create mode 100644 src/app/routes/regulatory-data/services/regulatory-data.service.ts create mode 100644 src/app/shared/shared-g2.module.ts diff --git a/src/app/global-config.module.ts b/src/app/global-config.module.ts index 163c16c9..d92a7840 100644 --- a/src/app/global-config.module.ts +++ b/src/app/global-config.module.ts @@ -20,7 +20,14 @@ const alainConfig: AlainConfig = { sf: { button: { search: '查询' }, ui: { placeholder: '请输入' } }, pageHeader: { homeI18n: 'home', recursiveBreadcrumb: true }, auth: { login_url: '/passport/login' }, - acl: { guard_url: '/exception/403' } + acl: { guard_url: '/exception/403' }, + chart: { + // 以下是默认配置,如果项目无法外网访问,可以根据 `angular.json` 配置将依赖包直接使用 `./assets***` 路径 + libs: [ + 'https://gw.alipayobjects.com/os/lib/antv/g2/4.1.4/dist/g2.min.js', + 'https://gw.alipayobjects.com/os/lib/antv/data-set/0.11.7/dist/data-set.js' + ] + } }; const alainModules = [AlainThemeModule.forRoot(), DelonACLModule.forRoot()]; diff --git a/src/app/routes/regulatory-data/components/dashboard/dashboard.component.html b/src/app/routes/regulatory-data/components/dashboard/dashboard.component.html new file mode 100644 index 00000000..06139f88 --- /dev/null +++ b/src/app/routes/regulatory-data/components/dashboard/dashboard.component.html @@ -0,0 +1,13 @@ + + diff --git a/src/app/routes/regulatory-data/components/dashboard/dashboard.component.less b/src/app/routes/regulatory-data/components/dashboard/dashboard.component.less new file mode 100644 index 00000000..e69de29b diff --git a/src/app/routes/regulatory-data/components/dashboard/dashboard.component.ts b/src/app/routes/regulatory-data/components/dashboard/dashboard.component.ts new file mode 100644 index 00000000..d895eedc --- /dev/null +++ b/src/app/routes/regulatory-data/components/dashboard/dashboard.component.ts @@ -0,0 +1,66 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { G2PieClickItem, G2PieComponent, G2PieData } from '@delon/chart/pie'; +import { NzMessageService } from 'ng-zorro-antd/message'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.less'] +}) +export class DashboardComponent implements OnInit { + @ViewChild('pie', { static: false }) readonly pie!: G2PieComponent; + salesPieData: G2PieData[] = []; + total = ''; + + constructor(private msg: NzMessageService) { + this.refresh(); + } + ngOnInit(): void { + throw new Error('Method not implemented.'); + } + + refresh(): void { + const rv = (min: number = 0, max: number = 5000) => Math.floor(Math.random() * (max - min + 1) + min); + this.salesPieData = [ + { + x: '家用电器', + y: rv() + }, + { + x: '食用酒水', + y: rv() + }, + { + x: '个护健康', + y: rv() + }, + { + x: '服饰箱包', + y: rv() + }, + { + x: '母婴产品', + y: rv() + } + ]; + if (Math.random() > 0.5) { + this.salesPieData.push({ + x: '其他', + y: rv() + }); + } + this.total = `¥ ${this.salesPieData.reduce((pre, now) => now.y + pre, 0).toFixed(2)}`; + if (this.pie) { + // 等待组件渲染 + setTimeout(() => this.pie.changeData()); + } + } + + format(val: number): string { + return `¥ ${val.toFixed(2)}`; + } + + handleClick(data: G2PieClickItem): void { + this.msg.info(`${data.item.x} - ${data.item.y}`); + } +} diff --git a/src/app/routes/regulatory-data/regulatory-data-routing.module.ts b/src/app/routes/regulatory-data/regulatory-data-routing.module.ts new file mode 100644 index 00000000..bb68bd97 --- /dev/null +++ b/src/app/routes/regulatory-data/regulatory-data-routing.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { DashboardComponent } from './components/dashboard/dashboard.component'; + +const routes: Routes = [{ path: 'dashboard', component: DashboardComponent }]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class RegulatoryDataRoutingModule {} diff --git a/src/app/routes/regulatory-data/regulatory-data.module.ts b/src/app/routes/regulatory-data/regulatory-data.module.ts new file mode 100644 index 00000000..c76d3521 --- /dev/null +++ b/src/app/routes/regulatory-data/regulatory-data.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { SharedModule, SHARED_G2_MODULES } from '@shared'; + +import { DashboardComponent } from './components/dashboard/dashboard.component'; +import { RegulatoryDataRoutingModule } from './regulatory-data-routing.module'; + +const COMPONENTS: any = [DashboardComponent]; +const NOTROUTECOMPONENTS: any = []; +@NgModule({ + declarations: [...COMPONENTS, ...NOTROUTECOMPONENTS], + imports: [CommonModule, RegulatoryDataRoutingModule, SharedModule, SHARED_G2_MODULES] +}) +export class RegulatoryDataModule {} diff --git a/src/app/routes/regulatory-data/services/regulatory-data.service.ts b/src/app/routes/regulatory-data/services/regulatory-data.service.ts new file mode 100644 index 00000000..7206840f --- /dev/null +++ b/src/app/routes/regulatory-data/services/regulatory-data.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class RegulatoryDataService { + + constructor() { } +} diff --git a/src/app/routes/routes-routing.module.ts b/src/app/routes/routes-routing.module.ts index 68b60fe7..712e39ec 100644 --- a/src/app/routes/routes-routing.module.ts +++ b/src/app/routes/routes-routing.module.ts @@ -15,6 +15,7 @@ import { RouterModule, Routes } from '@angular/router'; import { LayoutProComponent } from '@brand'; import { EATokenGuard } from '@core'; import { environment } from '@env/environment'; + import { AuthGuard } from '../core/guards/auth.guard'; // dashboard pages @@ -68,6 +69,7 @@ const routes: Routes = [ }, { path: 'menu-management', loadChildren: () => import('./menu-manager/menu-manager.module').then(m => m.MenuManagerModule) }, { path: 'partner', loadChildren: () => import('./partner/partner.module').then(m => m.PartnerModule) }, + { path: 'regulatory-data', loadChildren: () => import('./regulatory-data/regulatory-data.module').then(m => m.RegulatoryDataModule) }, { path: 'download', loadChildren: () => import('./download/download.module').then(m => m.DownloadModule) @@ -92,4 +94,4 @@ const routes: Routes = [ ], exports: [RouterModule] }) -export class RouteRoutingModule { } +export class RouteRoutingModule {} diff --git a/src/app/shared/index.ts b/src/app/shared/index.ts index d8f2d2d9..7ea8c70d 100644 --- a/src/app/shared/index.ts +++ b/src/app/shared/index.ts @@ -33,4 +33,5 @@ export * from './shared.module'; export * from './shared-delon.module'; export * from './shared-zorro.module'; export * from './shared-third.module'; +export * from './shared-g2.module'; export * from './widget/st-widget.module'; diff --git a/src/app/shared/shared-g2.module.ts b/src/app/shared/shared-g2.module.ts new file mode 100644 index 00000000..685f05bc --- /dev/null +++ b/src/app/shared/shared-g2.module.ts @@ -0,0 +1,6 @@ +import { G2BarModule } from '@delon/chart/bar'; +import { G2MiniAreaModule } from '@delon/chart/mini-area'; +import { G2PieModule } from '@delon/chart/pie'; +import { G2TimelineModule } from '@delon/chart/timeline'; + +export const SHARED_G2_MODULES = [G2BarModule, G2PieModule, G2TimelineModule, G2MiniAreaModule]; diff --git a/src/assets/mocks/menu-data.json b/src/assets/mocks/menu-data.json index 82dcd221..22c0317b 100644 --- a/src/assets/mocks/menu-data.json +++ b/src/assets/mocks/menu-data.json @@ -630,6 +630,16 @@ } ] + }, + { + "text": "数据监管", + "icon": "iconfont icon-hetong-copy", + "group": true, + "children": [{ + "text": "数据报表", + "link": "/regulatory-data/dashboard" + } + ] } ] }]