widget.qw 1.0.83 → 1.0.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/.env.development +10 -10
  2. package/.env.production +8 -8
  3. package/README.md +75 -75
  4. package/build/style.css +521 -471
  5. package/build/widget.qw.es.js +253 -84
  6. package/build/widget.qw.umd.js +252 -83
  7. package/index.html +17 -17
  8. package/package.json +47 -47
  9. package/src/App.vue +26 -26
  10. package/src/api/index.js +173 -165
  11. package/src/components/AuditBar.vue +396 -396
  12. package/src/components/BillCard.vue +164 -164
  13. package/src/components/CascaderPicker.vue +132 -132
  14. package/src/components/CascaderPop.vue +375 -371
  15. package/src/components/CheckGroup.vue +113 -113
  16. package/src/components/DatetimeDropdown.vue +62 -0
  17. package/src/components/{DatetimePicker/index.vue → DatetimePicker.vue} +124 -124
  18. package/src/components/DayDropdown.vue +56 -56
  19. package/src/components/FilePicker.vue +169 -169
  20. package/src/components/HeadBar.vue +130 -0
  21. package/src/components/Input.vue +80 -80
  22. package/src/components/MonthDropdown.vue +51 -51
  23. package/src/components/MultiPicker.vue +123 -123
  24. package/src/components/ObjsEditor.vue +334 -334
  25. package/src/components/SecretNotify.js +5 -5
  26. package/src/components/Sheet.vue +92 -92
  27. package/src/components/SingleApiPicker.vue +108 -108
  28. package/src/components/SinglePicker.vue +102 -102
  29. package/src/components/SingleUserSelector.vue +425 -425
  30. package/src/components/Switch.vue +64 -64
  31. package/src/components/TreePicker.vue +113 -113
  32. package/src/components/UserPicker.vue +106 -106
  33. package/src/components/UserProfile.vue +129 -129
  34. package/src/components/UsersPicker.vue +118 -118
  35. package/src/components/YearDropdown.vue +59 -59
  36. package/src/components/data_selector.vue +303 -303
  37. package/src/components/image_picker.vue +123 -123
  38. package/src/components/images_picker.vue +195 -195
  39. package/src/components/index.js +172 -162
  40. package/src/components/mult_list_selector.vue +155 -155
  41. package/src/components/subdepartment_selector.vue +481 -481
  42. package/src/components/user_selector.vue +639 -639
  43. package/src/components/widget/DataPop.vue +95 -95
  44. package/src/components/{DatetimePicker → widget}/DatetimePop.vue +342 -342
  45. package/src/components/widget/TreePop.vue +88 -88
  46. package/src/components/widget/UserPop.vue +347 -347
  47. package/src/main.js +117 -117
  48. package/src/router/index.ts +183 -173
  49. package/src/util/array_util.js +32 -32
  50. package/src/util/auth_util.js +72 -72
  51. package/src/util/bool_util.js +5 -5
  52. package/src/util/bus.js +1 -1
  53. package/src/util/cache_util.js +18 -18
  54. package/src/util/errer_code.js +6 -6
  55. package/src/util/eval_util.js +19 -19
  56. package/src/util/icon_util.js +36 -36
  57. package/src/util/image_util.js +27 -27
  58. package/src/util/index.js +57 -57
  59. package/src/util/num_util.js +70 -70
  60. package/src/util/obj_util.js +28 -28
  61. package/src/util/request.js +73 -73
  62. package/src/util/request_json.js +71 -71
  63. package/src/util/request_json_mute.js +65 -65
  64. package/src/util/request_upload.js +79 -79
  65. package/src/util/route_util.js +31 -31
  66. package/src/util/str_util.js +143 -143
  67. package/src/util/time_util.js +406 -406
  68. package/src/util/toast_util.js +24 -24
  69. package/src/util/tree_util.js +153 -153
  70. package/src/util/uuid_util.js +9 -9
  71. package/src/util/validate.js +182 -182
  72. package/src/util/vue_filter.js +223 -223
  73. package/src/views/auditbar/index.vue +78 -78
  74. package/src/views/billcard/index.vue +48 -48
  75. package/src/views/cascaderpicker/index.vue +0 -0
  76. package/src/views/cascaderpicker/userpicker.vue +183 -0
  77. package/src/views/cascaderpop/index.vue +90 -90
  78. package/src/views/checkgroup/index.vue +35 -35
  79. package/src/views/dataSelector/index.vue +48 -48
  80. package/src/views/datetimedropdown/index.vue +34 -0
  81. package/src/views/datetimepicker/index.vue +34 -34
  82. package/src/views/daydropdown/index.vue +31 -31
  83. package/src/views/filepicker/index.vue +32 -32
  84. package/src/views/headbar/index.vue +28 -0
  85. package/src/views/home/index.vue +0 -0
  86. package/src/views/imagepicker/index.vue +31 -31
  87. package/src/views/imagespicker/index.vue +37 -37
  88. package/src/views/input/index.vue +35 -35
  89. package/src/views/monthdropdown/index.vue +31 -31
  90. package/src/views/multListSelector/index.vue +61 -61
  91. package/src/views/multipicker/index.vue +36 -36
  92. package/src/views/objseditor/index.vue +277 -277
  93. package/src/views/productSelector/index.vue +35 -35
  94. package/src/views/projectpicker/index.vue +41 -41
  95. package/src/views/secretnotify/index.vue +27 -27
  96. package/src/views/sheet/index.vue +45 -45
  97. package/src/views/singlepicker/index.vue +35 -35
  98. package/src/views/subdepartmentSelector/index.vue +40 -40
  99. package/src/views/switch/index.vue +34 -34
  100. package/src/views/treepicker/index.vue +41 -41
  101. package/src/views/userSelector/index.vue +54 -54
  102. package/src/views/userSelectorNew/index.vue +45 -45
  103. package/src/views/userpicker/index.vue +43 -43
  104. package/src/views/userprofile/index.vue +30 -30
  105. package/src/views/userspicker/index.vue +43 -43
  106. package/src/views/yeardropdown/index.vue +32 -32
  107. package/src/vm/index.js +1 -1
  108. package/vite.config.ts +122 -122
