@netang/quasar 0.2.2 → 0.2.4

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 (248) hide show
  1. package/.editorconfig +12 -12
  2. package/_docs/docs/components/field-table.md +58 -58
  3. package/_docs/docs/components/field-tree.md +21 -21
  4. package/_docs/docs/components/table.md +24 -24
  5. package/_docs/docs/utils/table.md +196 -196
  6. package/components/column-title/index.vue +38 -38
  7. package/components/dialog/img-viewer/index.vue +657 -657
  8. package/components/dialog/index.vue +373 -373
  9. package/components/drawer/index.vue +303 -303
  10. package/components/editor-code/index.vue +325 -325
  11. package/components/empty/index.vue +80 -80
  12. package/components/field-date/index.vue +850 -850
  13. package/components/field-tree/index.vue +754 -754
  14. package/components/img/index.vue +239 -239
  15. package/components/input-number/index.vue +547 -547
  16. package/components/mixed-table/index.vue +532 -532
  17. package/components/mixed-table-splitter/index.vue +377 -377
  18. package/components/power-page/index.vue +94 -94
  19. package/components/private/components/move-to-tree/index.vue +154 -154
  20. package/components/private/edit-power-data/index.vue +846 -846
  21. package/components/private/table-visible-columns-button/index.vue +114 -114
  22. package/components/render/index.vue +123 -123
  23. package/components/search/index.vue +231 -231
  24. package/components/search-item/index.vue +210 -210
  25. package/components/select/index.vue +177 -177
  26. package/components/splitter/index.vue +422 -422
  27. package/components/table/index.vue +513 -513
  28. package/components/table-column-fixed/index.vue +110 -110
  29. package/components/table-summary/index.vue +107 -107
  30. package/components/toolbar/index.vue +146 -146
  31. package/components/tree/index.vue +1728 -1728
  32. package/components/uploader/index.vue +190 -190
  33. package/components/uploader-query/index.vue +928 -925
  34. package/docs/404.html +33 -33
  35. package/docs/assets/404.html-60b35caa.js +1 -1
  36. package/docs/assets/404.html-d1e63d77.js +1 -1
  37. package/docs/assets/alert.html-b2a2a72f.js +5 -5
  38. package/docs/assets/alert.html-ba46d137.js +1 -1
  39. package/docs/assets/app-9f30aa4b.js +6 -6
  40. package/docs/assets/area.html-01b9b58d.js +42 -42
  41. package/docs/assets/area.html-9a4fce6a.js +1 -1
  42. package/docs/assets/arr.html-145d27e7.js +1 -1
  43. package/docs/assets/arr.html-674e65ab.js +11 -11
  44. package/docs/assets/auth.html-579fa830.js +1 -1
  45. package/docs/assets/auth.html-8544ed95.js +8 -8
  46. package/docs/assets/bus.html-c71254aa.js +1 -1
  47. package/docs/assets/bus.html-dc7d3d19.js +6 -6
  48. package/docs/assets/column-title.html-c735cb5a.js +3 -3
  49. package/docs/assets/column-title.html-e9316762.js +1 -1
  50. package/docs/assets/confirm.html-ddfdc27f.js +10 -10
  51. package/docs/assets/confirm.html-ef3e2bef.js +1 -1
  52. package/docs/assets/copy.html-d20345b6.js +1 -1
  53. package/docs/assets/copy.html-ef8c8571.js +13 -13
  54. package/docs/assets/data.html-6432175d.js +30 -30
  55. package/docs/assets/data.html-a3b05d5b.js +1 -1
  56. package/docs/assets/dialog.html-1f698e5a.js +1 -1
  57. package/docs/assets/dialog.html-62902b83.js +68 -68
  58. package/docs/assets/dialog.html-baea77c9.js +1 -1
  59. package/docs/assets/dialog.html-bb082fc4.js +1 -1
  60. package/docs/assets/dict.html-1311da3d.js +23 -23
  61. package/docs/assets/dict.html-b96fbf0c.js +1 -1
  62. package/docs/assets/dictOptions.html-7c4f40a5.js +1 -1
  63. package/docs/assets/dictOptions.html-fb99d175.js +5 -5
  64. package/docs/assets/dragger.html-668d3efa.js +1 -1
  65. package/docs/assets/dragger.html-749d585a.js +1 -1
  66. package/docs/assets/editor-code.html-6ab26ea9.js +1 -1
  67. package/docs/assets/editor-code.html-d196205d.js +1 -1
  68. package/docs/assets/empty.html-1c139131.js +1 -1
  69. package/docs/assets/empty.html-1e9c441d.js +1 -1
  70. package/docs/assets/field-date.html-069fdb13.js +1 -1
  71. package/docs/assets/field-date.html-ad204aa9.js +1 -1
  72. package/docs/assets/field-table.html-ce480f03.js +1 -1
  73. package/docs/assets/field-table.html-d9236160.js +1 -1
  74. package/docs/assets/field-text.html-7277c62f.js +1 -1
  75. package/docs/assets/field-text.html-ccb4cecf.js +1 -1
  76. package/docs/assets/field-tree.html-519bfb45.js +1 -1
  77. package/docs/assets/field-tree.html-fdc748d6.js +1 -1
  78. package/docs/assets/form.html-2b562c37.js +2 -2
  79. package/docs/assets/form.html-75104cd5.js +1 -1
  80. package/docs/assets/framework-204010b2.js +5 -5
  81. package/docs/assets/getData.html-990e3787.js +1 -1
  82. package/docs/assets/getData.html-bb72025f.js +34 -34
  83. package/docs/assets/getFile.html-42368004.js +1 -1
  84. package/docs/assets/getFile.html-99abd054.js +3 -3
  85. package/docs/assets/getImage.html-3429c5a1.js +1 -1
  86. package/docs/assets/getImage.html-4d886d83.js +3 -3
  87. package/docs/assets/getTime.html-7435f922.js +1 -1
  88. package/docs/assets/getTime.html-b37f49eb.js +20 -20
  89. package/docs/assets/img.html-7d1da657.js +1 -1
  90. package/docs/assets/img.html-fbea1105.js +1 -1
  91. package/docs/assets/index.html-1695dd7c.js +1 -1
  92. package/docs/assets/index.html-65a4aa67.js +1 -1
  93. package/docs/assets/index.html-7b98d5bd.js +1 -1
  94. package/docs/assets/index.html-c01f2648.js +1 -1
  95. package/docs/assets/input-number.html-0b250d2a.js +1 -1
  96. package/docs/assets/input-number.html-a8eb0378.js +1 -1
  97. package/docs/assets/list-menu-item.html-7f1b4611.js +1 -1
  98. package/docs/assets/list-menu-item.html-84ed5ab8.js +1 -1
  99. package/docs/assets/list-menu.html-28b4163f.js +1 -1
  100. package/docs/assets/list-menu.html-cb6ba95b.js +1 -1
  101. package/docs/assets/loading.html-dae9e39d.js +6 -6
  102. package/docs/assets/loading.html-dc74c9e6.js +1 -1
  103. package/docs/assets/notify.html-e6c4c514.js +1 -1
  104. package/docs/assets/notify.html-f2c4d914.js +8 -8
  105. package/docs/assets/power-page.html-32e02f82.js +1 -1
  106. package/docs/assets/power-page.html-485e77da.js +1 -1
  107. package/docs/assets/power.html-d258cc19.js +93 -93
  108. package/docs/assets/power.html-e490bd32.js +1 -1
  109. package/docs/assets/previewImage.html-6a6b4245.js +1 -1
  110. package/docs/assets/previewImage.html-c5b7e945.js +2 -2
  111. package/docs/assets/price.html-1882c548.js +19 -19
  112. package/docs/assets/price.html-94d3f5be.js +1 -1
  113. package/docs/assets/price.html-d213df0f.js +1 -1
  114. package/docs/assets/price.html-deaf880f.js +1 -1
  115. package/docs/assets/render.html-8efcbdd4.js +1 -1
  116. package/docs/assets/render.html-df228e38.js +1 -1
  117. package/docs/assets/rule.html-2cd57fc2.js +13 -13
  118. package/docs/assets/rule.html-61662001.js +1 -1
  119. package/docs/assets/ruleValid.html-04fe2552.js +1 -1
  120. package/docs/assets/ruleValid.html-e0a776af.js +14 -14
  121. package/docs/assets/search-0782d0d1.svg +1 -1
  122. package/docs/assets/search-item.html-3f75394c.js +1 -1
  123. package/docs/assets/search-item.html-4e942ecd.js +1 -1
  124. package/docs/assets/search.html-2807043e.js +1 -1
  125. package/docs/assets/search.html-c24f8806.js +1 -1
  126. package/docs/assets/select.html-00d0607c.js +1 -1
  127. package/docs/assets/select.html-de7731f5.js +1 -1
  128. package/docs/assets/splitter.html-56f51a70.js +1 -1
  129. package/docs/assets/splitter.html-f5c836d7.js +1 -1
  130. package/docs/assets/style-161e43ab.css +1 -1
  131. package/docs/assets/symbols.html-a6aea4bf.js +1 -1
  132. package/docs/assets/symbols.html-b1f65bad.js +21 -21
  133. package/docs/assets/table-column-fixed.html-3a69e7b2.js +1 -1
  134. package/docs/assets/table-column-fixed.html-e763c38b.js +1 -1
  135. package/docs/assets/table-pagination.html-236934d3.js +1 -1
  136. package/docs/assets/table-pagination.html-c37ee2ac.js +1 -1
  137. package/docs/assets/table-splitter.html-07eab15c.js +1 -1
  138. package/docs/assets/table-splitter.html-7670ee65.js +1 -1
  139. package/docs/assets/table-summary.html-04db434f.js +1 -1
  140. package/docs/assets/table-summary.html-943c65a0.js +1 -1
  141. package/docs/assets/table.html-36253ad7.js +1 -1
  142. package/docs/assets/table.html-7f9c5d1b.js +38 -38
  143. package/docs/assets/table.html-93d53dc8.js +1 -1
  144. package/docs/assets/table.html-ac99b9cb.js +1 -1
  145. package/docs/assets/thumbnail.html-bab1976b.js +1 -1
  146. package/docs/assets/thumbnail.html-eb64e5e8.js +1 -1
  147. package/docs/assets/timestamp.html-4e54f79b.js +13 -13
  148. package/docs/assets/timestamp.html-d0e1b88a.js +1 -1
  149. package/docs/assets/toast.html-58ecbe21.js +1 -1
  150. package/docs/assets/toast.html-c9b9d36b.js +6 -6
  151. package/docs/assets/toolbar.html-83d9f97c.js +1 -1
  152. package/docs/assets/toolbar.html-ff7b8c92.js +1 -1
  153. package/docs/assets/tree.html-d07cbe79.js +23 -23
  154. package/docs/assets/tree.html-ea04193e.js +1 -1
  155. package/docs/assets/uploader-query.html-05590718.js +1 -1
  156. package/docs/assets/uploader-query.html-3175bac5.js +1 -1
  157. package/docs/assets/uploader.html-36da4394.js +2 -2
  158. package/docs/assets/uploader.html-6b5f3079.js +1 -1
  159. package/docs/assets/uploader.html-b9340b57.js +1 -1
  160. package/docs/assets/uploader.html-bc1c22e3.js +1 -1
  161. package/docs/assets/value-format.html-8ae3d47d.js +1 -1
  162. package/docs/assets/value-format.html-afa99b3d.js +1 -1
  163. package/docs/components/column-title.html +35 -35
  164. package/docs/components/data.html +62 -62
  165. package/docs/components/dialog.html +33 -33
  166. package/docs/components/dragger.html +33 -33
  167. package/docs/components/editor-code.html +33 -33
  168. package/docs/components/empty.html +33 -33
  169. package/docs/components/field-date.html +33 -33
  170. package/docs/components/field-table.html +33 -33
  171. package/docs/components/field-text.html +33 -33
  172. package/docs/components/field-tree.html +33 -33
  173. package/docs/components/img.html +33 -33
  174. package/docs/components/input-number.html +33 -33
  175. package/docs/components/list-menu-item.html +33 -33
  176. package/docs/components/list-menu.html +33 -33
  177. package/docs/components/power-page.html +33 -33
  178. package/docs/components/price.html +33 -33
  179. package/docs/components/render.html +33 -33
  180. package/docs/components/search-item.html +33 -33
  181. package/docs/components/search.html +33 -33
  182. package/docs/components/select.html +33 -33
  183. package/docs/components/splitter.html +33 -33
  184. package/docs/components/table-column-fixed.html +33 -33
  185. package/docs/components/table-pagination.html +33 -33
  186. package/docs/components/table-splitter.html +33 -33
  187. package/docs/components/table-summary.html +33 -33
  188. package/docs/components/table.html +33 -33
  189. package/docs/components/thumbnail.html +33 -33
  190. package/docs/components/toolbar.html +33 -33
  191. package/docs/components/uploader-query.html +33 -33
  192. package/docs/components/uploader.html +33 -33
  193. package/docs/components/value-format.html +33 -33
  194. package/docs/index.html +33 -33
  195. package/docs/utils/alert.html +37 -37
  196. package/docs/utils/area.html +74 -74
  197. package/docs/utils/arr.html +43 -43
  198. package/docs/utils/auth.html +40 -40
  199. package/docs/utils/bus.html +38 -38
  200. package/docs/utils/confirm.html +42 -42
  201. package/docs/utils/copy.html +45 -45
  202. package/docs/utils/dialog.html +100 -100
  203. package/docs/utils/dict.html +55 -55
  204. package/docs/utils/dictOptions.html +37 -37
  205. package/docs/utils/form.html +34 -34
  206. package/docs/utils/getData.html +66 -66
  207. package/docs/utils/getFile.html +35 -35
  208. package/docs/utils/getImage.html +35 -35
  209. package/docs/utils/getTime.html +52 -52
  210. package/docs/utils/index.html +33 -33
  211. package/docs/utils/loading.html +38 -38
  212. package/docs/utils/notify.html +40 -40
  213. package/docs/utils/power.html +125 -125
  214. package/docs/utils/previewImage.html +34 -34
  215. package/docs/utils/price.html +51 -51
  216. package/docs/utils/rule.html +45 -45
  217. package/docs/utils/ruleValid.html +46 -46
  218. package/docs/utils/symbols.html +53 -53
  219. package/docs/utils/table.html +70 -70
  220. package/docs/utils/timestamp.html +45 -45
  221. package/docs/utils/toast.html +38 -38
  222. package/docs/utils/tree.html +55 -55
  223. package/docs/utils/uploader.html +34 -34
  224. package/package.json +1 -1
  225. package/sass/common.scss +184 -184
  226. package/sass/index.scss +12 -12
  227. package/sass/quasar/field.scss +250 -250
  228. package/sass/quasar/table.scss +168 -168
  229. package/sass/variables.scss +140 -140
  230. package/utils/$form.js +72 -72
  231. package/utils/$power.js +1460 -1460
  232. package/utils/$render.js +75 -75
  233. package/utils/$search.js +416 -416
  234. package/utils/$table.js +1275 -1275
  235. package/utils/config.js +52 -52
  236. package/utils/dialog.js +36 -36
  237. package/utils/dict.js +21 -21
  238. package/utils/getData.js +88 -88
  239. package/utils/getFile.js +62 -62
  240. package/utils/getImage.js +227 -222
  241. package/utils/getTime.js +113 -113
  242. package/utils/index.js +65 -65
  243. package/utils/previewImage.js +14 -14
  244. package/utils/timestamp.js +18 -18
  245. package/utils/uploader.js +2 -1
  246. package/utils/useFileUrl.js +26 -26
  247. package/utils/useSearch.js +499 -499
  248. package/utils/useUploader.js +303 -303
