comp-edit-object.component.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { CommonModule } from '@angular/common';
  2. import { Component, Inject } from '@angular/core';
  3. import { FormControl, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
  4. import { MatButtonModule } from '@angular/material/button';
  5. import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
  6. import { MatFormFieldModule } from '@angular/material/form-field';
  7. import { MatInputModule } from '@angular/material/input';
  8. import Parse from "parse";
  9. import { ParseSchema } from '../../../schemas/func-parse';
  10. @Component({
  11. selector: 'app-comp-edit-object',
  12. standalone:true,
  13. imports:[
  14. CommonModule,
  15. FormsModule,
  16. ReactiveFormsModule,
  17. MatFormFieldModule,
  18. MatInputModule,
  19. MatButtonModule,
  20. MatDialogModule,
  21. // MatFormFieldModule,
  22. ],
  23. templateUrl: './comp-edit-object.component.html',
  24. styleUrls: ['./comp-edit-object.component.scss']
  25. })
  26. export class CompEditObjectComponent {
  27. jsonData:any = {}
  28. formControlMap:any = {}
  29. isFormShow:boolean = false;
  30. constructor(
  31. public dialogRef: MatDialogRef<CompEditObjectComponent>,
  32. @Inject(MAT_DIALOG_DATA) public data: {
  33. schema:ParseSchema|undefined,
  34. object:Parse.Object|null|undefined,
  35. fieldsArray:Array<any>|null,
  36. title:string|null,
  37. default?:any
  38. },
  39. ){
  40. // 设置数据校验
  41. this.data?.fieldsArray?.forEach(field=>{
  42. this.formControlMap[field?.key] = new FormControl({value:field?.key,disabled:field?.isDisabled||false})
  43. if(field?.require){
  44. this.formControlMap[field?.key] = new FormControl({value:field?.key,disabled:field?.isDisabled||false}, [Validators.required]);
  45. }
  46. })
  47. if(this.data.object?.toJSON()){
  48. this.jsonData = this.data?.object?.toJSON();
  49. console.log(this.jsonData)
  50. }
  51. if(!this.data?.object?.id){
  52. let className:any = this.data?.object?.className || this.data.schema?.className
  53. let SchemaContructor = Parse.Object.extend(className)
  54. this.data.object = new SchemaContructor()
  55. }
  56. }
  57. ngOnInit(){
  58. setTimeout(() => {
  59. this.isFormShow = true
  60. }, 200);
  61. }
  62. /**
  63. * 保存与取消
  64. */
  65. close(){
  66. this.dialogRef.close();
  67. }
  68. isSaving:boolean = false;
  69. requiredErrorMap:any = {}
  70. async save() {
  71. if(this.isSaving) return;
  72. this.isSaving = true
  73. // 检查必填项
  74. this.requiredErrorMap = {}
  75. this.data?.fieldsArray?.forEach(field=>{
  76. if(field?.require && typeof this.jsonData[field?.key] == "undefined"){
  77. this.requiredErrorMap[field?.key] = true
  78. }
  79. })
  80. if(Object.keys(this.requiredErrorMap)?.length>=1){
  81. this.isSaving = false
  82. return
  83. }
  84. // 设置编辑结果
  85. delete this.jsonData.objectId
  86. delete this.jsonData.updatedAt
  87. delete this.jsonData.createdAt
  88. delete this.jsonData.sessionToken
  89. delete this.jsonData.ACL
  90. this.data?.object?.set(this.jsonData);
  91. // 设置默认值
  92. if(this.data?.default){
  93. this.data?.object?.set(this.data?.default)
  94. }
  95. // 保存并返回
  96. this.data.object = await this.data?.object?.save();
  97. this.dialogRef.close(this.data?.object);
  98. this.isSaving = false
  99. }
  100. }