@@ -1,124 +1,124 @@
1
- <template>
2
- <van-field v-if="!isGone" name="image" :label="props.label" :required="isRequired" :rules="props.rules"
3
- label-class="label" :placeholder="props.placeholder">
4
- <template #input>
5
- <div class="image-box">
6
- <van-uploader v-if="props.capture" v-model="files" :max-count="1" :capture="props.capture"
7
- accept="image/jpeg,image/png" :afterRead="onAfterRead" :disabled="isDisabled"
8
- :deletable="!isReadonly && !isDisabled" :before-delete="onBeforeDelete" :show-upload="!isReadonly"
9
- />
10
- <van-uploader v-else v-model="files" :max-count="1" accept="image/jpeg,image/png"
11
- :afterRead="onAfterRead" :disabled="isDisabled" :deletable="!isReadonly && !isDisabled"
12
- :before-delete="onBeforeDelete" :show-upload="!isReadonly"
13
- />
14
- </div>
15
- </template>
16
- </van-field>
17
- </template>
18
-
19
- <script setup>
20
- import { ref, computed, onMounted, defineProps, defineEmits, watch } from "vue"
21
- import util from '../util'
22
- import { useVModel } from "@vueuse/core"
23
-
24
- const props = defineProps({
25
- modelValue: {
26
- type: String,
27
- default: ''
28
- },
29
- label: {
30
- type: String,
31
- default: ''
32
- },
33
- required: {
34
- type: Boolean,
35
- default: false
36
- },
37
- readonly: {
38
- type: Boolean,
39
- default: false
40
- },
41
- placeholder: {
42
- type: String,
43
- default: ''
44
- },
45
- capture: {
46
- type: String,
47
- default: ''
48
- },
49
- compress: {
50
- type: Boolean,
51
- default: true
52
- },
53
- rules: {
54
- type: Array,
55
- default: () => []
56
- },
57
- auth: {
58
- type: String,
59
- default: ''
60
- }
61
- })
62
-
63
- const emit = defineEmits(['update:modelValue'])
64
- const modelValue = useVModel(props, 'modelValue', emit)
65
- const { isRequired, isReadonly, isGone, isDisabled } = util.props2auth(props)
66
-
67
- const files = ref([])
68
-
69
- onMounted(() => {
70
-
71
- })
72
-
73
- const onAfterRead = async (file) => {
74
- console.log(file)
75
-
76
- let compress_file = file.file
77
- if (props.compress) {
78
- compress_file = await util.compress_image(file.file)
79
- }
80
-
81
- let params = {
82
- file: compress_file
83
- }
84
-
85
- return util.file_upload(params).then(res => {
86
- modelValue.value = res.data
87
- return Promise.resolve(file)
88
- })
89
- }
90
-
91
- const onBeforeDelete = (e) => {
92
- modelValue.value = ''
93
- return Promise.resolve(e)
94
- }
95
-
96
- watch(() => props.modelValue,
97
- (newVal, oldVal) => {
98
- if (!props.modelValue) {
99
- files.value = []
100
- return
101
- }
102
-
103
- files.value = [{
104
- url: props.modelValue
105
- }]
106
- },
107
- {
108
- immediate: true
109
- }
110
- )
111
- </script>
112
-
113
- <style lang="scss" scoped>
114
- :deep(.label) {
115
- color: #000 !important;
116
- }
117
-
118
- :deep(.van-field__control:disabled) {
119
- color: #000 !important;
120
- cursor: not-allowed;
121
- opacity: 1;
122
- -webkit-text-fill-color: #000;
123
- }
1
+ <template>
2
+ <van-field v-if="!isGone" name="image" :label="props.label" :required="isRequired" :rules="props.rules"
3
+ label-class="label" :placeholder="props.placeholder">
4
+ <template #input>
5
+ <div class="image-box">
6
+ <van-uploader v-if="props.capture" v-model="files" :max-count="1" :capture="props.capture"
7
+ accept="image/jpeg,image/png" :afterRead="onAfterRead" :disabled="isDisabled"
8
+ :deletable="!isReadonly && !isDisabled" :before-delete="onBeforeDelete" :show-upload="!isReadonly"
9
+ />
10
+ <van-uploader v-else v-model="files" :max-count="1" accept="image/jpeg,image/png"
11
+ :afterRead="onAfterRead" :disabled="isDisabled" :deletable="!isReadonly && !isDisabled"
12
+ :before-delete="onBeforeDelete" :show-upload="!isReadonly"
13
+ />
14
+ </div>
15
+ </template>
16
+ </van-field>
17
+ </template>
18
+
19
+ <script setup>
20
+ import { ref, computed, onMounted, defineProps, defineEmits, watch } from "vue"
21
+ import util from '../util'
22
+ import { useVModel } from "@vueuse/core"
23
+
24
+ const props = defineProps({
25
+ modelValue: {
26
+ type: String,
27
+ default: ''
28
+ },
29
+ label: {
30
+ type: String,
31
+ default: ''
32
+ },
33
+ required: {
34
+ type: Boolean,
35
+ default: false
36
+ },
37
+ readonly: {
38
+ type: Boolean,
39
+ default: false
40
+ },
41
+ placeholder: {
42
+ type: String,
43
+ default: ''
44
+ },
45
+ capture: {
46
+ type: String,
47
+ default: ''
48
+ },
49
+ compress: {
50
+ type: Boolean,
51
+ default: true
52
+ },
53
+ rules: {
54
+ type: Array,
55
+ default: () => []
56
+ },
57
+ auth: {
58
+ type: String,
59
+ default: ''
60
+ }
61
+ })
62
+
63
+ const emit = defineEmits(['update:modelValue'])
64
+ const modelValue = useVModel(props, 'modelValue', emit)
65
+ const { isRequired, isReadonly, isGone, isDisabled } = util.props2auth(props)
66
+
67
+ const files = ref([])
68
+
69
+ onMounted(() => {
70
+
71
+ })
72
+
73
+ const onAfterRead = async (file) => {
74
+ console.log(file)
75
+
76
+ let compress_file = file.file
77
+ if (props.compress) {
78
+ compress_file = await util.compress_image(file.file)
79
+ }
80
+
81
+ let params = {
82
+ file: compress_file
83
+ }
84
+
85
+ return util.file_upload(params).then(res => {
86
+ modelValue.value = res.data
87
+ return Promise.resolve(file)
88
+ })
89
+ }
90
+
91
+ const onBeforeDelete = (e) => {
92
+ modelValue.value = ''
93
+ return Promise.resolve(e)
94
+ }
95
+
96
+ watch(() => props.modelValue,
97
+ (newVal, oldVal) => {
98
+ if (!props.modelValue) {
99
+ files.value = []
100
+ return
101
+ }
102
+
103
+ files.value = [{
104
+ url: props.modelValue
105
+ }]
106
+ },
107
+ {
108
+ immediate: true
109
+ }
110
+ )
111
+ </script>
112
+
113
+ <style lang="scss" scoped>
114
+ :deep(.label) {
115
+ color: #000 !important;
116
+ }
117
+
118
+ :deep(.van-field__control:disabled) {
119
+ color: #000 !important;
120
+ cursor: not-allowed;
121
+ opacity: 1;
122
+ -webkit-text-fill-color: #000;
123
+ }
124
124
  </style>
