Files
blog-frontEnd/src/app/view/link/link.component.ts
2021-03-12 16:11:09 +08:00

106 lines
4.2 KiB
TypeScript

import {Component, OnInit} from '@angular/core';
import {NzMessageService} from 'ng-zorro-antd/message';
import {NzModalService} from 'ng-zorro-antd/modal';
import {Title} from '@angular/platform-browser';
import {ApiService} from '../../api/api.service';
import {ApplyLinkReq, Link} from '../../class/Link';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {Color, RandomColor} from '../../utils/color';
@Component({
selector: 'view-link',
templateUrl: './link.component.html',
styleUrls: ['./link.component.less']
})
export class LinkComponent implements OnInit {
showModal = false;
// 申请时的链接
link: Link;
linkList: Link[];
loading: boolean = false;
applyFormGroup: FormGroup;
colors: Color[];
private lastUrl: string = '';
constructor(private message: NzMessageService,
private titleService: Title,
private apiService: ApiService,
private fb: FormBuilder,
private modal: NzModalService) {
titleService.setTitle('小海博客 | 友链');
}
ngOnInit() {
window.scrollTo(0, 0);
this.link = new Link();
this.apiService.links().subscribe({
next: data => this.linkList = data.result,
error: err => this.message.error(err.msg),
complete: () => this.colors = RandomColor(this.linkList.length)
});
this.applyFormGroup = this.fb.group({
urlLinkProtocol: ['http://'],
urlProtocol: ['http://'],
desc: [null, [Validators.maxLength(255)]],
email: [null, [Validators.required, Validators.pattern(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/)]],
iconPath: [null, [Validators.pattern(/^(https:\/\/|http:\/\/|)([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?$/)]],
linkUrl: [null, [Validators.required, Validators.pattern(/^([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?$/)]],
name: [null, [Validators.required, Validators.maxLength(255)]],
url: [null, [Validators.required, Validators.pattern(/^([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?$/)]]
});
this.applyFormGroup.controls.url.valueChanges.subscribe({
next: data => {
const linkUrlData: string = this.applyFormGroup.value.linkUrl || '';
this.applyFormGroup.patchValue({linkUrl: linkUrlData.replace(this.lastUrl, data)});
this.lastUrl = data;
},
});
}
apply() {
const value = this.applyFormGroup.value;
value.url = value.urlProtocol + value.url;
value.linkUrl = value.urlLinkProtocol + value.linkUrl;
const req: ApplyLinkReq = value;
this.loading = true;
this.apiService.applyLink(req).subscribe({
next: data => {
this.message.success('提交成功,请稍等,即将为你处理');
this.loading = false;
this.showModal = false;
this.applyFormGroup.reset();
},
error: err => {
if (err.code === 7200) {
const key = err.result;
this.modal.create({
nzTitle: '抓取站点失败',
nzContent: '暂未在您的网站友链页抓取到本站链接,是否确认已添加并重新提交邮件申请?',
nzClosable: false,
nzOnOk: () => {
this.apiService.reapplyLink(key).subscribe({
next: data1 => this.message.success('提交成功,请稍等,即将为你处理'),
error: err1 => this.message.error('提交失败,原因:' + err.msg)
});
}
});
} else {
this.message.error('提交失败,原因:' + err.msg);
}
this.loading = false;
this.showModal = false;
this.applyFormGroup.reset();
}
});
}
cancel() {
this.showModal = false;
this.link.name = null;
this.link.url = null;
}
}