Showing
9 changed files
with
1359 additions
and
1 deletions
src/qx-icon-selector/enum.tsx
0 → 100644
| 1 | +// 图标形态 | |
| 2 | +export enum ICON_SHAPE { | |
| 3 | + line = '线性', | |
| 4 | + fill = '面性', | |
| 5 | +} | |
| 6 | + | |
| 7 | +// 图标所属分类 | |
| 8 | +export const ICON_CLASSIFY: any = { | |
| 9 | + // media: '媒体', | |
| 10 | + logo: 'Logo', | |
| 11 | + file: '文件', | |
| 12 | + education: '教育', | |
| 13 | + // editor: '编辑', | |
| 14 | + device: '设备', | |
| 15 | + development: '研发', | |
| 16 | + design: '设计', | |
| 17 | + map: '地图', | |
| 18 | + building: '建筑', | |
| 19 | + business: '商业', | |
| 20 | + contact: '联络', | |
| 21 | + system: '系统', | |
| 22 | + user: '用户', | |
| 23 | + transport: '交通', | |
| 24 | + weather: '天气', | |
| 25 | +}; | |
| 26 | + | |
| 27 | +export const BG_COLORS: string[] = [ | |
| 28 | + // '#F5212C', | |
| 29 | + // '#FA541C', | |
| 30 | + // '#FAAD14', | |
| 31 | + // '#ED7B2E', | |
| 32 | + // '#10C2C2', | |
| 33 | + // '#00A870', | |
| 34 | + // '#EC49B4', | |
| 35 | + // '#834EC2', | |
| 36 | + // '#242835', | |
| 37 | + '#FC6746', | |
| 38 | + '#1FBCD2', | |
| 39 | + '#FD9727', | |
| 40 | + '#50AE55', | |
| 41 | + '#B81E51', | |
| 42 | + '#4054B2', | |
| 43 | + '#465A63', | |
| 44 | +]; | |
| 45 | + | |
| 46 | +export const FORM_GROUP: any = { | |
| 47 | + form: 'icon-app-file-fill', | |
| 48 | + group: 'icon-app-folder-2-fill', | |
| 49 | + report: 'icon-app-shuju', | |
| 50 | + url: 'icon-app-share-forward-fill', | |
| 51 | + page: 'icon-app-presentation-2-fill', | |
| 52 | + dataset: 'icon-app-coin-2-fill', | |
| 53 | + datasetCube: 'icon-app-box-3-fill', | |
| 54 | +}; | |
| 55 | + | |
| 56 | +export const ICONS: any = { | |
| 57 | + system: [ | |
| 58 | + 'icon-app-add-circle', | |
| 59 | + 'icon-app-alert', | |
| 60 | + 'icon-app-alert-octagon', | |
| 61 | + 'icon-app-brush', | |
| 62 | + 'icon-app-certificate', | |
| 63 | + 'icon-app-check-circle', | |
| 64 | + 'icon-app-close-circle', | |
| 65 | + 'icon-app-database', | |
| 66 | + 'icon-app-delete-back', | |
| 67 | + 'icon-app-door', | |
| 68 | + 'icon-app-earlywarning', | |
| 69 | + 'icon-app-entrance', | |
| 70 | + 'icon-app-exit', | |
| 71 | + 'icon-app-eye-close', | |
| 72 | + 'icon-app-filter-2', | |
| 73 | + 'icon-app-forbid-circle', | |
| 74 | + 'icon-app-grid-2', | |
| 75 | + 'icon-app-grid', | |
| 76 | + 'icon-app-key-1', | |
| 77 | + 'icon-app-lock', | |
| 78 | + 'icon-app-minus-circle', | |
| 79 | + 'icon-app-open-door', | |
| 80 | + 'icon-app-open', | |
| 81 | + 'icon-app-power', | |
| 82 | + 'icon-app-question', | |
| 83 | + 'icon-app-restore', | |
| 84 | + 'icon-app-setting-4', | |
| 85 | + 'icon-app-settings-1', | |
| 86 | + 'icon-app-settings-2', | |
| 87 | + 'icon-app-share-2', | |
| 88 | + 'icon-app-share-3', | |
| 89 | + 'icon-app-share-forward', | |
| 90 | + 'icon-app-shield-2', | |
| 91 | + 'icon-app-shield-3', | |
| 92 | + 'icon-app-shield-4', | |
| 93 | + 'icon-app-shield', | |
| 94 | + 'icon-app-smile', | |
| 95 | + 'icon-app-t-shirt', | |
| 96 | + 'icon-app-thumb-down', | |
| 97 | + 'icon-app-thumb-up', | |
| 98 | + 'icon-app-time', | |
| 99 | + 'icon-app-version', | |
| 100 | + 'icon-app-warning', | |
| 101 | + ], | |
| 102 | + device: [ | |
| 103 | + 'icon-app-alarm-2', | |
| 104 | + 'icon-app-airplay', | |
| 105 | + 'icon-app-alarm-1', | |
| 106 | + 'icon-app-battery-charging', | |
| 107 | + 'icon-app-battery', | |
| 108 | + 'icon-app-bluetooth', | |
| 109 | + 'icon-app-bluetooth-off', | |
| 110 | + 'icon-app-bulb', | |
| 111 | + 'icon-app-ceiling-lamp', | |
| 112 | + 'icon-app-cellphone', | |
| 113 | + 'icon-app-cellphone-vibration', | |
| 114 | + 'icon-app-chip', | |
| 115 | + 'icon-app-computer-camera', | |
| 116 | + 'icon-app-computer', | |
| 117 | + 'icon-app-dashboaricon-app', | |
| 118 | + 'icon-app-desk-lamp', | |
| 119 | + 'icon-app-device', | |
| 120 | + 'icon-app-flash', | |
| 121 | + 'icon-app-fridge', | |
| 122 | + 'icon-app-laptop', | |
| 123 | + 'icon-app-microscope', | |
| 124 | + 'icon-app-paicon-app', | |
| 125 | + 'icon-app-plugin', | |
| 126 | + 'icon-app-print', | |
| 127 | + 'icon-app-qrcode', | |
| 128 | + 'icon-app-radar-2', | |
| 129 | + 'icon-app-radar', | |
| 130 | + 'icon-app-radio', | |
| 131 | + 'icon-app-sandglass', | |
| 132 | + 'icon-app-scan-2', | |
| 133 | + 'icon-app-scan', | |
| 134 | + 'icon-app-telescope', | |
| 135 | + 'icon-app-tv-1', | |
| 136 | + 'icon-app-tv-2', | |
| 137 | + 'icon-app-wifi', | |
| 138 | + 'icon-app-wifi-off', | |
| 139 | + ], | |
| 140 | + user: [ | |
| 141 | + 'icon-app-user-1', | |
| 142 | + 'icon-app-user-2', | |
| 143 | + 'icon-app-user-4', | |
| 144 | + 'icon-app-user-5', | |
| 145 | + 'icon-app-badge', | |
| 146 | + 'icon-app-contacts', | |
| 147 | + 'icon-app-male', | |
| 148 | + 'icon-app-female', | |
| 149 | + 'icon-app-group', | |
| 150 | + 'icon-app-IDcard', | |
| 151 | + 'icon-app-user-add', | |
| 152 | + 'icon-app-user-follow', | |
| 153 | + 'icon-app-user-remove', | |
| 154 | + ], | |
| 155 | + business: [ | |
| 156 | + 'icon-app-auction', | |
| 157 | + 'icon-app-award', | |
| 158 | + 'icon-app-bank-card', | |
| 159 | + 'icon-app-basket', | |
| 160 | + 'icon-app-block', | |
| 161 | + 'icon-app-calendar', | |
| 162 | + 'icon-app-chart-bar', | |
| 163 | + 'icon-app-chart-line', | |
| 164 | + 'icon-app-coin-2', | |
| 165 | + 'icon-app-coin', | |
| 166 | + 'icon-app-copper-coin', | |
| 167 | + 'icon-app-copyright', | |
| 168 | + 'icon-app-coupon', | |
| 169 | + 'icon-app-currency-bitcoin-2', | |
| 170 | + 'icon-app-currency-cny', | |
| 171 | + 'icon-app-currency-dollar', | |
| 172 | + 'icon-app-currency-euro', | |
| 173 | + 'icon-app-flag-1', | |
| 174 | + 'icon-app-flag-3', | |
| 175 | + 'icon-app-luggage', | |
| 176 | + 'icon-app-medal', | |
| 177 | + 'icon-app-presentation-2', | |
| 178 | + 'icon-app-red-packet', | |
| 179 | + 'icon-app-red-packet-open', | |
| 180 | + 'icon-app-safe-box', | |
| 181 | + 'icon-app-seal', | |
| 182 | + 'icon-app-shopping-bag-1', | |
| 183 | + 'icon-app-shopping-cart-2', | |
| 184 | + 'icon-app-tag', | |
| 185 | + 'icon-app-target', | |
| 186 | + 'icon-app-trophy', | |
| 187 | + 'icon-app-vip-1', | |
| 188 | + 'icon-app-vip-2', | |
| 189 | + 'icon-app-vip-3', | |
| 190 | + 'icon-app-wallet-2', | |
| 191 | + 'icon-app-wallet', | |
| 192 | + 'icon-app-service', | |
| 193 | + ], | |
| 194 | + building: [ | |
| 195 | + 'icon-app-bridge', | |
| 196 | + 'icon-app-building-1', | |
| 197 | + 'icon-app-building-4', | |
| 198 | + 'icon-app-campground', | |
| 199 | + 'icon-app-factory', | |
| 200 | + 'icon-app-greatwall', | |
| 201 | + 'icon-app-home-1', | |
| 202 | + 'icon-app-home-2', | |
| 203 | + 'icon-app-home-3', | |
| 204 | + 'icon-app-home-4', | |
| 205 | + 'icon-app-lighthouse', | |
| 206 | + 'icon-app-monument', | |
| 207 | + 'icon-app-pavilon', | |
| 208 | + 'icon-app-store', | |
| 209 | + 'icon-app-tower', | |
| 210 | + ], | |
| 211 | + file: [ | |
| 212 | + 'icon-app-attachment', | |
| 213 | + 'icon-app-box-2', | |
| 214 | + 'icon-app-box-3', | |
| 215 | + 'icon-app-box', | |
| 216 | + 'icon-app-clipboard', | |
| 217 | + 'icon-app-copy', | |
| 218 | + 'icon-app-docment', | |
| 219 | + 'icon-app-download-2', | |
| 220 | + 'icon-app-download', | |
| 221 | + 'icon-app-file-download', | |
| 222 | + 'icon-app-file-export', | |
| 223 | + 'icon-app-file', | |
| 224 | + 'icon-app-file-import', | |
| 225 | + 'icon-app-file-new', | |
| 226 | + 'icon-app-file-zip', | |
| 227 | + 'icon-app-folder-2', | |
| 228 | + 'icon-app-link-2', | |
| 229 | + 'icon-app-paper', | |
| 230 | + 'icon-app-pic', | |
| 231 | + 'icon-app-save', | |
| 232 | + 'icon-app-search-1', | |
| 233 | + 'icon-app-search', | |
| 234 | + 'icon-app-unlink-2', | |
| 235 | + 'icon-app-upload-2', | |
| 236 | + 'icon-app-upload-3', | |
| 237 | + 'icon-app-upload', | |
| 238 | + 'icon-app-zoom-in', | |
| 239 | + 'icon-app-zoom-out', | |
| 240 | + ], | |
| 241 | + education: [ | |
| 242 | + 'icon-app-book-2', | |
| 243 | + 'icon-app-book-4', | |
| 244 | + 'icon-app-book-5', | |
| 245 | + 'icon-app-book', | |
| 246 | + 'icon-app-bookmark', | |
| 247 | + 'icon-app-desk', | |
| 248 | + 'icon-app-flask-2', | |
| 249 | + 'icon-app-flask', | |
| 250 | + 'icon-app-globe', | |
| 251 | + 'icon-app-mortarboard', | |
| 252 | + 'icon-app-science', | |
| 253 | + 'icon-app-diary', | |
| 254 | + ], | |
| 255 | + contact: [ | |
| 256 | + 'icon-app-chat-1', | |
| 257 | + 'icon-app-chat-2', | |
| 258 | + 'icon-app-chat-3', | |
| 259 | + 'icon-app-invite', | |
| 260 | + 'icon-app-mail-send', | |
| 261 | + 'icon-app-message-1', | |
| 262 | + 'icon-app-message-2', | |
| 263 | + 'icon-app-message-4', | |
| 264 | + ], | |
| 265 | + transport: [ | |
| 266 | + 'icon-app-airplane', | |
| 267 | + 'icon-app-baby-carriage', | |
| 268 | + 'icon-app-bus', | |
| 269 | + 'icon-app-car-2', | |
| 270 | + 'icon-app-charging-pilen', | |
| 271 | + 'icon-app-ebike', | |
| 272 | + 'icon-app-flighicon-app-land', | |
| 273 | + 'icon-app-flighicon-app-takeoff', | |
| 274 | + 'icon-app-gas-station', | |
| 275 | + 'icon-app-riding', | |
| 276 | + 'icon-app-run', | |
| 277 | + 'icon-app-scooter', | |
| 278 | + 'icon-app-ship', | |
| 279 | + 'icon-app-train-2', | |
| 280 | + 'icon-app-train', | |
| 281 | + 'icon-app-truck', | |
| 282 | + 'icon-app-ufo', | |
| 283 | + 'icon-app-walk', | |
| 284 | + ], | |
| 285 | + development: [ | |
| 286 | + 'icon-app-braces', | |
| 287 | + 'icon-app-bug', | |
| 288 | + 'icon-app-code', | |
| 289 | + 'icon-app-cursor', | |
| 290 | + 'icon-app-department', | |
| 291 | + 'icon-app-directory', | |
| 292 | + 'icon-app-git-commit', | |
| 293 | + 'icon-app-git-compare', | |
| 294 | + 'icon-app-git-pull-request-close', | |
| 295 | + 'icon-app-git-pull-request', | |
| 296 | + 'icon-app-performance', | |
| 297 | + 'icon-app-terminal-box', | |
| 298 | + 'icon-app-terminal', | |
| 299 | + 'icon-app-web', | |
| 300 | + ], | |
| 301 | + design: [ | |
| 302 | + 'icon-app-anticlockwise', | |
| 303 | + 'icon-app-bling', | |
| 304 | + 'icon-app-brightness', | |
| 305 | + 'icon-app-clockwise', | |
| 306 | + 'icon-app-color-filter', | |
| 307 | + 'icon-app-layout', | |
| 308 | + 'icon-app-mosaic', | |
| 309 | + 'icon-app-paint-2', | |
| 310 | + 'icon-app-palette-2', | |
| 311 | + 'icon-app-paster', | |
| 312 | + 'icon-app-quill-pen', | |
| 313 | + 'icon-app-ruler', | |
| 314 | + 'icon-app-scale', | |
| 315 | + 'icon-app-edit-3', | |
| 316 | + 'icon-app-tablicon-app', | |
| 317 | + ], | |
| 318 | + weather: [ | |
| 319 | + 'icon-app-cloud-lightning', | |
| 320 | + 'icon-app-cloud-snoicon-app', | |
| 321 | + 'icon-app-lightning', | |
| 322 | + 'icon-app-moon-cloudy', | |
| 323 | + 'icon-app-moon', | |
| 324 | + 'icon-app-rain', | |
| 325 | + 'icon-app-sun-cloudy', | |
| 326 | + 'icon-app-sun', | |
| 327 | + 'icon-app-sunrise', | |
| 328 | + 'icon-app-sunset', | |
| 329 | + 'icon-app-thermometer', | |
| 330 | + 'icon-app-typhoon', | |
| 331 | + 'icon-app-umbrella', | |
| 332 | + 'icon-app-wind', | |
| 333 | + ], | |
| 334 | + logo: [ | |
| 335 | + 'icon-app-alipay', | |
| 336 | + 'icon-app-android-2', | |
| 337 | + 'icon-app-android', | |
| 338 | + 'icon-app-apple', | |
| 339 | + 'icon-app-chrome', | |
| 340 | + 'icon-app-dingding', | |
| 341 | + 'icon-app-messenger', | |
| 342 | + 'icon-app-moment', | |
| 343 | + 'icon-app-qiyeweixin', | |
| 344 | + 'icon-app-telegram', | |
| 345 | + 'icon-app-wechat', | |
| 346 | + 'icon-app-windows', | |
| 347 | + ], | |
| 348 | + map: [ | |
| 349 | + 'icon-app-compass', | |
| 350 | + 'icon-app-earth', | |
| 351 | + 'icon-app-location-2', | |
| 352 | + 'icon-app-map', | |
| 353 | + 'icon-app-navigation', | |
| 354 | + 'icon-app-route', | |
| 355 | + 'icon-app-world-2', | |
| 356 | + ], | |
| 357 | +}; | |
| 358 | + | |
| 359 | +export const MAP_OLD_ICONS: any = { | |
| 360 | + 'icon-shiming': '', | |
| 361 | + 'icon-pingtai': '', | |
| 362 | + 'icon-feiji': '', | |
| 363 | + 'icon-hezuo': '', | |
| 364 | + 'icon-yinhang': '', | |
| 365 | + 'icon-wenjianbao': '', | |
| 366 | + 'icon-pailie': '', | |
| 367 | + 'icon-app-caigou': 'icon-app-shopping-cart-2-fill', | |
| 368 | + 'icon-app-qudao': 'icon-app-department-fill', | |
| 369 | + 'icon-app-renqun': 'icon-app-group-fill', | |
| 370 | + 'icon-app-kefu': 'icon-app-service-fill', | |
| 371 | + 'icon-app-anquan': 'icon-app-shield-3-fill', | |
| 372 | + 'icon-app-wangluo': '', | |
| 373 | + 'icon-app-pachong': '', | |
| 374 | + 'icon-app-hexin': 'icon-app-science-fill', | |
| 375 | + 'icon-app-erweima': 'icon-app-qrcode-fill', | |
| 376 | + 'icon-app-shujujiankong': 'icon-app-presentation-2-fill', | |
| 377 | + 'icon-app-xingneng': 'icon-app-chip-fill', | |
| 378 | + 'icon-app-jiankong': 'icon-app-computer-camera-fill', | |
| 379 | + 'icon-app-quanqiu': 'icon-app-world-2-fill', | |
| 380 | + 'icon-app-qizhi': 'icon-app-flag-1-fill', | |
| 381 | + 'icon-app-zhenshikexin': 'icon-app-certificate-fill', | |
| 382 | + 'icon-app-jiangzhang': 'icon-app-award-fill', | |
| 383 | + 'icon-app-daikuan': 'icon-app-wallet-2-fill', | |
| 384 | + 'icon-app-yusan': 'icon-app-umbrella-fill', | |
| 385 | + 'icon-app-xiajia': '', | |
| 386 | + 'icon-app-naozhong': 'icon-app-alarm-1-fill', | |
| 387 | + 'icon-app-mima': '', | |
| 388 | + 'icon-app-fangxiang': 'icon-app-dashboaricon-app-fill', | |
| 389 | + 'icon-app-zhouqi': 'icon-app-sandglass-fill', | |
| 390 | + 'icon-app-chaxun': 'icon-app-search-1-fill', | |
| 391 | + 'icon-app-qiye': 'icon-app-building-1-fill', | |
| 392 | + 'icon-app-qianyue': 'icon-app-quill-pen-fill', | |
| 393 | + 'icon-app-chanpin': 'icon-app-box-3-fill', | |
| 394 | + 'icon-app-APP': 'icon-app-cellphone-fill', | |
| 395 | + 'icon-app-fengkong': 'icon-app-shield-4-fill', | |
| 396 | + 'icon-app-tuisong': 'icon-app-mail-send-fill', | |
| 397 | + 'icon-app-yinzhang': 'icon-app-seal-fill', | |
| 398 | + 'icon-app-shouye': 'icon-app-home-4-fill', | |
| 399 | + 'icon-app-zhuti': '', | |
| 400 | + 'icon-app-yujing': '', | |
| 401 | + 'icon-app-zhanbi': '', | |
| 402 | + 'icon-app-bianji': 'icon-app-edit-3-fill', | |
| 403 | + 'icon-app-shanchu': '', | |
| 404 | + 'icon-app-yanzhengma': 'icon-app-shield-2-fill', | |
| 405 | + 'icon-app-dingwei': '', | |
| 406 | + 'icon-app-shuqian': 'icon-app-tag-fill', | |
| 407 | + 'icon-app-gaoxing': 'icon-app-smile-fill', | |
| 408 | + 'icon-app-xiangji': '', | |
| 409 | + 'icon-app-zhengzhaozhizhao': 'icon-app-IDcard-fill', | |
| 410 | + 'icon-app-jinbi': 'icon-app-coin-2-fill', | |
| 411 | + 'icon-app-suoxiao': '', | |
| 412 | + 'icon-app-bobei': 'icon-app-copper-coin-fill', | |
| 413 | + 'icon-app-huankuan': '', | |
| 414 | + 'icon-app-jiqiren': 'icon-app-android-fill', | |
| 415 | + 'icon-app-yuyin': '', | |
| 416 | + 'icon-app-toupiao': 'icon-app-invite-fill', | |
| 417 | + 'icon-app-qianbao': '', | |
| 418 | + 'icon-app-yuqi': '', | |
| 419 | + 'icon-app-yinhangka': '', | |
| 420 | + 'icon-app-wenjianjia': 'icon-app-folder-2-fill', | |
| 421 | + 'icon-app-wenjian': 'icon-app-file-fill', | |
| 422 | + 'icon-app-shujuku': 'icon-app-database-fill', | |
| 423 | + 'icon-app-tishi': '', | |
| 424 | + 'icon-app-tupian': '', | |
| 425 | + 'icon-app-sousuo': 'icon-app-search-fill', | |
| 426 | + 'icon-app-shuju': 'icon-app-performance-fill', | |
| 427 | + 'icon-app-shaixuan': '', | |
| 428 | + 'icon-app-shexiang': '', | |
| 429 | + 'icon-app-rizhi': 'icon-app-diary-fill', | |
| 430 | + 'icon-app-rili': 'icon-app-calendar-fill', | |
| 431 | + 'icon-app-renlianshibie': 'icon-app-user-4-fill', | |
| 432 | + 'icon-app-qukuai': 'icon-app-block-fill', | |
| 433 | + 'icon-app-quanwei': 'icon-app-user-5-fill', | |
| 434 | + 'icon-app-quanxian': '', | |
| 435 | + 'icon-app-jishufuwu': 'icon-app-terminal-box-fill', | |
| 436 | + 'icon-app-lunchuan': 'icon-app-ship-fill', | |
| 437 | + 'icon-app-mubiao': 'icon-app-target-fill', | |
| 438 | + 'icon-app-kaifang': 'icon-app-open-fill', | |
| 439 | + 'icon-app-qianbi': '', | |
| 440 | + 'icon-app-lianjie': '', | |
| 441 | + 'icon-app-piaoju': 'icon-app-coupon-fill', | |
| 442 | + 'icon-app-peizhi': 'icon-app-settings-2-fill', | |
| 443 | + 'icon-app-qiche': 'icon-app-car-2-fill', | |
| 444 | + 'icon-app-kaishi': '', | |
| 445 | + 'icon-app-biaoji': '', | |
| 446 | + 'icon-app-guanbituichu': 'icon-app-power-fill', | |
| 447 | + 'icon-app-diannao': 'icon-app-computer-fill', | |
| 448 | + 'icon-app-daichuli': 'icon-app-time-fill', | |
| 449 | + 'icon-app-jinggao': 'icon-app-alert-fill', | |
| 450 | + 'icon-app-huoche': 'icon-app-truck-fill', | |
| 451 | + 'icon-app-jieqing': 'icon-app-currency-cny-fill', | |
| 452 | + 'icon-app-huangguan': 'icon-app-vip-2-fill', | |
| 453 | + 'icon-app-gouwu': 'icon-app-shopping-bag-1-fill', | |
| 454 | + 'icon-app-dayin': '', | |
| 455 | + 'icon-app-fenxiang': 'icon-app-share-forward-fill', | |
| 456 | + 'icon-app-biaoge': 'icon-app-tablicon-app-fill', | |
| 457 | + 'icon-app-chulizhong': '', | |
| 458 | + 'icon-app-zanting': '', | |
| 459 | + 'icon-app-zuanshi': 'icon-app-vip-1-fill', | |
| 460 | +}; | ... | ... |
src/qx-icon-selector/img/default_cover.png
0 → 100644
4.11 KB
src/qx-icon-selector/index.less
0 → 100644
| 1 | +@import '~@qx/ui/src/style/variable.less'; | |
| 2 | + | |
| 3 | +.qx-select-icon-container { | |
| 4 | + position: relative; | |
| 5 | + font-size: 0; | |
| 6 | + | |
| 7 | + .cover-icon, | |
| 8 | + .cover-img { | |
| 9 | + height: 48px; | |
| 10 | + width: 48px; | |
| 11 | + border-radius: 8px; | |
| 12 | + | |
| 13 | + &.cover-icon { | |
| 14 | + color: #ffffff; | |
| 15 | + background-color: @B8; | |
| 16 | + | |
| 17 | + svg { | |
| 18 | + width: 24px; | |
| 19 | + height: 24px; | |
| 20 | + margin: 12px; | |
| 21 | + } | |
| 22 | + } | |
| 23 | + } | |
| 24 | + .anticon-edit { | |
| 25 | + position: absolute; | |
| 26 | + top: 0; | |
| 27 | + left: 0; | |
| 28 | + display: none; | |
| 29 | + padding: 12px; | |
| 30 | + color: #fff; | |
| 31 | + font-size: 24px; | |
| 32 | + background-color: rgba(0, 0, 0, 0.6); | |
| 33 | + border-radius: 8px; | |
| 34 | + cursor: pointer; | |
| 35 | + } | |
| 36 | + &:hover { | |
| 37 | + .anticon-edit { | |
| 38 | + display: inline-block; | |
| 39 | + } | |
| 40 | + } | |
| 41 | +} | |
| 42 | + | |
| 43 | +.qx-icon-picker-overlay { | |
| 44 | + width: 490px; | |
| 45 | + | |
| 46 | + .ant-popover-inner { | |
| 47 | + border-radius: 8px; | |
| 48 | + | |
| 49 | + .ant-popover-inner-content { | |
| 50 | + color: rgba(0, 0, 0, 0.85); | |
| 51 | + } | |
| 52 | + | |
| 53 | + .ant-tabs-nav::before { | |
| 54 | + display: none; | |
| 55 | + } | |
| 56 | + .ant-tabs-tabpane { | |
| 57 | + display: flex; | |
| 58 | + flex-direction: column; | |
| 59 | + height: 336px; | |
| 60 | + } | |
| 61 | + .ant-tabs-tabpane-hidden { | |
| 62 | + display: none; | |
| 63 | + } | |
| 64 | + } | |
| 65 | +} | |
| 66 | + | |
| 67 | +.qx-select-custom-icons { | |
| 68 | + position: relative; | |
| 69 | + .block-color-box { | |
| 70 | + position: relative; | |
| 71 | + display: flex; | |
| 72 | + justify-content: space-between; | |
| 73 | + flex-wrap: nowrap; | |
| 74 | + padding-bottom: 16px; | |
| 75 | + | |
| 76 | + .block-color { | |
| 77 | + width: 32px; | |
| 78 | + height: 32px; | |
| 79 | + font-size: 16px; | |
| 80 | + text-align: center; | |
| 81 | + vertical-align: middle; | |
| 82 | + border-radius: 4px; | |
| 83 | + cursor: pointer; | |
| 84 | + &--default { | |
| 85 | + color: #fff; | |
| 86 | + background-color: @B8; | |
| 87 | + } | |
| 88 | + } | |
| 89 | + } | |
| 90 | + .anticon-check { | |
| 91 | + color: #fff; | |
| 92 | + vertical-align: middle; | |
| 93 | + } | |
| 94 | + .block-icon-box { | |
| 95 | + position: relative; | |
| 96 | + display: flex; | |
| 97 | + flex-direction: row; | |
| 98 | + height: 288px; | |
| 99 | + | |
| 100 | + &.height336 { | |
| 101 | + height: 336px; | |
| 102 | + } | |
| 103 | + | |
| 104 | + &::after { | |
| 105 | + content: ''; | |
| 106 | + position: absolute; | |
| 107 | + top: 0; | |
| 108 | + left: -16px; | |
| 109 | + right: -16px; | |
| 110 | + height: 1px; | |
| 111 | + background-color: #e9e9ea; | |
| 112 | + } | |
| 113 | + | |
| 114 | + .icon-list { | |
| 115 | + position: relative; | |
| 116 | + height: 100%; | |
| 117 | + overflow: auto; | |
| 118 | + flex: 1; | |
| 119 | + | |
| 120 | + .icon-classify-label { | |
| 121 | + font-size: 12px; | |
| 122 | + color: #7c7e86; | |
| 123 | + line-height: 20px; | |
| 124 | + padding: 16px 0 12px; | |
| 125 | + } | |
| 126 | + .icon-classify-list { | |
| 127 | + display: flex; | |
| 128 | + flex-direction: row; | |
| 129 | + flex-wrap: wrap; | |
| 130 | + | |
| 131 | + .block-icon { | |
| 132 | + width: 12.5%; | |
| 133 | + height: 32px; | |
| 134 | + text-align: center; | |
| 135 | + cursor: pointer; | |
| 136 | + | |
| 137 | + .anticon { | |
| 138 | + height: 32px; | |
| 139 | + width: 32px; | |
| 140 | + border-radius: 4px; | |
| 141 | + padding-top: 6px; | |
| 142 | + box-sizing: border-box; | |
| 143 | + display: inline-block; | |
| 144 | + | |
| 145 | + &:hover { | |
| 146 | + background: @N3; | |
| 147 | + border-radius: 4px; | |
| 148 | + color: #50535d; | |
| 149 | + } | |
| 150 | + | |
| 151 | + svg { | |
| 152 | + width: 20px; | |
| 153 | + height: 20px; | |
| 154 | + } | |
| 155 | + } | |
| 156 | + | |
| 157 | + &--default { | |
| 158 | + color: #fff !important; | |
| 159 | + background-color: @B8 !important; | |
| 160 | + } | |
| 161 | + } | |
| 162 | + } | |
| 163 | + } | |
| 164 | + .icon-classify { | |
| 165 | + display: flex; | |
| 166 | + flex-direction: column; | |
| 167 | + width: 96px; | |
| 168 | + border-left: 1px solid #e9e9ea; | |
| 169 | + margin-right: -16px; | |
| 170 | + align-items: center; | |
| 171 | + | |
| 172 | + .classify-switch { | |
| 173 | + margin: 12px 0 16px; | |
| 174 | + } | |
| 175 | + | |
| 176 | + .classify-label-list { | |
| 177 | + flex: 1; | |
| 178 | + width: 100%; | |
| 179 | + overflow: auto; | |
| 180 | + | |
| 181 | + .classify-label { | |
| 182 | + font-size: 12px; | |
| 183 | + color: #50535d; | |
| 184 | + line-height: 24px; | |
| 185 | + width: 64px; | |
| 186 | + margin: 4px auto; | |
| 187 | + text-align: center; | |
| 188 | + cursor: pointer; | |
| 189 | + | |
| 190 | + &:hover { | |
| 191 | + background: @N3; | |
| 192 | + border-radius: 4px; | |
| 193 | + color: #50535d; | |
| 194 | + } | |
| 195 | + &.active { | |
| 196 | + position: relative; | |
| 197 | + color: @B8; | |
| 198 | + background-color: @B3; | |
| 199 | + border-radius: 4px; | |
| 200 | + } | |
| 201 | + &:first-child { | |
| 202 | + margin-top: 0; | |
| 203 | + } | |
| 204 | + &:last-child { | |
| 205 | + margin-bottom: 0; | |
| 206 | + } | |
| 207 | + } | |
| 208 | + } | |
| 209 | + } | |
| 210 | + } | |
| 211 | + .custom-icon-box { | |
| 212 | + display: flex; | |
| 213 | + flex-direction: row; | |
| 214 | + overflow: auto; | |
| 215 | + height: 336px; | |
| 216 | + justify-content: flex-start; | |
| 217 | + align-content: flex-start; | |
| 218 | + flex-wrap: wrap; | |
| 219 | + padding-top: 10px; | |
| 220 | + | |
| 221 | + .custom-icon-item { | |
| 222 | + width: 12.5%; | |
| 223 | + | |
| 224 | + .qx-custom-preview { | |
| 225 | + position: relative; | |
| 226 | + width: 40px; | |
| 227 | + height: 40px; | |
| 228 | + margin: 0 10px 10px 0; | |
| 229 | + padding: 6px 0; | |
| 230 | + text-align: center; | |
| 231 | + border: 1px solid #d9d9d9; | |
| 232 | + border-radius: 2px; | |
| 233 | + box-sizing: border-box; | |
| 234 | + | |
| 235 | + &:hover { | |
| 236 | + cursor: pointer; | |
| 237 | + | |
| 238 | + .qx-custom-preview_text { | |
| 239 | + display: block; | |
| 240 | + } | |
| 241 | + | |
| 242 | + .qx-custom-preview_icon { | |
| 243 | + display: block; | |
| 244 | + cursor: pointer; | |
| 245 | + } | |
| 246 | + } | |
| 247 | + | |
| 248 | + &_icon { | |
| 249 | + position: absolute; | |
| 250 | + top: -6px; | |
| 251 | + right: -6px; | |
| 252 | + z-index: 9999; | |
| 253 | + display: none; | |
| 254 | + width: 14px; | |
| 255 | + height: 14px; | |
| 256 | + color: white; | |
| 257 | + line-height: 10px; | |
| 258 | + text-align: center; | |
| 259 | + background-color: rgb(207, 207, 207); | |
| 260 | + border-radius: 50%; | |
| 261 | + } | |
| 262 | + } | |
| 263 | + | |
| 264 | + .qx-custom-upload { | |
| 265 | + width: 40px !important; | |
| 266 | + margin: 0 10px 10px 0; | |
| 267 | + | |
| 268 | + .ant-upload.ant-upload-select { | |
| 269 | + display: flex; | |
| 270 | + align-items: center; | |
| 271 | + justify-content: center; | |
| 272 | + width: 40px; | |
| 273 | + height: 40px; | |
| 274 | + border: 1px solid #d9d9d9; | |
| 275 | + border-radius: 2px; | |
| 276 | + cursor: pointer; | |
| 277 | + | |
| 278 | + .ant-upload { | |
| 279 | + width: 100%; | |
| 280 | + } | |
| 281 | + | |
| 282 | + img { | |
| 283 | + width: 24px; | |
| 284 | + height: 24px; | |
| 285 | + } | |
| 286 | + } | |
| 287 | + } | |
| 288 | + } | |
| 289 | + } | |
| 290 | +} | |
| 291 | + | |
| 292 | +.qx-select-custom-desc-icon-wrap { | |
| 293 | + position: relative; | |
| 294 | + | |
| 295 | + .custom-desc-icon { | |
| 296 | + position: absolute; | |
| 297 | + top: 50%; | |
| 298 | + transform: translateY(-50%); | |
| 299 | + color: @N7; | |
| 300 | + margin-left: 4px; | |
| 301 | + } | |
| 302 | +} | |
| 303 | + | ... | ... |
src/qx-icon-selector/index.md
0 → 100644
| 1 | +### 选择icon | |
| 2 | + | |
| 3 | +### | |
| 4 | + | |
| 5 | +```tsx | |
| 6 | +import { request, QxIconSelector } from '@qx/common'; | |
| 7 | +import React, { useState } from 'react'; | |
| 8 | + | |
| 9 | +export default () => { | |
| 10 | + const [value, setValue] = useState({ | |
| 11 | + showThemePicker: true, | |
| 12 | + iconColor: "#B81E51", | |
| 13 | + type : "icon-app-eye-close-fill" | |
| 14 | + }); | |
| 15 | + return ( | |
| 16 | + <QxIconSelector | |
| 17 | + value={value} | |
| 18 | + onChange={(values)=> { | |
| 19 | + console.log(values,'lllll') | |
| 20 | + setValue(values) | |
| 21 | + }} | |
| 22 | + /> | |
| 23 | + ); | |
| 24 | +}; | |
| 25 | +``` | |
| 26 | + | |
| 27 | +<API></API> | ... | ... |
src/qx-icon-selector/index.tsx
0 → 100644
| 1 | +import React, { useEffect, useRef, useState } from 'react'; | |
| 2 | +import defaultImg from './img/default_cover.png'; | |
| 3 | +import classNames from 'classnames'; | |
| 4 | +import _ from 'lodash'; | |
| 5 | +import { | |
| 6 | + Image, | |
| 7 | + message, | |
| 8 | + Popconfirm, | |
| 9 | + Popover, | |
| 10 | + Spin, | |
| 11 | + Tabs, | |
| 12 | + Tooltip, | |
| 13 | + Upload, | |
| 14 | + Switch, | |
| 15 | +} from 'antd'; | |
| 16 | +import { | |
| 17 | + CheckOutlined, | |
| 18 | + CloseOutlined, | |
| 19 | + EditOutlined, | |
| 20 | + PlusOutlined, | |
| 21 | + ExclamationCircleOutlined, | |
| 22 | +} from '@ant-design/icons'; | |
| 23 | +import { | |
| 24 | + FORM_GROUP, | |
| 25 | + ICON_CLASSIFY, | |
| 26 | + BG_COLORS, | |
| 27 | + ICONS, | |
| 28 | + MAP_OLD_ICONS, | |
| 29 | +} from './enum'; | |
| 30 | +import { deleteImg, getHistoryDataImg } from './service'; | |
| 31 | +import './index.less'; | |
| 32 | +import {QxBaseIcon, UploadFile} from "@qx/common"; | |
| 33 | + | |
| 34 | +interface IconProps { | |
| 35 | + value: { | |
| 36 | + type: string; // icon图标标识或者是http的url | |
| 37 | + iconColor: string; // icon图标颜色 | |
| 38 | + belongTo?: string; | |
| 39 | + showThemePicker?: boolean; // 是否展示主题选择模块 | |
| 40 | + }; | |
| 41 | + onChange: (value: { | |
| 42 | + type: string; | |
| 43 | + iconColor: string; | |
| 44 | + belongTo?: string; | |
| 45 | + showThemePicker: boolean | undefined; | |
| 46 | + }) => void; | |
| 47 | +} | |
| 48 | +export const QxIconSelector: React.FC<IconProps> = (props) => { | |
| 49 | + const { value, onChange } = props; | |
| 50 | + const { iconColor, belongTo, showThemePicker } = value || {}; | |
| 51 | + | |
| 52 | + const defaultIcon = | |
| 53 | + (belongTo && FORM_GROUP[belongTo]) || 'icon-app-grid-2-fill'; | |
| 54 | + const icon = | |
| 55 | + MAP_OLD_ICONS[value?.type] || // 映射老图标的标识 | |
| 56 | + ((value?.type?.includes('http') || // 自定义图标http直接返回 | |
| 57 | + !Object.keys(MAP_OLD_ICONS).includes(value?.type)) && | |
| 58 | + value?.type) || | |
| 59 | + defaultIcon; // 默认值 | |
| 60 | + const [bgColor, setBgColor] = useState<string>(''); | |
| 61 | + const [blockIcon, setBlockIcon] = useState<string>(''); | |
| 62 | + const [iconType, setIconType] = useState<'system' | 'custom'>(); | |
| 63 | + const [historyImg, setHistoryImg] = useState<any[]>([]); | |
| 64 | + const [getDataLoading, setGetDataLoading] = useState<boolean>(false); | |
| 65 | + const [uploading, setUploading] = useState<boolean>(false); | |
| 66 | + const [iconShape, setIconShape] = useState<'fill' | 'line'>('fill'); | |
| 67 | + const [activeClassify, setActiveClassify] = useState<string>(''); | |
| 68 | + const iconListRef = useRef<HTMLDivElement>(null); | |
| 69 | + | |
| 70 | + // 新增应用时传递初始icon | |
| 71 | + if (value && !value.type) { | |
| 72 | + onChange({ | |
| 73 | + type: icon, | |
| 74 | + iconColor: iconColor, | |
| 75 | + belongTo, | |
| 76 | + showThemePicker, | |
| 77 | + }); | |
| 78 | + } | |
| 79 | + | |
| 80 | + const findClassifyByIcon = (icon: string) => { | |
| 81 | + const splitIcon = icon?.split('-') || []; | |
| 82 | + splitIcon.pop(); | |
| 83 | + const joinIcon = splitIcon.join('-'); | |
| 84 | + return ( | |
| 85 | + Object.keys(ICONS).find((cfy) => ICONS[cfy].includes(joinIcon)) || '' | |
| 86 | + ); | |
| 87 | + }; | |
| 88 | + | |
| 89 | + const scrollIntoView = (dom: HTMLElement, params: any = {}) => { | |
| 90 | + dom.scrollIntoView( | |
| 91 | + Object.assign({ block: 'start', inline: 'nearest' }, params), | |
| 92 | + ); | |
| 93 | + }; | |
| 94 | + | |
| 95 | + useEffect(() => { | |
| 96 | + setBlockIcon(icon); | |
| 97 | + setBgColor(iconColor || ''); | |
| 98 | + setIconType(icon?.includes('http') ? 'custom' : 'system'); | |
| 99 | + setIconShape(icon?.split('-').pop() === 'line' ? 'line' : 'fill'); | |
| 100 | + }, [icon, iconColor]); | |
| 101 | + | |
| 102 | + useEffect(() => { | |
| 103 | + const cfy = findClassifyByIcon(icon); | |
| 104 | + setActiveClassify(cfy); | |
| 105 | + }, []); | |
| 106 | + | |
| 107 | + const onClickPopover = () => { | |
| 108 | + setTimeout(() => { | |
| 109 | + const cfy = findClassifyByIcon(blockIcon); | |
| 110 | + const iconItemDom: any = document.querySelector( | |
| 111 | + `div[icon-name=${blockIcon}]`, | |
| 112 | + ); | |
| 113 | + // eslint-disable-next-line @typescript-eslint/no-unused-expressions | |
| 114 | + iconItemDom && scrollIntoView(iconItemDom); | |
| 115 | + setTimeout(() => { | |
| 116 | + // 恢复icon滚动副作用 | |
| 117 | + const iconCfyDOm: any = document.getElementById( | |
| 118 | + `qx-icon-classify-${cfy}`, | |
| 119 | + ); | |
| 120 | + setActiveClassify(cfy); | |
| 121 | + // eslint-disable-next-line @typescript-eslint/no-unused-expressions | |
| 122 | + iconCfyDOm && scrollIntoView(iconCfyDOm, { block: 'center' }); | |
| 123 | + }, 1000); | |
| 124 | + }, 500); | |
| 125 | + }; | |
| 126 | + | |
| 127 | + const onTabsChange = async (key: string) => { | |
| 128 | + if (key === 'custom') { | |
| 129 | + //获取历史上传的数据 | |
| 130 | + try { | |
| 131 | + setGetDataLoading(true); | |
| 132 | + const res = await getHistoryDataImg({ | |
| 133 | + appCode: 'my_icon', | |
| 134 | + funCode: 'my_icon', | |
| 135 | + mediaType: 'img', | |
| 136 | + }); | |
| 137 | + setHistoryImg(res.list || []); | |
| 138 | + setGetDataLoading(false); | |
| 139 | + } catch (e) { | |
| 140 | + setHistoryImg([]); | |
| 141 | + setGetDataLoading(false); | |
| 142 | + } | |
| 143 | + } | |
| 144 | + }; | |
| 145 | + | |
| 146 | + const onIconShapeChange = (checked: boolean) => { | |
| 147 | + setIconShape(checked ? 'line' : 'fill'); | |
| 148 | + const icon = blockIcon?.split('-'); | |
| 149 | + icon.pop(); | |
| 150 | + icon.push(checked ? 'line' : 'fill'); | |
| 151 | + onChange({ | |
| 152 | + type: icon.join('-'), | |
| 153 | + iconColor: bgColor, | |
| 154 | + belongTo, | |
| 155 | + showThemePicker, | |
| 156 | + }); | |
| 157 | + }; | |
| 158 | + | |
| 159 | + const onScrollIconList = _.throttle( | |
| 160 | + () => { | |
| 161 | + Object.keys(ICONS).forEach((cfy) => { | |
| 162 | + const iconItemDom: any = document.getElementById(`qx-icon-list-${cfy}`); | |
| 163 | + const distance = Math.abs( | |
| 164 | + iconItemDom?.offsetTop - (iconListRef.current?.scrollTop || 0), | |
| 165 | + ); | |
| 166 | + if (distance < 40) { | |
| 167 | + const iconCfyDOm: any = document.getElementById( | |
| 168 | + `qx-icon-classify-${cfy}`, | |
| 169 | + ); | |
| 170 | + scrollIntoView(iconCfyDOm, { block: 'center' }); | |
| 171 | + setActiveClassify(cfy); | |
| 172 | + } | |
| 173 | + }); | |
| 174 | + }, | |
| 175 | + 30, | |
| 176 | + { leading: false }, | |
| 177 | + ); | |
| 178 | + | |
| 179 | + const onSelectClassify = (cfy: string) => { | |
| 180 | + setActiveClassify(cfy); | |
| 181 | + const iconItemDom: any = document.getElementById(`qx-icon-list-${cfy}`); | |
| 182 | + scrollIntoView(iconItemDom); | |
| 183 | + // window.scrollTo({ top: iconItemDom.offsetTop, behavior: 'smooth' }); | |
| 184 | + }; | |
| 185 | + | |
| 186 | + const handleUpload = (file: any) => { | |
| 187 | + // console.log('文件对象:',file); | |
| 188 | + const imgArr = _.cloneDeep(historyImg); | |
| 189 | + const formData = { | |
| 190 | + file: 'file', | |
| 191 | + appCode: 'my_icon', | |
| 192 | + funCode: 'my_icon', | |
| 193 | + publicFile: true, //长期有效文件 | |
| 194 | + }; | |
| 195 | + UploadFile( | |
| 196 | + file, | |
| 197 | + formData, | |
| 198 | + () => {}, | |
| 199 | + (cr: any) => { | |
| 200 | + // console.log('回调数据:',cr) | |
| 201 | + const thumbUrl = cr.data?.qgImg?.urlMap?.thumb; | |
| 202 | + if (Boolean(cr.success) && cr.data && cr.data.fileId && thumbUrl) { | |
| 203 | + // message.success('上传成功') | |
| 204 | + setIconType('custom'); | |
| 205 | + setBlockIcon(thumbUrl); | |
| 206 | + onChange({ | |
| 207 | + type: thumbUrl, | |
| 208 | + iconColor: bgColor, | |
| 209 | + belongTo, | |
| 210 | + showThemePicker, | |
| 211 | + }); | |
| 212 | + setUploading(false); | |
| 213 | + imgArr.unshift(cr.data); | |
| 214 | + } else { | |
| 215 | + // 上传失败 | |
| 216 | + message.error('上传失败'); | |
| 217 | + } | |
| 218 | + setHistoryImg([...imgArr]); | |
| 219 | + }, | |
| 220 | + ); | |
| 221 | + }; | |
| 222 | + | |
| 223 | + const beforeUpload = (file: any) => { | |
| 224 | + // console.log(file); | |
| 225 | + const fileType = | |
| 226 | + file.type === 'image/jpeg' || | |
| 227 | + file.type === 'image/png' || | |
| 228 | + file.type === 'image/jpg'; | |
| 229 | + if (!fileType) { | |
| 230 | + message.error('请选择jpg或png或jpeg格式的文件'); | |
| 231 | + } | |
| 232 | + const fileSize = file.size / 1024 / 1024 < 1; | |
| 233 | + if (!fileSize) { | |
| 234 | + message.error('请选择小于1MB的文件'); | |
| 235 | + } | |
| 236 | + if (fileType && fileSize) { | |
| 237 | + //如果文件符合上传条件 | |
| 238 | + setUploading(true); | |
| 239 | + handleUpload(file); | |
| 240 | + } | |
| 241 | + }; | |
| 242 | + | |
| 243 | + const handleDelete = async (fileId: string, index: number) => { | |
| 244 | + const imgArr = _.cloneDeep(historyImg); | |
| 245 | + await deleteImg([fileId]); | |
| 246 | + imgArr.splice(index, 1); | |
| 247 | + setHistoryImg([...imgArr]); | |
| 248 | + }; | |
| 249 | + | |
| 250 | + const renderContent = () => { | |
| 251 | + return ( | |
| 252 | + <div className={'qx-select-custom-icons'}> | |
| 253 | + <Tabs | |
| 254 | + defaultActiveKey={'system'} | |
| 255 | + centered | |
| 256 | + tabBarGutter={60} | |
| 257 | + onChange={onTabsChange} | |
| 258 | + > | |
| 259 | + <Tabs.TabPane tab="系统图标" key="system"> | |
| 260 | + {showThemePicker ? ( | |
| 261 | + <div className="block-color-box"> | |
| 262 | + {/* 系统默认颜色 */} | |
| 263 | + <div | |
| 264 | + className={'block-color block-color--default'} | |
| 265 | + onClick={() => { | |
| 266 | + onChange({ | |
| 267 | + type: blockIcon, | |
| 268 | + iconColor: '', | |
| 269 | + belongTo, | |
| 270 | + showThemePicker, | |
| 271 | + }); | |
| 272 | + }} | |
| 273 | + > | |
| 274 | + {!bgColor && <CheckOutlined />} | |
| 275 | + </div> | |
| 276 | + {BG_COLORS.map((color: string) => { | |
| 277 | + return ( | |
| 278 | + <div | |
| 279 | + key={color} | |
| 280 | + style={{ backgroundColor: color }} | |
| 281 | + className={'block-color'} | |
| 282 | + onClick={() => { | |
| 283 | + onChange({ | |
| 284 | + type: blockIcon, | |
| 285 | + iconColor: color, | |
| 286 | + belongTo, | |
| 287 | + showThemePicker, | |
| 288 | + }); | |
| 289 | + }} | |
| 290 | + > | |
| 291 | + {color === bgColor && <CheckOutlined />} | |
| 292 | + </div> | |
| 293 | + ); | |
| 294 | + })} | |
| 295 | + </div> | |
| 296 | + ) : null} | |
| 297 | + <div | |
| 298 | + className={classNames( | |
| 299 | + 'block-icon-box', | |
| 300 | + !showThemePicker && 'height336', | |
| 301 | + )} | |
| 302 | + > | |
| 303 | + <div | |
| 304 | + className="icon-list" | |
| 305 | + ref={iconListRef} | |
| 306 | + onScroll={onScrollIconList} | |
| 307 | + > | |
| 308 | + {Object.keys(ICONS).map((cfy) => { | |
| 309 | + return ( | |
| 310 | + <div id={`qx-icon-list-${cfy}`} key={cfy}> | |
| 311 | + <div className="icon-classify-label"> | |
| 312 | + {ICON_CLASSIFY[cfy]} | |
| 313 | + </div> | |
| 314 | + <div className="icon-classify-list"> | |
| 315 | + {ICONS[cfy].map((item: string) => { | |
| 316 | + const icon = `${item}-${iconShape}`; | |
| 317 | + return ( | |
| 318 | + <div | |
| 319 | + key={icon} | |
| 320 | + className={'block-icon'} | |
| 321 | + icon-name={icon} | |
| 322 | + > | |
| 323 | + <QxBaseIcon | |
| 324 | + type={icon} | |
| 325 | + onClick={() => { | |
| 326 | + onChange({ | |
| 327 | + type: icon, | |
| 328 | + iconColor: bgColor, | |
| 329 | + belongTo, | |
| 330 | + showThemePicker, | |
| 331 | + }); | |
| 332 | + const cfy = findClassifyByIcon(icon); | |
| 333 | + const iconCfyDOm: any = | |
| 334 | + document.getElementById( | |
| 335 | + `qx-icon-classify-${cfy}`, | |
| 336 | + ); | |
| 337 | + scrollIntoView(iconCfyDOm, { | |
| 338 | + block: 'center', | |
| 339 | + }); | |
| 340 | + setActiveClassify(cfy); | |
| 341 | + }} | |
| 342 | + style={{ | |
| 343 | + color: | |
| 344 | + bgColor && icon === blockIcon | |
| 345 | + ? '#fff' | |
| 346 | + : 'rgba(0, 0, 0, 0.45)', | |
| 347 | + backgroundColor: | |
| 348 | + icon === blockIcon ? bgColor : '', | |
| 349 | + }} | |
| 350 | + className={classNames({ | |
| 351 | + 'block-icon--default': | |
| 352 | + icon === blockIcon && !bgColor, | |
| 353 | + })} | |
| 354 | + /> | |
| 355 | + </div> | |
| 356 | + ); | |
| 357 | + })} | |
| 358 | + </div> | |
| 359 | + </div> | |
| 360 | + ); | |
| 361 | + })} | |
| 362 | + </div> | |
| 363 | + <div className="icon-classify"> | |
| 364 | + <Switch | |
| 365 | + checked={iconShape === 'line' ? true : false} | |
| 366 | + className="classify-switch" | |
| 367 | + checkedChildren="线性" | |
| 368 | + unCheckedChildren="面性" | |
| 369 | + onChange={onIconShapeChange} | |
| 370 | + /> | |
| 371 | + <div className="classify-label-list"> | |
| 372 | + {Object.keys(ICONS).map((cfy) => { | |
| 373 | + return ( | |
| 374 | + <div | |
| 375 | + id={`qx-icon-classify-${cfy}`} | |
| 376 | + className={classNames( | |
| 377 | + 'classify-label', | |
| 378 | + activeClassify === cfy && 'active', | |
| 379 | + )} | |
| 380 | + key={cfy} | |
| 381 | + onClick={() => onSelectClassify(cfy)} | |
| 382 | + > | |
| 383 | + {ICON_CLASSIFY[cfy]} | |
| 384 | + </div> | |
| 385 | + ); | |
| 386 | + })} | |
| 387 | + </div> | |
| 388 | + </div> | |
| 389 | + </div> | |
| 390 | + </Tabs.TabPane> | |
| 391 | + <Tabs.TabPane | |
| 392 | + tab={ | |
| 393 | + <div className="qx-select-custom-desc-icon-wrap"> | |
| 394 | + 自定义图标  | |
| 395 | + <Tooltip | |
| 396 | + title={ | |
| 397 | + '请选择1MB以内的jpg、jpeg或png图片,建议尺寸144*144像素' | |
| 398 | + } | |
| 399 | + color="#ffffff" | |
| 400 | + overlayStyle={{ maxWidth: '240px' }} | |
| 401 | + overlayInnerStyle={{ | |
| 402 | + fontSize: '14px', | |
| 403 | + color: '#50535D', | |
| 404 | + textAlign: 'justify', | |
| 405 | + lineHeight: '22px', | |
| 406 | + }} | |
| 407 | + placement={'right'} | |
| 408 | + > | |
| 409 | + <ExclamationCircleOutlined className="custom-desc-icon" /> | |
| 410 | + </Tooltip> | |
| 411 | + </div> | |
| 412 | + } | |
| 413 | + key="custom" | |
| 414 | + > | |
| 415 | + <Spin spinning={getDataLoading} style={{ top: '70px' }}> | |
| 416 | + <div className="custom-icon-box"> | |
| 417 | + <div className="custom-icon-item"> | |
| 418 | + <Upload | |
| 419 | + name="icon" | |
| 420 | + listType="picture-card" | |
| 421 | + accept=".jpg,.png" | |
| 422 | + maxCount={1} | |
| 423 | + showUploadList={false} | |
| 424 | + beforeUpload={beforeUpload} | |
| 425 | + className={'qx-custom-upload'} | |
| 426 | + > | |
| 427 | + <PlusOutlined /> | |
| 428 | + </Upload> | |
| 429 | + </div> | |
| 430 | + {historyImg && historyImg.length ? ( | |
| 431 | + <> | |
| 432 | + <div | |
| 433 | + style={{ | |
| 434 | + height: '40px', | |
| 435 | + width: '40px', | |
| 436 | + textAlign: 'center', | |
| 437 | + paddingTop: '10px', | |
| 438 | + display: uploading ? '' : 'none', | |
| 439 | + margin: '0 10px 10px 0', | |
| 440 | + }} | |
| 441 | + > | |
| 442 | + <Spin tip={''} size={'small'} spinning={true} /> | |
| 443 | + </div> | |
| 444 | + {/*<Image.PreviewGroup>*/} | |
| 445 | + {historyImg.map((item: any, index: number) => { | |
| 446 | + return ( | |
| 447 | + <div className="custom-icon-item" key={index}> | |
| 448 | + <div className={'qx-custom-preview'}> | |
| 449 | + <Popconfirm | |
| 450 | + title={`确定要删除这张图片吗?`} | |
| 451 | + okText="确定" | |
| 452 | + cancelText="取消" | |
| 453 | + onConfirm={() => handleDelete(item.fileId, index)} | |
| 454 | + > | |
| 455 | + <div className={'qx-custom-preview_icon'}> | |
| 456 | + <CloseOutlined style={{ fontSize: '8px' }} /> | |
| 457 | + </div> | |
| 458 | + </Popconfirm> | |
| 459 | + <Image | |
| 460 | + src={item?.qgImg?.urlMap?.thumb || 'error'} | |
| 461 | + fallback={defaultImg} | |
| 462 | + preview={false} | |
| 463 | + style={{ width: '24px', height: '24px' }} | |
| 464 | + onClick={() => { | |
| 465 | + setBlockIcon(item?.qgImg?.urlMap?.thumb); | |
| 466 | + setIconType('custom'); | |
| 467 | + onChange({ | |
| 468 | + type: item?.qgImg?.urlMap?.thumb, | |
| 469 | + iconColor: bgColor, | |
| 470 | + belongTo, | |
| 471 | + showThemePicker, | |
| 472 | + }); | |
| 473 | + }} | |
| 474 | + /> | |
| 475 | + </div> | |
| 476 | + </div> | |
| 477 | + ); | |
| 478 | + })} | |
| 479 | + {/*</Image.PreviewGroup>*/} | |
| 480 | + </> | |
| 481 | + ) : null} | |
| 482 | + </div> | |
| 483 | + </Spin> | |
| 484 | + </Tabs.TabPane> | |
| 485 | + </Tabs> | |
| 486 | + </div> | |
| 487 | + ); | |
| 488 | + }; | |
| 489 | + return ( | |
| 490 | + <div className="qx-select-icon-container" style={{ width: 'auto' }}> | |
| 491 | + <Popover | |
| 492 | + content={renderContent} | |
| 493 | + placement="right" | |
| 494 | + trigger="click" | |
| 495 | + overlayClassName={'qx-icon-picker-overlay'} | |
| 496 | + onOpenChange={onClickPopover} | |
| 497 | + // getPopupContainer={(triggerNode) => triggerNode} // 图标不跟随标签 | |
| 498 | + > | |
| 499 | + {iconType === 'custom' ? ( | |
| 500 | + <Image | |
| 501 | + className="cover-img" | |
| 502 | + src={blockIcon || 'error'} | |
| 503 | + fallback={defaultImg} | |
| 504 | + preview={false} | |
| 505 | + /> | |
| 506 | + ) : ( | |
| 507 | + <QxBaseIcon | |
| 508 | + className="cover-icon default__icon" | |
| 509 | + type={blockIcon} | |
| 510 | + style={{ backgroundColor: bgColor }} | |
| 511 | + /> | |
| 512 | + )} | |
| 513 | + <EditOutlined /> | |
| 514 | + </Popover> | |
| 515 | + </div> | |
| 516 | + ); | |
| 517 | +}; | ... | ... |
src/qx-icon-selector/service.ts
0 → 100644
| 1 | +import { request } from '@qx/common'; | |
| 2 | + | |
| 3 | +// 获取用户上传的历史图片 | |
| 4 | +export function getHistoryDataImg(params: any) { | |
| 5 | + return request.post( | |
| 6 | + `/qgyun-service-fs-manager/file/page?pageNum=1&pageSize=200&source=LowCode`, | |
| 7 | + { | |
| 8 | + data: params, | |
| 9 | + }, | |
| 10 | + ); | |
| 11 | +} | |
| 12 | + | |
| 13 | +// 删除图片(可以批量操作) | |
| 14 | +export function deleteImg(params: any) { | |
| 15 | + return request.post(`/qgyun-service-fs-manager/file/status/disable`, { | |
| 16 | + data: params, | |
| 17 | + }); | |
| 18 | +} | ... | ... |
src/utils/uploadFile.ts
0 → 100644
| 1 | +import { QxUploadCore, deleteUploadFile as deleteFile } from '@qx/utils'; // 晴晴抽出 | |
| 2 | +import { createRequest } from '@qx/utils'; | |
| 3 | +const request = createRequest() | |
| 4 | + | |
| 5 | +const UploadFile = ( | |
| 6 | + file: any, | |
| 7 | + formData: any, | |
| 8 | + progress: any, | |
| 9 | + callback?: any, | |
| 10 | + extraHandle?: { | |
| 11 | + FileDoneList?: any; | |
| 12 | + deleteTempList?: () => void; | |
| 13 | + existMsg?: string; | |
| 14 | + }, | |
| 15 | + maxCount?: number, | |
| 16 | +) => { | |
| 17 | + QxUploadCore( | |
| 18 | + request, | |
| 19 | + file, | |
| 20 | + formData, | |
| 21 | + () => {}, | |
| 22 | + callback, | |
| 23 | + extraHandle, | |
| 24 | + maxCount, | |
| 25 | + ); | |
| 26 | +}; | |
| 27 | +export default UploadFile; | |
| 28 | + | |
| 29 | +export { deleteFile }; | ... | ... |