app-extend-api-details-editer.component.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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 { AppsExtendApiDetailsService } from '../../../service/apps-extend-api-details.service';
  26. import { AppsService } from '../../../service/apps.service';
  27. import { SelectAdaptersComponent } from '../../config/adapters/select-adapters/select-adapters.component';
  28. const getBase64 = (file: File): Promise<string | ArrayBuffer | null> =>
  29. new Promise((resolve, reject) => {
  30. const reader = new FileReader();
  31. reader.readAsDataURL(file);
  32. reader.onload = () => resolve(reader.result);
  33. reader.onerror = error => reject(error);
  34. });
  35. @Component({
  36. selector: 'app-app-extend-api-details-editer',
  37. templateUrl: './app-extend-api-details-editer.component.html',
  38. styles: [
  39. `
  40. nz-tabset {
  41. width: 90%;
  42. }
  43. nz-form-item {
  44. width: 50%;
  45. }
  46. `
  47. ],
  48. styleUrls: ['./app-extend-api-details-editer.component.less']
  49. })
  50. export class AppExtendApiDetailsEditerComponent implements OnInit {
  51. @Input() id?: String;
  52. @Input() isEdit?: boolean;
  53. form: {
  54. submitting: boolean;
  55. model: Apps;
  56. } = {
  57. submitting: false,
  58. model: new Apps()
  59. };
  60. formGroup: FormGroup = new FormGroup({});
  61. fileList: NzUploadFile[] = [];
  62. previewImage: string | ArrayBuffer | undefined | null = '';
  63. previewVisible = false;
  64. constructor(
  65. private modalRef: NzModalRef,
  66. private modalService: NzModalService,
  67. private appsService: AppsService,
  68. private appsExtendApiDetailsService: AppsExtendApiDetailsService,
  69. private viewContainerRef: ViewContainerRef,
  70. private fb: FormBuilder,
  71. private msg: NzMessageService,
  72. @Inject(ALAIN_I18N_TOKEN) private i18n: I18NService,
  73. private cdr: ChangeDetectorRef
  74. ) { }
  75. ngOnInit(): void {
  76. if (this.isEdit) {
  77. this.appsExtendApiDetailsService.get(`${this.id}`).subscribe(res => {
  78. this.form.model.init(res.data);
  79. });
  80. } else {
  81. this.appsExtendApiDetailsService.init().subscribe(res => {
  82. this.form.model.id = res.data.id;
  83. this.form.model.protocol = res.data.protocol;
  84. this.form.model.secret = res.data.secret;
  85. });
  86. }
  87. this.cdr.detectChanges();
  88. }
  89. handlePreview = async (file: NzUploadFile): Promise<void> => {
  90. let preview;
  91. if (!file.url) {
  92. preview = await getBase64(file.originFileObj!);
  93. }
  94. this.previewImage = file.url || preview;
  95. this.previewVisible = true;
  96. };
  97. uploadImageChange(uploadChange: NzUploadChangeParam): void {
  98. if (uploadChange.file.status === 'done') {
  99. this.form.model.iconId = uploadChange.file.response.data;
  100. this.previewImage = this.form.model.iconBase64.toString();
  101. this.fileList = [
  102. {
  103. uid: this.form.model.id.toString(),
  104. name: this.form.model.name.toString(),
  105. status: 'done',
  106. url: this.previewImage
  107. }
  108. ];
  109. this.cdr.detectChanges();
  110. }
  111. }
  112. onGenerateSecret(e: MouseEvent): void {
  113. e.preventDefault();
  114. this.appsService.generateSecret('base').subscribe(res => {
  115. this.form.model.secret = res.data;
  116. this.cdr.detectChanges();
  117. });
  118. }
  119. onSelectAdapter(e: MouseEvent): void {
  120. e.preventDefault();
  121. const modal = this.modalService.create({
  122. nzContent: SelectAdaptersComponent,
  123. nzViewContainerRef: this.viewContainerRef,
  124. nzComponentParams: {
  125. protocol: 'Extend_API'
  126. },
  127. nzOnOk: () => new Promise(resolve => setTimeout(resolve, 1000))
  128. });
  129. // Return a result when closed
  130. modal.afterClose.subscribe(result => {
  131. if (result.refresh) {
  132. this.form.model.adapter = result.data.adapter;
  133. this.form.model.adapterName = result.data.name;
  134. this.form.model.adapterId = result.data.id;
  135. }
  136. });
  137. }
  138. onClose(e: MouseEvent): void {
  139. e.preventDefault();
  140. this.modalRef.destroy({ refresh: false });
  141. }
  142. onSubmit(e: MouseEvent): void {
  143. e.preventDefault();
  144. this.form.submitting = true;
  145. this.form.model.trans();
  146. (this.isEdit
  147. ? this.appsExtendApiDetailsService.update(this.form.model)
  148. : this.appsExtendApiDetailsService.add(this.form.model)
  149. ).subscribe(res => {
  150. if (res.code == 0) {
  151. this.msg.success(this.i18n.fanyi(this.isEdit ? 'mxk.alert.update.success' : 'mxk.alert.add.success'));
  152. } else {
  153. this.msg.error(this.i18n.fanyi(this.isEdit ? 'mxk.alert.update.error' : 'mxk.alert.add.error'));
  154. }
  155. this.form.submitting = false;
  156. this.modalRef.destroy({ refresh: true });
  157. this.cdr.detectChanges();
  158. });
  159. }
  160. }