diff --git a/src/app/admin/device/device-list/device-list.component.html b/src/app/admin/device/device-list/device-list.component.html index 1331620..047fdde 100644 --- a/src/app/admin/device/device-list/device-list.component.html +++ b/src/app/admin/device/device-list/device-list.component.html @@ -154,7 +154,7 @@ - + diff --git a/src/app/admin/discount-package/discount-package-list/discount-package-list.component.html b/src/app/admin/discount-package/discount-package-list/discount-package-list.component.html index 95c678c..a0d782e 100644 --- a/src/app/admin/discount-package/discount-package-list/discount-package-list.component.html +++ b/src/app/admin/discount-package/discount-package-list/discount-package-list.component.html @@ -2,125 +2,126 @@ - -
-
-
-
- - 优惠券包名称 - - - - -
-
- - 类型 - - - - - - - -
-
- - 使用归属 - - - - - - -
-
- - 优惠券包状态 - - - - - - - - -
+ + +
+ +
+
+ + 优惠券包名称 + + + + +
+
+ + 类型 + + + + + + + +
+
+ + 使用归属 + + + + + + +
+
+ + 优惠券包状态 + + + + + + + + +
-
- -
-
- -
-
- -
- -
- 共计 {{total}} 条数据 -
- +
+
+ + +
+
+
- - - - 编号 - 优惠券标题 - 销售类型 - 销售价格 - 限购数量 - 创建时间 - 总库存 - 剩余库存 - 状态 - 操作 - - - - - {{i+1}} - {{data.title}} - {{data.salesType === 1 ? '售卖' : '赠送'}} - {{data.price === null ? '暂无': data.price}} - {{data.purchaseNum === null? '暂无': data.purchaseNum}} - {{data.createdTime | date: 'yyyy-MM-dd HH:mm'}} - {{data.totalStock == null ? 0:data.totalStock }} - {{data.surplusStock == null ? 0:data.surplusStock }} - {{data.status | discountPackageStatus}} - - 详情 - - 更多 - - - - - - -
+
+ 共计 {{total}} 条数据 +
+ +
+ + + + 编号 + 优惠券标题 + 销售类型 + 销售价格 + 限购数量 + 创建时间 + 总库存 + 剩余库存 + 状态 + 操作 + + + + + {{i+1}} + {{data.title}} + {{data.salesType === 1 ? '售卖' : '赠送'}} + {{data.price === null ? '暂无': data.price}} + {{data.purchaseNum === null? '暂无': data.purchaseNum}} + {{data.createdTime | date: 'yyyy-MM-dd HH:mm'}} + {{data.totalStock == null ? 0:data.totalStock }} + {{data.surplusStock == null ? 0:data.surplusStock }} + {{data.status | discountPackageStatus}} + + 详情 + + 更多 + + + + + + +
+
@@ -147,3 +148,130 @@ + + +
+ +
+
+ + + +
+
+
+ 注意:提交赠送时系统会自动过滤 ”有误“ 和 ”重复“ 的数据,有误的数据不会赠送卷包。 + + + + 序号 + 用户手机号 + 注册状态 + 数据状态 + 错误描述 + 操作 + + + + + {{data.serialNum}} + {{data.phone}} + {{data.registerStatus?'已注册':'未注册'}} + {{data.errorStatus?'有误':'正常'}} + {{data.errorMsg?data.errorMsg:'无'}} + + 删除 + + + + +
+
+ +
+
+
+ + +
+
+
+ + 用户手机号 + + + + +
+
+
+
+ +
+
+
+
+ + + 注意:导入用户会清空现有列表中的数据。 +
+
+ + excel文件 + + + + + + +
+
+
+
+ +
+
+
diff --git a/src/app/admin/discount-package/discount-package-list/discount-package-list.component.scss b/src/app/admin/discount-package/discount-package-list/discount-package-list.component.scss index 63e3f73..eb954d4 100644 --- a/src/app/admin/discount-package/discount-package-list/discount-package-list.component.scss +++ b/src/app/admin/discount-package/discount-package-list/discount-package-list.component.scss @@ -1,3 +1,35 @@ .table-td-operation a { margin-right: 8px; } +.ant-advanced-search-form { + padding: 24px; + background: #fbfbfb; + border: 1px solid #d9d9d9; + border-radius: 6px; + margin-bottom: 10px; +} + +.search-result-list { + margin-top: 16px; + border: 1px dashed #e9e9e9; + border-radius: 6px; + background-color: #fafafa; + min-height: 200px; + text-align: center; + padding-top: 80px; +} + +[nz-form-label] { + overflow: visible; +} + +button { + margin-left: 8px; +} +.collapse { + margin-left: 8px; + font-size: 12px; +} +.search-area { + text-align: center; +} diff --git a/src/app/admin/discount-package/discount-package-list/discount-package-list.component.ts b/src/app/admin/discount-package/discount-package-list/discount-package-list.component.ts index baf94d2..1f98e47 100644 --- a/src/app/admin/discount-package/discount-package-list/discount-package-list.component.ts +++ b/src/app/admin/discount-package/discount-package-list/discount-package-list.component.ts @@ -1,13 +1,14 @@ import { Component, OnInit } from '@angular/core'; import {environment} from '../../../../environments/environment'; -import {FormBuilder, FormGroup} from '@angular/forms'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; import {CompanyService} from '../../../services/company.service'; import {ActivateService} from '../../../services/activate.service'; import {IconService} from '../../../services/icon.service'; -import {NzMessageService} from 'ng-zorro-antd'; +import {NzMessageService, NzModalService, NzUploadChangeParam} from 'ng-zorro-antd'; import {Router} from '@angular/router'; import {CommonsService} from '../../../services/commons.service'; import {DiscountPackageService} from '../../../services/discount-package.service'; +import {ValidatorsService} from '../../../services/validators.service'; @Component({ selector: 'app-discount-package-list', @@ -15,7 +16,7 @@ import {DiscountPackageService} from '../../../services/discount-package.service styleUrls: ['./discount-package-list.component.scss'] }) export class DiscountPackageListComponent implements OnInit { - + BASE_URL = environment.baseUrl; WEB_SERVE_URL = environment.imageUrl; searchForm: FormGroup; // 搜索框 requestData = []; // 列表数据 @@ -29,12 +30,32 @@ export class DiscountPackageListComponent implements OnInit { isVisibleInventory = false; id: number; num: number; + + deliverUserAddForm: FormGroup; + deliverUserAddModal = false; + + deliverUserSearchForm: FormGroup; + deliverUserModal = false; + deliverUserArray = []; + deliverUserForm: FormGroup; + serialNumber: string; + + excelUserModal = false; + excelUploadBtn = true; + excelUploadFile = []; + + spinObject = { + title: '处理中', + status: false + }; + constructor( private form: FormBuilder, private company: CompanyService, private activate: ActivateService, private iconService: IconService, private message: NzMessageService, + private modal: NzModalService, private router: Router, private discountPackage: DiscountPackageService, private commonsService: CommonsService, @@ -54,6 +75,23 @@ export class DiscountPackageListComponent implements OnInit { status: [null], phone: [null], }); + + this.deliverUserSearchForm = this.form.group({ + phone: [null], + registerStatus: [null], + errorStatus: [null], + }); + + this.deliverUserForm = this.form.group({ + packageId: [null], + packageName: [''], + phoneArray: [null], + }); + + this.deliverUserAddForm = this.form.group({ + phone: [null, [Validators.required, ValidatorsService.mobile]], + }); + this.getRequest(true, this.searchForm.value); this.commonsService.getDictionary('USING_ATTRIBUTION ', data => { this.usingAttribution = data['return_data']; @@ -185,5 +223,156 @@ export class DiscountPackageListComponent implements OnInit { }); } + // 打开 发送优惠券包给用户模态框 + showDeliverUserModal(packageId: number, packageName: string) { + this.deliverUserForm.patchValue({ packageId: packageId, packageName: packageName}) + this.deliverUserModal = true; + } + + // 关闭 发送优惠券包给用户模态框 + closeDeliverUserModal() { + this.deliverUserForm.reset(); + this.deliverUserModal = false; + } + + // 删除赠送用户 + delDeliverUser(serialNum: number) { + this.deliverUserArray = this.deliverUserArray.filter(o => o.serialNum != serialNum); + } + + // 展示导入模态框 + showExcelUserModal() { + this.excelUserModal = true; + } + + // 关闭导入模态框 + closeExcelUserModal() { + this.excelUploadBtn = true; + this.excelUploadFile = []; + this.excelUserModal = false; + } + + // 提交赠送数据 + submitDeliverUser() { + if (this.deliverUserArray.length == 0) { + this.modal.warning({ nzTitle: '提示', nzContent: '没有需要赠送的用户'}); + } + this.deliverUserForm.patchValue({ phoneArray: this.deliverUserArray.filter(o => o.errorStatus == false)}); + this.spinObject.status = true; + this.spinObject.title = '处理中...'; + this.discountPackage.giveAway(this.deliverUserForm.value, data => { + if (data['return_code'] === '000000') { + this.serialNumber = data['return_data']; + this.closeDeliverUserModal(); + this.processRate(this.serialNumber); + } else { + this.message.create('error', data['return_msg']); + this.spinObject.status = false; + } + }); + } + + // 处理进度 + processRate(serialNum: string) { + this.spinObject.status = true; + let time = setInterval(() => this.commonsService.getRedisValueByType(serialNum, data => { + if (data['return_data'] != null) { + this.spinObject.title = '已处理' + data['return_data'] + '条数据'; + } else { + this.spinObject.status = false; + clearTimeout(time); + this.getRequest(true, this.searchForm.value); + } + }), 1000); + } + + // 提交excel数据 + submitExcelUser() { + this.discountPackage.getPhoneListByFileUrl({ fileUrl: this.excelUploadFile[0]['url']}, data => { + if (data['return_code'] === '000000') { + this.deliverUserArray = data['return_data']['data']; + this.closeExcelUserModal(); + } else { + this.message.error(data['return_msg']); + } + }); + } + + // 上传excel回调 + excelUserHandleChange(info: NzUploadChangeParam): void { + if (info.file.status !== 'uploading') { + this.excelUploadFile = []; + } + if (info.file.status === 'done') { + this.excelUploadBtn = false; + this.excelUploadFile.push( + { + uid: '1', + name: info.file.name, + status: 'done', + url: info.file['response']['return_data'][0], + thumbUrl: this.WEB_SERVE_URL + info.file['response']['return_data'][0], + } + ) + } else if (info.file.status === 'error') { + this.message.error('文件上传失败'); + } + } + + // 打开 发送优惠券包给用户模态框 + showDeliverUserAddModal() { + this.deliverUserAddModal = true; + } + + // 关闭 发送优惠券包给用户模态框 + closeDeliverUserAddModal() { + this.deliverUserAddForm.reset(); + this.deliverUserAddModal = false; + } + + submitDeliverUserAdd() { + for (const i in this.deliverUserAddForm.controls) { + this.deliverUserAddForm.controls[i].markAsDirty(); + this.deliverUserAddForm.controls[i].updateValueAndValidity(); + } + if (this.deliverUserAddForm.status == null || this.deliverUserAddForm.status !== 'VALID') { + this.modal.warning({ + nzTitle: '提示', + nzContent: '请规范填写所有的必填项信息', + }); + return; + } + + let phoneObject = this.deliverUserArray.find(o => o.phone == this.deliverUserAddForm.controls.phone.value); + if (phoneObject != null) { + this.modal.warning({ + nzTitle: '提示', + nzContent: '手机号在列表中已存在', + }); + return; + } + + this.discountPackage.getPhoneRegisterStatus(this.deliverUserAddForm.value, data => { + if (data['return_code'] === '000000') { + this.deliverUserArray.push({ + serialNum: this.deliverUserArray.length + 1, + phone: this.deliverUserAddForm.controls.phone.value, + registerStatus: data['return_data'], + errorStatus: false, + errorMsg: null + }); + this.deliverUserArray = this.deliverUserArray.slice(); + this.closeDeliverUserAddModal(); + } + }); + } + + // 下载模板 + downloadTemp() { + window.location.href = this.WEB_SERVE_URL + 'template/导入模板.xlsx'; + } + } + + diff --git a/src/app/services/commons.service.ts b/src/app/services/commons.service.ts index e6b2348..87e9a75 100644 --- a/src/app/services/commons.service.ts +++ b/src/app/services/commons.service.ts @@ -183,12 +183,24 @@ export class CommonsService { * @param codeType 页码 * @param callback 回调 */ - public getDictionary(codeType: string , callback): any { - this.http.get(environment.baseUrl + '/common/getDictionaryByCodeType?codeType=' + codeType).subscribe( data => { + public getRedisValueByType(key: string , callback): any { + this.http.get(environment.baseUrl + '/common/getRedisValueByType?key=' + key).subscribe( data => { callback(data); }); } + /** + * 根据数据类型查询数据字典 + * + * @param codeType 页码 + * @param callback 回调 + */ + public getDictionary(codeType: string , callback): any { + this.http.get(environment.baseUrl + '/common/getDictionaryByCodeType?codeType=' + codeType).subscribe( data => { + callback(data); + }); + } + public mappingSysNameOl(codeType: string , callback): any { this.http.get(environment.baseUrl + '/common/getDictionaryByCodeTypeOl?codeType=' + codeType).subscribe( data => { callback(data); diff --git a/src/app/services/discount-package.service.ts b/src/app/services/discount-package.service.ts index ef3d328..c33f233 100644 --- a/src/app/services/discount-package.service.ts +++ b/src/app/services/discount-package.service.ts @@ -193,5 +193,23 @@ export class DiscountPackageService { }); } + public getPhoneListByFileUrl(paramsObject: object, callBack) { + this.http.post(environment.baseUrl + 'highDiscountPackage/getPhoneListByFileUrl', paramsObject).subscribe(data => { + callBack(data); + }); + } + + public getPhoneRegisterStatus(paramsObject: object, callBack) { + this.http.post(environment.baseUrl + 'highDiscountPackage/getPhoneRegisterStatus', paramsObject).subscribe(data => { + callBack(data); + }); + } + + public giveAway(paramsObject: object, callBack) { + this.http.post(environment.baseUrl + 'highDiscountPackage/giveAway', paramsObject).subscribe(data => { + callBack(data); + }); + } + }