1
+ <script setup>
2
+ import { NSpace , NButton , NAlert , NModal , NRadio , NRadioGroup , NForm , NFormItem , NInput , NInputNumber } from ' naive-ui' ;
3
+ import { inject } from ' vue' ;
4
+
5
+ const { data , editModelData , showModal , errorMessage , modalMode } = inject (" datas" );
6
+
7
+ function handleValidateClick () {
8
+ for (const [key , value ] of Object .entries (editModelData .value )) {
9
+ if (! value && key != " key" && key != " id" ) {
10
+ errorMessage .value = ` Please fill the ${ key} ` ;
11
+ return false ;
12
+ }
13
+ }
14
+ return true ;
15
+ }
16
+
17
+ function submitCallback () {
18
+ if (! handleValidateClick ()) {
19
+ return ;
20
+ }
21
+ if (modalMode .value == " edit" ) {
22
+ data .value [editModelData .value .key ] = { ... editModelData .value };
23
+ fetch (` https://dummyjson.com/users/${ editModelData .value .id } ` , {
24
+ method: ' PUT' ,
25
+ headers: { ' Content-Type' : ' application/json' },
26
+ body: JSON .stringify (editModelData .value )
27
+ })
28
+ .then (res => res .json ())
29
+ .then (console .log )
30
+ } else if (modalMode .value == " add" ) {
31
+ editModelData .value .key = data .value .length ;
32
+ data .value .push ({ ... editModelData .value });
33
+ fetch (' https://dummyjson.com/users/add' , {
34
+ method: ' POST' ,
35
+ headers: { ' Content-Type' : ' application/json' },
36
+ body: JSON .stringify (editModelData .value )
37
+ })
38
+ .then (res => res .json ())
39
+ .then (console .log )
40
+ }
41
+ showModal .value = false ;
42
+ }
43
+
44
+ function cancelCallback () {
45
+ showModal .value = false ;
46
+ }
47
+
48
+ </script >
49
+
50
+ <template >
51
+ <n-modal v-model:show =" showModal" preset =" dialog" title =" Edit" >
52
+ <n-form class =" mt-3" ref =" formRef" :model =" editModelData" :rules =" rules" label-placement =" left" label-width =" auto"
53
+ require-mark-placement =" right-hanging" size =" medium" >
54
+ <n-alert v-if =" errorMessage" title =" Error" type =" error" class =" mt-3 mb-3" >
55
+ {{ errorMessage }}
56
+ </n-alert >
57
+ <n-form-item label =" Username" path =" inputValue" >
58
+ <n-input v-model:value =" editModelData.username" placeholder =" usern@me" :required =" true" />
59
+ </n-form-item >
60
+ <n-form-item label =" Password" path =" inputValue" >
61
+ <n-input v-model:value =" editModelData.password" placeholder =" p@ssord" :required =" true" />
62
+ </n-form-item >
63
+ <n-form-item label =" Email" path =" inputValue" >
64
+ <n-input v-model:value =" editModelData.email" placeholder =" em@il" :required =" true" />
65
+ </n-form-item >
66
+ <n-form-item label =" First Name" path =" inputValue" >
67
+ <n-input v-model:value =" editModelData.firstName" placeholder =" first n@me" :required =" true" />
68
+ </n-form-item >
69
+ <n-form-item label =" Last Name" path =" inputValue" >
70
+ <n-input v-model:value =" editModelData.lastName" placeholder =" last n@ame" :required =" true" />
71
+ </n-form-item >
72
+ <n-form-item label =" Age" path =" inputValue" >
73
+ <n-input-number v-model:value =" editModelData.age" :required =" true" />
74
+ </n-form-item >
75
+ <n-form-item label =" Gender" path =" radioGroupValue" >
76
+ <n-radio-group v-model:value =" editModelData.gender" >
77
+ <n-radio value =" male" >Male</n-radio >
78
+ <n-radio value =" female" >Female</n-radio >
79
+ </n-radio-group >
80
+ </n-form-item >
81
+ <n-form-item label =" Height" path =" inputValue" >
82
+ <n-input-number v-model:value =" editModelData.height" :required =" true" />
83
+ </n-form-item >
84
+ <n-form-item label =" Weight" path =" inputValue" >
85
+ <n-input-number v-model:value =" editModelData.weight" :required =" true" />
86
+ </n-form-item >
87
+ </n-form >
88
+ <template #action >
89
+ <n-space >
90
+ <n-button @click =" cancelCallback" >Cancel</n-button >
91
+ <n-button type =" primary" @click =" submitCallback" >Submit</n-button >
92
+ </n-space >
93
+ </template >
94
+ </n-modal >
95
+ </template >
0 commit comments