From a51b724288807447a5db960861a850f71afec761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E6=99=93=E4=BA=91?= Date: Tue, 29 Mar 2022 16:44:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datatable/datatable-routing.module.ts | 4 +- src/app/routes/datatable/datatable.module.ts | 6 +- .../order-reporting.component.html | 52 ++----- .../order-reporting.component.less | 5 + .../order-reporting.component.ts | 141 +++++++++++------- .../upload-setting.component.html | 8 + .../upload-setting.component.spec.ts | 24 +++ .../upload-setting.component.ts | 109 ++++++++++++++ .../verify-result.component.html | 22 +++ .../verify-result.component.spec.ts | 24 +++ .../verify-result/verify-result.component.ts | 85 +++++++++++ .../reporting/services/reporting.service.ts | 4 +- 12 files changed, 385 insertions(+), 99 deletions(-) create mode 100644 src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less create mode 100644 src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html create mode 100644 src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts create mode 100644 src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts create mode 100644 src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html create mode 100644 src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts create mode 100644 src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts diff --git a/src/app/routes/datatable/datatable-routing.module.ts b/src/app/routes/datatable/datatable-routing.module.ts index 6f84e112..9bab4e2a 100644 --- a/src/app/routes/datatable/datatable-routing.module.ts +++ b/src/app/routes/datatable/datatable-routing.module.ts @@ -2,11 +2,13 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { DatatableDataindexComponent } from './dataindex/dataindex.component'; import { DatatableOrderReportingComponent } from './reporting/components/order-reporting/order-reporting.component'; +import { DatatableReportingVerifyResultComponent } from './reporting/components/verify-result/verify-result.component'; const routes: Routes = [ { path: 'dataindex', component: DatatableDataindexComponent }, - { path: 'reporting/order', component: DatatableOrderReportingComponent }]; + { path: 'reporting/order', component: DatatableOrderReportingComponent }, + { path: 'verify-result', component: DatatableReportingVerifyResultComponent }]; @NgModule({ imports: [RouterModule.forChild(routes)], diff --git a/src/app/routes/datatable/datatable.module.ts b/src/app/routes/datatable/datatable.module.ts index e6b0e997..53965896 100644 --- a/src/app/routes/datatable/datatable.module.ts +++ b/src/app/routes/datatable/datatable.module.ts @@ -3,10 +3,14 @@ import { SharedModule, SHARED_G2_MODULES } from '@shared'; import { DatatableRoutingModule } from './datatable-routing.module'; import { DatatableDataindexComponent } from './dataindex/dataindex.component'; import { DatatableOrderReportingComponent } from './reporting/components/order-reporting/order-reporting.component'; +import { DatatableReportingUploadSettingComponent } from './reporting/components/upload-setting/upload-setting.component'; +import { DatatableReportingVerifyResultComponent } from './reporting/components/verify-result/verify-result.component'; const COMPONENTS: Type[] = [ DatatableDataindexComponent, - DatatableOrderReportingComponent]; + DatatableOrderReportingComponent, + DatatableReportingUploadSettingComponent, + DatatableReportingVerifyResultComponent]; @NgModule({ imports: [ diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html index 7724c122..e55d1e52 100644 --- a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html +++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html @@ -29,57 +29,29 @@ [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" [res]="{ reName: { list: 'data.records', total: 'data.total' } }" [page]="{ show: true, showSize: true, pageSizes: [10,20, 50, 100] }" [loading]="false"> - - {{item.billCode}} + + {{item?.billStatusLabel}} + {{item?.billStatusLabel}} + - -
-
{{item.expenseName}}:{{item.price | currency}}
-
+ + + {{item?.billStatusLabel}} + {{item?.billStatusLabel}} - -
{{ address }}
-
- -
{{ address }}
-
- -
-
货物名称 : {{item.goodsName}}
-
重量/体积 : {{item.weight}}/{{item.volume}}
-
车型/车长 :{{item.carModelLabel}}/{{item.carLengthLabel}}
-
-
- -
{{item.driverName}}
-
{{item.driverPhone}}
-
{{item.carNo}}
-
- -
{{item.payeeName}}
-
{{item.payeePhone}}
-
- -
创建时间:{{item.createTime}}
-
装货时间:{{item.loadTime}}
-
卸货时间:{{item.unloadTime}}
-
- -
{{item?.complianceName}}
-
- -
{{item?.billTypeLabel}} ({{item?.serviceTypeLabel}})
+ +
{{item?.amount | currency :' '}}
-
+
已选择 {{ selectedRows.length }} 条数据
- +
diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less new file mode 100644 index 00000000..6009fbbf --- /dev/null +++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less @@ -0,0 +1,5 @@ +:host { + .text-black { + color: #000; + } +} diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts index 28e93168..0c7ef2c2 100644 --- a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts +++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts @@ -1,15 +1,17 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { Router, ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { STColumn, STComponent, STData } from '@delon/abc/st'; import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; -import { ModalHelper, _HttpClient } from '@delon/theme'; import { ShipperBaseService } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { ReportingService } from '../../services/reporting.service'; +import { DatatableReportingUploadSettingComponent } from '../upload-setting/upload-setting.component'; +import { DatatableReportingVerifyResultComponent } from '../verify-result/verify-result.component'; @Component({ selector: 'app-datatable-order-reporting', templateUrl: './order-reporting.component.html', + styleUrls: ['./order-reporting.component.less'] }) export class DatatableOrderReportingComponent implements OnInit { _$expand = false; @@ -226,7 +228,7 @@ export class DatatableOrderReportingComponent implements OnInit { ], ui: { placeholder: '请选择', - + widget: 'select', visibleIf: { _$expand: (value: boolean) => value, }, @@ -242,7 +244,7 @@ export class DatatableOrderReportingComponent implements OnInit { ], ui: { placeholder: '请选择', - + widget: 'select', visibleIf: { _$expand: (value: boolean) => value, }, @@ -261,11 +263,11 @@ export class DatatableOrderReportingComponent implements OnInit { */ initST() { this.columns = [ - { title: '', type: 'checkbox', className: 'text-center', width: '80px', }, - { title: '订单状态', index: 'name', className: 'text-center', width: '120px', }, - { title: '司机状态', index: 'name', className: 'text-center', width: '120px', }, - { title: '车辆状态', index: 'name', className: 'text-center', width: '120px', }, - { title: '本地校验', render: 'orderSn', className: 'text-center', width: '180px', }, + { title: '', type: 'checkbox', className: 'text-center', width: '60px', }, + { title: '订单状态', render: 'orderStatus', className: 'text-center', width: '120px', }, + { title: '司机状态', render: 'driverStatus', className: 'text-center', width: '120px', }, + { title: '车辆状态', render: 'carStatus', className: 'text-center', width: '120px', }, + { title: '本地校验', render: 'localValid', className: 'text-center', width: '120px', }, { title: '订单号', render: 'billComplianceVOS', @@ -278,71 +280,50 @@ export class DatatableOrderReportingComponent implements OnInit { title: '网络货运人', render: 'serviceType', className: 'text-center', - width: '120px', + width: '180px', }, - { title: '统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '300px' }, - { title: '业务类型', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '300px' }, - { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '200px' }, - { title: '发货时间', render: 'driver', className: 'text-center', width: '150px' }, - { title: '收货时间', render: 'payeeName', className: 'text-center', width: '150px' }, + { title: '统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '200px' }, + { title: '业务类型', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '120px' }, + { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '180px' }, + { title: '发货时间', render: 'driver', className: 'text-center', width: '180px' }, + { title: '收货时间', render: 'payeeName', className: 'text-center', width: '180px' }, { title: '托运人名称', render: 'transportInfo', className: 'text-center', width: '250px' }, - { title: '托运人统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '300px' }, - { title: '装货地址', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '300px' }, - { title: '运单生成时间', render: 'goodsInfoVOList', className: 'text-center', width: '200px' }, + { title: '托运人统一社会信用代码', index: 'loadingPlace', render: 'loadingPlace', className: 'text-center', width: '200px' }, + { title: '装货地址', index: 'dischargePlace', render: 'dischargePlace', className: 'text-center', width: '200px' }, { title: '收货方名称', render: 'driver', className: 'text-center', width: '150px' }, { title: '收货地址', render: 'payeeName', className: 'text-center', width: '150px' }, - { title: '运费金额', render: 'transportInfo', className: 'text-center', width: '250px' }, + { title: '运费金额', render: 'amount', className: 'text-center', width: '250px' }, { title: '车牌号', render: 'payeeName', className: 'text-center', width: '150px' }, { title: '车牌颜色', render: 'transportInfo', className: 'text-center', width: '250px' }, { title: '司机姓名', render: 'payeeName', className: 'text-center', width: '150px' }, - { title: '司机手机号码', render: 'transportInfo', className: 'text-center', width: '250px' }, + { title: '司机手机号码', render: 'transportInfo', className: 'text-center', width: '200px' }, { title: '司机身份证号', render: 'payeeName', className: 'text-center', width: '150px' }, - { title: '货物信息', render: 'transportInfo', className: 'text-center', width: '250px' }, + { title: '货物信息', render: 'transportInfo', className: 'text-center', width: '180px' }, { title: '实际承运人名称', render: 'payeeName', className: 'text-center', width: '150px' }, - { title: '实际承运人证件号码', render: 'transportInfo', className: 'text-center', width: '250px' }, + { title: '实际承运人证件号码', render: 'transportInfo', className: 'text-center', width: '200px' }, { title: '实际承运人道路运输许可证号', render: 'payeeName', className: 'text-center', width: '150px' }, { title: '车辆轨迹', render: 'transportInfo', className: 'text-center', width: '250px' }, { title: '司机轨迹', render: 'payeeName', className: 'text-center', width: '150px' }, - { title: '上传次数', render: 'transportInfo', className: 'text-center', width: '250px' }, - { title: '上传时间', render: 'transportInfo', className: 'text-center', width: '250px' }, - { - title: '操作', - width: '200px', - className: 'text-center', - buttons: [ - // { text: '编辑', click: (_record: any) => this.appeal(_record) }, - { - text: '申诉', - // click: (record) => this.appeal(record), - iif: (_record) => _record.representationsStatus === '1', - acl: { 'ability': ['RiskOrder-Appeal'] } - }, - { - text: '撤销申诉', - pop: { - title: '是否确定立即撤销申诉?', - okType: 'danger', - }, - click: (record) => this.recall(record), - iif: (_record) => _record.representationsStatus === '2', - acl: { 'ability': ['RiskOrder-CancleAppeal'] } - }, - { text: '详情', click: (_record: any) => this.view(_record), acl: { 'ability': ['RiskOrder-Detail'] } }, - ], - }, + { title: '上传次数', render: 'transportInfo', className: 'text-center', width: '150px' }, + { title: '上传时间', render: 'transportInfo', className: 'text-center', width: '180px' }, ]; } /** - * 删除单个实例 + *撤销 * @param record 记录实例 */ - recall(record: STData) { - this.service.request(this.service.$api_recall_reporting, { id: record?.id }).subscribe((res: any) => { + recall() { + if (this.selectedRows.length === 0) { + this.openWainingModal('请选择需要撤回的数据'); + return; + } + + this.service.request(this.service.$api_recall_reporting, { rows: this.selectedRows }).subscribe((res: any) => { if (res) { - this.search({ representationsStatus: '' }); + this.search(); } }) @@ -390,7 +371,10 @@ export class DatatableOrderReportingComponent implements OnInit { * 上传 */ upload() { - + if (this.selectedRows.length === 0) { + this.openWainingModal('请选择需要上传的数据'); + return; + } } @@ -399,10 +383,46 @@ export class DatatableOrderReportingComponent implements OnInit { * @param params 上传设置 */ uploadSetting() { - + const modalRef = this.modal.create({ + nzTitle: '上传设置', + nzWidth: 600, + nzContent: DatatableReportingUploadSettingComponent, + nzComponentParams: {}, + nzFooter: null + }); + modalRef.afterClose.subscribe(res => { + }) } - search(params = {}) { + /** + * 查看校验结果 + */ + viewResult(item: any) { + const modalRef = this.modal.create({ + nzTitle: '校验结果', + nzWidth: 1200, + nzContent: DatatableReportingVerifyResultComponent, + nzComponentParams: { + record: item + }, + nzFooter: null + }); + modalRef.afterClose.subscribe(res => { + }) + } + + /** + * 查看监管审核结果 + */ + viewAuditResult(record: any) { + if (record?.billStatus !== '2') { + return; + } + this.openWainingModal('监管审核结果', record?.result) + } + + + search() { this.st.load(1); } @@ -413,4 +433,13 @@ export class DatatableOrderReportingComponent implements OnInit { this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list); } + openWainingModal(content: string, title = '提示') { + this.modal.warning({ + nzMask: false, + nzTitle: title, + nzContent: content, + }) + } + + } diff --git a/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html new file mode 100644 index 00000000..a4f5ae6e --- /dev/null +++ b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html @@ -0,0 +1,8 @@ + + + + diff --git a/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts new file mode 100644 index 00000000..aeb5cf2c --- /dev/null +++ b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts @@ -0,0 +1,24 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; +import { DatatableReportingUploadSettingComponent } from './upload-setting.component'; + +describe('DatatableReportingUploadSettingComponent', () => { + let component: DatatableReportingUploadSettingComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [DatatableReportingUploadSettingComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DatatableReportingUploadSettingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts new file mode 100644 index 00000000..b9f2d909 --- /dev/null +++ b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts @@ -0,0 +1,109 @@ +import { Component, OnInit } from '@angular/core'; +import { SFSchema, SFUISchema } from '@delon/form'; +import { NzModalRef } from 'ng-zorro-antd/modal'; +import { ReportingService } from '../../services/reporting.service'; + +@Component({ + selector: 'app-datatable-upload-setting', + templateUrl: './upload-setting.component.html', +}) +export class DatatableReportingUploadSettingComponent implements OnInit { + record: any = {}; + i: any = {}; + schema!: SFSchema; + ui!: SFUISchema; + + constructor( + private modal: NzModalRef, + public service: ReportingService + ) { } + + ngOnInit(): void { + this.initSF(); + // this.loadData(); + } + + /** + * 初始化查询表单 + */ + initSF() { + this.schema = { + properties: { + no: { + type: 'string', + title: '订单数据', + enum: [ + { + label: '手动上传', + value: '1' + }, + { + label: '自动上传', + value: '2' + } + ], + description: '开启自动上传后,订单将在支付完成且风险单校验通过后自动上传', + ui: { + widget: 'radio', + + } + }, + owner: { + type: 'string', + title: '资金数据', + enum: [ + { + label: '手动上传', + value: '1' + }, + { + label: '自动上传', + value: '2' + } + ], + description: '开启自动上传后,订单将在支付完成且风险单校验通过后自动上传', + ui: { + widget: 'radio', + + } + }, + }, + required: ['owner', 'no'], + } + this.ui = { + '*': { + spanLabelFixed: 100, + grid: { span: 24 }, + }, + }; + } + + /** + * 获取设置数据 + */ + loadData() { + this.service.request(this.service.$api_get_upload_setting, {}).subscribe(res => { + if (res) { + this.i = res; + + } + }) + } + + /** + * 修改 + * @param value + */ + save(value: any): void { + this.service.request(this.service.$api_upload_setting_save, { ...value }).subscribe(res => { + if (res) { + this.service.msgSrv.success('保存成功'); + this.modal.close(true); + } + }) + } + + close(): void { + this.modal.destroy(); + } +} diff --git a/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html new file mode 100644 index 00000000..5136cd37 --- /dev/null +++ b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html @@ -0,0 +1,22 @@ +
+
+ + + +
+
+ + +
+
{{item.expenseName}}:{{item.price | currency}}
+
+
+
+
+
+ diff --git a/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts new file mode 100644 index 00000000..48b1e9e5 --- /dev/null +++ b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts @@ -0,0 +1,24 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; +import { DatatableReportingVerifyResultComponent } from './verify-result.component'; + +describe('DatatableReportingVerifyResultComponent', () => { + let component: DatatableReportingVerifyResultComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [DatatableReportingVerifyResultComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DatatableReportingVerifyResultComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts new file mode 100644 index 00000000..3d52b397 --- /dev/null +++ b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts @@ -0,0 +1,85 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { STColumn, STComponent } from '@delon/abc/st'; +import { SFSchema } from '@delon/form'; +import { ModalHelper, _HttpClient } from '@delon/theme'; +import { NzModalRef } from 'ng-zorro-antd/modal'; +import { ReportingService } from '../../services/reporting.service'; + +@Component({ + selector: 'app-datatable-verify-result', + templateUrl: './verify-result.component.html', +}) +export class DatatableReportingVerifyResultComponent implements OnInit { + url = `/user`; + searchSchema: SFSchema = { + properties: { + no: { + type: 'string', + title: '编号' + } + } + }; + @ViewChild('st') private readonly st!: STComponent; + columns: STColumn[] = []; + record: any = {} + tabs: any[] = [ + { name: '订单信息', value: '1' }, + { name: '司机信息', value: '2' }, + { name: '车辆信息', value: '3' }, + ]; + + get reqParams() { + return {}; + } + constructor(public service: ReportingService, private modalRef: NzModalRef, public router: Router) { + + } + + ngOnInit(): void { + this.initST(); + } + + /** + * 初始化数据列表 + */ + initST() { + this.columns = [ + { title: '序号', type: 'no', className: 'text-center', width: '60px', }, + { title: '监管平台字段', index: 'orderStatus', className: 'text-center', width: '120px', }, + { title: '系统字段', index: 'orderStatus', className: 'text-center', width: '100px', }, + { title: '归属模块', index: 'orderStatus', className: 'text-center', width: '120px', }, + { title: '是否必填', index: 'orderStatus', className: 'text-center', width: '100px', }, + { title: '上传值', index: 'orderStatus', className: 'text-center', width: '150px', }, + { title: '本地校验', index: 'orderStatus', className: 'text-center', width: '100px', }, + { title: '错误内容', index: 'orderStatus', className: 'text-center', width: '150px', }, + ] + } + + + add(): void { + // this.modal + // .createStatic(FormEditComponent, { i: { id: 0 } }) + // .subscribe(() => this.st.reload()); + } + + selectTab(e: any) { + + } + + update() { + if (this.record?.billType === '1') { + window.open(location.origin + `/#/order-management/vehicle-detailChange/${this.record?.id}`) + + } else if (this.record.billType === '2') { + window.open(location.origin + `/#/order-management/bulk-detailChange/${this.record?.id}`); + } + + + } + close(): void { + this.modalRef.destroy(); + } + + +} diff --git a/src/app/routes/datatable/reporting/services/reporting.service.ts b/src/app/routes/datatable/reporting/services/reporting.service.ts index 99a1cad7..1343c918 100644 --- a/src/app/routes/datatable/reporting/services/reporting.service.ts +++ b/src/app/routes/datatable/reporting/services/reporting.service.ts @@ -6,9 +6,11 @@ import { BaseService } from '@shared'; }) export class ReportingService extends BaseService { - $api_order_reporting_page = ``; // 订单上报列表 + $api_order_reporting_page = `/api/sdc/billOperate/listWholePage`; // 订单上报列表 $api_recall_reporting = ``; // 撤回 $api_async_export_order_reporting_list = ``; // 导出订单上报 + $api_get_upload_setting = ``; // 修改上传设置 + $api_upload_setting_save = ``; // 修改上传设置 constructor(public injector: Injector) { super(injector); }