diff --git a/package-lock.json b/package-lock.json index ddf3948b..64c94964 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2879,6 +2879,35 @@ "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, + "@types/quill": { + "version": "2.0.9", + "resolved": "https://registry.npmmirror.com/@types/quill/-/quill-2.0.9.tgz", + "integrity": "sha512-/n40Ypp+jF3GDLqB/5z1P+Odq1K98txXbBgRDkG6Z90LGC1AwQPtZWNeOdDg0yUlgBSUASmpeDn3eBPUuPXtuw==", + "dev": true, + "requires": { + "parchment": "^1.1.2", + "quill-delta": "^4.0.1" + }, + "dependencies": { + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "quill-delta": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-4.2.2.tgz", + "integrity": "sha512-qjbn82b/yJzOjstBgkhtBjN2TNK+ZHP/BgUQO+j6bRhWQQdmj2lH6hXG7+nwwLF41Xgn//7/83lxs9n2BkTtTg==", + "dev": true, + "requires": { + "fast-diff": "1.2.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + } + } + } + }, "@types/selenium-webdriver": { "version": "3.0.19", "resolved": "https://registry.npmmirror.com/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.19.tgz", @@ -10136,12 +10165,24 @@ "resolved": "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz", "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.nlark.com/lodash.memoize/download/lodash.memoize-4.1.2.tgz", diff --git a/proxy.conf.js b/proxy.conf.js index 31995def..822b7622 100644 --- a/proxy.conf.js +++ b/proxy.conf.js @@ -20,7 +20,7 @@ module.exports = { // } '//api': { target: { - host: 'tms-api-test.eascs.com', + host: 'tms-api-dev.eascs.com', protocol: 'https:', port: 443 }, diff --git a/src/app/core/guards/auth.guard.ts b/src/app/core/guards/auth.guard.ts index da4d1331..b5a30a58 100644 --- a/src/app/core/guards/auth.guard.ts +++ b/src/app/core/guards/auth.guard.ts @@ -38,8 +38,6 @@ export class AuthGuard extends ACLGuard { } private handle(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, type: 1 | 2, router?: string): Observable { - console.log(route, state); - if (!router) { return type === 1 ? super.canActivate(route, state) : super.canActivateChild(route, state); } diff --git a/src/app/global-config.module.ts b/src/app/global-config.module.ts index ec62a552..163c16c9 100644 --- a/src/app/global-config.module.ts +++ b/src/app/global-config.module.ts @@ -17,7 +17,7 @@ const alainConfig: AlainConfig = { page: { show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }, modal: { size: 'lg' } }, - sf: { button: { search: '查询' } }, + sf: { button: { search: '查询' }, ui: { placeholder: '请输入' } }, pageHeader: { homeI18n: 'home', recursiveBreadcrumb: true }, auth: { login_url: '/passport/login' }, acl: { guard_url: '/exception/403' } diff --git a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts index aef18902..5113c45c 100644 --- a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts +++ b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts @@ -27,9 +27,9 @@ export class WithdrawalsRecordComponent implements OnInit { refundStatus: any = ''; msg = ''; - constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {} + constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) { } - ngOnInit(): void {} + ngOnInit(): void { } beforeReq = (requestOptions: STRequestOptions) => { if (this.sf) { @@ -42,6 +42,7 @@ export class WithdrawalsRecordComponent implements OnInit { refundStatus: this.refundStatus || null }); } + delete requestOptions?.body?.expand; return requestOptions; }; @@ -80,6 +81,10 @@ export class WithdrawalsRecordComponent implements OnInit { label: '拒绝', type: 'default', onClick: () => { + if (!this.msg || this.msg.trim().length === 0) { + this.service.msgSrv.warning('请填写拒绝原因 '); + return false; + } this.service .request(this.service.$api_disagree_refund, { refundApplicationId: params, @@ -92,6 +97,7 @@ export class WithdrawalsRecordComponent implements OnInit { this.st.load(1); } }); + return false; } }, { diff --git a/src/app/routes/partner/account-management/components/account-detail/account-detail.component.html b/src/app/routes/partner/account-management/components/account-detail/account-detail.component.html index e37a9ce3..8669a08f 100644 --- a/src/app/routes/partner/account-management/components/account-detail/account-detail.component.html +++ b/src/app/routes/partner/account-management/components/account-detail/account-detail.component.html @@ -1,3 +1,10 @@ + + + + + diff --git a/src/app/routes/partner/account-management/components/account-detail/account-detail.component.ts b/src/app/routes/partner/account-management/components/account-detail/account-detail.component.ts index 9dd83dc6..860ea7c4 100644 --- a/src/app/routes/partner/account-management/components/account-detail/account-detail.component.ts +++ b/src/app/routes/partner/account-management/components/account-detail/account-detail.component.ts @@ -150,4 +150,8 @@ export class PartnerAccountManagementAccountDetailComponent implements OnInit { this.st.load(1); } export() { } + + goBack() { + window.history.go(-1); + } } diff --git a/src/app/routes/partner/account-management/components/list/list.component.html b/src/app/routes/partner/account-management/components/list/list.component.html index 9992f0ab..465b42a3 100644 --- a/src/app/routes/partner/account-management/components/list/list.component.html +++ b/src/app/routes/partner/account-management/components/list/list.component.html @@ -1,13 +1,12 @@ + - - + + @@ -20,14 +19,14 @@ [page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }" [loading]="service.http.loading"> - {{item.yskmoney}} + {{item.yskmoney}}
{{item.approvalStatus1 | currency:' '}}
{{item.yskmoney | currency:' + [routerLink]="'/partner/account-management/am/recorded/detail/'+item?.id">{{item.yskmoney | currency:' '}} diff --git a/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.html b/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.html index dd218401..5fbc2ce6 100644 --- a/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.html +++ b/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.html @@ -1,3 +1,10 @@ + + + + + diff --git a/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.ts b/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.ts index 4efdf3a2..a3dc1911 100644 --- a/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.ts +++ b/src/app/routes/partner/account-management/components/recorded-detail/recorded-detail.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; import { STColumn, STComponent } from '@delon/abc/st'; -import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; +import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema, Widget } from '@delon/form'; import { ModalHelper, _HttpClient } from '@delon/theme'; import { AccountManagemantService } from '../../services/account-managemant.service'; @@ -102,7 +102,7 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit { title: '操作', className: 'text-center', width: '20%', buttons: [ { text: '订单明细', - click: (_record) => this.router.navigate(['/']) + click: (_record) => window.open(location.origin + `#/partner/rebate/record?ltdId=${_record?.ltdId}`) } ] }, @@ -129,7 +129,7 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit { * @param record 当前行 */ viewBookedRecord(record: any) { - + window.open(location.origin + `#/partner/recorded/record?ltdId=${record?.ltdId}&userId=${record?.userId}&userIdLabel=${record?.banktypeLabel}`); } /** @@ -142,5 +142,8 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit { handleCancel() { this.showBillDetail = false; } + goBack() { + window.history.go(-1); + } } diff --git a/src/app/routes/partner/account-management/components/virtual-account-detail/virtual-account-detail.component.ts b/src/app/routes/partner/account-management/components/virtual-account-detail/virtual-account-detail.component.ts index c4c969dd..9db2127b 100644 --- a/src/app/routes/partner/account-management/components/virtual-account-detail/virtual-account-detail.component.ts +++ b/src/app/routes/partner/account-management/components/virtual-account-detail/virtual-account-detail.component.ts @@ -164,7 +164,7 @@ export class PartnerAccountManagementVirtualAccountDetailComponent implements On * @param _record 当前行信息 */ viewDetail(_record: any) { - window.open(location.origin + '/#/partner/account-management/account-detail'); + window.open(location.origin + `/#/partner/account-management/am/detail/${_record?.id}`); } close() { diff --git a/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html b/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html index 82f0ce06..e2073979 100644 --- a/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html +++ b/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html @@ -1,5 +1,5 @@ - - - + + + - - -
- - {{formData?.ltdName}} - - - {{formData?.bankType==='1'?'平安银行':'浦发银行'}} - - - {{formData?.refundApplyCode}} - - - {{formData?.bankAccountName}} - - - {{formData?.createTime}} - - - {{formData?.virtualAccount}} - - - {{formData?.refundStatusLabel}} - - - {{formData?.amount}} - - - {{formData?.bankSerialNumber}} - - - {{formData?.bankId}} - - - - -
- -
-
- -
+ + +
+ + {{formData?.ltdName}} + + + {{formData?.bankType==='1'?'平安银行':'浦发银行'}} + + + {{formData?.refundApplyCode}} + + + {{formData?.bankAccountName}} + + + {{formData?.createTime}} + + + {{formData?.virtualAccount}} + + + {{formData?.refundStatusLabel}} + + + {{formData?.amount | currency}} + + + {{formData?.bankSerialNumber}} + + + {{formData?.bankCardNumber}} + + + {{formData?.refundStatus==='3'?'下载回单':'暂无回单'}} + +
+ + +
+
+
- \ No newline at end of file +
+
diff --git a/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts b/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts index 74f5b1d4..95657e1e 100644 --- a/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts +++ b/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts @@ -2,12 +2,13 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { FreightAccountService } from 'src/app/routes/financial-management/services/freight-account.service'; + @Component({ selector: 'app-partner-account-management-withdrawals-detail', templateUrl: './withdrawals-detail.component.html', styleUrls: ['./withdrawals-detail.component.less'] }) -export class PartnerAccountManagementWithdrawalsDetailComponent implements OnInit { +export class PartnerAccountManagementWithdralDetailComponent implements OnInit { formData: any = {}; timeLineData: any = []; @@ -67,6 +68,19 @@ export class PartnerAccountManagementWithdrawalsDetailComponent implements OnIni }); } + downBack() { + if (this.formData?.refundStatus !== '3') { + return; + } + this.service.getReceiptUrl(this.formData.receiptUrl, { + bankType: this.formData.bankType, + rmYll: this.formData.userId, + snglFlgCd: this.formData.coreSerNo, + bussType: '06', + ltdId: this.formData.ltdId + }); + } + goBack() { history.go(-1); } diff --git a/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-record.component.html b/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-record.component.html index 14e2ff3e..449d3e1b 100644 --- a/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-record.component.html +++ b/src/app/routes/partner/account-management/components/withdrawals-record/withdrawals-record.component.html @@ -1,3 +1,4 @@ +
@@ -7,7 +8,7 @@
- + + +
+ \ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/add-etp-partner/add-etp-partner.component.less b/src/app/routes/partner/partner-list/components/add-etp-partner/add-etp-partner.component.less new file mode 100644 index 00000000..6b70e074 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/add-etp-partner/add-etp-partner.component.less @@ -0,0 +1,68 @@ +:host { + ::ng-deep { + nz-card { + + .pr { + position: relative; + } + + .pa { + position: absolute; + top : 50px; + left : 150px; + } + + .tips { + display : flex; + margin-bottom: 0; + color : #333; + + dt { + width: 150px; + } + + dd { + width : 190px; + margin-bottom: 0; + text-align : center; + } + } + + .form-title { + margin-bottom: 10px; + padding-left : 8px; + color : #333; + font-weight : 700; + font-size : 18px; + line-height : 20px; + border-left : solid 3px #1890ff; + } + + } + + .ant-form-item { + margin-left: 180px; + } + + nz-date-picker, + nz-input-number { + width: 100% !important; + } + + .input-back { + nz-form-item { + margin-left: 0px; + + .ant-form-item-label { + flex: 0 !important; + } + + .ant-form-item-control { + max-width : 100% !important; + margin-left: 20px !important; + } + } + } + + } + } \ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/add-etp-partner/add-etp-partner.component.ts b/src/app/routes/partner/partner-list/components/add-etp-partner/add-etp-partner.component.ts new file mode 100644 index 00000000..00540e31 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/add-etp-partner/add-etp-partner.component.ts @@ -0,0 +1,592 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { apiConf } from '@conf/api.conf'; +import { + SFUploadWidgetSchema, + SFComponent, + SFSchema, + SFUISchema, + SFCascaderWidgetSchema, + SFTextareaWidgetSchema, + SFDateWidgetSchema, + SFCheckboxWidgetSchema, + SFTreeSelectWidgetSchema +} from '@delon/form'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import { of } from 'rxjs'; +import { PartnerListService } from '../../services/partner-list.service'; + +const IMAGECONFIG = { + previewFile: (file: NzUploadFile) => of(file.url), + action: apiConf.waterFileUpload, + fileType: 'image/png,image/jpeg,image/jpg,image/gif', + fileSize: 5120, + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + name: 'multipartFile', + multiple: false, + listType: 'picture-card' +} as SFUploadWidgetSchema; + +const DATECONFIG = { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + widget: 'date', + format: 'yyyy-MM-dd', + placeholder: '请选择' +}; + +@Component({ + selector: 'app-add-etp-partner', + templateUrl: './add-etp-partner.component.html', + styleUrls: ['./add-etp-partner.component.less'] +}) +export class AddEtpPartnerComponent implements OnInit { + @ViewChild('sf', { static: false }) + sf!: SFComponent; + schema: SFSchema = this.initBasicInfoSF(); + ui: SFUISchema = { + '*': { + spanLabelFixed: 180, + grid: { span: 24 } + }, + $_basicInfoTitle: { + spanLabelFixed: 0 + }, + $_legalPersontitle: { + spanLabelFixed: 0 + }, + $_isLoingDate: { + spanLabelFixed: 100, + grid: { xxl: 6, xl: 6, lg: 4, md: 6 } + } + }; + + constructor(private router: Router, public service: PartnerListService) {} + ngOnInit() {} + + submitForm() { + if (!this.sf.valid ) { + this.sf.validator({ emitError: true }); + this.service.msgSrv.warning('请修改填写错误信息'); + return; + } + const enterpriseRegistrationTime = new Date(this.sf.value.enterpriseRegistrationTime); + const operatingStartTime = new Date(this.sf.value.operatingStartTime); + if (enterpriseRegistrationTime.getTime() > operatingStartTime.getTime()) { + this.service.msgSrv.warning('营业期限不能小于成立日期'); + return; + } + if (this.sf.value.operatingEndTime) { + const operatingEndTime = new Date(this.sf.value.operatingEndTime); + if (operatingStartTime.getTime() > operatingEndTime.getTime()) { + this.service.msgSrv.warning('营业期限不能小于期限开始日期'); + return; + } + } + const validStartTime = new Date(this.sf.value.legalPersonIdentityDTO.validStartTime); + if (this.sf.value.legalPersonIdentityDTO.validEndTime) { + const validEndTime = new Date(this.sf.value.legalPersonIdentityDTO.validEndTime); + if (validStartTime.getTime() > validEndTime.getTime()) { + this.service.msgSrv.warning('法人证件有效截止日期小于开始日期'); + return; + } + } + const sfVlaue = this.sf.value; + const params = {}; + Object.assign( + params, + { ...this.sf.value }, + { + enterpriseAddressCode: this.sf.value.enterpriseAddressCode[2], + oftenUsedServices: sfVlaue.oftenUsedServices, + registerAddress: sfVlaue.registerAddress, + registerPhone: sfVlaue.registerPhone, + creditPhoto: sfVlaue.creditPhoto, + creditPhotoWatermark: sfVlaue.creditPhotoWatermark, + promotersTelephone: sfVlaue.promotersTelephone, + networkTransporter: sfVlaue.networkTransporter, + adminUserInfo: { + certificateNumber: sfVlaue.certificateNumber, + certificatePhotoBack: sfVlaue.certificatePhotoBack, + certificatePhotoBackWatermark: sfVlaue.certificatePhotoBackWatermark, + certificatePhotoFront: sfVlaue.certificatePhotoFront, + certificatePhotoFrontWatermark: sfVlaue.certificatePhotoFrontWatermark, + name: sfVlaue.name + } + } + ); + // this.service.request(this.service.$api_save_enterprise_admin, params).subscribe(res => { + // if (res) { + // this.service.msgSrv.success('企业新增成功'); + // this.goBack(); + // } + // }); + } + + /* + * 根据地区code查询地区列表 + */ + getRegionDetailByCode(regionCode: any) { + return this.service.request(this.service.$api_get_region_by_code, { regionCode }); + } + + // 识别身份证 参数isFront:front-正面、back-背面;type:0-申请人身份证,1-法定代表人身份证 + checkIdCard(imgurl: any, isFront: string, type: number) { + const params = { + idCardUrl: imgurl, + side: isFront + }; + this.service.request(this.service.$api_ocr_recognize_id_card, params).subscribe(res => { + if (res) { + if (type === 1) { + // 法定代表人证件照 + if (isFront === 'front') { + // 正面 + if (res.name) { + this.sf.setValue('/legalPersonIdentityDTO/name', res.name); + } + if (res.number) { + this.sf.setValue('/legalPersonIdentityDTO/certificateType', 0); + this.sf.setValue('/legalPersonIdentityDTO/certificateNumber', res.number); + } + } + if (isFront === 'back') { + // 背面 + if (res.validFrom) { + this.sf.setValue('/legalPersonIdentityDTO/validStartTime', res.validFrom); + } + if (res.validTo) { + this.sf.setValue('/legalPersonIdentityDTO/validEndTime', res.validTo); + this.sf.setValue('/legalPersonIdentityDTO/_isLoingDate', false); + } else { + this.sf.setValue('/legalPersonIdentityDTO/_isLoingDate', true); + } + } + } + // 企业管理员证件照 + if (type === 0) { + if (isFront === 'front') { + // 正面 + if (res.name) { + this.sf.setValue('/name', res.name); + } + if (res.number) { + this.sf.setValue('/certificateNumber', res.number); + } + } + } + } + }); + } + + // 识别营业执照 + checkBusinessLicense(imgurl: any) { + this.service.request(this.service.$api_ocr_recognize_business_license, { businessLicenseUrl: imgurl }).subscribe(res => { + if (res) { + if (res.registrationNumber) { + this.sf.setValue('/unifiedSocialCreditCode', res.registrationNumber); + } + if (res.name) { + this.sf.setValue('/enterpriseName', res.name); + } + if (res.type) { + this.sf.setValue('/enterpriseType', res.type); + } + if (res.addressRegionCodes) { + this.sf.setValue('/enterpriseAddressCode', res.addressRegionCodes); + } + if (res.address) { + this.sf.setValue('/enterpriseAddress', res.address); + } + if (res.foundDate) { + this.sf.setValue('/enterpriseRegistrationTime', res.foundDate); + } + if (res.businessTermStartDate) { + this.sf.setValue('/operatingStartTime', res.businessTermStartDate); + } + if (res.businessTermEndDate) { + this.sf.setValue('/operatingEndTime', res.businessTermEndDate); + } else { + this.sf.setValue('/_isLoingDate', true); + } + if (res.businessScope) { + this.sf.setValue('/businessScope', res.businessScope); + } + } + }); + } + + goBack() { + window.history.go(-1); + } + + private initBasicInfoSF(): SFSchema { + return { + properties: { + // 企业基本信息 + _basicInfoTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + _licenseTips: { title: '营业执照', type: 'string', ui: { widget: 'custom' }, default: true }, + licensePhoto: { title: '', type: 'string', ui: { hidden: true } }, + licensePhotoWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/licensePhoto', args.fileList[0].response.data.fullFilePath); + this.checkBusinessLicense(args.fileList[0].response.data.fullFilePath); + } + } + } as SFUploadWidgetSchema + }, + unifiedSocialCreditCode: { + title: '统一社会信用代码', + type: 'string', + minLength: 1, + maxLength: 30, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + optionalHelp: + '为了企业用户的使用体验,若公司代码即统一社会信用代码已在本应用其他关联平台注册,则此处填写的公司资料将同步更新至对应已注册的平台', + placeholder: '请输入营业执照上的统一社会信用代码', + errors: { + required: '请输入18位公司代码' + } + } + }, + enterpriseName: { + title: '公司名称', + type: 'string', + minLength: 1, + maxLength: 100, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入营业执照上的统一社会信用代码', + errors: { + required: '请输入公司名称' + } + } + }, + operatingStartTime: { + title: '营业期限', + type: 'string', + ui: { + ...DATECONFIG, + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + errors: { + required: '请选择开始日期' + } + } as SFDateWidgetSchema + }, + operatingEndTime: { + title: '', + type: 'string', + ui: { + ...DATECONFIG, + grid: { xxl: 13, xl: 18, lg: 20, md: 18 }, + errors: { + required: '请选择截止日期' + }, + change: i => { + this.sf?.setValue('/_isLoingDate', false); + } + } as SFDateWidgetSchema + }, + _isLoingDate: { + title: '长期', + type: 'boolean', + ui: { + class: 'input-back', + widget: 'checkbox', + change: i => this.sf?.setValue('/operatingEndTime', null) + } as SFCheckboxWidgetSchema + }, + + // 法人信息 + legalPersonIdentityDTO: { + type: 'object', + properties: { + _legalPersontitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + _certificatePhototips: { title: '法定代表人证件照', type: 'string', ui: { widget: 'custom' }, default: true }, + _certificatePhotoExmplateA: { title: '', type: 'string', ui: { widget: 'custom', offsetControl: 6 } }, + certificatePhotoFrontWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/legalPersonIdentityDTO/certificatePhotoFront', args.fileList[0].response.data.fullFilePath); + this.checkIdCard(args.fileList[0].response.data.fullFilePath, 'front', 1); + } + } + } as SFUploadWidgetSchema + }, + _certificatePhotoExmplateB: { title: '', type: 'string', ui: { widget: 'custom', offsetControl: 6 } }, + certificatePhotoFront: { title: '', type: 'string', ui: { hidden: true } }, + certificatePhotoBack: { title: '', type: 'string', ui: { hidden: true } }, + certificatePhotoBackWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/legalPersonIdentityDTO/certificatePhotoBack', args.fileList[0].response.data.fullFilePath); + this.checkIdCard(args.fileList[0].response.data.fullFilePath, 'back', 1); + } + } + } as SFUploadWidgetSchema + }, + name: { + title: '法人代表姓名', + type: 'string', + maxLength: 8, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入营业执照上的法人姓名' + } + }, + certificateType: { + type: 'string', + title: '法人证件类型', + enum: [ + { label: '大陆身份证', value: 0 }, + { label: '港澳居民通行证', value: 1 }, + { label: '香港居民通行证', value: 2 } + ], + default: 0, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + widget: 'select' + } + }, + certificateNumber: { + title: ' 法定代表人证件号', + type: 'string', + format: 'id-card', + minLength: 1, + maxLength: 18, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入法定代表人证件号' + } + }, + validStartTime: { + title: '法人证件有效开始日期', + type: 'string', + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + widget: 'date', + format: 'yyyy-MM-dd', + placeholder: '请选择', + errors: { + required: '请选择开始日期' + } + } as SFDateWidgetSchema + }, + validEndTime: { + title: '法人证件有效截止日期', + type: 'string', + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + widget: 'date', + format: 'yyyy-MM-dd', + placeholder: '请选择', + errors: { + required: '请选择截止日期' + }, + change: i => { + this.sf?.setValue('/legalPersonIdentityDTO/_isLoingDate', false); + } + } as SFDateWidgetSchema + }, + _isLoingDate: { + title: '长期', + type: 'boolean', + ui: { + spanLabelFixed: 100, + grid: { span: 6 }, + class: 'input-back', + widget: 'checkbox', + change: i => this.sf?.setValue('/legalPersonIdentityDTO/validEndTime', null) + } as SFCheckboxWidgetSchema + } + }, + required: [ + '_certificatePhototips', + 'certificatePhotoFront', + 'certificatePhotoBack', + 'name', + 'certificateType', + 'certificateNumber', + 'validStartTime' + ] + }, + // 企业管理员信息 + adminUserInfo: { + type: 'object', + properties: { + _adminTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + adminMobile: { + title: ' 企业管理员手机号', + type: 'string', + minLength: 1, + format: 'mobile', + maxLength: 11, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入企业管理员手机号', + errors: { required: '请输入企业管理员手机号', format: '手机号格式错误' } + } + }, + _adminCertificatePhotoTipsA: { + title: '企业管理员证件照', + type: 'string', + ui: { + widget: 'custom' + }, + default: true + }, + certificatePhotoFront: { title: '', type: 'string', ui: { hidden: true } }, + certificatePhotoBack: { title: '', type: 'string', ui: { hidden: true } }, + certificatePhotoFrontWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/certificatePhotoFront', args.fileList[0].response.data.fullFilePath); + this.checkIdCard(args.fileList[0].response.data.fullFilePath, 'front', 0); + } + } + } as SFUploadWidgetSchema + }, + _adminCertificatePhotoTipsB: { + title: '', + type: 'string', + ui: { + widget: 'custom', + offsetControl: 6 + } + }, + certificatePhotoBackWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/certificatePhotoBack', args.fileList[0].response.data.fullFilePath); + } + } + } as SFUploadWidgetSchema + }, + name: { + title: '企业管理员姓名', + type: 'string', + maxLength: 8, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入企业管理员姓名' + } + }, + certificateNumber: { + title: '企业管理员身份证号', + type: 'string', + format: 'id-card', + minLength: 1, + maxLength: 18, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入企业管理员身份证号' + } + }, + operatingStartTime: { + title: '身份证有效开始日期', + type: 'string', + ui: { + ...DATECONFIG, + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + errors: { + required: '请选择开始日期' + } + } as SFDateWidgetSchema + }, + operatingEndTime: { + title: '身份证有效截止日期', + type: 'string', + ui: { + ...DATECONFIG, + grid: { xxl: 13, xl: 18, lg: 20, md: 18 }, + errors: { + required: '请选择截止日期' + }, + change: i => { + this.sf?.setValue('/adminUserInfo/_isLoingDate', false); + } + } as SFDateWidgetSchema + }, + _isLoingDate: { + title: '长期', + type: 'boolean', + ui: { + spanLabelFixed: 100, + grid: { span: 6 }, + class: 'input-back', + widget: 'checkbox', + change: i => this.sf?.setValue('/adminUserInfo/operatingEndTime', null) + } as SFCheckboxWidgetSchema + } + }, + required: ['_adminCertificatePhotoTipsA', 'adminMobile', 'name', 'certificateNumber','operatingStartTime'] + }, + // 所属城市 + _addressTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + status3: { + type: 'string', + title: '所属城市', + default: ['WAIT_BUYER_PAY', 'TRADE_FINISHED'], + ui: { + widget: 'tree-select', + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请选择城市(最多3个)', + checkable: true, + asyncData: () => + of([ + { title: '待支付', key: 'WAIT_BUYER_PAY' }, + { title: '已支付', key: 'TRADE_SUCCESS' }, + { title: '交易完成', key: 'TRADE_FINISHED' } + ]) + } as SFTreeSelectWidgetSchema, + }, + // 渠道销售 + _channelTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + channel: { + title: '渠道销售邀请码', + type: 'string', + minLength: 1, + maxLength: 100, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入渠道销售邀请码', + errors: { + required: '请输入渠道销售邀请码' + } + } + } + }, + required: ['_licenseTips', 'licensePhotoWatermark', 'unifiedSocialCreditCode', 'enterpriseName', 'operatingStartTime', 'status3','channel'] + }; + } +} diff --git a/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.html b/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.html new file mode 100644 index 00000000..e476071d --- /dev/null +++ b/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.html @@ -0,0 +1,44 @@ + + + + + +
合伙人信息
+
+ +
+
+
正面照(人像面)
+
示例
+
+
+
+
+ +
+
+
背面照(国徽面)
+
示例
+
+
+
+
+ + + +
所属城市
+
+ + + +
渠道销售
+
+
+ + +
+ + +
+
\ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.less b/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.less new file mode 100644 index 00000000..6b70e074 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.less @@ -0,0 +1,68 @@ +:host { + ::ng-deep { + nz-card { + + .pr { + position: relative; + } + + .pa { + position: absolute; + top : 50px; + left : 150px; + } + + .tips { + display : flex; + margin-bottom: 0; + color : #333; + + dt { + width: 150px; + } + + dd { + width : 190px; + margin-bottom: 0; + text-align : center; + } + } + + .form-title { + margin-bottom: 10px; + padding-left : 8px; + color : #333; + font-weight : 700; + font-size : 18px; + line-height : 20px; + border-left : solid 3px #1890ff; + } + + } + + .ant-form-item { + margin-left: 180px; + } + + nz-date-picker, + nz-input-number { + width: 100% !important; + } + + .input-back { + nz-form-item { + margin-left: 0px; + + .ant-form-item-label { + flex: 0 !important; + } + + .ant-form-item-control { + max-width : 100% !important; + margin-left: 20px !important; + } + } + } + + } + } \ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.ts b/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.ts new file mode 100644 index 00000000..ed2eac4f --- /dev/null +++ b/src/app/routes/partner/partner-list/components/add-personal-partner/add-personal-partner.component.ts @@ -0,0 +1,344 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { apiConf } from '@conf/api.conf'; +import { SFUploadWidgetSchema, SFComponent, SFSchema, SFUISchema, SFDateWidgetSchema, SFCheckboxWidgetSchema, SFTreeSelectWidgetSchema } from '@delon/form'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import { of } from 'rxjs'; +import { PartnerListService } from '../../services/partner-list.service'; + +const IMAGECONFIG = { + previewFile: (file: NzUploadFile) => of(file.url), + action: apiConf.waterFileUpload, + fileType: 'image/png,image/jpeg,image/jpg,image/gif', + fileSize: 5120, + limit: 1, + limitFileCount: 1, + resReName: 'data.fullFileWatermarkPath', + urlReName: 'data.fullFileWatermarkPath', + widget: 'upload', + name: 'multipartFile', + multiple: false, + listType: 'picture-card' +} as SFUploadWidgetSchema; + +const DATECONFIG = { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + widget: 'date', + format: 'yyyy-MM-dd', + placeholder: '请选择' +}; + +@Component({ + selector: 'app-add-personal-partner', + templateUrl: './add-personal-partner.component.html', + styleUrls: ['./add-personal-partner.component.less'] +}) +export class AddPersonalPartnerComponent implements OnInit { + @ViewChild('sf', { static: false }) + sf!: SFComponent; + schema: SFSchema = this.initBasicInfoSF(); + ui: SFUISchema = { + '*': { + spanLabelFixed: 180, + grid: { span: 24 } + }, + $_basicInfoTitle: { + spanLabelFixed: 0 + }, + $_legalPersontitle: { + spanLabelFixed: 0 + }, + $_isLoingDate: { + spanLabelFixed: 100, + grid: { xxl: 6, xl: 6, lg: 4, md: 6 } + } + }; + + constructor(private router: Router, public service: PartnerListService) {} + ngOnInit() {} + + submitForm() { + if (!this.sf.valid) { + this.sf.validator({ emitError: true }); + this.service.msgSrv.warning('请修改填写错误信息'); + return; + } + const enterpriseRegistrationTime = new Date(this.sf.value.enterpriseRegistrationTime); + const operatingStartTime = new Date(this.sf.value.operatingStartTime); + if (enterpriseRegistrationTime.getTime() > operatingStartTime.getTime()) { + this.service.msgSrv.warning('营业期限不能小于成立日期'); + return; + } + if (this.sf.value.operatingEndTime) { + const operatingEndTime = new Date(this.sf.value.operatingEndTime); + if (operatingStartTime.getTime() > operatingEndTime.getTime()) { + this.service.msgSrv.warning('营业期限不能小于期限开始日期'); + return; + } + } + const validStartTime = new Date(this.sf.value.legalPersonIdentityDTO.validStartTime); + if (this.sf.value.legalPersonIdentityDTO.validEndTime) { + const validEndTime = new Date(this.sf.value.legalPersonIdentityDTO.validEndTime); + if (validStartTime.getTime() > validEndTime.getTime()) { + this.service.msgSrv.warning('法人证件有效截止日期小于开始日期'); + return; + } + } + const sfVlaue = this.sf.value; + const params = {}; + Object.assign( + params, + { ...this.sf.value }, + { + enterpriseAddressCode: this.sf.value.enterpriseAddressCode[2], + oftenUsedServices: sfVlaue.oftenUsedServices, + registerAddress: sfVlaue.registerAddress, + registerPhone: sfVlaue.registerPhone, + creditPhoto: sfVlaue.creditPhoto, + creditPhotoWatermark: sfVlaue.creditPhotoWatermark, + promotersTelephone: sfVlaue.promotersTelephone, + networkTransporter: sfVlaue.networkTransporter, + adminUserInfo: { + certificateNumber: sfVlaue.certificateNumber, + certificatePhotoBack: sfVlaue.certificatePhotoBack, + certificatePhotoBackWatermark: sfVlaue.certificatePhotoBackWatermark, + certificatePhotoFront: sfVlaue.certificatePhotoFront, + certificatePhotoFrontWatermark: sfVlaue.certificatePhotoFrontWatermark, + name: sfVlaue.name + } + } + ); + // this.service.request(this.service.$api_save_enterprise_admin, params).subscribe(res => { + // if (res) { + // this.service.msgSrv.success('企业新增成功'); + // this.goBack(); + // } + // }); + } + + /* + * 根据地区code查询地区列表 + */ + getRegionDetailByCode(regionCode: any) { + return this.service.request(this.service.$api_get_region_by_code, { regionCode }); + } + + // 识别身份证 参数isFront:front-正面、back-背面;type:0-申请人身份证,1-法定代表人身份证 + checkIdCard(imgurl: any, isFront: string, type: number) { + const params = { + idCardUrl: imgurl, + side: isFront + }; + this.service.request(this.service.$api_ocr_recognize_id_card, params).subscribe(res => { + if (res) { + if (type === 1) { + // 法定代表人证件照 + if (isFront === 'front') { + // 正面 + if (res.name) { + this.sf.setValue('/legalPersonIdentityDTO/name', res.name); + } + if (res.number) { + this.sf.setValue('/legalPersonIdentityDTO/certificateType', 0); + this.sf.setValue('/legalPersonIdentityDTO/certificateNumber', res.number); + } + } + if (isFront === 'back') { + // 背面 + if (res.validFrom) { + this.sf.setValue('/legalPersonIdentityDTO/validStartTime', res.validFrom); + } + if (res.validTo) { + this.sf.setValue('/legalPersonIdentityDTO/validEndTime', res.validTo); + this.sf.setValue('/legalPersonIdentityDTO/_isLoingDate', false); + } else { + this.sf.setValue('/legalPersonIdentityDTO/_isLoingDate', true); + } + } + } + // 企业管理员证件照 + if (type === 0) { + if (isFront === 'front') { + // 正面 + if (res.name) { + this.sf.setValue('/name', res.name); + } + if (res.number) { + this.sf.setValue('/certificateNumber', res.number); + } + } + } + } + }); + } + + goBack() { + window.history.go(-1); + } + + private initBasicInfoSF(): SFSchema { + return { + properties: { + // 合伙人信息 + adminUserInfo: { + type: 'object', + properties: { + _adminTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + adminMobile: { + title: ' 手机号', + type: 'string', + minLength: 1, + format: 'mobile', + maxLength: 11, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入手机号', + errors: { required: '请输入手机号', format: '手机号格式错误' } + } + }, + _adminCertificatePhotoTipsA: { + title: '证件照', + type: 'string', + ui: { + widget: 'custom' + }, + default: true + }, + certificatePhotoFront: { title: '', type: 'string', ui: { hidden: true } }, + certificatePhotoBack: { title: '', type: 'string', ui: { hidden: true } }, + certificatePhotoFrontWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/certificatePhotoFront', args.fileList[0].response.data.fullFilePath); + this.checkIdCard(args.fileList[0].response.data.fullFilePath, 'front', 0); + } + } + } as SFUploadWidgetSchema + }, + _adminCertificatePhotoTipsB: { + title: '', + type: 'string', + ui: { + widget: 'custom', + offsetControl: 6 + } + }, + certificatePhotoBackWatermark: { + type: 'string', + title: '', + ui: { + ...IMAGECONFIG, + descriptionI18n: '图片支持jpg、jpeg、png、gif格式,大小不超过5M', + change: args => { + if (args.type === 'success') { + this.sf.setValue('/certificatePhotoBack', args.fileList[0].response.data.fullFilePath); + } + } + } as SFUploadWidgetSchema + }, + name: { + title: '姓名', + type: 'string', + maxLength: 8, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入姓名' + } + }, + certificateNumber: { + title: '身份证号', + type: 'string', + format: 'id-card', + minLength: 1, + maxLength: 18, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入身份证号' + } + }, + operatingStartTime: { + title: '身份证有效开始日期', + type: 'string', + ui: { + ...DATECONFIG, + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + errors: { + required: '请选择开始日期' + } + } as SFDateWidgetSchema + }, + operatingEndTime: { + title: '身份证有效截止日期', + type: 'string', + ui: { + ...DATECONFIG, + grid: { xxl: 13, xl: 18, lg: 20, md: 18 }, + errors: { + required: '请选择截止日期' + }, + change: i => { + this.sf?.setValue('/adminUserInfo/_isLoingDate', false); + } + } as SFDateWidgetSchema + }, + _isLoingDate: { + title: '长期', + type: 'boolean', + ui: { + spanLabelFixed: 100, + grid: { span: 6 }, + class: 'input-back', + widget: 'checkbox', + change: i => this.sf?.setValue('/adminUserInfo/operatingEndTime', null) + } as SFCheckboxWidgetSchema + } + }, + required: ['_adminCertificatePhotoTipsA', 'adminMobile', 'name', 'certificateNumber', 'operatingStartTime'] + }, + // 所属城市 + _addressTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + status3: { + type: 'string', + title: '所属城市', + default: ['WAIT_BUYER_PAY', 'TRADE_FINISHED'], + ui: { + widget: 'tree-select', + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请选择城市(最多3个)', + checkable: true, + asyncData: () => + of([ + { title: '待支付', key: 'WAIT_BUYER_PAY' }, + { title: '已支付', key: 'TRADE_SUCCESS' }, + { title: '交易完成', key: 'TRADE_FINISHED' } + ]) + } as SFTreeSelectWidgetSchema + }, + // 渠道销售 + _channelTitle: { title: '', type: 'string', ui: { widget: 'custom' } }, + channel: { + title: '渠道销售邀请码', + type: 'string', + minLength: 1, + maxLength: 100, + ui: { + grid: { xxl: 13, xl: 18, lg: 24, md: 24 }, + placeholder: '请输入渠道销售邀请码', + errors: { + required: '请输入渠道销售邀请码' + } + } + } + }, + required: [ + 'status3', + 'channel' + ] + }; + } +} diff --git a/src/app/routes/partner/partner-list/components/index/partner-list.component.html b/src/app/routes/partner/partner-list/components/index/partner-list.component.html new file mode 100644 index 00000000..1e4aa340 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/index/partner-list.component.html @@ -0,0 +1,95 @@ + + + + +
+
+ +
+
+ + + +
+
+
+ + +
+ + +
+ + + +
+ + +
+
+ + 深圳某某有限公司 + + + + + + + +
+
+

说明:修改模板后,当月开始返佣收益将会按新模板计算

+
+ + +
+
+ + 深圳某某有限公司 + + + 张三/13999999999 + + + + + + + + + + + +

已选(0)

+ + + + + 客户名称 + + + + + + {{ data.name }} + + + +
+ + + + + + +
+
+

客户转移:客户跟着上级合伙人转移一并到新渠道销售下,会同步发起CRM《客户转移》流程;不转移的,客户会与上级合伙人解绑,成为渠道销售的直客

+
\ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/index/partner-list.component.less b/src/app/routes/partner/partner-list/components/index/partner-list.component.less new file mode 100644 index 00000000..e69de29b diff --git a/src/app/routes/partner/partner-list/components/index/partner-list.component.ts b/src/app/routes/partner/partner-list/components/index/partner-list.component.ts new file mode 100644 index 00000000..219a9d6b --- /dev/null +++ b/src/app/routes/partner/partner-list/components/index/partner-list.component.ts @@ -0,0 +1,298 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st'; +import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { AddCollectionInvoiceModalComponent } from 'src/app/routes/ticket-management/components/input-invoice/add-collection-invoice-modal/add-collection-invoice-modal.component'; +import { PartnerListService } from '../../services/partner-list.service'; +import { PartnerAuditModalComponent } from '../partner-audit-modal/partner-audit-modal.component'; + +@Component({ + selector: 'app-partner-list', + templateUrl: './partner-list.component.html', + styleUrls: ['../../../../commom/less/box.less'] +}) +export class PartnerListComponent implements OnInit { + @ViewChild('st', { static: true }) + st!: STComponent; + @ViewChild('sf', { static: false }) + sf!: SFComponent; + columns: STColumn[] = this.initST(); + searchSchema: SFSchema = this.initSF(); + _$expand = false; + + @ViewChild('editTemplate', { static: true }) + editTemplate: any; + + @ViewChild('editCannel', { static: true }) + editCannel: any; + customers: any[] = []; + + constructor(public service: PartnerListService, private nzModalService: NzModalService, private router: Router) {} + + ngOnInit(): void {} + + beforeReq = (requestOptions: STRequestOptions) => { + if (this.sf) { + let params = { ...this.sf.value }; + if (params.createTime) { + params.createTime = { start: this.sf?.value?.createTime?.[0], end: this.sf?.value?.createTime?.[1] }; + } + Object.assign(requestOptions.body, params); + } + return requestOptions; + }; + + auditPartner(item: any) { + const modal = this.nzModalService.create({ + nzTitle: '审核', + nzContent: PartnerAuditModalComponent, + nzComponentParams: { info: item }, + nzFooter: null + }); + } + + editTemplateAction(item: any) { + const modal = this.nzModalService.create({ + nzTitle: '修改返佣模板', + nzContent: this.editTemplate, + nzOnOk: () => { + this.confirmEditTemplate(); + return false; + } + }); + } + + confirmEditTemplate() { + const modal = this.nzModalService.confirm({ + nzTitle: '确定要修改返佣模板吗?', + nzOnOk: () => { + this.nzModalService.closeAll(); + } + }); + } + + editCannelAction(item: any) { + const modal = this.nzModalService.create({ + nzTitle: '修改返佣模板', + nzWidth: 650, + nzContent: this.editCannel, + nzOnOk: () => { + this.confirmEditCannel(); + return false; + } + }); + } + + confirmEditCannel() { + const modal = this.nzModalService.confirm({ + nzTitle: '确定提交吗?', + nzOnOk: () => { + this.nzModalService.closeAll(); + } + }); + } + + routeTo(route: string) { + this.router.navigate([route]); + } + + /** + * 重置表单 + */ + resetSF() { + this.sf.reset(); + this._$expand = false; + } + + /** + * 伸缩查询条件 + */ + expandToggle() { + this._$expand = !this._$expand; + this.sf?.setValue('/expand', this._$expand); + } + + private initSF(): SFSchema { + return { + properties: { + expand: { + type: 'boolean', + ui: { + hidden: true + } + }, + paycode: { + type: 'string', + title: '合伙人名称' + }, + paycode2: { + type: 'string', + title: '企业管理员' + }, + paycod3e: { + type: 'string', + title: '手机号' + }, + paycod31e: { + type: 'string', + title: '渠道销售', + ui: { + placeholder: '请输入姓名或者手机号', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + orderS2n: { + type: 'string', + title: '类型', + ui: { + widget: 'dict-select', + containsAllLabel: true, + params: { dictKey: 'refund:apply:status' }, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + paytype: { + type: 'string', + title: '认证审核状态', + ui: { + widget: 'dict-select', + containsAllLabel: true, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + paymode: { + type: 'string', + title: '签约状态', + ui: { + widget: 'dict-select', + containsAllLabel: true, + params: { dictKey: 'pay:mode' }, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + paymo1de: { + type: 'string', + title: 'CRM状态', + ui: { + widget: 'dict-select', + containsAllLabel: true, + params: { dictKey: 'pay:mode' }, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + paymo11de: { + type: 'string', + title: '注册渠道', + ui: { + widget: 'dict-select', + containsAllLabel: true, + params: { dictKey: 'pay:mode' }, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + paymo11d1e: { + type: 'string', + title: '返佣模板', + ui: { + widget: 'dict-select', + containsAllLabel: true, + params: { dictKey: 'pay:mode' }, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + paymo11d11e: { + type: 'string', + title: '合伙人状态', + ui: { + widget: 'dict-select', + containsAllLabel: true, + params: { dictKey: 'pay:mode' }, + placeholder: '请选择', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + createTime: { + title: '注册时间', + type: 'string', + ui: { + widget: 'sl-from-to-search', + format: 'yyyy-MM-dd', + visibleIf: { + expand: (value: boolean) => value + } + } as SFDateWidgetSchema + } + } + }; + } + + private initST(): STColumn[] { + return [ + { title: '合伙人名称', index: 'payCode', width: 180 }, + { title: '付款编码', index: 'ltdName', width: 160 }, + { title: '邀请码', index: 'payDate', className: 'text-center', width: 130 }, + { title: '企业管理员', index: 'payDate', width: 150 }, + { title: '手机号', index: 'payDate', className: 'text-center', width: 150 }, + { title: '类型', index: 'payDate', className: 'text-center', width: 130 }, + { title: '注册渠道', index: 'payDate', type: 'date', width: 130 }, + { title: '注册时间', index: 'payDate', className: 'text-center', width: 170 }, + { title: '渠道销售', index: 'payDate', width: 170 }, + { title: '返佣模板', index: 'payDate', width: 150 }, + { title: '认证审核状态', index: 'payDate', width: 150 }, + { title: '签约状态', index: 'payDate', width: 150 }, + { title: 'CRM状态', index: 'payDate', width: 150 }, + { title: '合伙人状态', index: 'payDate', className: 'text-center', width: 140 }, + { + title: '操作', + fixed: 'right', + width: '140px', + buttons: [ + { type: 'divider' }, + { + text: '详情
', + click: item => this.router.navigate(['/partner/partner-list/detail/' + item.id]) + }, + { + text: '修改返佣模板', + click: item => this.editTemplateAction(item) + }, + { + text: '修改渠道销售', + click: item => this.editCannelAction(item) + }, + { + text: '审核
', + click: item => this.auditPartner(item) + }, + { + text: '重发CRM流程', + click: item => this.router.navigate(['/partner/account-management/list/detail/' + item.id]) + } + ] + } + ]; + } +} diff --git a/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.html b/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.html new file mode 100644 index 00000000..8ea7c9f8 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.html @@ -0,0 +1,7 @@ +
+ +
+ \ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.less b/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.less new file mode 100644 index 00000000..e69de29b diff --git a/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.ts b/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.ts new file mode 100644 index 00000000..ab86de05 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/partner-audit-modal/partner-audit-modal.component.ts @@ -0,0 +1,133 @@ +import { Component, Input, OnInit, ViewChild } from '@angular/core'; +import { SFComponent, SFSchema, SFValue } from '@delon/form'; +import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal'; +import { PartnerListService } from '../../services/partner-list.service'; + +@Component({ + selector: 'app-partner-audit-modal', + templateUrl: './partner-audit-modal.component.html', + styleUrls: ['./partner-audit-modal.component.less'] +}) +export class PartnerAuditModalComponent implements OnInit { + @ViewChild('sf', { static: false }) + sf!: SFComponent; + @Input() + info: any; + schema!: SFSchema; + constructor(private nzModalService: NzModalService, public service: PartnerListService) {} + + ngOnInit(): void { + this.initSF(this.info); + } + + initSF(user: any) { + this.schema = { + properties: { + isPass: { + type: 'boolean', + ui: { + hidden: true + }, + default: this.info.isPass + }, + staffName: { + title: '合伙人名称', + type: 'string', + ui: { widget: 'text' }, + default: user.name + }, + status: { + title: '审核结果', + type: 'string', + maxLength: 11, + enum: [ + { value: true, label: '通过' }, + { value: false, label: '驳回' } + ], + ui: { + widget: 'radio', + hidden: this.info.isPass !== undefined + }, + default: true + }, + a: { + title: '渠道销售', + type: 'string', + enum: [ + { value: true, label: '通过' }, + { value: false, label: '驳回' } + ], + ui: { + widget: 'select', + placeholder: '请选择', + hidden: this.info.isPass === false, + visibleIf: { + status: value => value + }, + errors: { + required: ' ' + } + }, + default: '' + }, + b: { + title: '备注', + type: 'string', + maxLength: 100, + ui: { + widget: 'textarea', + placeholder: '请不要超过100个字', + autosize: { minRows: 3 }, + hidden: this.info.isPass === true, + visibleIf: { + status: value => !value || this.info.isPass === false + }, + errors: { + required: ' ' + } + } + } + }, + required: ['a', 'b'] + }; + } + + sure() { + this.nzModalService.confirm({ + nzTitle: `确定以“${this.info.userName}/${this.info.mobile}”的名义重新发起CRM《付款对象合同管理》吗?`, + nzOnOk: () => { + this.close(); + } + }); + // if (!this.sf.value.roleId || this.sf.value.roleId.length === 0) { + // this.service.msgSrv.error('员工角色不能为空!'); + // return; + // } + // if (this.i.userId === 0) { + // const params: any = { + // ...this.sf.value + // }; + // this.service.request(this.service.$api_add_staff, params).subscribe(res => { + // if (res) { + // this.service.msgSrv.success('保存成功!'); + // this.modal.close(true); + // } + // }); + // } else { + // const params: any = { + // appUserId: this.i.appUserId, + // ...this.sf.value + // }; + // this.service.request(this.service.$api_edit_staff, params).subscribe(res => { + // if (res) { + // this.service.msgSrv.success('编辑成功!'); + // this.modal.close(true); + // } + // }); + // } + } + + close() { + this.nzModalService.closeAll(); + } +} diff --git a/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.html b/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.html new file mode 100644 index 00000000..f242099c --- /dev/null +++ b/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.html @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 企业管理员信息 + + + + + + + + + + +
+ + + + +
+
+ + + + - + + + + + + + + + +
+ + + + + + + + +

+ 四要素验证: + + + +

+
+ + + + + + + + + + + + + + + - + + + + + + + + + +
+ + + 企业法人信息 + + + + + + + + + - + + + + + + + + + +
+ + + + +
+
+ + + + + + + {{ detailData?.fullRegionVO?.provinceName }}{{ detailData?.fullRegionVO?.cityName }}{{ + detailData?.fullRegionVO?.areaName }} + + +
+ + + + 渠道销售信息 + + 张学友 + + + 13999999999 + + + 2021-09-23 14:43:31 + + +
+ + + + 修改渠道销售记录 + + + + + + + + +
+ +
{{title}} +
+
+ {{content}} +
+
+
+ + + + + +
上传
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +

转移客户数:10

+ + +

不转移客户数:10

+ + +

+ 客户转移:客户跟着上级合伙人转移一并到新渠道销售下,会同步发起CRM《客户转移》流程;不转移的,客户会与上级合伙人解绑,修改成功后,修改时间也是合伙人与客户的结算结束时间,成为原来渠道销售的直客。 +

+
\ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.less b/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.less new file mode 100644 index 00000000..eadc3a6a --- /dev/null +++ b/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.less @@ -0,0 +1,30 @@ +@import '../../../../usercenter/less/edit.less'; + + +.user-info { + font-size: 16px; + + .enterprise-name { + margin-right: 15px; + } + + img { + width : 64px; + height : 64px; + margin-right : 15px; + border-radius: 50%; + } + + .user-info-des { + margin-bottom: 5px; + } +} + +:host::ng-deep { + .affix { + position: fixed !important; + top : 20px !important; + z-index : 999 !important; + width : 100% !important; + } +} \ No newline at end of file diff --git a/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.ts b/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.ts new file mode 100644 index 00000000..fdfd31a3 --- /dev/null +++ b/src/app/routes/partner/partner-list/components/partner-detail/partner-detail.component.ts @@ -0,0 +1,357 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { apiConf } from '@conf/api.conf'; +import { STColumn } from '@delon/abc/st'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { Subscription, fromEvent } from 'rxjs'; +import { PartnerListService } from '../../services/partner-list.service'; +import { PartnerAuditModalComponent } from '../partner-audit-modal/partner-audit-modal.component'; + +@Component({ + selector: 'app-partner-detail', + templateUrl: './partner-detail.component.html', + styleUrls: ['./partner-detail.component.less'], + providers: [DatePipe] +}) +export class PartnerDetailComponent implements OnInit { + @ViewChild('logModal') + logModal: any; + + columns: { logsColumn: STColumn[]; changeColumn: STColumn[]; beChangeColumn: STColumn[] } = this.initST(); + + detailData: any = { adminUserInfo: { name: '' }, legalPersonIdentityVO: { name: '' } }; + tempalateData = { ...this.detailData }; + + isEdit = false; + + uploadURl = apiConf.waterFileUpload; + disabledUpload = false; + enterpriseAddressCode: any = []; + ltdId: any = []; + + esignCheckStatus: any = { + 0: '不通过', + 1: '通过', + 2: '未认证' + }; + + scrollTop = 0; + subscribeScoll!: Subscription; + constructor( + public service: PartnerListService, + private route: ActivatedRoute, + private nzModalService: NzModalService, + private datePipe: DatePipe + ) {} + ngOnDestroy(): void { + this.subscribeScoll.unsubscribe(); + } + + ngOnInit() { + this.initData(); + this.loadltdId(); + this.subscribeScoll = fromEvent(window, 'scroll').subscribe(event => { + this.scrollTop = document.documentElement.scrollTop; + }); + } + loadltdId() { + // this.service.getNetworkFreightForwarder().subscribe(res => { + // if (res) { + // this.ltdId = res; + // } + // }); + } + + initData() { + // this.service + // .request(this.service.$api_get_freight_detail, { + // id: this.route.snapshot.params.id + // }) + // .subscribe(res => { + // if (res) { + // this.detailData = res; + // this.tempalateData = { ...this.detailData }; + // this.enterpriseAddressCode = [ + // Number(this.detailData.fullRegionVO?.provinceCode), + // Number(this.detailData.fullRegionVO?.cityCode), + // Number(this.detailData.fullRegionVO?.areaCode) + // ]; + // } + // }); + } + + goBack() { + window.history.go(-1); + } + /** + * 冻结 + */ + freezeOrResume(type: number) { + // this.service.http + // .post(this.service.$api_lock_freight, { + // id: this.route.snapshot.params.id, + // statedLocked: !!type + // }) + // .subscribe(res => { + // if (res.data === true) { + // if (type === 0) { + // this.service.msgSrv.success(`启用成功!`); + // } else { + // this.service.msgSrv.success(`冻结成功!`); + // } + // this.initData(); + // } else { + // this.service.msgSrv.error(res.msg || '操作失败!'); + // } + // }); + } + + auditPartner(isPass: boolean) { + const modal = this.nzModalService.create({ + nzTitle: '审核', + nzContent: PartnerAuditModalComponent, + nzComponentParams: { info: { ...this.detailData, isPass } }, + nzFooter: null + }); + } + + showChangeDetail() { + const modal = this.nzModalService.create({ + nzTitle: '详情', + nzContent: this.logModal, + nzNoAnimation: true, + nzWidth: 700, + nzFooter: null + }); + } + + ratify() { + this.isEdit = true; + } + + deleteImg(data: any, key: string, key2: string) { + this.nzModalService.warning({ + nzTitle: '是否确认删除该图片', + nzOnOk: () => { + this.disabledUpload = true; + data[key] = ''; + data[key2] = ''; + setTimeout(() => { + this.disabledUpload = false; + }, 100); + } + }); + } + changeUpload({ file, fileList, type }: any, data: any, key: string, key2: string, id: string) { + if (type === 'success') { + data[key] = file.response.data?.fullFileWatermarkPath; + data[key2] = file.response.data?.fullFilePath; + if (id === 'legalFront' || id === 'legalBack') { + this.checkIdCard(file.response.data?.fullFilePath, id === 'legalFront' ? 'front' : 'back', 1); + } + if (id === 'certificateBackFront' || id === 'certificateBack') { + this.checkIdCard(file.response.data?.fullFilePath, id === 'certificateBackFront' ? 'front' : 'back', 0); + } + if (id === 'detailPhoto') { + this.checkBusinessLicense(file.response.data?.fullFilePath); + } + } + } + + /** + * 级联获取地区数据 + * @param node 节点 + * @param index 层级 + * @returns + */ + loadRegionData = (node: any, index: number) => { + return new Promise(resolve => { + this.service.request(this.service.$api_get_region_by_code, { regionCode: node?.regionCode || '' }).subscribe( + res => { + node.children = res.map((item: any) => ({ ...item, isLeaf: index === 1, value: item.regionCode, label: item.name })); + }, + _ => {}, + () => { + resolve(node); + } + ); + }); + }; + + reset() { + this.detailData = { ...this.tempalateData }; + this.isEdit = false; + } + + save() { + const dateil = { ...this.detailData }; + Object.assign(dateil.legalPersonIdentityVO, { + validStartTime: this.datePipe.transform(dateil.legalPersonIdentityVO.validStartTime, 'yyyy-MM-dd'), + validEndTime: this.datePipe.transform(dateil.legalPersonIdentityVO.validEndTime, 'yyyy-MM-dd') + }); + const params = {}; + Object.assign(params, { + adminMobile: dateil.adminMobile, + adminAppUserId: dateil.adminAppUserId, + adminUserInfo: { ...dateil.adminUserInfo }, + bankAccount: dateil.bankAccount, + businessScope: dateil.businessScope, + createBank: dateil.createBank, + creditPhoto: dateil.creditPhoto, + creditPhotoWatermark: dateil.creditPhotoWatermark, + enterpriseAddress: dateil.enterpriseAddress, + enterpriseAddressCode: this.enterpriseAddressCode[2], + enterpriseLogo: dateil.enterpriseLogo, + enterpriseName: dateil.enterpriseName, + enterpriseRegistrationTime: this.datePipe.transform(dateil.enterpriseRegistrationTime, 'yyyy-MM-dd'), + enterpriseType: dateil.enterpriseType, + id: dateil.id, + legalPersonIdentityDTO: { ...dateil.legalPersonIdentityVO }, + licensePhoto: dateil.licensePhoto, + licensePhotoWatermark: dateil.licensePhotoWatermark, + networkTransporter: dateil.networkTransporter, + oftenUsedServices: dateil.oftenUsedServices, + operatingEndTime: this.datePipe.transform(dateil.operatingEndTime, 'yyyy-MM-dd'), + operatingStartTime: this.datePipe.transform(dateil.operatingStartTime, 'yyyy-MM-dd'), + promotersTelephone: dateil.promotersTelephone, + registerAddress: dateil.registerAddress, + registerPhone: dateil.registerPhone, + registrationCapital: dateil.registrationCapital, + taxAuthority: dateil.taxAuthority, + unifiedSocialCreditCode: dateil.unifiedSocialCreditCode + }); + // this.service.request(this.service.$api_save_enterprise_admin, params).subscribe(res => { + // if (res) { + // this.service.msgSrv.success('企业修改成功'); + // this.initData(); + // this.isEdit = false; + // } + // }); + } + + // 识别身份证 参数isFront:front-正面、back-背面;type:0-申请人身份证,1-法定代表人身份证 + checkIdCard(imgurl: any, isFront: string, type: number) { + const params = { + idCardUrl: imgurl, + side: isFront + }; + // this.service.request(this.service.$api_ocr_recognize_id_card, params).subscribe(res => { + // if (res) { + // if (type === 1) { + // // 法定代表人证件照 + // if (isFront === 'front') { + // // 正面 + // if (res.name) { + // this.detailData.legalPersonIdentityVO.name = res.name; + // } + // if (res.number) { + // this.detailData.legalPersonIdentityVO.certificateNumber = res.number; + // } + // } + // if (isFront === 'back') { + // // 背面 + // if (res.validFrom) { + // this.detailData.legalPersonIdentityVO.validStartTime = res.validFrom; + // } + // if (res.validTo) { + // this.detailData.legalPersonIdentityVO.validEndTime = res.validTo; + // } else { + // this.detailData.legalPersonIdentityVO.validEndTime = null; + // } + // } + // } + // // 企业管理员证件照 + // if (type === 0) { + // if (isFront === 'front') { + // // 正面 + // if (res.name) { + // this.detailData.adminUserInfo.name = res.name; + // } + // if (res.number) { + // this.detailData.adminUserInfo.certificateNumber = res.number; + // } + // } + // } + // } + // }); + } + + // 识别营业执照 + checkBusinessLicense(imgurl: any) { + // this.service.request(this.service.$api_ocr_recognize_business_license, { businessLicenseUrl: imgurl }).subscribe(res => { + // if (res) { + // if (res.registrationNumber) { + // this.detailData.unifiedSocialCreditCode = res.registrationNumber; + // } + // if (res.name) { + // this.detailData.enterpriseName = res.name; + // } + // if (res.type) { + // this.detailData.enterpriseType = res.type; + // } + // if (res.addressRegionCodes) { + // this.detailData.enterpriseAddressCode = res.addressRegionCodes; + // } + // if (res.address) { + // this.detailData.enterpriseAddress = res.address; + // } + // if (res.registeredCapital) { + // this.detailData.registrationCapital = res.registeredCapital; + // } + // if (res.foundDate) { + // this.detailData.enterpriseRegistrationTime = res.foundDate; + // } + // if (res.businessTermStartDate) { + // this.detailData.operatingStartTime = res.businessTermStartDate; + // } + // if (res.businessTermEndDate) { + // this.detailData.operatingEndTime = res.businessTermEndDate; + // } else { + // this.detailData.operatingEndTime = null; + // } + // if (res.businessScope) { + // this.detailData.businessScope = res.businessScope; + // } + // } + // }); + } + + private initST(): { logsColumn: STColumn[]; changeColumn: STColumn[]; beChangeColumn: STColumn[] } { + return { + logsColumn: [ + { title: '修改后渠道销售', index: 'payCode', width: 180 }, + { title: '修改前渠道销售', index: 'ltdName', width: 160 }, + { title: '转移客户数', index: 'payDate', className: 'text-center', width: 130 }, + { title: '生效节点', index: 'payDate', width: 150 }, + { title: '备注', index: 'payDate', className: 'text-center', width: 150 }, + { title: '修改时间', index: 'payDate', className: 'text-center', width: 130 }, + { title: '操作人', index: 'payDate', type: 'date', width: 130 }, + { + title: '操作', + fixed: 'right', + width: '140px', + buttons: [ + { + text: '详情', + click: () => this.showChangeDetail() + } + ] + } + ], + changeColumn: [ + { title: '客户名称', index: 'payCode', width: 180 }, + { title: '合伙人', index: 'ltdName', width: 160 }, + { title: '渠道销售', index: 'payDate', className: 'text-center', width: 130 }, + { title: 'CRM审核状态', index: 'payDate', width: 150 }, + { title: '生效时间', index: 'payDate', className: 'text-center', width: 130 } + ], + beChangeColumn: [ + { title: '客户名称', index: 'payCode', width: 180 }, + { title: '合伙人', index: 'ltdName', width: 160 }, + { title: '渠道销售', index: 'payDate', className: 'text-center', width: 130 }, + { title: '生效时间', index: 'payDate', className: 'text-center', width: 130 } + ] + }; + } +} diff --git a/src/app/routes/partner/partner-list/services/partner-list.service.ts b/src/app/routes/partner/partner-list/services/partner-list.service.ts new file mode 100644 index 00000000..eecd75f5 --- /dev/null +++ b/src/app/routes/partner/partner-list/services/partner-list.service.ts @@ -0,0 +1,30 @@ +import { Injectable, Injector } from '@angular/core'; +import { BaseService, EACacheService } from '@shared'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { ImageViewComponent } from 'src/app/shared/components/imagelist'; + +@Injectable() +export class PartnerListService extends BaseService { + $mock_url = '/rule?_allow_anonymous=true'; + + // 根据地区code查询列表 + $api_get_region_by_code = '/api/mdc/pbc/region/getRegionByCode'; + // 根据地区code查询地区详情 + $api_get_region_detail_by_code = '/api/mdc/pbc/region/getRegionDetailByCode'; + // 营业执照识别 + $api_ocr_recognize_business_license = '/api/mdc/pbc/hwc/ocr/recognizeBusinessLicense'; + // 身份证识别 + $api_ocr_recognize_id_card = '/api/mdc/pbc/hwc/ocr/recognizeIdCard'; + + constructor(public injector: Injector, private nzModalService: NzModalService) { + super(injector); + } + + showImg(url: any) { + const params = { + imgList: [url], + index: 0 + }; + this.nzModalService.create({ nzContent: ImageViewComponent, nzComponentParams: { params } }); + } +} diff --git a/src/app/routes/partner/partner-routing.module.ts b/src/app/routes/partner/partner-routing.module.ts index b22dabab..2ceac3d8 100644 --- a/src/app/routes/partner/partner-routing.module.ts +++ b/src/app/routes/partner/partner-routing.module.ts @@ -4,7 +4,7 @@ * @Author : Shiming * @Date : 2022-02-24 15:07:57 * @LastEditors : Shiming - * @LastEditTime : 2022-02-24 15:23:48 + * @LastEditTime : 2022-03-11 15:22:36 * @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\partner-routing.module.ts * Copyright (C) 2022 huzhenhong. All rights reserved. */ @@ -29,7 +29,15 @@ import { ParterRebateManageMentRecordComponent } from './rebate-management/compo import { PartnerAccountManagementAccountDetailComponent } from './account-management/components/account-detail/account-detail.component'; import { PartnerAccountManagementRecordedDetailComponent } from './account-management/components/recorded-detail/recorded-detail.component'; import { PartnerAccountManagementWithdrawalsRecordComponent } from './account-management/components/withdrawals-record/withdrawals-record.component'; -import { PartnerAccountManagementWithdrawalsDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component'; +import { PartnerAccountManagementWithdralDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component'; +import { PartnerRecordedRecordComponent } from './recorded/components/record/record.component'; +import { PartnerRecordedDetailComponent } from './recorded/components/detail/detail.component'; +import { ParterRebateManageMentSettingComponent } from './rebate-management/components/rebate-setting/rebate-setting.component'; +import { AddEtpPartnerComponent } from './partner-list/components/add-etp-partner/add-etp-partner.component'; +import { AddPersonalPartnerComponent } from './partner-list/components/add-personal-partner/add-personal-partner.component'; +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'; const routes: Routes = [ { @@ -41,7 +49,7 @@ const routes: Routes = [ { path: 'partner/custom-detail/:id', component: PartnerPartnerCustomDetailComponent }, { path: 'partner/custom-order-detail/:id', component: PartnerPartnerCustomOrderDetailComponent }, { path: 'sale/custom-detail/:id', component: PartnerSaleCustomDetailComponent }, - { path: 'sale/partner-detail/:id', component: PartnerSalePartnerDetailComponent }, + { path: 'sale/partner-detail/:id', component: PartnerSalePartnerDetailComponent } ] }, { @@ -49,7 +57,7 @@ const routes: Routes = [ children: [ { path: '', component: ParterChannelSalesListComponent }, { path: 'list', component: ParterChannelSalesListComponent }, - { path: 'edit', component: ParterChannelSalesEditComponent }, + { path: 'edit', component: ParterChannelSalesEditComponent } ] }, { @@ -57,7 +65,7 @@ const routes: Routes = [ children: [ { path: '', component: ParterLevelConfigListComponent }, { path: 'list', component: ParterLevelConfigListComponent }, - { path: 'edit', component: ParterLevelConfigEditComponent }, + { path: 'edit', component: ParterLevelConfigEditComponent } ] }, { @@ -65,16 +73,40 @@ const routes: Routes = [ children: [ { path: 'particulars', component: ParterRebateManageMentParticularsComponent }, { path: 'record', component: ParterRebateManageMentRecordComponent }, + { path: 'setting', component: ParterRebateManageMentSettingComponent }, + { path: 'setting/add/:id', component: ParterRebateManageMentAddComponent }, ] }, { path: 'account-management', children: [ - { path: 'list', component: PartnerAccountManagementListComponent }, - { path: 'account-detail', component: PartnerAccountManagementAccountDetailComponent }, - { path: 'recorded-detail/:id', component: PartnerAccountManagementRecordedDetailComponent }, - { path: 'withdraw-record', component: PartnerAccountManagementWithdrawalsRecordComponent }, - { path: 'withdraw-record/:id', component: PartnerAccountManagementWithdrawalsDetailComponent }, + { + path: 'am', + children: [ + { path: '', redirectTo: 'list' }, + { path: 'list', component: PartnerAccountManagementListComponent }, + { path: 'detail/:id', component: PartnerAccountManagementAccountDetailComponent }, + { path: 'recorded/detail/:id', component: PartnerAccountManagementRecordedDetailComponent }, + ] + }, + { + path: 'withdraw-record', + children: [ + { path: '', redirectTo: 'list' }, + { path: 'list', component: PartnerAccountManagementWithdrawalsRecordComponent }, + { path: 'detail/:id', component: PartnerAccountManagementWithdralDetailComponent } + ] + } + + ] + }, + { + path: 'partner-list', + children: [ + { path: '', component: PartnerListComponent }, + { path: 'detail/:id', component: PartnerDetailComponent }, + { path: 'add-etp-partner', component: AddEtpPartnerComponent }, + { path: 'add-personal-partner', component: AddPersonalPartnerComponent }, ] }, { @@ -83,9 +115,17 @@ const routes: Routes = [ { path: '', component: ParterClaimAuditListComponent }, { path: 'list', component: ParterClaimAuditListComponent }, { path: 'channel-detail', component: ParterClaimAuditListChannelDetailComponent }, - { path: 'partner-detail', component: ParterClaimAuditListPartnerDetailComponent }, + { path: 'partner-detail', component: ParterClaimAuditListPartnerDetailComponent } ] }, + { + path: 'recorded', + children: [ + { path: 'record', component: PartnerRecordedRecordComponent }, + { path: 'record/detail/:id', component: PartnerRecordedDetailComponent } + ] + }, + ]; @NgModule({ imports: [RouterModule.forChild(routes)], diff --git a/src/app/routes/partner/partner.module.ts b/src/app/routes/partner/partner.module.ts index 0d94b9ef..6eadaab1 100644 --- a/src/app/routes/partner/partner.module.ts +++ b/src/app/routes/partner/partner.module.ts @@ -4,42 +4,52 @@ * @Author : Shiming * @Date : 2022-03-09 14:34:55 * @LastEditors : Shiming - * @LastEditTime : 2022-03-09 14:56:46 + * @LastEditTime : 2022-03-11 15:28:01 * @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\partner.module.ts * Copyright (C) 2022 huzhenhong. All rights reserved. */ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '@shared'; -import { PartnerRoutingModule } from './partner-routing.module'; +import { NgModule } from '@angular/core'; +import { rebateTableModule, SharedModule } from '@shared'; +import { PartnerAccountManagementAccountDetailComponent } from './account-management/components/account-detail/account-detail.component'; +import { PartnerAccountManagementListComponent } from './account-management/components/list/list.component'; +import { PartnerAccountManagementRecordedDetailComponent } from './account-management/components/recorded-detail/recorded-detail.component'; +import { PartnerAccountManagementVirtualAccountDetailComponent } from './account-management/components/virtual-account-detail/virtual-account-detail.component'; +import { PartnerAccountManagementWithdralDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component'; +import { PartnerAccountManagementWithdrawalsRecordComponent } from './account-management/components/withdrawals-record/withdrawals-record.component'; import { PartnerBusinessStatisticsIndexComponent } from './business-statistics/components/index/index.component'; -import { ParterChannelSalesListComponent } from './channel-sales/components/list/list.component'; -import { ParterChannelSalesEditComponent } from './channel-sales/components/edit/edit.component'; -import { ParterLevelConfigEditComponent } from './level-config/components/edit/edit.component'; -import { ParterLevelConfigListComponent } from './level-config/components/list/list.component'; -import { PartnerPartnerStatisticsComponent } from './business-statistics/components/partner-statistics/partner-statistics.component'; -import { PartnerSaleStatisticsComponent } from './business-statistics/components/sale-statistics/sale-statistics.component'; -import { PartnerSaleCustomDetailComponent } from './business-statistics/components/sale-custom-detail/sale-custom-detail.component'; import { PartnerPartnerCustomDetailComponent } from './business-statistics/components/partner-custom-detail/partner-custom-detail.component'; -import { ParterRebateManageMentParticularsComponent } from './rebate-management/components/particulars/particulars.component'; -import { PartnerSalePartnerDetailComponent } from './business-statistics/components/sale-partner-detail/sale-partner-detail.component'; import { PartnerPartnerCustomOrderDetailComponent } from './business-statistics/components/partner-custom-order-detail/partner-custom-order-detail.component'; import { PartnerPartnerOrderDetailComponent } from './business-statistics/components/partner-order-detail/partner-order-detail.component'; -import { PartnerAccountManagementListComponent } from './account-management/components/list/list.component'; -import { ParterClaimAuditListComponent } from './claim-audit/components/list/list.component'; -import { ParterClaimAuditListChannelDetailComponent } from './claim-audit/components/channel-detail/channel-detail.component'; -import { ParterClaimAuditListPartnerDetailComponent } from './claim-audit/components/partner-detail/partner-detail.component'; +import { PartnerPartnerStatisticsComponent } from './business-statistics/components/partner-statistics/partner-statistics.component'; +import { PartnerSaleCustomDetailComponent } from './business-statistics/components/sale-custom-detail/sale-custom-detail.component'; +import { PartnerSalePartnerDetailComponent } from './business-statistics/components/sale-partner-detail/sale-partner-detail.component'; +import { PartnerSaleStatisticsComponent } from './business-statistics/components/sale-statistics/sale-statistics.component'; +import { ParterChannelSalesEditComponent } from './channel-sales/components/edit/edit.component'; +import { ParterChannelSalesListComponent } from './channel-sales/components/list/list.component'; import { ParterClaimAuditListChannelApproveComponent } from './claim-audit/components/channel-approve/channel-approve.component'; -import { ParterClaimAuditListPartnerApproveComponent } from './claim-audit/components/partner-approve/partner-approve.component'; -import { ParterClaimAuditListPartnerRejectComponent } from './claim-audit/components/partner-reject/partner-reject.component'; +import { ParterClaimAuditListChannelDetailComponent } from './claim-audit/components/channel-detail/channel-detail.component'; import { ParterClaimAuditListChannelRejectComponent } from './claim-audit/components/channel-reject/channel-reject.component'; -import { PartnerAccountManagementVirtualAccountDetailComponent } from './account-management/components/virtual-account-detail/virtual-account-detail.component'; - -import { PartnerAccountManagementAccountDetailComponent } from './account-management/components/account-detail/account-detail.component'; -import { PartnerAccountManagementRecordedDetailComponent } from './account-management/components/recorded-detail/recorded-detail.component'; -import { PartnerAccountManagementWithdrawalsRecordComponent } from './account-management/components/withdrawals-record/withdrawals-record.component'; -import { PartnerAccountManagementWithdrawalsDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component'; +import { ParterClaimAuditListComponent } from './claim-audit/components/list/list.component'; +import { ParterClaimAuditListPartnerApproveComponent } from './claim-audit/components/partner-approve/partner-approve.component'; +import { ParterClaimAuditListPartnerDetailComponent } from './claim-audit/components/partner-detail/partner-detail.component'; +import { ParterClaimAuditListPartnerRejectComponent } from './claim-audit/components/partner-reject/partner-reject.component'; +import { ParterLevelConfigEditComponent } from './level-config/components/edit/edit.component'; +import { ParterLevelConfigListComponent } from './level-config/components/list/list.component'; +import { PartnerListComponent } from './partner-list/components/index/partner-list.component'; +import { PartnerAuditModalComponent } from './partner-list/components/partner-audit-modal/partner-audit-modal.component'; +import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component'; +import { PartnerListService } from './partner-list/services/partner-list.service'; +import { PartnerRoutingModule } from './partner-routing.module'; +import { ParterRebateManageMentParticularsComponent } from './rebate-management/components/particulars/particulars.component'; import { ParterRebateManageMentRecordComponent } from './rebate-management/components/rebate-record/rebate-record.component'; +import { ParterRebateManageMentSettingComponent } from './rebate-management/components/rebate-setting/rebate-setting.component'; +import { AddEtpPartnerComponent } from './partner-list/components/add-etp-partner/add-etp-partner.component'; +import { AddPersonalPartnerComponent } from './partner-list/components/add-personal-partner/add-personal-partner.component'; +import { ParterRebateManageMenAbnormalFeedbackComponent } from './rebate-management/model/abnormal-feedback/abnormal-feedback.component'; +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'; const COMPONENTS: any[] = [ PartnerBusinessStatisticsIndexComponent, @@ -69,11 +79,23 @@ const COMPONENTS: any[] = [ PartnerAccountManagementAccountDetailComponent, PartnerAccountManagementRecordedDetailComponent, PartnerAccountManagementWithdrawalsRecordComponent, - PartnerAccountManagementWithdrawalsDetailComponent + PartnerAccountManagementWithdralDetailComponent, + PartnerRecordedRecordComponent, + PartnerRecordedDetailComponent, + PartnerListComponent, + PartnerDetailComponent, + ParterRebateManageMenAbnormalFeedbackComponent, + ParterRebateManageMentSettingComponent, + PartnerAuditModalComponent, + ParterRebateManageMentAddComponent, + AddEtpPartnerComponent, + AddPersonalPartnerComponent, + ]; @NgModule({ declarations: [...COMPONENTS], - imports: [CommonModule, PartnerRoutingModule, SharedModule] + imports: [CommonModule, PartnerRoutingModule, SharedModule,rebateTableModule], + providers: [PartnerListService] }) export class PartnerModule { } diff --git a/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.html b/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.html index 9ddc7ac3..50b366ea 100644 --- a/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.html +++ b/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.html @@ -4,7 +4,7 @@ * @Author : Shiming * @Date : 2022-02-24 20:09:49 * @LastEditors : Shiming - * @LastEditTime : 2022-03-09 15:04:50 + * @LastEditTime : 2022-03-10 15:12:03 * @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-record\\rebate-record.component.html * Copyright (C) 2022 huzhenhong. All rights reserved. --> @@ -41,5 +41,8 @@ [loadingDelay]="500" [loading]="service.http.loading" > + +
1223
+
diff --git a/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.ts b/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.ts index 54e8e57b..1f98579d 100644 --- a/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.ts +++ b/src/app/routes/partner/rebate-management/components/rebate-record/rebate-record.component.ts @@ -7,6 +7,7 @@ import { processSingleSort, ShipperBaseService } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { RebateManagementService } from '../../services/rebate-management.service'; import { ParterRebateManageMenRecordDetailComponent } from '../../model/record-detail/record-detail.component'; +import { ParterRebateManageMenAbnormalFeedbackComponent } from '../../model/abnormal-feedback/abnormal-feedback.component'; @Component({ selector: 'app-parter-channel-rebate-management-record', @@ -27,9 +28,8 @@ export class ParterRebateManageMentRecordComponent implements OnInit { public router: Router, public ar: ActivatedRoute, public service: RebateManagementService, - private modalService: NzModalService, + private modal: NzModalService, public shipperservice: ShipperBaseService, - private modal: ModalHelper ) {} /** * 查询字段个数 @@ -114,7 +114,7 @@ export class ParterRebateManageMentRecordComponent implements OnInit { }, { title: '异常反馈', - index: 'name1' + render: 'name44' }, { title: '操作', @@ -131,15 +131,36 @@ export class ParterRebateManageMentRecordComponent implements OnInit { ]; } /** - *查看详情 + *查看明细 */ viewEvaluate(item: any) { - // this.modalService - this.modal.createStatic(ParterRebateManageMenRecordDetailComponent, {i:item}).subscribe((res: boolean)=> { - if(res) { - + const modal = this.modal.create({ + nzTitle: '明细', + nzWidth: 1200, + nzContent: ParterRebateManageMenRecordDetailComponent, + nzComponentParams: { }, + nzFooter: null + }); + modal.afterClose.subscribe((res: any) => { + if (res) { } - }) + }); + } + /** + *异常反馈 + */ + feedback(item?: any) { + const modal = this.modal.create({ + nzTitle: '异常反馈', + nzWidth: 580, + nzContent: ParterRebateManageMenAbnormalFeedbackComponent, + nzComponentParams: { i: item }, + nzFooter: null + }); + modal.afterClose.subscribe((res: any) => { + if (res) { + } + }); } /** * 重置表单 diff --git a/src/app/routes/partner/rebate-management/components/rebate-setting/add/add.component.html b/src/app/routes/partner/rebate-management/components/rebate-setting/add/add.component.html new file mode 100644 index 00000000..b3c8f933 --- /dev/null +++ b/src/app/routes/partner/rebate-management/components/rebate-setting/add/add.component.html @@ -0,0 +1,16 @@ + + + + + 12121212 + + diff --git a/src/app/routes/partner/rebate-management/components/rebate-setting/add/add.component.ts b/src/app/routes/partner/rebate-management/components/rebate-setting/add/add.component.ts new file mode 100644 index 00000000..ebfe0bce --- /dev/null +++ b/src/app/routes/partner/rebate-management/components/rebate-setting/add/add.component.ts @@ -0,0 +1,25 @@ +import { ModalHelper } from '@delon/theme'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st'; +import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; +import { processSingleSort, ShipperBaseService } from '@shared'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { RebateManagementService } from '../../../services/rebate-management.service'; +@Component({ + selector: 'app-parter-channel-rebate-management-add', + templateUrl: './add.component.html' +}) +export class ParterRebateManageMentAddComponent implements OnInit { + + constructor( + public router: Router, + public ar: ActivatedRoute, + public service: RebateManagementService, + private modal: NzModalService, + public shipperservice: ShipperBaseService, + ) {} + + ngOnInit() { + } +} diff --git a/src/app/routes/partner/rebate-management/components/rebate-setting/rebate-setting.component.html b/src/app/routes/partner/rebate-management/components/rebate-setting/rebate-setting.component.html new file mode 100644 index 00000000..a4864e4d --- /dev/null +++ b/src/app/routes/partner/rebate-management/components/rebate-setting/rebate-setting.component.html @@ -0,0 +1,54 @@ + + + +
+ + +
+ + + +
+
+
+ + + + +
+
+ +
+
+ + +
1223
+
+
+
diff --git a/src/app/routes/partner/rebate-management/components/rebate-setting/rebate-setting.component.ts b/src/app/routes/partner/rebate-management/components/rebate-setting/rebate-setting.component.ts new file mode 100644 index 00000000..09f35ff9 --- /dev/null +++ b/src/app/routes/partner/rebate-management/components/rebate-setting/rebate-setting.component.ts @@ -0,0 +1,178 @@ +import { ModalHelper } from '@delon/theme'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st'; +import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; +import { processSingleSort, ShipperBaseService } from '@shared'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { RebateManagementService } from '../../services/rebate-management.service'; +import { ParterRebateManageMenRecordDetailComponent } from '../../model/record-detail/record-detail.component'; +import { ParterRebateManageMenAbnormalFeedbackComponent } from '../../model/abnormal-feedback/abnormal-feedback.component'; + +@Component({ + selector: 'app-parter-channel-rebate-management-setting', + templateUrl: './rebate-setting.component.html' +}) +export class ParterRebateManageMentSettingComponent implements OnInit { + schema: SFSchema = {}; + columns!: STColumn[]; + ui!: SFUISchema; + @ViewChild('st', { static: false }) + st!: STComponent; + @ViewChild('sf', { static: false }) + sf!: SFComponent; + spuStatus = '1'; + _$expand = false; + data = [{ name1: 1111 }]; + constructor( + public router: Router, + public ar: ActivatedRoute, + public service: RebateManagementService, + private modal: NzModalService, + public shipperservice: ShipperBaseService, + ) {} + /** + * 查询字段个数 + */ + get queryFieldCount(): number { + return Object.keys(this.schema?.properties || {}).length; + } + /** + * 伸缩查询条件 + */ + expandToggle(): void { + this._$expand = !this._$expand; + this.sf?.setValue('/_$expand', this._$expand); + } + /** + * 查询参数 + */ + get reqParams() { + const params: any = Object.assign({}, this.sf?.value || {}); + delete params._$expand; + return { + ...params, + deadlineTime: { + start: this.sf?.value?.deadlineTime?.[0] || '', + end: this.sf?.value?.deadlineTime?.[1] || '', + }, + }; + } + ngOnInit() { + this.initSF(); + this.initST(); + } + + initSF() { + this.schema = { + properties: { + _$expand: { type: 'boolean', ui: { hidden: true } }, + month: { + type: 'string', + title: '时间月份', + format: 'month', + }, + phone: { + type: 'string', + title: '合伙人名称' + }, + } + }; + this.ui = { + '*': { + spanLabelFixed: 140, + grid: { span: 8, gutter: 4 } + } + }; + } + + initST() { + this.columns = [ + { + title: '月份', + index: '配置名称' + }, + { + title: '配置类型', + index: 'name1' + }, + { + title: '备注', + index: 'name1' + }, + { + title: '关联合伙人范围', + index: 'name1' + }, + { + title: '创建时间', + index: 'name1' + }, + { + title: '启用时间', + index: 'name1' + }, + { + title: '优先级', + index: 'name44' + }, + { + title: '状态', + index: 'name44' + }, + { + title: '操作', + fixed: 'right', + width: '90px', + className: 'text-left', + buttons: [ + { + text: '查看', + click: _record => this.viewEvaluate(_record), + }, + { + text: '禁用', + click: _record => this.viewEvaluate(_record), + }, + ] + } + ]; + } + /** + *禁用 + */ + viewEvaluate(item: any) { + this.modal.confirm({ + nzTitle: '是否禁用该配置?', + nzOnOk: () => { + + } + }); + } + /** + *查看 + */ + feedback(item?: any) { + const modal = this.modal.create({ + nzTitle: '查看', + nzWidth: 580, + nzContent: ParterRebateManageMenAbnormalFeedbackComponent, + nzComponentParams: { i: item }, + nzFooter: null + }); + modal.afterClose.subscribe((res: any) => { + if (res) { + } + }); + } + configAction() { + this.router.navigate(['/partner/rebate/setting/add', '']) + } + /** + * 重置表单 + */ + resetSF() { + this.sf.reset(); + this.st.load(1); + } +} diff --git a/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.html b/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.html new file mode 100644 index 00000000..cef84c44 --- /dev/null +++ b/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.html @@ -0,0 +1,38 @@ + + + +
有订单有异常请查看
+
2022-09-08 00:00:00
+
+ +
+
+ +
+ +
+ +
\ No newline at end of file diff --git a/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.less b/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.less new file mode 100644 index 00000000..52b47a0e --- /dev/null +++ b/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.less @@ -0,0 +1,6 @@ +:host { + [nz-button] { + margin-right: 8px; + margin-bottom: 12px; + } +} \ No newline at end of file diff --git a/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.ts b/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.ts new file mode 100644 index 00000000..3d8c1fd4 --- /dev/null +++ b/src/app/routes/partner/rebate-management/model/abnormal-feedback/abnormal-feedback.component.ts @@ -0,0 +1,72 @@ +/* + * @Description : + * @Version : 1.0 + * @Author : Shiming + * @Date : 2022-03-10 14:50:45 + * @LastEditors : Shiming + * @LastEditTime : 2022-03-10 15:09:51 + * @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\model\\abnormal-feedback\\abnormal-feedback.component.ts + * Copyright (C) 2022 huzhenhong. All rights reserved. + */ +import { ModalHelper } from '@delon/theme'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st'; +import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema, SFTextareaWidgetSchema, SFUISchema } from '@delon/form'; +import { processSingleSort, ShipperBaseService } from '@shared'; +import { NzModalService, NzModalRef } from 'ng-zorro-antd/modal'; +import { RebateManagementService } from '../../services/rebate-management.service'; +import { NzButtonSize } from 'ng-zorro-antd/button'; + +@Component({ + selector: 'app-parter-channel-rebate-management-abnormal-feedback', + templateUrl: './abnormal-feedback.component.html' +}) +export class ParterRebateManageMenAbnormalFeedbackComponent implements OnInit { + schema: SFSchema = {}; + ui!: SFUISchema; + @ViewChild('sf', { static: false }) + sf!: SFComponent; + i!: any; + data = [{ name1: 1111 }]; + constructor( + public router: Router, + public ar: ActivatedRoute, + public service: RebateManagementService, + private modalService: NzModalService, + public shipperservice: ShipperBaseService, + public modalRef: NzModalRef, + ) {} + + + ngOnInit() { + this.initSF(); + } + + initSF() { + this.schema = { + properties: { + name3: { + type: 'string', + title: '回复', + maxLength: 50, + ui: { + widget: 'textarea', + autosize: { minRows: 3, maxRows: 6 }, + placeholder:'请不要超过50个字' + } as SFTextareaWidgetSchema, + }, + } + }; + this.ui = { + '*': { + spanLabelFixed: 60, + grid: { span: 16 }, + } + }; + } + close() { + this.modalRef.destroy() + } +} + diff --git a/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.html b/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.html index 65099230..63f8290c 100644 --- a/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.html +++ b/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.html @@ -4,7 +4,7 @@ * @Author : Shiming * @Date : 2022-02-24 20:09:49 * @LastEditors : Shiming - * @LastEditTime : 2022-03-09 15:14:50 + * @LastEditTime : 2022-03-10 14:34:30 * @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\model\\record-detail\\record-detail.component.html * Copyright (C) 2022 huzhenhong. All rights reserved. --> @@ -23,7 +23,7 @@ +
合计:2999.00元
+
+ +
\ No newline at end of file diff --git a/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.less b/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.less new file mode 100644 index 00000000..52b47a0e --- /dev/null +++ b/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.less @@ -0,0 +1,6 @@ +:host { + [nz-button] { + margin-right: 8px; + margin-bottom: 12px; + } +} \ No newline at end of file diff --git a/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.ts b/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.ts index b5c70083..1efde6a2 100644 --- a/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.ts +++ b/src/app/routes/partner/rebate-management/model/record-detail/record-detail.component.ts @@ -2,10 +2,11 @@ import { ModalHelper } from '@delon/theme'; import { Component, OnInit, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st'; -import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; +import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; import { processSingleSort, ShipperBaseService } from '@shared'; -import { NzModalService } from 'ng-zorro-antd/modal'; +import { NzModalService, NzModalRef } from 'ng-zorro-antd/modal'; import { RebateManagementService } from '../../services/rebate-management.service'; +import { NzButtonSize } from 'ng-zorro-antd/button'; @Component({ selector: 'app-parter-channel-rebate-management-record-detail', @@ -20,6 +21,7 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit { @ViewChild('sf', { static: false }) sf!: SFComponent; spuStatus = '1'; + size: NzButtonSize = 'large'; _$expand = false; data = [{ name1: 1111 }]; constructor( @@ -28,6 +30,7 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit { public service: RebateManagementService, private modalService: NzModalService, public shipperservice: ShipperBaseService, + public modalRef: NzModalRef, ) {} /** * 查询字段个数 @@ -50,10 +53,6 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit { delete params._$expand; return { ...params, - deadlineTime: { - start: this.sf?.value?.deadlineTime?.[0] || '', - end: this.sf?.value?.deadlineTime?.[1] || '', - }, }; } ngOnInit() { @@ -64,54 +63,33 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit { initSF() { this.schema = { properties: { - _$expand: { type: 'boolean', ui: { hidden: true } }, - name: { - type: 'string', - title: '订单号' - }, - phone: { - type: 'string', - title: '付款单号' - }, - phone2: { - type: 'string', - title: '下单客户' - }, enterpriseInfoId: { type: 'string', title: '网络货运人', ui: { widget: 'select', placeholder: '请选择', - visibleIf: { - _$expand: (value: boolean) => value - }, allowClear: true, - asyncData: () => this.shipperservice.getNetworkFreightForwarder() + asyncData: () => this.shipperservice.getNetworkFreightForwarder(), + change: (value: any) => { + console.log(value) + this.st.reload() + } } }, - phone3: { + paymentStatus: { + title: '银行类型', type: 'string', - title: '合伙人名称', ui: { - visibleIf: { - _$expand: (value: boolean) => value - }, - } + widget: 'dict-select', + params: { dictKey: 'overall:payment:status' }, + containsAllLabel: true, + change: (value: any) => { + console.log(value) + this.st.reload() + } + } as SFSelectWidgetSchema }, - deadlineTime: { - title: '时间范围', - type: 'string', - ui: { - widget: 'date', - mode: 'range', - format: 'yyyy-MM-dd', - visibleIf: { - _$expand: (value: boolean) => value - }, - allowClear: true - } as SFDateWidgetSchema - } } }; this.ui = { @@ -126,7 +104,7 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit { this.columns = [ { title: '订单号', - index: 'name1' + index: 'billCode' }, { title: '订单金额(元)', @@ -186,4 +164,8 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit { this.sf.reset(); this.st.load(1); } + close() { + this.modalRef.destroy() + } } + diff --git a/src/app/routes/partner/rebate-management/services/rebate-management.service.ts b/src/app/routes/partner/rebate-management/services/rebate-management.service.ts index 5430876a..d3a7a412 100644 --- a/src/app/routes/partner/rebate-management/services/rebate-management.service.ts +++ b/src/app/routes/partner/rebate-management/services/rebate-management.service.ts @@ -1,3 +1,13 @@ +/* + * @Description : + * @Version : 1.0 + * @Author : Shiming + * @Date : 2022-03-10 11:19:00 + * @LastEditors : Shiming + * @LastEditTime : 2022-03-10 13:51:05 + * @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\services\\rebate-management.service.ts + * Copyright (C) 2022 huzhenhong. All rights reserved. + */ import { Injectable, Injector } from '@angular/core'; import { BaseService } from '@shared'; @@ -5,7 +15,8 @@ import { BaseService } from '@shared'; providedIn: 'root', }) export class RebateManagementService extends BaseService { - + // 查询规则抽查列表 + public $api_get_listCompliancePage = '/api/sdc/billRiskOperate/listRiskPage'; constructor(public injector: Injector) { super(injector); } diff --git a/src/app/routes/partner/recorded/components/detail/detail.component.html b/src/app/routes/partner/recorded/components/detail/detail.component.html new file mode 100644 index 00000000..f3d36121 --- /dev/null +++ b/src/app/routes/partner/recorded/components/detail/detail.component.html @@ -0,0 +1,96 @@ + + + + + + +
+

待审批

+
+ +
+
+
+
+ + + + +
+ + {{formData?.ltdName}} + + + {{formData?.ltdName}} + + + {{formData?.refundApplyCode}} + + + {{formData?.bankType==='1'?'平安银行':'浦发银行'}} + + + {{formData?.virtualAccount}} + + + {{formData?.createTime}} + + + {{formData?.amount | currency}} + + + {{formData?.amount | currency}} + + + {{formData?.amount | currency}} + + + {{formData?.refundStatusLabel}} + + + + + + {{formData?.bankCardNumber}} + + + + + + {{formData?.bankSerialNumber}} + +
+ + +
+
+ +
+
+
+ + +
+
+ + + +
+
+
diff --git a/src/app/routes/partner/recorded/components/detail/detail.component.less b/src/app/routes/partner/recorded/components/detail/detail.component.less new file mode 100644 index 00000000..e299b7d1 --- /dev/null +++ b/src/app/routes/partner/recorded/components/detail/detail.component.less @@ -0,0 +1,17 @@ +:host::ng-deep { + + .ant-alert-info { + background-color: #f3f3f3; + border : 1px solid #dbdbdb; + + .ant-alert-message { + color: rgba(0, 0, 0, 0.85); + font-weight: 600; + font-size: 16px; + } + } + + .ant-form-item { + margin-bottom: 15px; + } +} \ No newline at end of file diff --git a/src/app/routes/partner/recorded/components/detail/detail.component.ts b/src/app/routes/partner/recorded/components/detail/detail.component.ts new file mode 100644 index 00000000..e1dc2eba --- /dev/null +++ b/src/app/routes/partner/recorded/components/detail/detail.component.ts @@ -0,0 +1,132 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { FreightAccountService } from 'src/app/routes/financial-management/services/freight-account.service'; + + +@Component({ + selector: 'app-partner-recored-detail', + templateUrl: './detail.component.html', + styleUrls: ['./detail.component.less'] +}) +export class PartnerRecordedDetailComponent implements OnInit { + @ViewChild('auditModal', { static: false }) auditModal!: any; + formData: any = {}; + timeLineData: any = []; + msg = ''; + id = ''; + + constructor(public service: FreightAccountService, private route: ActivatedRoute, private nzModalService: NzModalService) { + this.id = route.snapshot.params.id; + this.loadRefundDetail(this.id); + } + + ngOnInit(): void { } + + loadRefundDetail(id: string) { + this.service.request(this.service.$api_get_refund_detail, { id }).subscribe(res => { + if (res) { + this.formData = res; + // 处理流程节点数据 + // 流程是否结束 + let isEnd = false; + if (res.successTime) { + isEnd = true; + if (res.refundStatus === '3') { + this.timeLineData.push({ time: res.successTime, value: `到账成功`, color: 'green' }); + } else { + this.timeLineData.push({ time: res.successTime, value: `提现失败`, color: 'red' }); + } + } + if (res.agreeTime && res.refundStatus !== '4') { + this.timeLineData.push({ time: res.agreeTime, value: `银行处理中`, color: 'gray' }); + } + if (res.agreeTime) { + if (res.refundStatus === '4') { + isEnd = true; + this.timeLineData.push({ + time: res.agreeTime, + value: `拒绝提现
操作人员:${res.handlerUserIdLabel}`, + color: 'red' + }); + } else { + this.timeLineData.push({ + time: res.agreeTime, + value: `审核通过
操作人员:${res.handlerUserIdLabel}`, + color: 'gray' + }); + } + } + if (res.createTime) { + this.timeLineData.push({ + time: res.createTime, + value: `提交提现申请
提现${res.amount}元至${res.bankName}(${res.bankCardNumber})
操作人员:${res.userIdLabel}`, + color: 'gray' + }); + } + if (this.timeLineData?.length > 0 && !isEnd) { + this.timeLineData[0].color = 'green'; + } + } + }); + } + + auditAction(item?: any, type: string = '1') { + this.msg = ''; + let params: Array = []; + params = [item.id]; + const modal = this.nzModalService.create({ + nzTitle: type === '1' ? '审核' : '复审', + nzContent: this.auditModal, + nzFooter: [ + { + label: '拒绝', + type: 'default', + onClick: () => { + if (!this.msg || this.msg.trim().length === 0) { + this.service.msgSrv.warning('请填写拒绝原因 '); + return false; + } + this.service + .request(this.service.$api_disagree_refund, { + refundApplicationId: params, + msg: this.msg + }) + .subscribe(res => { + if (res) { + this.service.msgSrv.success('审核拒绝成功'); + modal.destroy(true); + } + }); + return false; + } + }, + { + label: '通过', + type: 'primary', + onClick: () => { + this.service + .request(this.service.$api_agree_refund, { + refundApplicationId: params, + msg: this.msg + }) + .subscribe(res => { + if (res) { + this.service.msgSrv.success('审核通过成功'); + modal.destroy(true); + } + }); + } + } + ] + }); + modal.afterClose.subscribe((res: any) => { + if (res) { + this.loadRefundDetail(this.id); + } + }); + } + goBack() { + history.go(-1); + } +} diff --git a/src/app/routes/partner/recorded/components/record/record.component.html b/src/app/routes/partner/recorded/components/record/record.component.html new file mode 100644 index 00000000..60aa8d08 --- /dev/null +++ b/src/app/routes/partner/recorded/components/record/record.component.html @@ -0,0 +1,72 @@ + + +
+
+ +
+
+ + + + +
+
+
+ + + + + + + + + + + +
+
+ 已选择 + {{ selectedRows.length }} 条数据   累计提现 {{ + totalCallNo }} + +
+ +
+
+ +
+ + + {{ item.bankName }}
{{ item.bankCardNumber }} +
+
+
+ 合伙人数: + 入账笔数: + 开票金额: + 代缴个税: + 入账金额: +
+
+
+ + +
+
+ + + +
+
+
diff --git a/src/app/routes/partner/recorded/components/record/record.component.ts b/src/app/routes/partner/recorded/components/record/record.component.ts new file mode 100644 index 00000000..4b97ba2c --- /dev/null +++ b/src/app/routes/partner/recorded/components/record/record.component.ts @@ -0,0 +1,327 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { STComponent, STColumn, STChange, STRequestOptions, STData } from '@delon/abc/st'; +import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { FreightAccountService } from 'src/app/routes/financial-management/services/freight-account.service'; +import Big from 'src/app/shared/utils/deal-precision'; + + +@Component({ + selector: 'app-partner-recorded-record', + templateUrl: './record.component.html', + styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/expend-but.less'] +}) +export class PartnerRecordedRecordComponent implements OnInit { + @ViewChild('st', { static: true }) st!: STComponent; + @ViewChild('sf', { static: false }) sf!: SFComponent; + @ViewChild('auditModal', { static: false }) auditModal!: any; + @ViewChild('viewReasonModal', { static: false }) viewReasonModal!: any; + columns!: STColumn[]; + searchSchema!: SFSchema; + totalInfo: any = { + partnerNum: 34, + count: 98, + invoiceAmount: 978239.98, + tax: 9878.00, + recorededAmount: 728698.98 + } + + _$expand = false; + + selectedRows: any[] = []; + totalCallNo = 0; + refundStatus: any = ''; + + msg = ''; + + ltdId = ''; // 网络货运人 + accountName = ''; // 账户名称 + + + constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router, public ar: ActivatedRoute) { + + this.accountName = this.ar.snapshot.queryParams?.userIdLabel || ''; + this.ltdId = this.ar.snapshot.queryParams?.ltdId || ''; + + } + + ngOnInit(): void { + this.searchSchema = this.initSF(); + this.columns = this.initST(); + } + + beforeReq = (requestOptions: STRequestOptions) => { + if (this.sf) { + Object.assign(requestOptions.body, { + ...this.sf.value, + createTime: { + start: this.sf.value.createTime?.[0] || '', + end: this.sf.value.createTime?.[1] || '' + }, + refundStatus: this.refundStatus || null + }); + } + delete requestOptions?.body?.expand; + return requestOptions; + }; + + afterRes = (data: any[], rawData?: any) => { + data = data.map(node => ({ ...node, disabled: node.refundStatus !== '1' })); + return data; + }; + + stChange(e: STChange): void { + if (e.type === 'checkbox') { + const checkRows = (e.checkbox as STData[]) || []; + //判断当前页是否有选中的行 + if (checkRows.length === 0) { + // 当前页没有存在已勾选的行,移除之前所记录的当前页的行 + const stList = this.st.list; + stList.forEach(item => { + this.selectedRows = this.selectedRows.filter((e: any) => e.id !== item.id); + }) + } else { + //添加新增的行 + checkRows.forEach((item: any) => { + const newSelectedList = this.selectedRows.filter((r: any) => r.id === item.id); + if (newSelectedList.length === 0) { + this.selectedRows.push(item); + + } + }) + // 移除取消选中的行 + const stList = this.st.list; + stList.forEach(item => { + if (!item.checked) { + const index = this.selectedRows.findIndex(_item => item.id === _item.id); + if (index !== -1) this.selectedRows.splice(index, 1); + } + }) + } + let totalCallNo = 0; + this.selectedRows.forEach((item => { + totalCallNo = new Big(this.totalCallNo).plus(item?.amount).parse(); + })); + this.totalCallNo = totalCallNo; + } else if (e.type === 'loaded') { + // 页面加载时勾选 + (e?.loaded || []).forEach((r) => { + this.selectedRows.forEach((x) => { + if (x.id === r.id) { + r.checked = true; + } + }); + }); + } + } + + changeRefundStatus(status?: string) { + this.refundStatus = status || null; + this.st.load(1); + } + + auditAction(item?: any, type: string = '1') { + this.msg = ''; + let params: Array = []; + if (item) { + params = [item.id]; + } else { + params = this.selectedRows.map(node => node.id); + } + const modal = this.nzModalService.create({ + nzTitle: type === '1' ? '审核' : '复审', + nzContent: this.auditModal, + nzFooter: [ + { + label: '拒绝', + type: 'default', + onClick: () => { + if (!this.msg || this.msg.trim().length === 0) { + this.service.msgSrv.warning('请填写拒绝原因 '); + return false; + } + this.service + .request(this.service.$api_disagree_refund, { + refundApplicationId: params, + msg: this.msg + }) + .subscribe(res => { + if (res) { + this.service.msgSrv.success('审核拒绝成功'); + modal.destroy(); + this.st.load(1); + } + }); + return false; + } + }, + { + label: '通过', + type: 'primary', + onClick: () => { + this.service + .request(this.service.$api_agree_refund, { + refundApplicationId: params, + msg: this.msg + }) + .subscribe(res => { + if (res) { + this.service.msgSrv.success('审核通过成功'); + modal.destroy(); + this.st.load(1); + } + }); + } + } + ] + }); + modal.afterClose.subscribe(res => { + this.st.load(); + }); + } + + showReason(item: any) { + const modal = this.nzModalService.create({ + nzTitle: '查看原因', + nzContent: item?.rejectionCause || item?.failCause, + nzFooter: [ + { + label: '关闭', + type: 'primary', + onClick: () => { + modal.destroy(); + } + } + ] + }); + } + + /** + * 重置表单 + */ + resetSF() { + this.sf.reset(); + this._$expand = false; + } + + /** + * 伸缩查询条件 + */ + expandToggle() { + this._$expand = !this._$expand; + this.sf?.setValue('/expand', this._$expand); + } + + private initSF(): SFSchema { + return { + properties: { + expand: { + type: 'boolean', + ui: { + hidden: true + } + }, + accountName: { + type: 'string', + title: '账户名称', + default: this.accountName, + ui: { + placeholder: '请输入' + } + }, + refundStatus: { + type: 'string', + title: '入账状态', + ui: { + widget: 'dict-select', + params: { dictKey: 'refund:apply:status' }, + placeholder: '请选择' + } + }, + ltdId: { + type: 'string', + title: '网络货运人', + default: this.ltdId, + ui: { + widget: 'select', + placeholder: '请选择', + allowClear: true, + asyncData: () => this.service.getNetworkFreightForwarder(), + } + }, + createTime: { + title: '提交时间', + type: 'string', + ui: { + widget: 'sl-from-to-search', + format: 'yyyy-MM-dd', + placeholder: '请选择', + nzShowTime: true, + visibleIf: { + expand: (value: boolean) => value + } + } as SFDateWidgetSchema + }, + } + }; + } + + private initST(): STColumn[] { + return [ + { title: '', index: 'key', type: 'checkbox', className: 'text-center' }, + { title: '账户名称', index: 'createTime', width: 180, className: 'text-center' }, + { title: '虚拟账户', index: 'virtualAccount', width: 180, className: 'text-center' }, + { title: '入账单号', index: 'refundApplyCode', width: 190, className: 'text-center' }, + { title: '网络货运人', index: 'ltdName', width: 220, className: 'text-center' }, + { + title: '开票金额', + index: 'amount', + width: 150, + type: 'widget', + className: 'text-right', + widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) } + }, + { + title: '代缴个税', + index: 'amount', + width: 150, + type: 'widget', + className: 'text-right', + widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) } + }, + { + title: '入账金额', + index: 'amount', + width: 150, + type: 'widget', + className: 'text-right', + widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) } + }, + + { title: '提交时间', index: 'bankSerialNumber', width: 160, className: 'text-center' }, + { title: '入账状态', index: 'refundStatusLabel', width: 100, className: 'text-center' }, + { + title: '操作', + fixed: 'right', + width: '110px', + buttons: [ + { + text: '审核', + iif: item => item.refundStatus === '1', + click: item => this.auditAction(item) + }, + { + text: '复审', + iif: item => item.refundStatus === '2', + click: item => this.router.navigate(['./detail/' + item.id], { relativeTo: this.ar }) + }, + { + text: '详情', + click: item => this.router.navigate(['./detail/' + item.id], { relativeTo: this.ar }) + } + ] + } + ]; + } +} diff --git a/src/app/routes/usercenter/components/freight/list/detail/detail.component.html b/src/app/routes/usercenter/components/freight/list/detail/detail.component.html index 7a3798cf..33cb59e6 100644 --- a/src/app/routes/usercenter/components/freight/list/detail/detail.component.html +++ b/src/app/routes/usercenter/components/freight/list/detail/detail.component.html @@ -278,7 +278,6 @@ -
diff --git a/src/app/routes/usercenter/components/freight/list/list.component.ts b/src/app/routes/usercenter/components/freight/list/list.component.ts index 625cffaf..8f071066 100644 --- a/src/app/routes/usercenter/components/freight/list/list.component.ts +++ b/src/app/routes/usercenter/components/freight/list/list.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { STChange, STColumn, STColumnBadge, STComponent, STData, STRequestOptions } from '@delon/abc/st'; -import { SFComponent, SFSchema, SFUISchema } from '@delon/form'; +import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; import { DynamicSettingModalComponent, ShipperBaseService } from '@shared'; import { NzModalService } from 'ng-zorro-antd/modal'; import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component'; @@ -116,7 +116,124 @@ export class FreightComponentsListComponent implements OnInit { showRequired: false } }, - + lockedStatus: { + type: 'string', + title: '企业类型', + enum: [ + { label: '全部', value: '' }, + { label: '物流企业', value: 0 } + ], + default: '', + ui: { + widget: 'select', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + lockedStatus8: { + type: 'string', + title: '公司所在地', + enum: [ + { label: '全部', value: '' }, + { label: '物流企业', value: 0 } + ], + default: '', + ui: { + widget: 'select', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + lockedStatus7: { + type: 'string', + title: '常用服务', + enum: [ + { label: '全部', value: '' }, + { label: '整车服务', value: 0 }, + { label: '大宗服务', value: 1 } + ], + default: '', + ui: { + widget: 'select', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + lockedStatus6: { + type: 'string', + title: '客户类型', + enum: [ + { label: '全部', value: '' }, + { label: '直客', value: 0 }, + { label: '渠道客户', value: 1 } + ], + default: '', + ui: { + widget: 'select', + visibleIf: { + expand: (value: boolean) => value + } + } + }, + contactName5: { + title: '渠道销售', + type: 'string', + ui: { + placeholder: '请输入', + showRequired: false + } + }, + contactName4: { + title: '合伙人', + type: 'string', + ui: { + placeholder: '请输入', + showRequired: false + } + }, + contactName3: { + title: '客服人员', + type: 'string', + ui: { + placeholder: '请输入', + showRequired: false + } + }, + contactName2: { + title: '审核人', + type: 'string', + ui: { + placeholder: '请输入', + showRequired: false + } + }, + applyDate: { + type: 'string', + title: '申请时间', + ui: { + widget: 'sl-from-to', + type: 'date', + format: 'yyyy-MM-dd', + visibleIf: { + _$expand: (value: boolean) => value, + }, + } as SFDateWidgetSchema, + }, + applyDate1: { + type: 'string', + title: '审核时间', + ui: { + widget: 'sl-from-to', + type: 'date', + format: 'yyyy-MM-dd', + visibleIf: { + _$expand: (value: boolean) => value, + }, + } as SFDateWidgetSchema, + }, networkTransporter: { type: 'string', title: '网络货运人', @@ -138,6 +255,22 @@ export class FreightComponentsListComponent implements OnInit { } } }, + lockedStatus3: { + type: 'string', + title: '企业状态', + enum: [ + { label: '全部', value: '' }, + { label: '正常', value: 0 }, + { label: '冻结', value: 1 } + ], + default: '', + ui: { + widget: 'select', + visibleIf: { + expand: (value: boolean) => value + } + } + }, source: { type: 'string', title: '注册渠道', @@ -155,13 +288,13 @@ export class FreightComponentsListComponent implements OnInit { } } }, - lockedStatus: { + source2: { type: 'string', - title: '企业状态', + title: '证件是否过期', enum: [ { label: '全部', value: '' }, - { label: '正常', value: 0 }, - { label: '冻结', value: 1 } + { label: '是', value: 1 }, + { label: '否', value: 2 } ], default: '', ui: { @@ -170,7 +303,21 @@ export class FreightComponentsListComponent implements OnInit { expand: (value: boolean) => value } } - } + }, + source1: { + type: 'string', + title: '网络货运人', + enum: [ + { label: '全部', value: '' }, + ], + default: '', + ui: { + widget: 'select', + visibleIf: { + expand: (value: boolean) => value + } + } + }, } }; this.ui = { '*': { spanLabelFixed: 110, grid: { lg: 8, md: 12, sm: 12, xs: 24 }, enter: () => this.st.load() } }; diff --git a/src/app/shared/components/insurance-table/insurance-table.module.ts b/src/app/shared/components/insurance-table/insurance-table.module.ts index ab85e526..28711efd 100644 --- a/src/app/shared/components/insurance-table/insurance-table.module.ts +++ b/src/app/shared/components/insurance-table/insurance-table.module.ts @@ -13,11 +13,11 @@ import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; import { NzTableModule } from 'ng-zorro-antd/table'; -import { InsuranceTableComponent } from './insurance-table.component'; import { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm'; import { NzInputModule } from 'ng-zorro-antd/input'; import { DelonFormModule } from '@delon/form'; import { NzButtonModule } from 'ng-zorro-antd/button'; +import { InsuranceTableComponent } from './insurance-table.component'; const COMPONENTS = [InsuranceTableComponent]; const MODULES = [NzTableModule, NzInputNumberModule, NzPopconfirmModule, NzInputModule, NzButtonModule, DelonFormModule]; diff --git a/src/app/shared/components/rebate-table/index.ts b/src/app/shared/components/rebate-table/index.ts new file mode 100644 index 00000000..9b459de3 --- /dev/null +++ b/src/app/shared/components/rebate-table/index.ts @@ -0,0 +1,13 @@ +/* + * @Description : + * @Version : 1.0 + * @Author : Shiming + * @Date : 2022-01-25 20:20:07 + * @LastEditors : Shiming + * @LastEditTime : 2022-01-26 11:05:44 + * @FilePath : \\tms-obc-web\\src\\app\\shared\\components\\insurance-table\\index.ts + * Copyright (C) 2022 huzhenhong. All rights reserved. + */ +export * from './rebate-table.module' +export * from './rebate-table.service' +export * from './rebate-table.component' \ No newline at end of file diff --git a/src/app/shared/components/rebate-table/rebate-table.component.html b/src/app/shared/components/rebate-table/rebate-table.component.html new file mode 100644 index 00000000..a7ab6f02 --- /dev/null +++ b/src/app/shared/components/rebate-table/rebate-table.component.html @@ -0,0 +1,92 @@ + +
+
+ +
+ + + + + + + + + + + +
+ + + + 险种 + 普货-基本险 + 普货-综合险 + 操作 + + + + + +
+
+ 公里数(km) +
+
|
+
+ + + + + (含) + +
+
+ + + +
+ + + + + + % + +
+ + +
+ + + + +
+ + + 删除 + + + +
+ + +
+
\ No newline at end of file diff --git a/src/app/shared/components/rebate-table/rebate-table.component.less b/src/app/shared/components/rebate-table/rebate-table.component.less new file mode 100644 index 00000000..bebea5bf --- /dev/null +++ b/src/app/shared/components/rebate-table/rebate-table.component.less @@ -0,0 +1,19 @@ +:host::ng-deep { + nz-input-number { + width: 85px; + + input { + width : 100%; + margin: 0; + } + + .ant-input-number-handler-wrap { + display: none; + } + + } + .ant-input-group { + display: -webkit-inline-box !important; + } + +} \ No newline at end of file diff --git a/src/app/shared/components/rebate-table/rebate-table.component.ts b/src/app/shared/components/rebate-table/rebate-table.component.ts new file mode 100644 index 00000000..75b3768a --- /dev/null +++ b/src/app/shared/components/rebate-table/rebate-table.component.ts @@ -0,0 +1,195 @@ +import { debounceTime } from 'rxjs/operators'; +import { Subject } from 'rxjs'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { BaseService } from '@shared'; +import { SFComponent, SFSchema, SFUISchema } from '@delon/form'; + +@Component({ + selector: 'app-rebate-table', + templateUrl: './rebate-table.component.html', + styleUrls: ['./rebate-table.component.less'] +}) +export class RebateTableComponent implements OnInit { + data: any[] = []; + headers: any[] = []; + sfdata: any; // 货源单设置回显 + + @ViewChild('sf', { static: false }) sf!: SFComponent; + schema: SFSchema = {}; + ui!: SFUISchema; + + formatterDollar = (value: number): string => `${value}`; + minrebatePrice: number = 0; + changeSub = new Subject(); + constructor(public service: BaseService, private cdr: ChangeDetectorRef) {} + + ngOnInit(): void { + this.loadData(); + this.initSF() + this.changeEndKmAction(); + this.minrebatePrice = 1000 + } + + loadData() { + this.service.request('/api/mdc/cuc/rebateConfig/list').subscribe(res => { + if (res) { + console.log(res); + this.data = res; + this.cdr.detectChanges(); + } + }); + this.service.request('/api/mdc/pbc/sysConfigItem/findItemValueByItemKeys', [ + "rebate.config.minrebatePrice" + ]).subscribe(res => { + if (res) { + console.log(res); + this.minrebatePrice = Number(res[0].itemValue) + } + }); + } + initSF() { + this.schema = { + properties: { + freightPrice: { + type: 'string', + title: '单票投保最低保费', + ui: { + widget: 'custom', + placeholder: '请输入', + errors: { required: '请填写' } + } + }, + }, + required: ['freightPrice'] + }; + this.ui = { + '*': { + spanLabelFixed: 160, + grid: { span: 24 } + }, + $freightPrice: { + grid: { span: 8 } + }, + }; + } + /** + * 修改结束车长 + * @param event 车长 + * @param i 下标 + */ + changeEndLength(event: any, i: number) { + if (event <= this.headers[i].startLength) { + this.headers[i].endLength = this.headers[i].startLength + 1; + this.changeNextStartLength(event, i + 1); + return; + } + this.headers[i].endLength = event; + this.changeNextStartLength(event, i + 1); + } + + /** + * 修改结束公里数 + * @param event 车长 + * @param i 下标 + */ + changeEndKm(event: any, i: number) { + if (event) { + console.log(event); + + this.changeSub.next(`${event},${i}`); + } + } + changeEndKmAction() { + this.changeSub.pipe(debounceTime(500)).subscribe((res: string) => { + if (res) { + const paras = res.split(','); + const num = Number(paras[0]); + const i = Number(paras[1]); + + if (num <= this.data[i].startKm) { + this.data[i].endKm = null; + setTimeout(() => { + this.data[i].endKm = this.data[i].startKm + 1 ; + }, 0); + this.changeNextStartKm(this.data[i].startKm + 1, i + 1); + return; + } + this.data[i].endKm = num; + this.changeNextStartKm(num, i + 1); + } + }); + } + + add() { + console.log(this.data); + + const tem = this.data[this.data?.length - 1]; + if (tem && tem.endKm) { + this.data.push({ + endKm: '', + startKm: tem.endKm + }); + this.data = [...this.data]; + } else { + this.service.msgSrv.warning('请填写完整公里数'); + } + } + + deleteRow(index: number) { + console.log(index); + var newArr = this.data.concat(); + newArr.splice(this.data.length-1,1) + // this.data = this.data.pop() + console.log(newArr); + this.data = [...newArr]; + } + + save() { + if(!this.minrebatePrice) { + this.service.msgSrv.error('必填项为空!') + return + } + let params= { + minrebatePrice: this.minrebatePrice, + rebateConfigDTOS: this.data + } + console.log(params); + this.service.request('/api/mdc/cuc/rebateConfig/saveBatch', params).subscribe(res => { + if (res) { + console.log(res); + this.service.msgSrv.success('修改成功'); + this.loadData(); + } + }); + } + + /** + * 遍历同步后置位车长 + * @param event 车长 + * @param i 下标 + */ + private changeNextStartLength(event: number, i: number) { + if (this.headers[i]) { + this.headers[i].startLength = event; + if (this.headers[i].endLength <= event) { + this.headers[i].endLength = this.headers[i].startLength + 0.5; + this.changeNextStartLength(event + 0.5, i + 1); + } + } + } + + /** + * 遍历同步后置位公里数 + * @param event 车长 + * @param i 下标 + */ + private changeNextStartKm(event: number, i: number) { + if (this.data[i]) { + this.data[i].startKm = event; + if (this.data[i].endKm <= event) { + this.data[i].endKm = this.data[i].startKm + 1; + this.changeNextStartKm(event + 1, i + 1); + } + } + } +} diff --git a/src/app/shared/components/rebate-table/rebate-table.module.ts b/src/app/shared/components/rebate-table/rebate-table.module.ts new file mode 100644 index 00000000..6e65e35b --- /dev/null +++ b/src/app/shared/components/rebate-table/rebate-table.module.ts @@ -0,0 +1,29 @@ +/* + * @Description : + * @Version : 1.0 + * @Author : Shiming + * @Date : 2022-01-25 20:23:54 + * @LastEditors : Shiming + * @LastEditTime : 2022-02-11 17:20:49 + * @FilePath : \\tms-obc-web\\src\\app\\shared\\components\\rebate-table\\rebate-table.module.ts + * Copyright (C) 2022 huzhenhong. All rights reserved. + */ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { RebateTableComponent } from './rebate-table.component'; +import { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { DelonFormModule } from '@delon/form'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +const COMPONENTS = [RebateTableComponent]; +const MODULES = [NzTableModule, NzInputNumberModule, NzPopconfirmModule, NzInputModule, NzButtonModule, DelonFormModule]; + +@NgModule({ + declarations: COMPONENTS, + imports: [CommonModule, FormsModule, ...MODULES], + exports: COMPONENTS +}) +export class rebateTableModule {} diff --git a/src/app/shared/components/rebate-table/rebate-table.service.ts b/src/app/shared/components/rebate-table/rebate-table.service.ts new file mode 100644 index 00000000..ed67d9fb --- /dev/null +++ b/src/app/shared/components/rebate-table/rebate-table.service.ts @@ -0,0 +1,18 @@ +/* + * @Description : + * @Version : 1.0 + * @Author : Shiming + * @Date : 2022-01-25 20:21:04 + * @LastEditors : Shiming + * @LastEditTime : 2022-01-25 20:35:52 + * @FilePath : \\tms-obc-web\\src\\app\\shared\\components\\insurance-table\\insurance-table.service.ts + * Copyright (C) 2022 huzhenhong. All rights reserved. + */ +import { Injectable } from '@angular/core'; + + + +@Injectable({ providedIn: 'root' }) + +export class RebateService { +} diff --git a/src/app/shared/index.ts b/src/app/shared/index.ts index c61dfbdd..d8f2d2d9 100644 --- a/src/app/shared/index.ts +++ b/src/app/shared/index.ts @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-11-29 10:04:12 - * @LastEditTime : 2022-02-11 14:31:22 + * @LastEditTime : 2022-03-11 15:12:20 * @LastEditors : Shiming * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @FilePath : \\tms-obc-web\\src\\app\\shared\\index.ts @@ -21,6 +21,7 @@ export * from './components/dict-select/index'; export * from './components/dynamic-setting'; export * from './components/singlepage-setting'; export * from './components/insurance-table/index'; +export * from './components/rebate-table/index'; // Utils export * from './utils'; diff --git a/src/assets/mocks/menu-data.json b/src/assets/mocks/menu-data.json index 8f0987fa..20178a6b 100644 --- a/src/assets/mocks/menu-data.json +++ b/src/assets/mocks/menu-data.json @@ -509,6 +509,10 @@ "text": "合伙人管理", "icon": "anticon anticon-dashboard", "children": [{ + "text": "合伙人列表", + "link": "/partner/partner-list" + }, + { "text": "业务统计", "link": "/partner/business-statistics/index" }, @@ -517,7 +521,7 @@ "group": true, "children": [{ "text": "返佣配置", - "link": "/partner/rebate/" + "link": "/partner/rebate/setting" }, { "text": "返佣明细", @@ -542,11 +546,11 @@ "group": true, "children": [{ "text": "账户管理", - "link": "/partner/account-management/list" + "link": "/partner/account-management/am/list" }, { "text": "账户明细", - "link": "/partner/account-management/account-detail", + "link": "/partner/account-management/am/detail/:id", "hide": true }, { @@ -555,7 +559,12 @@ }, { "text": "提现详情", - "link": "/partner/account-management/withdraw-record/:id", + "link": "/partner/account-management/withdraw-record/detail/:id", + "hide": true + }, + { + "text": "待入账明细", + "link": "/partner/account-management/am/recorded/detail/:id", "hide": true } ] @@ -573,6 +582,29 @@ "text": "渠道销售客户认领详情", "link": "/partner/claim-audit/channel-detail", "hide": true + }, + { + "text": "入账记录", + "link": "/partner/recorded/record" + }, + { + "text": "入账详情", + "link": "/partner/recorded/record/:id", + "hide": true + }, + { + "text": "轮播图管理", + "link": "/partner/scroll-img/list", + "hide": true + }, + { + "text": "知识库管理", + "icon": "iconfont icon-yundan-copy", + "group": true, + "children": [{ + "text": "banner管理", + "link": "/knowledge/banner" + }] } ] } diff --git a/src/styles.less b/src/styles.less index a25a53de..2464d9a8 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 +}