@@ -1,239 +1,239 @@
1
- <template>
2
- <q-img
3
- class="n-img"
4
- :class="{
5
- 'rounded-borders': rounded,
6
- 'n-img--round': round,
7
- }"
8
- :src="currentSrc"
9
- :width="imageProps.width"
10
- :height="imageProps.height"
11
- :spinner-size="imageProps.spinnerSize"
12
- v-bind="$attrs"
13
- v-if="currentSrc"
14
- >
15
- <!-- 错误插槽 -->
16
- <template v-slot:error>
17
- <slot name="error">
18
- <div class="absolute-full flex flex-center bg-grey-5 text-white no-padding">
19
- <q-icon
20
- :size="errorIconSize"
21
- :name="errorIcon"
22
- />
23
- </div>
24
-
25
- <!-- 默认插槽 -->
26
- <slot />
27
- </slot>
28
- </template>
29
-
30
- <!-- 默认插槽 -->
31
- <slot />
32
-
33
- <!-- 预览点击 -->
34
- <div
35
- class="absolute-full transparent cursor-pointer"
36
- @click.prevent.stop="onPreview"
37
- @dblclick.prevent.stop="onNoop"
38
- v-if="preview"
39
- ></div>
40
- </q-img>
41
-
42
- <!-- 如果没有图片 -->
43
- <div
44
- class="q-img n-img"
45
- :class="{
46
- 'rounded-borders': rounded,
47
- 'n-img--round': round,
48
- }"
49
- :style="imageProps"
50
- v-bind="$attrs"
51
- v-else
52
- >
53
- <div class="q-img__content absolute-full q-anchor--skip">
54
- <slot name="error">
55
- <div class="absolute-full flex flex-center bg-grey-5 text-white no-padding">
56
- <q-icon
57
- :size="errorIconSize"
58
- :name="errorIcon"
59
- />
60
- </div>
61
-
62
- <!-- 默认插槽 -->
63
- <slot />
64
- </slot>
65
- </div>
66
- </div>
67
- </template>
68
-
69
- <script>
70
- import { computed } from 'vue'
71
-
72
- import $n_px from '@netang/utils/px'
73
-
74
- import $n_getImage from '../../utils/getImage'
75
- import $n_previewImage from '../../utils/previewImage'
76
-
77
- export default {
78
-
79
- /**
80
- * 标识
81
- */
82
- name: 'NImg',
83
-
84
- /**
85
- * 关闭组件 attribute 透传行为
86
- */
87
- inheritAttrs: false,
88
-
89
- /**
90
- * 声明属性
91
- */
92
- props: {
93
- // 图片地址
94
- src: [ String, Array, Object ],
95
- // 宽
96
- width: [ String, Number ],
97
- // 高
98
- height: [ String, Number ],
99
- // 是否为圆形
100
- round: Boolean,
101
- // 是否为圆角
102
- rounded: Boolean,
103
- // 加载旋转器尺寸
104
- spinnerSize: [ String, Number ],
105
- // 错误尺寸(发生错误后如果没有定义宽高, 则此参数为宽高)
106
- errorSize: {
107
- type: [ String, Number ],
108
- default: 70,
109
- },
110
- // 错误图标大小
111
- errorIconSize: {
112
- type: String,
113
- default: 'md',
114
- },
115
- // 错误图标
116
- errorIcon: {
117
- type: String,
118
- default: 'image',
119
- },
120
- // 是否点击放大预览
121
- preview: Boolean,
122
- // 预览参数
123
- previewProps: Object,
124
- },
125
-
126
- /**
127
- * 组合式
128
- */
129
- setup(props) {
130
-
131
- // ==========【计算属性】==========================================================================================
132
-
133
- /**
134
- * 当前图片地址
135
- */
136
- const currentSrc = computed(function () {
137
- const res = $n_getImage(props.src, { w: props.width, zoom: true })
138
- if (res) {
139
- return res
140
- }
141
- })
142
-
143
- /**
144
- * 图片声明属性
145
- */
146
- const imageProps = computed(function () {
147
-
148
- let width = props.width ? $n_px(props.width) : undefined
149
- let height = props.height ? $n_px(props.height) : undefined
150
-
151
- // 如果有当前值
152
- if (currentSrc.value) {
153
- return {
154
- width,
155
- height,
156
- spinnerSize: props.spinnerSize ? $n_px(props.spinnerSize) : undefined,
157
- }
158
- }
159
-
160
- // 如果没有宽 || 没有高
161
- if (! width || ! height) {
162
- width = $n_px(props.errorSize)
163
- height = width
164
- }
165
-
166
- return {
167
- width,
168
- height,
169
- }
170
- })
171
-
172
- // ==========【方法】=============================================================================================
173
-
174
- /**
175
- * 预览
176
- */
177
- function onPreview() {
178
-
179
- // 预览图片
180
- $n_previewImage(Object.assign({
181
- images: [
182
- props.src,
183
- ],
184
- }, props.previewProps))
185
- }
186
-
187
- // ==========【返回】=============================================================================================
188
-
189
- return {
190
- // 当前图片地址
191
- currentSrc,
192
- // 图片声明属性
193
- imageProps,
194
- // 预览
195
- onPreview,
196
- // 点击空方法
197
- onNoop() {},
198
- }
199
- }
200
- }
201
- </script>
202
-
203
- <style lang="scss">
204
- .n-img {
205
- // 圆形
206
- &--round {
207
- border-radius: 50%;
208
- }
209
-
210
- // 设置
211
- &__settings {
212
- position: absolute;
213
- top: 0;
214
- left: 0;
215
- bottom: 0;
216
- right: 0;
217
- padding: 0 !important;
218
- margin: 0 !important;
219
- background-color: transparent !important;
220
- visibility: hidden;
221
- }
222
-
223
- &:hover {
224
- .n-img__settings {
225
- visibility: visible;
226
- }
227
- }
228
- }
229
-
230
- /**
231
- * 手机版
232
- */
233
- body.mobile {
234
- .n-img__settings {
235
- visibility: visible;
236
- }
237
- }
238
- </style>
239
-
1
+ <template>
2
+ <q-img
3
+ class="n-img"
4
+ :class="{
5
+ 'rounded-borders': rounded,
6
+ 'n-img--round': round,
7
+ }"
8
+ :src="currentSrc"
9
+ :width="imageProps.width"
10
+ :height="imageProps.height"
11
+ :spinner-size="imageProps.spinnerSize"
12
+ v-bind="$attrs"
13
+ v-if="currentSrc"
14
+ >
15
+ <!-- 错误插槽 -->
16
+ <template v-slot:error>
17
+ <slot name="error">
18
+ <div class="absolute-full flex flex-center bg-grey-5 text-white no-padding">
19
+ <q-icon
20
+ :size="errorIconSize"
21
+ :name="errorIcon"
22
+ />
23
+ </div>
24
+
25
+ <!-- 默认插槽 -->
26
+ <slot />
27
+ </slot>
28
+ </template>
29
+
30
+ <!-- 默认插槽 -->
31
+ <slot />
32
+
33
+ <!-- 预览点击 -->
34
+ <div
35
+ class="absolute-full transparent cursor-pointer"
36
+ @click.prevent.stop="onPreview"
37
+ @dblclick.prevent.stop="onNoop"
38
+ v-if="preview"
39
+ ></div>
40
+ </q-img>
41
+
42
+ <!-- 如果没有图片 -->
43
+ <div
44
+ class="q-img n-img"
45
+ :class="{
46
+ 'rounded-borders': rounded,
47
+ 'n-img--round': round,
48
+ }"
49
+ :style="imageProps"
50
+ v-bind="$attrs"
51
+ v-else
52
+ >
53
+ <div class="q-img__content absolute-full q-anchor--skip">
54
+ <slot name="error">
55
+ <div class="absolute-full flex flex-center bg-grey-5 text-white no-padding">
56
+ <q-icon
57
+ :size="errorIconSize"
58
+ :name="errorIcon"
59
+ />
60
+ </div>
61
+
62
+ <!-- 默认插槽 -->
63
+ <slot />
64
+ </slot>
65
+ </div>
66
+ </div>
67
+ </template>
68
+
69
+ <script>
70
+ import { computed } from 'vue'
71
+
72
+ import $n_px from '@netang/utils/px'
73
+
74
+ import $n_getImage from '../../utils/getImage'
75
+ import $n_previewImage from '../../utils/previewImage'
76
+
77
+ export default {
78
+
79
+ /**
80
+ * 标识
81
+ */
82
+ name: 'NImg',
83
+
84
+ /**
85
+ * 关闭组件 attribute 透传行为
86
+ */
87
+ inheritAttrs: false,
88
+
89
+ /**
90
+ * 声明属性
91
+ */
92
+ props: {
93
+ // 图片地址
94
+ src: [ String, Array, Object ],
95
+ // 宽
96
+ width: [ String, Number ],
97
+ // 高
98
+ height: [ String, Number ],
99
+ // 是否为圆形
100
+ round: Boolean,
101
+ // 是否为圆角
102
+ rounded: Boolean,
103
+ // 加载旋转器尺寸
104
+ spinnerSize: [ String, Number ],
105
+ // 错误尺寸(发生错误后如果没有定义宽高, 则此参数为宽高)
106
+ errorSize: {
107
+ type: [ String, Number ],
108
+ default: 70,
109
+ },
110
+ // 错误图标大小
111
+ errorIconSize: {
112
+ type: String,
113
+ default: 'md',
114
+ },
115
+ // 错误图标
116
+ errorIcon: {
117
+ type: String,
118
+ default: 'image',
119
+ },
120
+ // 是否点击放大预览
121
+ preview: Boolean,
122
+ // 预览参数
123
+ previewProps: Object,
124
+ },
125
+
126
+ /**
127
+ * 组合式
128
+ */
129
+ setup(props) {
130
+
131
+ // ==========【计算属性】==========================================================================================
132
+
133
+ /**
134
+ * 当前图片地址
135
+ */
136
+ const currentSrc = computed(function () {
137
+ const res = $n_getImage(props.src, { w: props.width, zoom: true })
138
+ if (res) {
139
+ return res
140
+ }
141
+ })
142
+
143
+ /**
144
+ * 图片声明属性
145
+ */
146
+ const imageProps = computed(function () {
147
+
148
+ let width = props.width ? $n_px(props.width) : undefined
149
+ let height = props.height ? $n_px(props.height) : undefined
150
+
151
+ // 如果有当前值
152
+ if (currentSrc.value) {
153
+ return {
154
+ width,
155
+ height,
156
+ spinnerSize: props.spinnerSize ? $n_px(props.spinnerSize) : undefined,
157
+ }
158
+ }
159
+
160
+ // 如果没有宽 || 没有高
161
+ if (! width || ! height) {
162
+ width = $n_px(props.errorSize)
163
+ height = width
164
+ }
165
+
166
+ return {
167
+ width,
168
+ height,
169
+ }
170
+ })
171
+
172
+ // ==========【方法】=============================================================================================
173
+
174
+ /**
175
+ * 预览
176
+ */
177
+ function onPreview() {
178
+
179
+ // 预览图片
180
+ $n_previewImage(Object.assign({
181
+ images: [
182
+ props.src,
183
+ ],
184
+ }, props.previewProps))
185
+ }
186
+
187
+ // ==========【返回】=============================================================================================
188
+
189
+ return {
190
+ // 当前图片地址
191
+ currentSrc,
192
+ // 图片声明属性
193
+ imageProps,
194
+ // 预览
195
+ onPreview,
196
+ // 点击空方法
197
+ onNoop() {},
198
+ }
199
+ }
200
+ }
201
+ </script>
202
+
203
+ <style lang="scss">
204
+ .n-img {
205
+ // 圆形
206
+ &--round {
207
+ border-radius: 50%;
208
+ }
209
+
210
+ // 设置
211
+ &__settings {
212
+ position: absolute;
213
+ top: 0;
214
+ left: 0;
215
+ bottom: 0;
216
+ right: 0;
217
+ padding: 0 !important;
218
+ margin: 0 !important;
219
+ background-color: transparent !important;
220
+ visibility: hidden;
221
+ }
222
+
223
+ &:hover {
224
+ .n-img__settings {
225
+ visibility: visible;
226
+ }
227
+ }
228
+ }
229
+
230
+ /**
231
+ * 手机版
232
+ */
233
+ body.mobile {
234
+ .n-img__settings {
235
+ visibility: visible;
236
+ }
237
+ }
238
+ </style>
239
+