250 lines
6.9 KiB
TypeScript
250 lines
6.9 KiB
TypeScript
import {
|
|
ChangeDetectorRef,
|
|
Component,
|
|
Inject,
|
|
OnInit,
|
|
ViewEncapsulation,
|
|
} from '@angular/core';
|
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
import { FuseAlertType } from '@fuse/components/alert';
|
|
import { SiteService } from 'app/modules/polyglot/site/services/site.service';
|
|
import { IdentityService } from 'app/modules/polyglot/identity/services/identity.service';
|
|
import { MemberService } from 'app/modules/polyglot/member/services/member.service';
|
|
import {
|
|
CreateMemberRequest,
|
|
CreateMemberResponse,
|
|
} from 'app/modules/proto/c2se/member_pb';
|
|
import { Bank } from 'app/modules/proto/models/bank_pb';
|
|
import { Site } from 'app/modules/proto/models/site_pb';
|
|
import { MemberModel } from 'app/modules/proto/models/member_pb';
|
|
import { fuseAnimations } from '@fuse/animations';
|
|
import { BankService } from 'app/modules/polyglot/bank/services/bank.service';
|
|
import { environment } from 'environments/environment';
|
|
|
|
export interface RegistComposeData {
|
|
title: string;
|
|
parent?: MemberModel;
|
|
classId: string;
|
|
}
|
|
export interface RegistComposeResult {
|
|
choice: boolean;
|
|
}
|
|
|
|
@Component({
|
|
selector: 'app-regist-compose',
|
|
templateUrl: './regist-compose.component.html',
|
|
encapsulation: ViewEncapsulation.None,
|
|
animations: fuseAnimations,
|
|
})
|
|
export class RegistComposeComponent implements OnInit {
|
|
composeForm!: FormGroup;
|
|
sites!: Site[];
|
|
banks!: Bank[];
|
|
|
|
alert: { type: FuseAlertType; message: string } = {
|
|
type: 'success',
|
|
message: '등록이 성공하였습니다.',
|
|
};
|
|
|
|
showAlert: boolean = false;
|
|
isSendDisable = false;
|
|
/**
|
|
* Constructor
|
|
*/
|
|
constructor(
|
|
private _changeDetectorRef: ChangeDetectorRef,
|
|
public matDialogRef: MatDialogRef<RegistComposeComponent>,
|
|
@Inject(MAT_DIALOG_DATA) public data: RegistComposeData,
|
|
private _formBuilder: FormBuilder,
|
|
private _identityService: IdentityService,
|
|
private _memberService: MemberService,
|
|
private _siteService: SiteService,
|
|
private _bankService: BankService
|
|
) {}
|
|
|
|
// -----------------------------------------------------------------------------------------------------
|
|
// @ Lifecycle hooks
|
|
// -----------------------------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* On init
|
|
*/
|
|
ngOnInit(): void {
|
|
// Create the form
|
|
this.composeForm = this._formBuilder.group({
|
|
partnerId: [{ value: this.data.parent?.getUsername(), disabled: true }],
|
|
siteId: ['', [Validators.required]],
|
|
username: [
|
|
'',
|
|
[Validators.required, Validators.pattern('^[a-zA-Z0-9]{6,12}$')],
|
|
],
|
|
password: [
|
|
'beteran',
|
|
[
|
|
Validators.required,
|
|
Validators.pattern(
|
|
'^(?=.*[A-Za-z])(?=.*d)(?=.*[@$!%*#?&])[A-Za-zd@$!%*#?&]{8,20}$'
|
|
),
|
|
],
|
|
],
|
|
exchangePassword: [
|
|
'beteran',
|
|
[Validators.required, Validators.pattern('^[a-zA-Z0-9]{4,8}$')],
|
|
],
|
|
nickname: [
|
|
'',
|
|
[
|
|
Validators.required,
|
|
Validators.pattern('^[a-z|0-9|ㄱ-ㅎ|가-힣]{2,8}$'),
|
|
],
|
|
],
|
|
calculateType: ['', [Validators.required]],
|
|
mobilePhoneNumber: ['', [Validators.required]],
|
|
bankId: ['', [Validators.required]],
|
|
accountNumber: ['', [Validators.required]],
|
|
accountHolder: ['', [Validators.required]],
|
|
});
|
|
|
|
this._siteService
|
|
.listSites()
|
|
.then((result) => {
|
|
this.sites = result.getSitesList();
|
|
})
|
|
.catch((reson) => console.log(reson));
|
|
|
|
this._bankService
|
|
.listBanks()
|
|
.then((result) => {
|
|
this.banks = result.getBanksList();
|
|
})
|
|
.catch((reson) => console.log(reson));
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------------------------
|
|
// @ Public methods
|
|
// -----------------------------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Save and close
|
|
*/
|
|
saveAndClose(): void {
|
|
// Save the message as a draft
|
|
this.saveAsDraft();
|
|
|
|
// Close the dialog
|
|
this.matDialogRef.close();
|
|
}
|
|
|
|
/**
|
|
* Discard the message
|
|
*/
|
|
discard(): void {}
|
|
|
|
/**
|
|
* Save the message as a draft
|
|
*/
|
|
saveAsDraft(): void {}
|
|
|
|
/**
|
|
* Send the message
|
|
*
|
|
}
|
|
*/
|
|
send(): void {
|
|
if (!this.composeForm.valid) {
|
|
return;
|
|
}
|
|
|
|
this.isSendDisable = true;
|
|
|
|
const {
|
|
partnerId,
|
|
siteId,
|
|
username,
|
|
password,
|
|
exchangePassword,
|
|
nickname,
|
|
calculateType,
|
|
mobilePhoneNumber,
|
|
bankId,
|
|
accountNumber,
|
|
accountHolder,
|
|
} = this.composeForm.value;
|
|
|
|
let bank_account = new CreateMemberRequest.BankAccount();
|
|
bank_account.setBankId(bankId);
|
|
bank_account.setName(accountHolder);
|
|
bank_account.setAccountNumber(accountNumber);
|
|
bank_account.setExchangePassword(exchangePassword);
|
|
|
|
const member = new CreateMemberRequest();
|
|
const site = new Site();
|
|
const parentUsername = !!this.data.parent?.getUsername()
|
|
? this.data.parent?.getUsername()
|
|
: undefined;
|
|
site.setId(siteId);
|
|
|
|
member.setSiteId(siteId);
|
|
member.setUsername(username);
|
|
member.setPassword(password);
|
|
member.setMemberClassId(this.data.classId);
|
|
member.setMemberLevelId(environment.constants.levelIds.level1);
|
|
if (!!parentUsername) {
|
|
member.setReferrerMemberUsername(parentUsername);
|
|
}
|
|
|
|
member.setNickname(nickname);
|
|
member.setMobilePhoneNumber(mobilePhoneNumber);
|
|
member.setBankAccount(bank_account);
|
|
|
|
this._memberService
|
|
.createMember(member)
|
|
.then((res: CreateMemberResponse.Result) => {
|
|
console.log(res.getMember());
|
|
this.showAlert = true;
|
|
})
|
|
.then(() => setTimeout(() => this.close(), 5000))
|
|
.catch((e) => {
|
|
this.showAlert = true;
|
|
this.alert = { type: 'error', message: '등록에 실패하였습니다.' };
|
|
this.isSendDisable = false;
|
|
});
|
|
}
|
|
|
|
close(): void {
|
|
this.matDialogRef.close({
|
|
choice: true,
|
|
});
|
|
}
|
|
__checkUsernameDuplicate(event: FocusEvent): void {
|
|
const username = this.composeForm.get('username')?.value;
|
|
// console.log(event, '::', username);
|
|
this._identityService
|
|
.checkUsernameForDuplication(username)
|
|
.then((isUse: boolean) => {
|
|
if (!!isUse) {
|
|
this.composeForm
|
|
.get('username')
|
|
?.setErrors({ usernameDuplicate: true });
|
|
}
|
|
// this._changeDetectorRef.markForCheck();
|
|
});
|
|
}
|
|
|
|
__checkNickname(event: FocusEvent): void {
|
|
const nickname = this.composeForm.get('nickname')?.value;
|
|
|
|
this._identityService
|
|
.checkNicknameForDuplication(nickname)
|
|
.then((isUse: boolean) => {
|
|
if (!!isUse) {
|
|
this.composeForm
|
|
.get('nickname')
|
|
?.setErrors({ nicknameDuplicate: true });
|
|
}
|
|
// this._changeDetectorRef.markForCheck();
|
|
});
|
|
}
|
|
}
|