app-token-based-details-editer.component.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. import { Component, ChangeDetectorRef, ViewContainerRef, Input, OnInit, Inject } from '@angular/core';
  17. import { FormBuilder, FormGroup, Validators } from '@angular/forms';
  18. import { I18NService } from '@core';
  19. import { _HttpClient, ALAIN_I18N_TOKEN, SettingsService } from '@delon/theme';
  20. import format from 'date-fns/format';
  21. import { NzMessageService } from 'ng-zorro-antd/message';
  22. import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';
  23. import { NzUploadFile, NzUploadChangeParam } from 'ng-zorro-antd/upload';
  24. import { Apps } from '../../../entity/Apps';
  25. import { AppsTokenBasedDetails } from '../../../entity/AppsTokenBasedDetails';
  26. import { AppsTokenBasedDetailsService } from '../../../service/apps-token-based-details.service';
  27. import { AppsService } from '../../../service/apps.service';
  28. import { SelectAdaptersComponent } from '../../config/adapters/select-adapters/select-adapters.component';
  29. const getBase64 = (file: File): Promise<string | ArrayBuffer | null> =>
  30. new Promise((resolve, reject) => {
  31. const reader = new FileReader();
  32. reader.readAsDataURL(file);
  33. reader.onload = () => resolve(reader.result);
  34. reader.onerror = error => reject(error);
  35. });
  36. @Component({
  37. selector: 'app-app-token-based-details-editer',
  38. templateUrl: './app-token-based-details-editer.component.html',
  39. styles: [
  40. `
  41. nz-tabset {
  42. width: 90%;
  43. }
  44. nz-form-item {
  45. width: 50%;
  46. }
  47. `
  48. ],
  49. styleUrls: ['./app-token-based-details-editer.component.less']
  50. })
  51. export class AppTokenBasedDetailsEditerComponent implements OnInit {
  52. @Input() id?: String;
  53. @Input() isEdit?: boolean;
  54. form: {
  55. submitting: boolean;
  56. model: AppsTokenBasedDetails;
  57. } = {
  58. submitting: false,
  59. model: new AppsTokenBasedDetails()
  60. };
  61. formGroup: FormGroup = new FormGroup({});
  62. fileList: NzUploadFile[] = [];
  63. previewImage: string | ArrayBuffer | undefined | null = '';
  64. previewVisible = false;
  65. constructor(
  66. private modalRef: NzModalRef,
  67. private modalService: NzModalService,
  68. private appsService: AppsService,
  69. private appsTokenBasedDetailsService: AppsTokenBasedDetailsService,
  70. private viewContainerRef: ViewContainerRef,
  71. private fb: FormBuilder,
  72. private msg: NzMessageService,
  73. @Inject(ALAIN_I18N_TOKEN) private i18n: I18NService,
  74. private cdr: ChangeDetectorRef
  75. ) { }
  76. ngOnInit(): void {
  77. if (this.isEdit) {
  78. this.appsTokenBasedDetailsService.get(`${this.id}`).subscribe(res => {
  79. this.form.model.init(res.data);
  80. this.previewImage = this.form.model.iconBase64.toString();
  81. this.fileList = [
  82. {
  83. uid: this.form.model.id.toString(),
  84. name: this.form.model.appName.toString(),
  85. status: 'done',
  86. url: this.previewImage
  87. }
  88. ];
  89. });
  90. } else {
  91. this.appsTokenBasedDetailsService.init().subscribe(res => {
  92. this.form.model.id = res.data.id;
  93. this.form.model.protocol = res.data.protocol;
  94. this.form.model.secret = res.data.secret;
  95. });
  96. }
  97. this.cdr.detectChanges();
  98. }
  99. handlePreview = async (file: NzUploadFile): Promise<void> => {
  100. let preview;
  101. if (!file.url) {
  102. preview = await getBase64(file.originFileObj!);
  103. }
  104. this.previewImage = file.url || preview;
  105. this.previewVisible = true;
  106. };
  107. uploadImageChange(uploadChange: NzUploadChangeParam): void {
  108. if (uploadChange.file.status === 'done') {
  109. this.form.model.iconId = uploadChange.file.response.data;
  110. this.cdr.detectChanges();
  111. }
  112. }
  113. onSelectAlgorithm(value: string): void {
  114. this.appsService.generateKeys(this.form.model.id, value).subscribe(res => {
  115. this.form.model.secret = res.data;
  116. this.form.model.algorithmKey = res.data;
  117. });
  118. }
  119. onGenerateSecret(e: MouseEvent): void {
  120. e.preventDefault();
  121. this.appsService.generateKeys(this.form.model.id, this.form.model.algorithm).subscribe(res => {
  122. this.form.model.secret = res.data;
  123. this.form.model.algorithmKey = res.data;
  124. this.cdr.detectChanges();
  125. });
  126. }
  127. onSelectAdapter(e: MouseEvent): void {
  128. e.preventDefault();
  129. const modal = this.modalService.create({
  130. nzContent: SelectAdaptersComponent,
  131. nzViewContainerRef: this.viewContainerRef,
  132. nzComponentParams: {
  133. protocol: 'Token_Based'
  134. },
  135. nzOnOk: () => new Promise(resolve => setTimeout(resolve, 1000))
  136. });
  137. // Return a result when closed
  138. modal.afterClose.subscribe(result => {
  139. if (result.refresh) {
  140. this.form.model.adapter = result.data.adapter;
  141. this.form.model.adapterName = result.data.name;
  142. this.form.model.adapterId = result.data.id;
  143. }
  144. });
  145. }
  146. onClose(e: MouseEvent): void {
  147. e.preventDefault();
  148. this.modalRef.destroy({ refresh: false });
  149. }
  150. onSubmit(e: MouseEvent): void {
  151. e.preventDefault();
  152. this.form.submitting = true;
  153. this.form.model.trans();
  154. (this.isEdit
  155. ? this.appsTokenBasedDetailsService.update(this.form.model)
  156. : this.appsTokenBasedDetailsService.add(this.form.model)
  157. ).subscribe(res => {
  158. if (res.code == 0) {
  159. this.msg.success(this.i18n.fanyi(this.isEdit ? 'mxk.alert.update.success' : 'mxk.alert.add.success'));
  160. } else {
  161. this.msg.error(this.i18n.fanyi(this.isEdit ? 'mxk.alert.update.error' : 'mxk.alert.add.error'));
  162. }
  163. this.form.submitting = false;
  164. this.modalRef.destroy({ refresh: true });
  165. this.cdr.detectChanges();
  166. });
  167. }
  168. }