@@ -1,196 +1,196 @@
1
- <template>
2
- <van-field name="image" :label="props.label" :required="isRequired" :rules="props.rules" label-class="label"
3
- :placeholder="props.placeholder">
4
- <template #input>
5
- <div class="image-box">
6
- <van-uploader v-if="props.capture && (!isReadonly && !isDisabled)" v-model="files" multiple
7
- :max-count="props.max" :capture="props.capture" accept="image/jpeg,image/png" :disabled="isDisabled"
8
- :deletable="!isRequired && !isDisabled" :afterRead="onAfterRead" :before-delete="onBeforeDelete"
9
- :show-upload="!isReadonly" />
10
- <van-uploader v-if="!props.capture && (!isReadonly && !isDisabled)" v-model="files" multiple
11
- :max-count="props.max" accept="image/jpeg,image/png" :disabled="isDisabled"
12
- :deletable="!isReadonly && !isDisabled" :afterRead="onAfterRead" :before-delete="onBeforeDelete"
13
- :show-upload="!isReadonly" />
14
- <img class="cover" v-if="isReadonly || isDisabled" v-for="(cover, i) in previews" :key="i" :src="cover"
15
- @click="onPreview(i)" />
16
- <van-icon v-if="(modelValue || []).length > props.maxPreview && (isReadonly || isDisabled)" name="ellipsis"
17
- @click="onToggleMore" />
18
- </div>
19
- </template>
20
- </van-field>
21
- </template>
22
-
23
- <script setup>
24
- import { ref, computed, onMounted, defineProps, defineEmits, watch } from "vue"
25
- import util from "@/util"
26
- import { useVModel } from "@vueuse/core"
27
- import { showImagePreview } from 'vant';
28
-
29
- const props = defineProps({
30
- modelValue: {
31
- type: Array,
32
- default: []
33
- },
34
- label: {
35
- type: String,
36
- default: ''
37
- },
38
- required: {
39
- type: Boolean,
40
- default: false
41
- },
42
- readonly: {
43
- type: Boolean,
44
- default: false
45
- },
46
- placeholder: {
47
- type: String,
48
- default: undefined
49
- },
50
- capture: {
51
- type: String,
52
- default: ''
53
- },
54
- compress: {
55
- type: Boolean,
56
- default: true
57
- },
58
- max: {
59
- type: Number,
60
- default: 10000
61
- },
62
- rules: {
63
- type: Array,
64
- default: () => []
65
- },
66
- auth: {
67
- type: String,
68
- default: ''
69
- },
70
- maxPreview: {
71
- type: Number,
72
- default: 1
73
- }
74
- })
75
- const emit = defineEmits(['update:modelValue'])
76
- const modelValue = useVModel(props, 'modelValue', emit)
77
- const { isRequired, isReadonly, isGone, isDisabled } = util.props2auth(props)
78
- const files = ref([])
79
- const isPreviewMore = ref(false)
80
- const previews = computed(() => {
81
- if (!modelValue.value || modelValue.value.length < 1)
82
- return []
83
-
84
- if (props.maxPreview > modelValue.value.length || isPreviewMore.value)
85
- return modelValue.value
86
-
87
- return modelValue.value.slice(0, props.maxPreview)
88
- })
89
-
90
- onMounted(() => {
91
-
92
- })
93
-
94
- const onAfterRead = async (e) => {
95
- console.log('onAfterRead', e)
96
-
97
- let files = []
98
- if (e && Array.isArray(e) && e.length > 0) {
99
- files = e
100
- }else{
101
- files = [e]
102
- }
103
-
104
- if (files && files.length > 0) {
105
- for (var i = 0; i < files.length; i++) {
106
- let compress_file = files[i].file
107
- if (props.compress) {
108
- compress_file = await util.compress_image(compress_file)
109
- }
110
-
111
- let params = {
112
- file: compress_file
113
- }
114
-
115
- let res = await util.file_upload(params)
116
- if (res.code == 200) {
117
- let newUrls = []
118
- if (props.modelValue && props.modelValue.length > 0)
119
- newUrls = [...props.modelValue, res.data]
120
- else
121
- newUrls = [res.data]
122
-
123
- emit('update:modelValue', newUrls)
124
- }
125
- }
126
-
127
- return Promise.resolve(e)
128
- }
129
-
130
- console.log('onAfterRead', e)
131
-
132
-
133
-
134
-
135
- for (var i = 0; i < files.length; i++) {
136
- let params = {
137
- file: files[i].file
138
- }
139
-
140
- let res = await util.file_upload(params)
141
- if (res.code == 200) {
142
- if(props.multiple)
143
- modelValue.value = [...(modelValue.value || []), res.data]
144
- else
145
- modelValue.value = res.data
146
- }
147
- }
148
-
149
- return Promise.resolve(e)
150
- }
151
-
152
- const onBeforeDelete = (e) => {
153
- let newUrls = props.modelValue.filter(item => {
154
- return item != e.url
155
- })
156
- emit('update:modelValue', newUrls)
157
- return Promise.resolve(e)
158
- }
159
-
160
- const onPreview = (i) => {
161
- showImagePreview({ images: modelValue.value, startPosition: i })
162
- }
163
-
164
- const onToggleMore = () => {
165
- isPreviewMore.value = !isPreviewMore.value
166
- }
167
-
168
- watch(() => props.modelValue,
169
- (newVal, oldVal) => {
170
- if (!props.modelValue || props.modelValue.length < 1) {
171
- files.value = []
172
- return
173
- }
174
-
175
- files.value = props.modelValue.map(item => {
176
- return {
177
- url: item,
178
- isImage: true
179
- }
180
- })
181
- },
182
- {
183
- immediate: true
184
- }
185
- )
186
- </script>
187
-
188
- <style lang="scss" scoped>
189
- .image-box {
190
-
191
- .cover {
192
- width: 80px;
193
- height: 80px;
194
- }
195
- }
1
+ <template>
2
+ <van-field name="image" :label="props.label" :required="isRequired" :rules="props.rules" label-class="label"
3
+ :placeholder="props.placeholder">
4
+ <template #input>
5
+ <div class="image-box">
6
+ <van-uploader v-if="props.capture && (!isReadonly && !isDisabled)" v-model="files" multiple
7
+ :max-count="props.max" :capture="props.capture" accept="image/jpeg,image/png" :disabled="isDisabled"
8
+ :deletable="!isRequired && !isDisabled" :afterRead="onAfterRead" :before-delete="onBeforeDelete"
9
+ :show-upload="!isReadonly" />
10
+ <van-uploader v-if="!props.capture && (!isReadonly && !isDisabled)" v-model="files" multiple
11
+ :max-count="props.max" accept="image/jpeg,image/png" :disabled="isDisabled"
12
+ :deletable="!isReadonly && !isDisabled" :afterRead="onAfterRead" :before-delete="onBeforeDelete"
13
+ :show-upload="!isReadonly" />
14
+ <img class="cover" v-if="isReadonly || isDisabled" v-for="(cover, i) in previews" :key="i" :src="cover"
15
+ @click="onPreview(i)" />
16
+ <van-icon v-if="(modelValue || []).length > props.maxPreview && (isReadonly || isDisabled)" name="ellipsis"
17
+ @click="onToggleMore" />
18
+ </div>
19
+ </template>
20
+ </van-field>
21
+ </template>
22
+
23
+ <script setup>
24
+ import { ref, computed, onMounted, defineProps, defineEmits, watch } from "vue"
25
+ import util from "@/util"
26
+ import { useVModel } from "@vueuse/core"
27
+ import { showImagePreview } from 'vant';
28
+
29
+ const props = defineProps({
30
+ modelValue: {
31
+ type: Array,
32
+ default: []
33
+ },
34
+ label: {
35
+ type: String,
36
+ default: ''
37
+ },
38
+ required: {
39
+ type: Boolean,
40
+ default: false
41
+ },
42
+ readonly: {
43
+ type: Boolean,
44
+ default: false
45
+ },
46
+ placeholder: {
47
+ type: String,
48
+ default: undefined
49
+ },
50
+ capture: {
51
+ type: String,
52
+ default: ''
53
+ },
54
+ compress: {
55
+ type: Boolean,
56
+ default: true
57
+ },
58
+ max: {
59
+ type: Number,
60
+ default: 10000
61
+ },
62
+ rules: {
63
+ type: Array,
64
+ default: () => []
65
+ },
66
+ auth: {
67
+ type: String,
68
+ default: ''
69
+ },
70
+ maxPreview: {
71
+ type: Number,
72
+ default: 1
73
+ }
74
+ })
75
+ const emit = defineEmits(['update:modelValue'])
76
+ const modelValue = useVModel(props, 'modelValue', emit)
77
+ const { isRequired, isReadonly, isGone, isDisabled } = util.props2auth(props)
78
+ const files = ref([])
79
+ const isPreviewMore = ref(false)
80
+ const previews = computed(() => {
81
+ if (!modelValue.value || modelValue.value.length < 1)
82
+ return []
83
+
84
+ if (props.maxPreview > modelValue.value.length || isPreviewMore.value)
85
+ return modelValue.value
86
+
87
+ return modelValue.value.slice(0, props.maxPreview)
88
+ })
89
+
90
+ onMounted(() => {
91
+
92
+ })
93
+
94
+ const onAfterRead = async (e) => {
95
+ console.log('onAfterRead', e)
96
+
97
+ let files = []
98
+ if (e && Array.isArray(e) && e.length > 0) {
99
+ files = e
100
+ }else{
101
+ files = [e]
102
+ }
103
+
104
+ if (files && files.length > 0) {
105
+ for (var i = 0; i < files.length; i++) {
106
+ let compress_file = files[i].file
107
+ if (props.compress) {
108
+ compress_file = await util.compress_image(compress_file)
109
+ }
110
+
111
+ let params = {
112
+ file: compress_file
113
+ }
114
+
115
+ let res = await util.file_upload(params)
116
+ if (res.code == 200) {
117
+ let newUrls = []
118
+ if (props.modelValue && props.modelValue.length > 0)
119
+ newUrls = [...props.modelValue, res.data]
120
+ else
121
+ newUrls = [res.data]
122
+
123
+ emit('update:modelValue', newUrls)
124
+ }
125
+ }
126
+
127
+ return Promise.resolve(e)
128
+ }
129
+
130
+ console.log('onAfterRead', e)
131
+
132
+
133
+
134
+
135
+ for (var i = 0; i < files.length; i++) {
136
+ let params = {
137
+ file: files[i].file
138
+ }
139
+
140
+ let res = await util.file_upload(params)
141
+ if (res.code == 200) {
142
+ if(props.multiple)
143
+ modelValue.value = [...(modelValue.value || []), res.data]
144
+ else
145
+ modelValue.value = res.data
146
+ }
147
+ }
148
+
149
+ return Promise.resolve(e)
150
+ }
151
+
152
+ const onBeforeDelete = (e) => {
153
+ let newUrls = props.modelValue.filter(item => {
154
+ return item != e.url
155
+ })
156
+ emit('update:modelValue', newUrls)
157
+ return Promise.resolve(e)
158
+ }
159
+
160
+ const onPreview = (i) => {
161
+ showImagePreview({ images: modelValue.value, startPosition: i })
162
+ }
163
+
164
+ const onToggleMore = () => {
165
+ isPreviewMore.value = !isPreviewMore.value
166
+ }
167
+
168
+ watch(() => props.modelValue,
169
+ (newVal, oldVal) => {
170
+ if (!props.modelValue || props.modelValue.length < 1) {
171
+ files.value = []
172
+ return
173
+ }
174
+
175
+ files.value = props.modelValue.map(item => {
176
+ return {
177
+ url: item,
178
+ isImage: true
179
+ }
180
+ })
181
+ },
182
+ {
183
+ immediate: true
184
+ }
185
+ )
186
+ </script>
187
+
188
+ <style lang="scss" scoped>
189
+ .image-box {
190
+
191
+ .cover {
192
+ width: 80px;
193
+ height: 80px;
194
+ }
195
+ }
196
196
  </style>