From fe4029a0e9935fe1f5d3ce58008881a937e6b8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E6=97=AD?= Date: Wed, 21 Aug 2024 16:04:24 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/favicon.ico | Bin 1150 -> 146656 bytes public/index.html | 2 +- src/views/index.vue | 4 ++++ ui/lib/assets/color.json | 4 ++-- ui/lib/styles/base.scss | 1 - ui/lib/styles/common/_colors.scss | 4 ++-- ui/lib/styles/common/_ui.scss | 2 +- ui/lib/styles/index.scss | 3 ++- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/public/favicon.ico b/public/favicon.ico index aa7cb620d0117a801216cda2bd30d34f38e27508..8c8517dd76b41b759fa8f3a79ee115b517745e44 100644 GIT binary patch literal 146656 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%0AYFiH-H6%4H&`$pPv=)|GehFhWmx#W$rHX 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

_f?^$7UBkqx`Yg#NKlubSQeE@dyo4_S8ijV}8R- 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

`XD(VS9E{cHLQ=zM+&O^C~r!X<{KRX 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 literal 1150 zcma)*u}fP~6o*eGq(Q`nA`;9al}yR%P%;#np?`pMG#NS-Cy^o|9SS8w>6oc>NT8FW zLnp`3K^#hHf&?k0bqenV!9`GBlIM4ld&7MX3w`o=-o5wye)pXFZbTmNm(2?Q*JV2; zvMM4aV2YX9JVAuD|9zr%H9KinTf`r561A#3j5Ghzd-Y(!tNS^4tU2VS(H+7VA`=gp zUrc(;w7~)KGGFt5wzYV_76mcOUEO_o~p5WjXIw9;??{N zx{jldm>V*-b!3dj_M#piVO|Eg>-2t(&eouD;MB2XJZ5#Ys@IG+%DvGFOwWuy@CeSp z^%y!Hi)cDvdugI=mb;@9;+htNwg|nXhgS=p>N@ASiQe|{9o;EJpdNa4tVciQQS(3P z8rlMcriMYe8-6wVq=)w6dh8kfhO_@~v@an{c-USF`MUoWpVyqt^qZr7W%kxHI6{|# z_xE_@O1+V88GE=3E9g!^&tOXz$y1MapgmZ$wl`2Ib;B3t-P3$@IcUQCF0;M>>M`#H zU-cR*=Dp8*Q9Y - vue2-el-bpmn + 云盏BPMN编辑器

diff --git a/src/views/index.vue b/src/views/index.vue index b544769..7b5708d 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -279,6 +279,10 @@ body { margin: 0; box-sizing: border-box; } +.djs-context-pad{ + color: black !important; +} + #app { width: 100%; height: 100%; diff --git a/ui/lib/assets/color.json b/ui/lib/assets/color.json index 609ae96..fc5787e 100644 --- a/ui/lib/assets/color.json +++ b/ui/lib/assets/color.json @@ -112,7 +112,7 @@ "mediumslateblue": { "hex": "#7B68EE", "rgb": "123,104,238", - "name": "适中的板岩暗蓝灰色" + "name": "适中的板岩+暗蓝灰色" }, "slateblue": { "hex": "#6A5ACD", @@ -679,4 +679,4 @@ "rgb": "0,0,0", "name": "纯黑" } -} \ No newline at end of file +} diff --git a/ui/lib/styles/base.scss b/ui/lib/styles/base.scss index c99f252..6ac38f5 100644 --- a/ui/lib/styles/base.scss +++ b/ui/lib/styles/base.scss @@ -18,4 +18,3 @@ body, div { } } - diff --git a/ui/lib/styles/common/_colors.scss b/ui/lib/styles/common/_colors.scss index 2d01c4f..4a9f98b 100644 --- a/ui/lib/styles/common/_colors.scss +++ b/ui/lib/styles/common/_colors.scss @@ -100,7 +100,7 @@ $cyan-9: #b5f5ec !default; $cyan-10: #e6fffb !default; // blue $blue-primary: #1890ff !default; -$blue-1: #002766 !default; +$blue-1: #ebeef3 !default; $blue-2: #003a8c !default; $blue-3: #0050b3 !default; $blue-4: #096dd9 !default; @@ -191,4 +191,4 @@ $neutral-white-6: rgba(255, 255, 255, 0.15) !default; $neutral-white-7: rgba(255, 255, 255, 0.09) !default; $neutral-white-8: rgba(255, 255, 255, 0.04) !default; $neutral-white-9: rgba(255, 255, 255, 0.02) !default; -$neutral-white-10: rgba(255, 255, 255, 0) !default; \ No newline at end of file +$neutral-white-10: rgba(255, 255, 255, 0) !default; diff --git a/ui/lib/styles/common/_ui.scss b/ui/lib/styles/common/_ui.scss index 9993945..83d4729 100644 --- a/ui/lib/styles/common/_ui.scss +++ b/ui/lib/styles/common/_ui.scss @@ -12,7 +12,7 @@ $--background: $white !default; $--color: $neutral-black-2 !default; // 主色和色阶 -$--color-primary: $blue-primary !default; +$--color-primary: $white !default; $--color-primary-light-1: $blue-1 !default; $--color-primary-light-2: $blue-2 !default; $--color-primary-light-3: $blue-3 !default; diff --git a/ui/lib/styles/index.scss b/ui/lib/styles/index.scss index 88a67ff..b5e2a15 100644 --- a/ui/lib/styles/index.scss +++ b/ui/lib/styles/index.scss @@ -101,4 +101,5 @@ @import "my-water-fall.scss"; @import "my-watermark.scss"; @import "my-wave.scss"; -@import "my-wrapper.scss"; \ No newline at end of file +@import "my-wrapper.scss"; + -- Gitee From 2202fdcfd363eb412ad6564cb662ca244fdf7b7c Mon Sep 17 00:00:00 2001 From: JeeTan <13317323214@163.com> Date: Thu, 22 Aug 2024 15:14:07 +0800 Subject: [PATCH 2/5] =?UTF-8?q?update:=E7=BA=AF=E5=87=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 5 - .gitignore | 126 +- .npmignore | 27 - Dockerfile | 26 + LICENSE | 222 +- README.md | 209 +- babel.config.js | 8 +- bin/my.js | 47 - core/babel.config.js | 55 - core/babel.plugins.js | 49 - core/bin/app.js | 29 - core/bin/bridge.js | 3 - core/bin/coder.js | 7 - core/bin/color.js | 4 - core/bin/create.js | 30 - core/bin/demo.js | 3 - core/bin/fix.js | 3 - core/bin/jsdoc.js | 8 - core/bin/page.js | 35 - core/bin/preview.js | 15 - core/bin/ready.js | 26 - core/bin/route.js | 43 - core/bin/server.js | 4 - core/bin/start.js | 3 - core/bin/svg.js | 3 - core/bin/theme.js | 35 - core/bin/widgets.js | 20 - core/build/app.js | 227 - core/build/bridge-builder.js | 21 - core/build/bridge-entry.js | 10 - core/build/coder.js | 510 - core/build/colors.js | 72 - core/build/demo-builder.js | 49 - core/build/dev-theme-switch.js | 31 - core/build/fix.js | 116 - core/build/front-matter.js | 65 - core/build/jsdoc-builder.js | 24 - core/build/prod-theme-builder.js | 63 - core/build/routes.js | 378 - core/build/svg.js | 46 - core/build/theme.js | 175 - core/config.js | 142 - core/config/coder.config.js | 138 - core/config/jsdoc.charts.config.js | 6 - core/config/jsdoc.components.config.js | 10 - core/config/jsdoc.dv.config.js | 6 - core/config/jsdoc.factory.js | 32 - core/config/jsdoc.map.config.js | 6 - core/config/jsdoc.utils.config.js | 10 - core/config/proxy.factory.js | 20 - core/config/webpack.base.extend.js | 100 - core/config/webpack.bridge.config.js | 36 - core/config/webpack.dev.extend.js | 50 - core/config/webpack.docs.extend.js | 45 - core/config/webpack.prod.extend.js | 121 - core/config/webpack.theme.factory.js | 103 - core/config/wepack.bridge.lib.config.js | 30 - core/index.js | 141 - core/loaders/component-loader.js | 145 - core/loaders/docs-extend-md-loader.js | 96 - core/loaders/theme-var-scss-loader.js | 10 - core/plugins/auto-routes-plugin.js | 93 - .../copy-theme-after-compiled-plugin.js | 28 - core/plugins/html-inject-config-plugin.js | 32 - core/plugins/html-inject-theme-plugin.js | 62 - .../theme-switch-for-compile-plugin.js | 51 - core/plugins/vue-jsdoc-plugin.js | 11 - core/renders/coder/api.js | 82 - core/renders/coder/icons.js | 16 - core/renders/coder/mixin.js | 308 - core/renders/coder/mock.js | 154 - core/renders/coder/store.js | 465 - core/renders/coder/types.js | 21 - core/renders/routes-wrapper.js | 17 - core/renders/routes.js | 29 - core/renders/svg-component.js | 24 - core/server/app.js | 8 - core/server/db.js | 89 - core/server/dev.js | 11 - core/server/http.js | 84 - core/templates/app/config.js | 35 - core/templates/app/main.js | 95 - core/templates/app/router/routes.js | 4 - core/templates/app/store/getters.js | 13 - core/templates/app/store/index.js | 36 - core/templates/app/store/mutations.js | 13 - core/templates/app/store/state.js | 6 - core/templates/app/views/_404.vue | 11 - core/templates/app/views/index.vue | 14 - core/templates/jsdoc/README.md | 147 - core/templates/jsdoc/package.json | 64 - core/templates/jsdoc/publish.js | 775 - .../jsdoc/static/scripts/collapse.js | 20 - .../jsdoc/static/scripts/linenumber.js | 25 - core/templates/jsdoc/static/scripts/nav.js | 12 - .../jsdoc/static/scripts/polyfill.js | 4 - .../scripts/prettify/Apache-License-2.0.txt | 202 - .../jsdoc/static/scripts/prettify/lang-css.js | 2 - .../jsdoc/static/scripts/prettify/prettify.js | 28 - core/templates/jsdoc/static/scripts/search.js | 83 - core/templates/jsdoc/static/styles/jsdoc.css | 670 - .../jsdoc/static/styles/prettify.css | 79 - core/templates/jsdoc/tmpl/augments.tmpl | 10 - core/templates/jsdoc/tmpl/container.tmpl | 197 - core/templates/jsdoc/tmpl/details.tmpl | 148 - core/templates/jsdoc/tmpl/example.tmpl | 2 - core/templates/jsdoc/tmpl/examples.tmpl | 13 - core/templates/jsdoc/tmpl/exceptions.tmpl | 32 - core/templates/jsdoc/tmpl/layout.tmpl | 105 - core/templates/jsdoc/tmpl/mainpage.tmpl | 15 - core/templates/jsdoc/tmpl/members.tmpl | 38 - core/templates/jsdoc/tmpl/method.tmpl | 138 - core/templates/jsdoc/tmpl/modifies.tmpl | 14 - core/templates/jsdoc/tmpl/params.tmpl | 132 - core/templates/jsdoc/tmpl/properties.tmpl | 108 - core/templates/jsdoc/tmpl/returns.tmpl | 19 - core/templates/jsdoc/tmpl/source.tmpl | 8 - core/templates/jsdoc/tmpl/tutorial.tmpl | 19 - core/templates/jsdoc/tmpl/type.tmpl | 7 - core/utils.js | 215 - core/vue.config.js | 103 - home.jpg | Bin 118888 -> 0 bytes my.config.js | 22 - nginx.conf | 38 + package-lock.json | 18771 +- package.json | 225 +- {src/package => package}/Log.js | 52 +- .../designer/ProcessDesigner.vue | 335 +- {src/package => package}/designer/index.js | 2 +- .../plugins/content-pad/contentPadProvider.js | 234 +- package/designer/plugins/content-pad/index.js | 6 + package/designer/plugins/defaultEmpty.js | 24 + .../descriptor/activitiDescriptor.json | 0 .../plugins/descriptor/camundaDescriptor.json | 0 .../descriptor/flowableDescriptor.json | 0 .../activiti/activitiExtension.js | 40 +- .../extension-moddle/activiti/index.js | 4 +- .../extension-moddle/camunda/extension.js | 148 + .../plugins/extension-moddle/camunda/index.js | 6 + .../flowable/flowableExtension.js | 74 + .../extension-moddle/flowable/index.js | 9 + .../designer/plugins/palette/CustomPalette.js | 115 +- package/designer/plugins/palette/index.js | 6 + .../plugins/palette/paletteProvider.js | 88 +- .../plugins/translate/customTranslate.js | 8 +- package/designer/plugins/translate/zh.js | 238 + package/highlight/index.js | 5 + {src/package => package}/index.js | 10 +- .../palette/ProcessPalette.vue | 22 +- {src/package => package}/palette/index.js | 2 +- .../penal/PropertiesPanel.vue | 82 +- .../penal/base/ElementBaseInfo.vue | 10 +- .../penal/flow-condition/FlowCondition.vue | 40 +- .../penal/form/ElementForm.vue | 69 +- {src/package => package}/penal/index.js | 2 +- .../penal/listeners/ElementListeners.vue | 53 +- .../penal/listeners/UserTaskListeners.vue | 46 +- .../penal/listeners/template.js | 0 .../penal/listeners/utilSelf.js | 44 +- .../multi-instance/ElementMultiInstance.vue | 48 +- .../penal/other/ElementOtherConfig.vue | 10 +- .../penal/properties/ElementProperties.vue | 35 +- .../penal/signal-message/SignalAndMessage.vue | 24 +- .../penal/task/ElementTask.vue | 26 +- .../task/task-components/ReceiveTask.vue | 16 +- .../penal/task/task-components/ScriptTask.vue | 20 +- .../penal/task/task-components/UserTask.vue | 54 +- .../theme/element-variables.scss | 0 {src/package => package}/theme/index.scss | 0 .../theme/process-designer.scss | 0 .../theme/process-panel.scss | 0 {src/package => package}/utils.js | 24 +- public/alipay.png | Bin 0 -> 290054 bytes public/assets/bridge/index.html | 9 - public/assets/bridge/js/bridge.2711d44e.js | 1 - public/assets/bridge/lib/index.js | 1 - public/config.js | 10 - public/data/CITY.json | 47031 ----- public/data/DEPT.json | 6 - public/favicon.ico | Bin 146656 -> 0 bytes public/icon-process.png | Bin 0 -> 66634 bytes public/index.html | 41 +- public/logo.ico | Bin 0 -> 4286 bytes public/newDiagram.bpmn | 13 - public/wechat.jpg | Bin 0 -> 67808 bytes public/wechat.png | Bin 0 -> 223471 bytes schemas/mockForExample.js | 96 - schemas/slim-clue.js | 33 - screenshot/image-20210422140659561.png | Bin 0 -> 58108 bytes screenshot/image-20210422140728176.png | Bin 0 -> 59237 bytes screenshot/image-20210422140805725.png | Bin 0 -> 71893 bytes screenshot/image-20210422140906725.png | Bin 0 -> 58860 bytes screenshot/image-20210422140924114.png | Bin 0 -> 61085 bytes screenshot/image-20210422140939414.png | Bin 0 -> 154676 bytes screenshot/image-20210422141009316.png | Bin 0 -> 73736 bytes screenshot/image-20210422141035638.png | Bin 0 -> 73075 bytes screenshot/image-20210422141220571.png | Bin 0 -> 69989 bytes screenshot/image-20210422141354311.png | Bin 0 -> 84055 bytes .../components/.gitkeep => script/update.js | 0 src/{views/index.vue => App.vue} | 261 +- src/apps.js | 1 - src/assets/data/CITY.json | 47031 ----- src/assets/data/min-tree.json | 56 - src/assets/data/tree.json | 368 - src/config.js | 59 - src/constant.js | 15 - src/helper/dict-management/dict-module.js | 74 - src/helper/dict-management/dict-opts.js | 103 - .../dict-management/filter/date-format.js | 68 - src/helper/dict-management/filter/index.js | 34 - src/helper/dict-management/index.js | 25 - src/main.js | 166 +- src/mapping/index.js | 17 - src/mock/example.js | 321 - src/mock/flights.json | 142632 --------------- src/mock/index.js | 6 - src/mock/templates.js | 15 - src/modules/auto-place/CustomAutoPlace.js | 12 +- src/modules/auto-place/index.js | 6 +- src/modules/auto-place/rewriteAutoPlace.js | 55 + src/modules/custom-renderer/CustomRenderer.js | 34 +- src/modules/custom-renderer/index.js | 6 +- src/modules/extension/user.json | 32 + src/modules/rules/CustomRules.js | 4 +- src/modules/rules/index.js | 6 +- .../designer/plugins/content-pad/index.js | 6 - src/package/designer/plugins/defaultEmpty.js | 24 - src/package/designer/plugins/palette/index.js | 6 - src/package/designer/plugins/translate/zh.js | 238 - src/package/highlight/index.js | 5 - src/router/routes.js | 4 - src/store/getters.js | 13 - src/store/index.js | 34 - src/store/modules/dict.js | 24 - src/store/modules/index.js | 5 - src/store/mutations.js | 13 - src/store/state.js | 6 - src/style/_vars.scss | 3 - src/style/base.scss | 51 - src/style/index.scss | 2 - src/style/themes/_dark.scss | 1 - src/style/themes/_default.scss | 2 - src/style/vars/_theme.scss | 1 - src/translations.js | 34 +- src/views/_404.vue | 11 - svg/accurate-search-fill.svg | 1 - svg/accurate-search.svg | 1 - svg/address-book-fill.svg | 1 - svg/address-book.svg | 1 - svg/adjust-fill.svg | 1 - svg/adjust.svg | 1 - svg/aims-fill.svg | 1 - svg/aims.svg | 1 - svg/airplane-fill.svg | 1 - svg/airplane.svg | 1 - svg/alarm-fill.svg | 1 - svg/alarm.svg | 1 - svg/alipay.svg | 1 - svg/all-fill.svg | 1 - svg/all.svg | 1 - svg/ambulance-fill.svg | 1 - svg/ambulance.svg | 1 - svg/anchor-fill.svg | 1 - svg/anchor.svg | 1 - svg/annex-fill.svg | 1 - svg/annex.svg | 1 - svg/anonymous-fill.svg | 1 - svg/anonymous.svg | 1 - svg/approval-fill.svg | 1 - svg/approval.svg | 1 - svg/archive-fill.svg | 1 - svg/archive.svg | 1 - svg/area-map-fill.svg | 1 - svg/area-map.svg | 1 - svg/arrow-down-fill.svg | 1 - svg/arrow-down.svg | 1 - svg/arrow-left-fill.svg | 1 - svg/arrow-left.svg | 1 - svg/arrow-right-fill.svg | 1 - svg/arrow-right.svg | 1 - svg/arrow-up-fill.svg | 1 - svg/arrow-up.svg | 1 - svg/associate-fill.svg | 1 - svg/associate.svg | 1 - svg/astronomical-fill.svg | 1 - svg/astronomical.svg | 1 - svg/audio-fill.svg | 1 - svg/audio.svg | 1 - svg/avi-fill.svg | 1 - svg/avi.svg | 1 - svg/baby-child-fill.svg | 1 - svg/baby-child.svg | 1 - svg/baby.svg | 1 - svg/backstage-data-fill.svg | 1 - svg/backstage-data.svg | 1 - svg/backward-fill.svg | 1 - svg/backward.svg | 1 - svg/bad-fill.svg | 1 - svg/bad.svg | 1 - svg/badge-fill.svg | 1 - svg/badge.svg | 1 - svg/baidu.svg | 1 - svg/balance-fill.svg | 1 - svg/balance.svg | 1 - svg/ball-camera-fill.svg | 1 - svg/ball-camera.svg | 1 - svg/bar-code-fill.svg | 1 - svg/bar-code.svg | 1 - svg/base-signal-fill.svg | 1 - svg/base-signal.svg | 1 - svg/base-station-fill.svg | 1 - svg/base-station.svg | 1 - svg/bayonet-camera-fill.svg | 1 - svg/bayonet-camera.svg | 1 - svg/bed-fill.svg | 1 - svg/bed.svg | 1 - svg/beehive-fill.svg | 1 - svg/beehive.svg | 1 - svg/bell-fill.svg | 1 - svg/bell-off-fill.svg | 1 - svg/bell-off.svg | 1 - svg/bell.svg | 1 - svg/bigdata-fill.svg | 1 - svg/bigdata.svg | 1 - svg/bike-fill.svg | 1 - svg/bike.svg | 1 - svg/bill-fill.svg | 1 - svg/bill.svg | 1 - svg/blood-fill.svg | 1 - svg/blood.svg | 1 - svg/bluetooth-fill.svg | 1 - svg/bluetooth.svg | 1 - svg/board-fill.svg | 1 - svg/board.svg | 1 - svg/bold-arrow-down-fill.svg | 1 - svg/bold-arrow-down.svg | 1 - svg/bold-arrow-left-fill.svg | 1 - svg/bold-arrow-left.svg | 1 - svg/bold-arrow-right-fill.svg | 1 - svg/bold-arrow-right.svg | 1 - svg/bold-arrow-up-fill.svg | 1 - svg/bold-arrow-up.svg | 1 - svg/book-fill.svg | 1 - svg/book.svg | 1 - svg/bookmark-fill.svg | 1 - svg/bookmark.svg | 1 - svg/brain-fill.svg | 1 - svg/brain.svg | 1 - svg/branch-fill.svg | 1 - svg/branch.svg | 1 - svg/breathe-fill.svg | 1 - svg/breathe.svg | 1 - svg/briefcase-fill.svg | 1 - svg/briefcase.svg | 1 - svg/broadcast-fill.svg | 1 - svg/broadcast.svg | 1 - svg/build-fill.svg | 1 - svg/build.svg | 1 - svg/building-fill.svg | 1 - svg/building.svg | 1 - svg/bulb-fill.svg | 1 - svg/bulb.svg | 1 - svg/bullseye-fill.svg | 1 - svg/bullseye.svg | 1 - svg/bus-fill.svg | 1 - svg/bus.svg | 1 - svg/caidaquan.svg | 1 - svg/cainiao.svg | 1 - svg/calendar-fill.svg | 1 - svg/calendar.svg | 1 - svg/calendar2-fill.svg | 1 - svg/calendar2.svg | 1 - svg/call-fill.svg | 1 - svg/call.svg | 1 - svg/camera-fill.svg | 1 - svg/camera-old-fill.svg | 1 - svg/camera-old.svg | 1 - svg/camera.svg | 1 - svg/car-collision-fill.svg | 1 - svg/car-collision.svg | 1 - svg/car-fill.svg | 1 - svg/car.svg | 1 - svg/car2-fill.svg | 1 - svg/car2.svg | 1 - svg/card-fill.svg | 1 - svg/card.svg | 1 - svg/careful-fill.svg | 1 - svg/careful.svg | 1 - svg/case-file-fill.svg | 1 - svg/case-file.svg | 1 - svg/cbox-fill.svg | 1 - svg/cbox.svg | 1 - svg/cdr-fill.svg | 1 - svg/cdr.svg | 1 - svg/chart-line-fill.svg | 1 - svg/chart-line.svg | 1 - svg/chart-trend-fill.svg | 1 - svg/chart-trend.svg | 1 - svg/chat-fill.svg | 1 - svg/chat.svg | 1 - svg/check-fill.svg | 1 - svg/check.svg | 1 - svg/checkbox-fill.svg | 1 - svg/checkbox-minus-fill.svg | 1 - svg/checkbox-minus.svg | 1 - svg/checkbox-ok-fill.svg | 1 - svg/checkbox-ok.svg | 1 - svg/checkbox-plus-fill.svg | 1 - svg/checkbox-plus.svg | 1 - svg/checkbox.svg | 1 - svg/chemistry-fill.svg | 1 - svg/chemistry.svg | 1 - svg/child.svg | 1 - svg/children-fill.svg | 1 - svg/children.svg | 1 - svg/chinapost.svg | 1 - svg/chip-fill.svg | 1 - svg/chip.svg | 1 - svg/choice-fill.svg | 1 - svg/choice.svg | 1 - svg/circler-layout-fill.svg | 1 - svg/circler-layout.svg | 1 - svg/circulation-fill.svg | 1 - svg/circulation.svg | 1 - svg/city-fill.svg | 1 - svg/city.svg | 1 - svg/clock-fill.svg | 1 - svg/clock.svg | 1 - svg/clothes-fill.svg | 1 - svg/clothes.svg | 1 - svg/cloud-disk-fill.svg | 1 - svg/cloud-disk.svg | 1 - svg/cloud-download-fill.svg | 1 - svg/cloud-download.svg | 1 - svg/cloud-fill.svg | 1 - svg/cloud-link-fill.svg | 1 - svg/cloud-link.svg | 1 - svg/cloud-search-fill.svg | 1 - svg/cloud-search.svg | 1 - svg/cloud-server-fill.svg | 1 - svg/cloud-server.svg | 1 - svg/cloud-service-fill.svg | 1 - svg/cloud-service.svg | 1 - svg/cloud-upload-fill.svg | 1 - svg/cloud-upload.svg | 1 - svg/cloud.svg | 1 - svg/coach-fill.svg | 1 - svg/coach.svg | 1 - svg/code-fill.svg | 1 - svg/code.svg | 1 - svg/coffee-fill.svg | 1 - svg/coffee.svg | 1 - svg/collaboration-fill.svg | 1 - svg/collaboration-system-fill.svg | 1 - svg/collaboration-system.svg | 1 - svg/collaboration.svg | 1 - svg/collision-fill.svg | 1 - svg/collision.svg | 1 - svg/columns-fill.svg | 1 - svg/columns.svg | 1 - svg/combine-fill.svg | 1 - svg/combine.svg | 1 - svg/comment-fill.svg | 1 - svg/comment.svg | 1 - svg/comment2-fill.svg | 1 - svg/comment2.svg | 1 - svg/compact-car-fill.svg | 1 - svg/compact-car.svg | 1 - svg/compass-fill.svg | 1 - svg/compass.svg | 1 - svg/component-fill.svg | 1 - svg/component.svg | 1 - svg/components-fill.svg | 1 - svg/components.svg | 1 - svg/computer-fill.svg | 1 - svg/computer.svg | 1 - svg/cooperation-fill.svg | 1 - svg/cooperation.svg | 1 - svg/copier-fill.svg | 1 - svg/copier.svg | 1 - svg/copy-comparison-fill.svg | 1 - svg/copy-comparison.svg | 1 - svg/copy-fill.svg | 1 - svg/copy-rect-fill.svg | 1 - svg/copy-rect.svg | 1 - svg/copy.svg | 1 - svg/corpse-fill.svg | 1 - svg/corpse.svg | 1 - svg/cpu-fill.svg | 1 - svg/cpu.svg | 1 - svg/credentials-fill.svg | 1 - svg/credentials.svg | 1 - svg/crop-fill.svg | 1 - svg/crop.svg | 1 - svg/cuff-fill.svg | 1 - svg/cuff.svg | 1 - svg/cup-fill.svg | 1 - svg/cup.svg | 1 - svg/cycle-fill.svg | 1 - svg/cycle.svg | 1 - svg/dad.svg | 1 - svg/danger-fill.svg | 1 - svg/danger.svg | 1 - svg/dark-fill.svg | 1 - svg/dark.svg | 1 - svg/dashboard-fill.svg | 1 - svg/dashboard.svg | 1 - svg/data-abnormal-fill.svg | 1 - svg/data-abnormal.svg | 1 - svg/data-download-fill.svg | 1 - svg/data-download.svg | 1 - svg/data-lnquire-fill.svg | 1 - svg/data-lnquire.svg | 1 - svg/data-management-fill.svg | 1 - svg/data-management.svg | 1 - svg/data-update-fill.svg | 1 - svg/data-update.svg | 1 - svg/database-fill.svg | 1 - svg/database.svg | 1 - svg/debug-fill.svg | 1 - svg/debug.svg | 1 - svg/delete-fill.svg | 1 - svg/delete.svg | 1 - svg/desktop-fill.svg | 1 - svg/desktop.svg | 1 - svg/destroy-fill.svg | 1 - svg/destroy.svg | 1 - svg/dianxin-fill.svg | 1 - svg/dianxin.svg | 1 - svg/dingtalk.svg | 1 - svg/direction-fill.svg | 1 - svg/direction.svg | 1 - svg/disability.svg | 1 - svg/disappointed-fill.svg | 1 - svg/disappointed.svg | 1 - svg/dna-fill.svg | 1 - svg/dna.svg | 1 - svg/doctor-fill.svg | 1 - svg/doctor.svg | 1 - svg/double-arrow-down-fill.svg | 1 - svg/double-arrow-down.svg | 1 - svg/double-arrow-left-fill.svg | 1 - svg/double-arrow-left.svg | 1 - svg/double-arrow-right-fill.svg | 1 - svg/double-arrow-right.svg | 1 - svg/double-arrow-up-fill.svg | 1 - svg/double-arrow-up.svg | 1 - svg/double-circle-fill.svg | 1 - svg/double-circle.svg | 1 - svg/douyin.svg | 1 - svg/download-fill.svg | 1 - svg/download.svg | 1 - svg/drip-fill.svg | 1 - svg/drip.svg | 1 - svg/dropper-fill.svg | 1 - svg/dropper.svg | 1 - svg/drug-fill.svg | 1 - svg/drug.svg | 1 - svg/ear-fill.svg | 1 - svg/ear.svg | 1 - svg/earth-fill.svg | 1 - svg/earth.svg | 1 - svg/edit-fill.svg | 1 - svg/edit.svg | 1 - svg/electricity-fill.svg | 1 - svg/electricity.svg | 1 - svg/elment.svg | 1 - svg/ems.svg | 1 - svg/enlarge-fill.svg | 1 - svg/enlarge.svg | 1 - svg/envelope-fill.svg | 1 - svg/envelope-open-fill.svg | 1 - svg/envelope-open.svg | 1 - svg/envelope.svg | 1 - svg/esm-fill.svg | 1 - svg/esm.svg | 1 - svg/evaluation-fill.svg | 1 - svg/evaluation.svg | 1 - svg/excel-fill.svg | 1 - svg/excel.svg | 1 - svg/exchange-fill.svg | 1 - svg/exchange.svg | 1 - svg/exit-fill.svg | 1 - svg/exit.svg | 1 - svg/expand-fill.svg | 1 - svg/expand.svg | 1 - svg/explain-fill.svg | 1 - svg/explain.svg | 1 - svg/express-package-fill.svg | 1 - svg/express-package.svg | 1 - svg/eye-fill.svg | 1 - svg/eye.svg | 1 - svg/factory-fill.svg | 1 - svg/factory.svg | 1 - svg/failure-fill.svg | 1 - svg/failure.svg | 1 - svg/fall-fill.svg | 1 - svg/fall.svg | 1 - svg/family.svg | 1 - svg/father-son.svg | 1 - svg/fax-fill.svg | 1 - svg/fax.svg | 1 - svg/fcbox.svg | 1 - svg/fence-fill.svg | 1 - svg/fence.svg | 1 - svg/fetion.svg | 1 - svg/file-fill.svg | 1 - svg/file-text-fill.svg | 1 - svg/file-text.svg | 1 - svg/file.svg | 1 - svg/files-fill.svg | 1 - svg/files.svg | 1 - svg/film-fill.svg | 1 - svg/film.svg | 1 - svg/filter-fill.svg | 1 - svg/filter.svg | 1 - svg/fingerprint-fill.svg | 1 - svg/fingerprint.svg | 1 - svg/firearms-fill.svg | 1 - svg/firearms.svg | 1 - svg/fixed-fill.svg | 1 - svg/fixed-telephone-fill.svg | 1 - svg/fixed-telephone.svg | 1 - svg/fixed.svg | 1 - svg/flag-fill.svg | 1 - svg/flag.svg | 1 - svg/flask-fill.svg | 1 - svg/flask.svg | 1 - svg/flat-fill.svg | 1 - svg/flat.svg | 1 - svg/floor-building-fill.svg | 1 - svg/floor-building.svg | 1 - svg/flower-fill.svg | 1 - svg/flower.svg | 1 - svg/folder-fill.svg | 1 - svg/folder-open-fill.svg | 1 - svg/folder-open.svg | 1 - svg/folder.svg | 1 - svg/foot-fill.svg | 1 - svg/foot.svg | 1 - svg/footprint-fill.svg | 1 - svg/footprint.svg | 1 - svg/four-squares-fill.svg | 1 - svg/four-squares.svg | 1 - svg/freshhema.svg | 1 - svg/full-fill.svg | 1 - svg/full.svg | 1 - svg/gantt-fill.svg | 1 - svg/gantt.svg | 1 - svg/gearmore-fill.svg | 1 - svg/gearmore.svg | 1 - svg/gift-fill.svg | 1 - svg/gift.svg | 1 - svg/go-fill.svg | 1 - svg/go.svg | 1 - svg/gps-fill.svg | 1 - svg/gps.svg | 1 - svg/grandma.svg | 1 - svg/grandpa.svg | 1 - svg/grid-layout-fill.svg | 1 - svg/grid-layout.svg | 1 - svg/group-fill.svg | 1 - svg/group.svg | 1 - svg/hammer-fill.svg | 1 - svg/hammer.svg | 1 - svg/hand-fill.svg | 1 - svg/hand.svg | 1 - svg/handbag-fill.svg | 1 - svg/handbag.svg | 1 - svg/happy-fill.svg | 1 - svg/happy.svg | 1 - svg/headphones-fill.svg | 1 - svg/headphones.svg | 1 - svg/headset-fill.svg | 1 - svg/headset.svg | 1 - svg/hear-fill.svg | 1 - svg/hear-half.svg | 1 - svg/hear.svg | 1 - svg/heart-fill.svg | 1 - svg/heart-rate-fill.svg | 1 - svg/heart-rate.svg | 1 - svg/heart.svg | 1 - svg/helicopter-fill.svg | 1 - svg/helicopter.svg | 1 - svg/high-building-fill.svg | 1 - svg/high-building.svg | 1 - svg/high-road-fill.svg | 1 - svg/high-road.svg | 1 - svg/histogram-fill.svg | 1 - svg/histogram.svg | 1 - svg/history-fill.svg | 1 - svg/history.svg | 1 - svg/hit-fill.svg | 1 - svg/hit.svg | 1 - svg/home-fill.svg | 1 - svg/home.svg | 1 - svg/hospital-fill.svg | 1 - svg/hospital.svg | 1 - svg/hot-spot-signal-fill.svg | 1 - svg/hot-spot-signal.svg | 1 - svg/hotspot-fill.svg | 1 - svg/hotspot.svg | 1 - svg/house-fill.svg | 1 - svg/house.svg | 1 - svg/id-card-fill.svg | 1 - svg/id-card.svg | 1 - svg/idea-fill.svg | 1 - svg/idea.svg | 1 - svg/image-fill.svg | 1 - svg/image.svg | 1 - svg/imei-fill.svg | 1 - svg/imei.svg | 1 - svg/imsi-fill.svg | 1 - svg/imsi.svg | 1 - svg/inbox-fill.svg | 1 - svg/inbox.svg | 1 - svg/indent-remove-fill.svg | 1 - svg/indent-remove.svg | 1 - svg/indicator-fill.svg | 1 - svg/indicator.svg | 1 - svg/info-fill.svg | 1 - svg/info.svg | 1 - svg/insert-bottom-fill.svg | 1 - svg/insert-bottom.svg | 1 - svg/insert-left-fill.svg | 1 - svg/insert-left.svg | 1 - svg/insert-right-fill.svg | 1 - svg/insert-right.svg | 1 - svg/insert-top-fill.svg | 1 - svg/insert-top.svg | 1 - svg/internet-fill.svg | 1 - svg/internet.svg | 1 - svg/invert-fill.svg | 1 - svg/invert.svg | 1 - svg/invisible-fill.svg | 1 - svg/invisible.svg | 1 - svg/jail-fill.svg | 1 - svg/jail.svg | 1 - svg/json-fill.svg | 1 - svg/json.svg | 1 - svg/judge-fill.svg | 1 - svg/judge.svg | 1 - svg/key-fill.svg | 1 - svg/key.svg | 1 - svg/keyborad-fill.svg | 1 - svg/keyborad.svg | 1 - svg/kidney-fill.svg | 1 - svg/kidney.svg | 1 - svg/kinship-fill.svg | 1 - svg/kinship.svg | 1 - svg/knowledge-fill.svg | 1 - svg/knowledge.svg | 1 - svg/kuaishou.svg | 1 - svg/lcd-fill.svg | 1 - svg/lcd.svg | 1 - svg/liantong-fill.svg | 1 - svg/liantong.svg | 1 - svg/light-fill.svg | 1 - svg/light.svg | 1 - svg/lightning-fill.svg | 1 - svg/lightning.svg | 1 - svg/like-fill.svg | 1 - svg/like.svg | 1 - svg/line-phone-fill.svg | 1 - svg/line-phone.svg | 1 - svg/link-arrow-h-fill.svg | 1 - svg/link-arrow-h.svg | 1 - svg/link-arrow-v-fill.svg | 1 - svg/link-arrow-v.svg | 1 - svg/link-fill.svg | 1 - svg/link-off-fill.svg | 1 - svg/link-off.svg | 1 - svg/link.svg | 1 - svg/list2-fill.svg | 1 - svg/list2.svg | 1 - svg/list3-fill.svg | 1 - svg/list3.svg | 1 - svg/list4-fill.svg | 1 - svg/list4.svg | 1 - svg/loading-fill.svg | 1 - svg/loading.svg | 1 - svg/location-fill.svg | 1 - svg/location.svg | 1 - svg/lock-fill.svg | 1 - svg/lock.svg | 1 - svg/locus-fill.svg | 1 - svg/locus.svg | 1 - svg/login-fill.svg | 1 - svg/login.svg | 1 - svg/loop-fill.svg | 1 - svg/loop.svg | 1 - svg/mac-fill.svg | 1 - svg/mac.svg | 1 - svg/magic-fill.svg | 1 - svg/magic.svg | 1 - svg/man-fill.svg | 1 - svg/man.svg | 1 - svg/manage-circuit-fill.svg | 1 - svg/manage-circuit.svg | 1 - svg/map-connect-fill.svg | 1 - svg/map-connect.svg | 1 - svg/map-direction-fill.svg | 1 - svg/map-direction.svg | 1 - svg/map-fill.svg | 1 - svg/map-finger-fill.svg | 1 - svg/map-finger.svg | 1 - svg/map-gas-fill.svg | 1 - svg/map-gas.svg | 1 - svg/map-indicator-fill.svg | 1 - svg/map-indicator.svg | 1 - svg/map-link-fill.svg | 1 - svg/map-link.svg | 1 - svg/map-oil-fill.svg | 1 - svg/map-oil.svg | 1 - svg/map-pin-fill.svg | 1 - svg/map-pin.svg | 1 - svg/map-ruler-fill.svg | 1 - svg/map-ruler.svg | 1 - svg/map-site-fill.svg | 1 - svg/map-site.svg | 1 - svg/map-thumbtack-fill.svg | 1 - svg/map-thumbtack.svg | 1 - svg/map.svg | 1 - svg/mbile-fill.svg | 1 - svg/mbile.svg | 1 - svg/meituan.svg | 1 - svg/message-fill.svg | 1 - svg/message.svg | 1 - svg/mic-off-fill.svg | 1 - svg/mic-off.svg | 1 - svg/mic-on-fill.svg | 1 - svg/mic-on.svg | 1 - svg/microblog.svg | 1 - svg/microphone-fill.svg | 1 - svg/microphone.svg | 1 - svg/microscope-fill.svg | 1 - svg/microscope.svg | 1 - svg/mid-fill.svg | 1 - svg/mid.svg | 1 - svg/mind-fill.svg | 1 - svg/mind.svg | 1 - svg/mind2-fill.svg | 1 - svg/mind2.svg | 1 - svg/minus-fill.svg | 1 - svg/minus.svg | 1 - svg/missfresh.svg | 1 - svg/mitalk.svg | 1 - svg/mom.svg | 1 - svg/momo.svg | 1 - svg/monitor-camera-fill.svg | 1 - svg/monitor-camera.svg | 1 - svg/mono-bottom-fill.svg | 1 - svg/mono-bottom.svg | 1 - svg/mono-left-fill.svg | 1 - svg/mono-left.svg | 1 - svg/mono-right-fill.svg | 1 - svg/mono-right.svg | 1 - svg/mono-top-fill.svg | 1 - svg/mono-top.svg | 1 - svg/mother-son.svg | 1 - svg/motor-fill.svg | 1 - svg/motor.svg | 1 - svg/moustache-fill.svg | 1 - svg/moustache.svg | 1 - svg/mouth-fill.svg | 1 - svg/mouth.svg | 1 - svg/move-fill.svg | 1 - svg/move.svg | 1 - svg/multiply-fill.svg | 1 - svg/multiply.svg | 1 - svg/music-fill.svg | 1 - svg/music.svg | 1 - svg/mute-fill.svg | 1 - svg/mute.svg | 1 - svg/name-card-fill.svg | 1 - svg/name-card.svg | 1 - svg/narrow-fill.svg | 1 - svg/narrow.svg | 1 - svg/network-fill.svg | 1 - svg/network-layout-fill.svg | 1 - svg/network-layout.svg | 1 - svg/network.svg | 1 - svg/news-fill.svg | 1 - svg/news.svg | 1 - svg/newspaper-fill.svg | 1 - svg/newspaper.svg | 1 - svg/next-fill.svg | 1 - svg/next-step-fill.svg | 1 - svg/next-step.svg | 1 - svg/next.svg | 1 - svg/nfc-fill.svg | 1 - svg/nfc.svg | 1 - svg/nine-squares-fill.svg | 1 - svg/nine-squares.svg | 1 - svg/no-fill.svg | 1 - svg/no.svg | 1 - svg/nose-fill.svg | 1 - svg/nose.svg | 1 - svg/note-fill.svg | 1 - svg/note.svg | 1 - svg/notebook-fill.svg | 1 - svg/notebook.svg | 1 - svg/num-list-fill.svg | 1 - svg/num-list.svg | 1 - svg/number-sign-fill.svg | 1 - svg/number-sign.svg | 1 - svg/odbc-fill.svg | 1 - svg/odbc.svg | 1 - svg/ok-fill.svg | 1 - svg/ok.svg | 1 - svg/orbit-fill.svg | 1 - svg/orbit.svg | 1 - svg/org-fill.svg | 1 - svg/org.svg | 1 - svg/organiz-fill.svg | 1 - svg/organiz.svg | 1 - svg/organization-fill.svg | 1 - svg/organization.svg | 1 - svg/pad-fill.svg | 1 - svg/pad.svg | 1 - svg/palm-fill.svg | 1 - svg/palm.svg | 1 - svg/paper-fill.svg | 1 - svg/paper.svg | 1 - svg/partake-fill.svg | 1 - svg/partake.svg | 1 - svg/paste-fill.svg | 1 - svg/paste.svg | 1 - svg/pause-circle-fill.svg | 1 - svg/pause-circle.svg | 1 - svg/pause-fill.svg | 1 - svg/pause.svg | 1 - svg/pay-jingdong.svg | 1 - svg/pay-taobao.svg | 1 - svg/pc-fill.svg | 1 - svg/pc.svg | 1 - svg/pdf-fill.svg | 1 - svg/pdf.svg | 1 - svg/pencil-fill.svg | 1 - svg/pencil.svg | 1 - svg/pendant-fill.svg | 1 - svg/pendant.svg | 1 - svg/people-network-fill.svg | 1 - svg/people-network.svg | 1 - svg/percentage-fill.svg | 1 - svg/percentage.svg | 1 - svg/phone-fill.svg | 1 - svg/phone-signal-fill.svg | 1 - svg/phone-signal.svg | 1 - svg/phone.svg | 1 - svg/pie-chart-fill.svg | 1 - svg/pie-chart.svg | 1 - svg/pinduoduo.svg | 1 - svg/plasma-fill.svg | 1 - svg/plasma.svg | 1 - svg/play-fill.svg | 1 - svg/play.svg | 1 - svg/plume-fill.svg | 1 - svg/plume.svg | 1 - svg/plus-fill.svg | 1 - svg/plus.svg | 1 - svg/police-fill.svg | 1 - svg/police.svg | 1 - svg/policeman-fill.svg | 1 - svg/policeman.svg | 1 - svg/pop-fill.svg | 1 - svg/pop.svg | 1 - svg/power-fill.svg | 1 - svg/power.svg | 1 - svg/ppt-fill.svg | 1 - svg/ppt.svg | 1 - svg/pregnancy.svg | 1 - svg/prev-fill.svg | 1 - svg/prev-step-fill.svg | 1 - svg/prev-step.svg | 1 - svg/prev.svg | 1 - svg/print-fill.svg | 1 - svg/print.svg | 1 - svg/printing-fill.svg | 1 - svg/printing.svg | 1 - svg/prison-fill.svg | 1 - svg/prison.svg | 1 - svg/process-fill.svg | 1 - svg/process.svg | 1 - svg/projector-fill.svg | 1 - svg/projector.svg | 1 - svg/purse-fill.svg | 1 - svg/purse.svg | 1 - svg/qq.svg | 1 - svg/qrcode-fill.svg | 1 - svg/qrcode.svg | 1 - svg/question-fill.svg | 1 - svg/question.svg | 1 - svg/radio-off-fill.svg | 1 - svg/radio-off.svg | 1 - svg/radio-on-fill.svg | 1 - svg/radio-on.svg | 1 - svg/random-fill.svg | 1 - svg/random.svg | 1 - svg/rank-fill.svg | 1 - svg/rank.svg | 1 - svg/read-fill.svg | 1 - svg/read.svg | 1 - svg/recall-fill.svg | 1 - svg/recall.svg | 1 - svg/reception-fill.svg | 1 - svg/reception.svg | 1 - svg/record-fill.svg | 1 - svg/record-sound-fill.svg | 1 - svg/record-sound.svg | 1 - svg/record-video-fill.svg | 1 - svg/record-video.svg | 1 - svg/record.svg | 1 - svg/redo-fill.svg | 1 - svg/redo.svg | 1 - svg/refresh-fill.svg | 1 - svg/refresh.svg | 1 - svg/relation-analysis-fill.svg | 1 - svg/relation-analysis.svg | 1 - svg/relation-fill.svg | 1 - svg/relation.svg | 1 - svg/relieve-fill.svg | 1 - svg/relieve.svg | 1 - svg/reply-fill.svg | 1 - svg/reply.svg | 1 - svg/report-fill.svg | 1 - svg/report.svg | 1 - svg/reset-fill.svg | 1 - svg/reset.svg | 1 - svg/rise-fill.svg | 1 - svg/rise.svg | 1 - svg/rmb-fill.svg | 1 - svg/rmb.svg | 1 - svg/roadblock-fill.svg | 1 - svg/roadblock.svg | 1 - svg/rocket-fill.svg | 1 - svg/rocket.svg | 1 - svg/router-fill.svg | 1 - svg/router.svg | 1 - svg/row-fill.svg | 1 - svg/row.svg | 1 - svg/rss-fill.svg | 1 - svg/rss.svg | 1 - svg/rubber-fill.svg | 1 - svg/rubber.svg | 1 - svg/sad-fill.svg | 1 - svg/sad.svg | 1 - svg/safe-fill.svg | 1 - svg/safe.svg | 1 - svg/satellite-fill.svg | 1 - svg/satellite-signal-fill.svg | 1 - svg/satellite-signal.svg | 1 - svg/satellite.svg | 1 - svg/save-fill.svg | 1 - svg/save.svg | 1 - svg/search-fill.svg | 1 - svg/search.svg | 1 - svg/security-shield-fill.svg | 1 - svg/security-shield.svg | 1 - svg/send-sms-fill.svg | 1 - svg/send-sms.svg | 1 - svg/server-fill.svg | 1 - svg/server-host-fill.svg | 1 - svg/server-host.svg | 1 - svg/server-update-fill.svg | 1 - svg/server-update.svg | 1 - svg/server.svg | 1 - svg/service-fill.svg | 1 - svg/service.svg | 1 - svg/servicer-fill.svg | 1 - svg/servicer.svg | 1 - svg/setting-fill.svg | 1 - svg/setting.svg | 1 - svg/sf.svg | 1 - svg/share-fill.svg | 1 - svg/share.svg | 1 - svg/sheet-fill.svg | 1 - svg/sheet.svg | 1 - svg/shield-fill.svg | 1 - svg/shield.svg | 1 - svg/ship-fill.svg | 1 - svg/ship.svg | 1 - svg/shoe-print-fill.svg | 1 - svg/shoe-print.svg | 1 - svg/shop-fill.svg | 1 - svg/shop.svg | 1 - svg/sign-review-fill.svg | 1 - svg/sign-review.svg | 1 - svg/signal-fill.svg | 1 - svg/signal.svg | 1 - svg/sim-fill.svg | 1 - svg/sim.svg | 1 - svg/sketchpad-fill.svg | 1 - svg/sketchpad.svg | 1 - svg/slider-fill.svg | 1 - svg/slider.svg | 1 - svg/smile-fill.svg | 1 - svg/smile.svg | 1 - svg/sms-fill.svg | 1 - svg/sms.svg | 1 - svg/sort-asc-fill.svg | 1 - svg/sort-asc.svg | 1 - svg/sort-desc-fill.svg | 1 - svg/sort-desc.svg | 1 - svg/sort-down-fill.svg | 1 - svg/sort-down.svg | 1 - svg/sort-fill.svg | 1 - svg/sort-up-fill.svg | 1 - svg/sort-up.svg | 1 - svg/sort.svg | 1 - svg/sound-max-fill.svg | 1 - svg/sound-max.svg | 1 - svg/sound-min-fill.svg | 1 - svg/sound-min.svg | 1 - svg/sound2-fill.svg | 1 - svg/sound2.svg | 1 - svg/speaker-fill.svg | 1 - svg/speaker.svg | 1 - svg/spin-fill.svg | 1 - svg/spin.svg | 1 - svg/spin2-fill.svg | 1 - svg/spin2.svg | 1 - svg/split-screen-compare-fill.svg | 1 - svg/split-screen-compare.svg | 1 - svg/spread-fill.svg | 1 - svg/spread.svg | 1 - svg/stamp-fill.svg | 1 - svg/stamp.svg | 1 - svg/star-fill.svg | 1 - svg/star-half.svg | 1 - svg/star.svg | 1 - svg/start-fill.svg | 1 - svg/start.svg | 1 - svg/statistics-fill.svg | 1 - svg/statistics.svg | 1 - svg/stomach-fill.svg | 1 - svg/stomach.svg | 1 - svg/stop-circle-fill.svg | 1 - svg/stop-circle.svg | 1 - svg/stop-fill.svg | 1 - svg/stop.svg | 1 - svg/story-building-fill.svg | 1 - svg/story-building.svg | 1 - svg/stranger-fill.svg | 1 - svg/stranger.svg | 1 - svg/subway-fill.svg | 1 - svg/subway.svg | 1 - svg/success-fill.svg | 1 - svg/success.svg | 1 - svg/suitcase-fill.svg | 1 - svg/suitcase.svg | 1 - svg/supervision-fill.svg | 1 - svg/supervision.svg | 1 - svg/survival-fill.svg | 1 - svg/survival.svg | 1 - svg/suspect-fill.svg | 1 - svg/suspect.svg | 1 - svg/synthetic-combat-fill.svg | 1 - svg/synthetic-combat.svg | 1 - svg/t-pc-fill.svg | 1 - svg/t-pc.svg | 1 - svg/tableware-fill.svg | 1 - svg/tableware.svg | 1 - svg/tag-fill.svg | 1 - svg/tag.svg | 1 - svg/tags-fill.svg | 1 - svg/tags.svg | 1 - svg/tandem-fill.svg | 1 - svg/tandem.svg | 1 - svg/target-fill.svg | 1 - svg/target.svg | 1 - svg/taxi-fill.svg | 1 - svg/taxi.svg | 1 - svg/team-fill.svg | 1 - svg/team.svg | 1 - svg/teamwork-fill.svg | 1 - svg/teamwork.svg | 1 - svg/theft-fill.svg | 1 - svg/theft.svg | 1 - svg/thief-fill.svg | 1 - svg/thief.svg | 1 - svg/ticket-fill.svg | 1 - svg/ticket.svg | 1 - svg/time-fill.svg | 1 - svg/time.svg | 1 - svg/tongue-fill.svg | 1 - svg/tongue.svg | 1 - svg/tooth-fill.svg | 1 - svg/tooth.svg | 1 - svg/traffic-light-fill.svg | 1 - svg/traffic-light.svg | 1 - svg/train-fill.svg | 1 - svg/train.svg | 1 - svg/tram-fill.svg | 1 - svg/tram.svg | 1 - svg/transport-fill.svg | 1 - svg/transport.svg | 1 - svg/treatment-fill.svg | 1 - svg/treatment.svg | 1 - svg/trophy-fill.svg | 1 - svg/trophy.svg | 1 - svg/truck-fill.svg | 1 - svg/truck.svg | 1 - svg/tv-box-fill.svg | 1 - svg/tv-box.svg | 1 - svg/tv-fill.svg | 1 - svg/tv.svg | 1 - svg/txt-fill.svg | 1 - svg/txt.svg | 1 - svg/undo-fill.svg | 1 - svg/undo.svg | 1 - svg/union-pay-fill.svg | 1 - svg/union-pay.svg | 1 - svg/university-fill.svg | 1 - svg/university.svg | 1 - svg/unlock-fill.svg | 1 - svg/unlock.svg | 1 - svg/upload-fill.svg | 1 - svg/upload.svg | 1 - svg/usb-fill.svg | 1 - svg/usb.svg | 1 - svg/user-fill.svg | 1 - svg/user-man-fill.svg | 1 - svg/user-man.svg | 1 - svg/user-women-fill.svg | 1 - svg/user-women.svg | 1 - svg/user.svg | 1 - svg/vcr-fill.svg | 1 - svg/vcr.svg | 1 - svg/video-camera-fill.svg | 1 - svg/video-camera.svg | 1 - svg/view-fill.svg | 1 - svg/view.svg | 1 - svg/visible-fill.svg | 1 - svg/visible.svg | 1 - svg/voice-box-fill.svg | 1 - svg/voice-box.svg | 1 - svg/voiceprint-fill.svg | 1 - svg/voiceprint.svg | 1 - svg/warning-fill.svg | 1 - svg/warning.svg | 1 - svg/warning2-fill.svg | 1 - svg/warning2.svg | 1 - svg/warplane-fill.svg | 1 - svg/warplane.svg | 1 - svg/wechat.svg | 1 - svg/where-fill.svg | 1 - svg/where.svg | 1 - svg/whole-fill.svg | 1 - svg/whole.svg | 1 - svg/wifi-fill.svg | 1 - svg/wifi.svg | 1 - svg/window-close-fill.svg | 1 - svg/window-close.svg | 1 - svg/window-down-fill.svg | 1 - svg/window-down.svg | 1 - svg/window-fill.svg | 1 - svg/window-max-fill.svg | 1 - svg/window-max.svg | 1 - svg/window-min-fill.svg | 1 - svg/window-min.svg | 1 - svg/window-normal-fill.svg | 1 - svg/window-normal.svg | 1 - svg/window-up-fill.svg | 1 - svg/window-up.svg | 1 - svg/window.svg | 1 - svg/women-fill.svg | 1 - svg/women.svg | 1 - svg/word-fill.svg | 1 - svg/word.svg | 1 - svg/work-card-fill.svg | 1 - svg/work-card.svg | 1 - svg/work-permit-fill.svg | 1 - svg/work-permit.svg | 1 - svg/wrench-fill.svg | 1 - svg/wrench.svg | 1 - svg/yidong-fill.svg | 1 - svg/yidong.svg | 1 - svg/zip-fill.svg | 1 - svg/zip.svg | 1 - .../my-capture.scss => types/index.d.ts | 0 types/process-designer.d.ts | 11 + ui/lib/access/Access.js | 216 - ui/lib/access/config.js | 74 - ui/lib/access/guarder.js | 196 - ui/lib/access/index.js | 6 - ui/lib/access/install.js | 12 - ui/lib/access/interceptors.js | 86 - ui/lib/access/middleware/can.js | 42 - ui/lib/access/middleware/login.js | 13 - ui/lib/access/middleware/role.js | 13 - ui/lib/access/middleware/router.js | 41 - ui/lib/analysis.js | 41 - ui/lib/app.js | 151 - ui/lib/assets/bg/01.jpg | Bin 288884 -> 0 bytes ui/lib/assets/bg/02.png | Bin 206566 -> 0 bytes ui/lib/assets/bg/03.jpg | Bin 164270 -> 0 bytes ui/lib/assets/bg/04.jpg | Bin 83221 -> 0 bytes ui/lib/assets/bg/05.jpg | Bin 144232 -> 0 bytes ui/lib/assets/color.json | 682 - ui/lib/assets/favicon.ico | Bin 1150 -> 0 bytes ui/lib/assets/icons/demo.css | 539 - ui/lib/assets/icons/demo_index.html | 23975 --- ui/lib/assets/icons/iconfont.css | 4157 - ui/lib/assets/icons/iconfont.eot | Bin 364288 -> 0 bytes ui/lib/assets/icons/iconfont.json | 7254 - ui/lib/assets/icons/iconfont.ttf | Bin 364124 -> 0 bytes ui/lib/assets/icons/iconfont.woff | Bin 192144 -> 0 bytes ui/lib/assets/icons/iconfont.woff2 | Bin 139904 -> 0 bytes ui/lib/assets/img/PRESENTED_IMAGE_DEFAULT.png | Bin 5934 -> 0 bytes ui/lib/assets/img/PRESENTED_IMAGE_SIMPLE.png | Bin 2753 -> 0 bytes ui/lib/assets/img/placeholder.png | Bin 2727 -> 0 bytes ui/lib/assets/logo.png | Bin 1141 -> 0 bytes ui/lib/assets/man/0.png | Bin 95085 -> 0 bytes ui/lib/assets/man/1.png | Bin 95039 -> 0 bytes ui/lib/assets/man/10.png | Bin 95561 -> 0 bytes ui/lib/assets/man/11.png | Bin 93469 -> 0 bytes ui/lib/assets/man/12.png | Bin 92703 -> 0 bytes ui/lib/assets/man/13.png | Bin 95279 -> 0 bytes ui/lib/assets/man/14.png | Bin 95347 -> 0 bytes ui/lib/assets/man/15.png | Bin 92428 -> 0 bytes ui/lib/assets/man/16.png | Bin 84089 -> 0 bytes ui/lib/assets/man/17.png | Bin 72521 -> 0 bytes ui/lib/assets/man/18.png | Bin 63295 -> 0 bytes ui/lib/assets/man/19.png | Bin 79088 -> 0 bytes ui/lib/assets/man/2.png | Bin 97387 -> 0 bytes ui/lib/assets/man/20.png | Bin 91505 -> 0 bytes ui/lib/assets/man/21.png | Bin 95664 -> 0 bytes ui/lib/assets/man/22.png | Bin 96109 -> 0 bytes ui/lib/assets/man/23.png | Bin 94629 -> 0 bytes ui/lib/assets/man/24.png | Bin 94362 -> 0 bytes ui/lib/assets/man/3.png | Bin 95940 -> 0 bytes ui/lib/assets/man/4.png | Bin 91385 -> 0 bytes ui/lib/assets/man/5.png | Bin 79795 -> 0 bytes ui/lib/assets/man/6.png | Bin 64035 -> 0 bytes ui/lib/assets/man/7.png | Bin 73680 -> 0 bytes ui/lib/assets/man/8.png | Bin 84135 -> 0 bytes ui/lib/assets/man/9.png | Bin 92015 -> 0 bytes ui/lib/assets/myweb.png | Bin 2830 -> 0 bytes ui/lib/assets/police.png | Bin 25060 -> 0 bytes ui/lib/assets/xdh.png | Bin 21819 -> 0 bytes ui/lib/components/index.js | 20 - ui/lib/components/my-affix/index.js | 3 - ui/lib/components/my-affix/src/Affix.vue | 278 - ui/lib/components/my-anchor/index.js | 3 - ui/lib/components/my-anchor/src/Anchor.vue | 146 - ui/lib/components/my-anchor/src/Link.vue | 105 - ui/lib/components/my-at-input/index.js | 3 - ui/lib/components/my-at-input/src/AtInput.vue | 365 - ui/lib/components/my-autocomplete/index.js | 4 - ui/lib/components/my-avatar/index.js | 3 - ui/lib/components/my-avatar/src/Avatar.vue | 176 - ui/lib/components/my-avatar/src/Avatars.vue | 167 - ui/lib/components/my-avatars/index.js | 3 - ui/lib/components/my-back-top/index.js | 4 - ui/lib/components/my-back-top/src/BackTop.vue | 112 - ui/lib/components/my-breadcrumb/index.js | 4 - ui/lib/components/my-capture/index.js | 4 - ui/lib/components/my-capture/src/Capture.vue | 131 - ui/lib/components/my-card-list/index.js | 4 - .../components/my-card-list/src/CardList.vue | 237 - ui/lib/components/my-cascader/index.js | 4 - ui/lib/components/my-checkbox/index.js | 4 - ui/lib/components/my-child-app/index.js | 3 - ui/lib/components/my-child-app/src/App.vue | 22 - ui/lib/components/my-clipboard/index.js | 3 - .../components/my-clipboard/src/Clipboard.vue | 201 - ui/lib/components/my-color-picker/index.js | 4 - ui/lib/components/my-config/index.js | 3 - ui/lib/components/my-config/src/Config.vue | 14 - ui/lib/components/my-container/index.js | 4 - .../components/my-container/src/Container.vue | 37 - ui/lib/components/my-contextmenu/index.js | 4 - .../components/my-contextmenu/src/Index.vue | 165 - ui/lib/components/my-contextmenu/src/Menu.vue | 73 - .../my-contextmenu/src/MenuItem.vue | 88 - ui/lib/components/my-corner-mark/index.js | 4 - .../my-corner-mark/src/CornerMark.vue | 70 - ui/lib/components/my-cron/index.js | 4 - ui/lib/components/my-cron/src/Cron.vue | 545 - ui/lib/components/my-cron/src/cn.js | 54 - ui/lib/components/my-crud/index.js | 7 - ui/lib/components/my-crud/src/Crud.vue | 451 - ui/lib/components/my-crud/src/Detail.vue | 28 - ui/lib/components/my-crud/src/Handle.vue | 86 - ui/lib/components/my-crud/src/Handlebar.vue | 94 - ui/lib/components/my-crud/src/adapter.js | 95 - ui/lib/components/my-date-picker/index.js | 3 - ui/lib/components/my-date/index.js | 3 - ui/lib/components/my-date/src/Date.vue | 139 - ui/lib/components/my-description/index.js | 3 - .../my-description/src/Description.vue | 110 - ui/lib/components/my-detail-item/index.js | 4 - ui/lib/components/my-detail/index.js | 3 - ui/lib/components/my-detail/src/Col.js | 88 - ui/lib/components/my-detail/src/Detail.vue | 223 - .../components/my-detail/src/DetailItem.vue | 96 - ui/lib/components/my-dialog/index.js | 30 - ui/lib/components/my-dialog/src/Dialog.vue | 596 - ui/lib/components/my-dialog/src/Panel.vue | 139 - ui/lib/components/my-dialog/src/SrcFrame.vue | 21 - ui/lib/components/my-drag/index.js | 4 - ui/lib/components/my-drag/src/Drag.vue | 510 - ui/lib/components/my-drop/index.js | 4 - ui/lib/components/my-drop/src/Drop.vue | 214 - ui/lib/components/my-edit-tags/index.js | 3 - .../components/my-edit-tags/src/EditTags.vue | 212 - ui/lib/components/my-editor/index.js | 4 - ui/lib/components/my-empty/index.js | 3 - ui/lib/components/my-empty/src/Empty.vue | 56 - ui/lib/components/my-filter/index.js | 3 - ui/lib/components/my-filter/src/Filter.vue | 98 - ui/lib/components/my-fixed/index.js | 3 - ui/lib/components/my-fixed/src/Fixed.vue | 96 - ui/lib/components/my-flex-item/index.js | 4 - ui/lib/components/my-flex/index.js | 3 - ui/lib/components/my-flex/src/Flex.vue | 182 - ui/lib/components/my-flex/src/FlexItem.vue | 141 - ui/lib/components/my-flip/index.js | 4 - ui/lib/components/my-flip/src/Flip.vue | 115 - ui/lib/components/my-float-item/index.js | 4 - ui/lib/components/my-float/index.js | 6 - ui/lib/components/my-float/src/Float.vue | 53 - ui/lib/components/my-float/src/FloatItem.vue | 59 - ui/lib/components/my-form-custom/index.js | 4 - ui/lib/components/my-form/index.js | 4 - ui/lib/components/my-form/src/Base.js | 438 - ui/lib/components/my-form/src/Custom.js | 15 - ui/lib/components/my-form/src/Form.vue | 338 - .../my-form/src/common/BasePicker.vue | 38 - .../components/my-form/src/common/Editor.vue | 233 - .../my-form/src/common/IconItem.vue | 21 - .../my-form/src/common/PickerPanel.vue | 242 - .../components/my-form/src/common/Popover.js | 43 - .../my-form/src/common/TagInput.vue | 261 - .../my-form/src/common/TagSelect.vue | 243 - .../my-form/src/common/TreeSelect.vue | 376 - .../my-form/src/common/UploadAdapter.js | 16 - .../my-form/src/fields/Autocomplete.js | 53 - .../components/my-form/src/fields/Cascader.js | 110 - .../components/my-form/src/fields/Checkbox.js | 180 - .../my-form/src/fields/ColorPicker.js | 30 - ui/lib/components/my-form/src/fields/Cron.js | 79 - .../my-form/src/fields/DatePicker.js | 77 - .../components/my-form/src/fields/Editor.js | 73 - ui/lib/components/my-form/src/fields/Input.js | 54 - .../my-form/src/fields/InputNumber.js | 38 - ui/lib/components/my-form/src/fields/Radio.js | 126 - ui/lib/components/my-form/src/fields/Range.js | 116 - ui/lib/components/my-form/src/fields/Rate.js | 35 - .../components/my-form/src/fields/Select.js | 99 - .../components/my-form/src/fields/Slider.js | 35 - .../components/my-form/src/fields/Switch.js | 38 - .../components/my-form/src/fields/TagInput.js | 72 - .../my-form/src/fields/TagSelect.js | 73 - .../my-form/src/fields/TreeSelect.js | 60 - ui/lib/components/my-header/index.js | 3 - ui/lib/components/my-header/src/Header.vue | 95 - ui/lib/components/my-highlight/index.js | 4 - .../components/my-highlight/src/Highlight.js | 73 - ui/lib/components/my-icon/index.js | 4 - ui/lib/components/my-icon/src/Icon.vue | 100 - ui/lib/components/my-img-wall/index.js | 4 - .../components/my-img-wall/src/Horizontal.vue | 58 - ui/lib/components/my-img-wall/src/ImgWall.vue | 138 - .../components/my-img-wall/src/Vertical.vue | 104 - ui/lib/components/my-input-number/index.js | 4 - ui/lib/components/my-input/index.js | 4 - ui/lib/components/my-key-val-list/index.js | 4 - .../my-key-val-list/src/KeyValList.vue | 123 - ui/lib/components/my-layout/index.js | 4 - ui/lib/components/my-layout/src/Layout.vue | 196 - ui/lib/components/my-lazy/index.js | 3 - ui/lib/components/my-lazy/src/Lazy.vue | 175 - ui/lib/components/my-list/index.js | 4 - ui/lib/components/my-list/src/List.vue | 402 - ui/lib/components/my-list/src/Pager.js | 35 - ui/lib/components/my-list/src/Scroll.js | 31 - ui/lib/components/my-list/src/Style.js | 190 - ui/lib/components/my-list/src/Virtual.js | 77 - ui/lib/components/my-location-picker/index.js | 3 - .../my-location-picker/src/Index.vue | 155 - .../my-location-picker/src/MapContent.vue | 120 - .../components/my-location-picker/src/Tip.vue | 31 - .../my-location-picker/src/Tool.vue | 35 - ui/lib/components/my-login/index.js | 4 - ui/lib/components/my-login/src/Login.vue | 204 - ui/lib/components/my-marquee/index.js | 4 - ui/lib/components/my-marquee/src/Marquee.vue | 261 - ui/lib/components/my-master-app/index.js | 4 - .../components/my-master-app/src/Master.vue | 102 - ui/lib/components/my-menu/index.js | 4 - ui/lib/components/my-menu/src/Menu.vue | 264 - ui/lib/components/my-menu/src/renderers.js | 76 - ui/lib/components/my-micro-app/index.js | 4 - .../components/my-micro-app/src/MicroApp.vue | 54 - ui/lib/components/my-navbar/index.js | 15 - ui/lib/components/my-navbar/src/Action.vue | 5 - .../my-navbar/src/FullScreenAction.vue | 60 - .../components/my-navbar/src/IconAction.vue | 101 - ui/lib/components/my-navbar/src/Navbar.vue | 226 - .../components/my-navbar/src/UserAction.vue | 85 - ui/lib/components/my-navbar/src/dropdown.js | 45 - ui/lib/components/my-number/index.js | 3 - ui/lib/components/my-number/src/CountUp.js | 85 - ui/lib/components/my-number/src/Number.vue | 195 - ui/lib/components/my-panel/index.js | 4 - ui/lib/components/my-panel/src/Action.vue | 34 - ui/lib/components/my-panel/src/Panel.vue | 279 - ui/lib/components/my-paragraph/index.js | 4 - ui/lib/components/my-particle/index.js | 4 - .../components/my-particle/src/Particle.vue | 377 - ui/lib/components/my-popper/index.js | 4 - ui/lib/components/my-popper/src/Popper.vue | 212 - ui/lib/components/my-print/index.js | 3 - ui/lib/components/my-print/src/Print.vue | 344 - ui/lib/components/my-pro/index.js | 6 - ui/lib/components/my-pro/src/Breadcrumb.vue | 94 - ui/lib/components/my-pro/src/Pro.vue | 610 - ui/lib/components/my-pro/src/Tabs.vue | 74 - ui/lib/components/my-promise/index.js | 3 - ui/lib/components/my-promise/src/Promise.vue | 128 - ui/lib/components/my-radial-menu/index.js | 3 - .../my-radial-menu/src/MenuItem.vue | 121 - .../my-radial-menu/src/RadialMenu.vue | 308 - ui/lib/components/my-radial-menu/src/utils.js | 54 - ui/lib/components/my-radio/index.js | 4 - ui/lib/components/my-range/index.js | 4 - ui/lib/components/my-rate/index.js | 4 - ui/lib/components/my-resize/index.js | 3 - ui/lib/components/my-resize/src/Resize.vue | 226 - ui/lib/components/my-result/index.js | 3 - ui/lib/components/my-result/src/Result.vue | 132 - ui/lib/components/my-result/src/noFound.js | 288 - .../components/my-result/src/serverError.js | 329 - .../components/my-result/src/unauthorized.js | 278 - ui/lib/components/my-revolve/index.js | 3 - ui/lib/components/my-revolve/men.js | 29 - ui/lib/components/my-revolve/src/Revolve.vue | 286 - ui/lib/components/my-search-box/index.js | 4 - .../my-search-box/src/SearchBox.vue | 111 - ui/lib/components/my-select-field/index.js | 3 - .../my-select-field/src/SelectField.vue | 220 - ui/lib/components/my-select/index.js | 3 - ui/lib/components/my-sidebar/index.js | 3 - ui/lib/components/my-sidebar/src/Sidebar.vue | 160 - ui/lib/components/my-skeleton/index.js | 4 - .../components/my-skeleton/src/Skeleton.vue | 127 - ui/lib/components/my-slide-layout/index.js | 3 - .../my-slide-layout/src/Slidelayout.vue | 164 - ui/lib/components/my-slider/index.js | 3 - ui/lib/components/my-sortable/index.js | 4 - ui/lib/components/my-sortable/src/Sortable.js | 108 - .../components/my-sortable/src/Sortable.vue | 76 - ui/lib/components/my-spin/index.js | 3 - ui/lib/components/my-spin/src/Spin.vue | 117 - ui/lib/components/my-stat-card/index.js | 4 - ui/lib/components/my-stat-card/src/Action.vue | 49 - .../components/my-stat-card/src/StatCard.vue | 118 - ui/lib/components/my-svg-line/index.js | 4 - ui/lib/components/my-svg-line/src/SvgLine.vue | 158 - ui/lib/components/my-switch/index.js | 4 - ui/lib/components/my-table/index.js | 4 - .../components/my-table/src/ColumnFilter.vue | 91 - ui/lib/components/my-table/src/Columns.vue | 46 - ui/lib/components/my-table/src/Pager.js | 64 - ui/lib/components/my-table/src/Scroll.js | 79 - ui/lib/components/my-table/src/Sortable.js | 186 - ui/lib/components/my-table/src/Table.vue | 426 - ui/lib/components/my-table/src/Toolbar.vue | 27 - ui/lib/components/my-table/src/Virtual.js | 179 - ui/lib/components/my-tabs/index.js | 4 - ui/lib/components/my-tabs/src/Tabs.vue | 164 - ui/lib/components/my-tag-canvas/index.js | 4 - .../my-tag-canvas/src/TagCanvas.vue | 143 - .../components/my-tag-canvas/src/tagcanvas.js | 2237 - ui/lib/components/my-tag-input/index.js | 4 - ui/lib/components/my-tag-select/index.js | 4 - ui/lib/components/my-text/index.js | 4 - ui/lib/components/my-three-menu/index.js | 4 - .../my-three-menu/src/ThreeMenu.vue | 633 - ui/lib/components/my-timer/index.js | 4 - ui/lib/components/my-timer/src/Timer.vue | 196 - ui/lib/components/my-title/index.js | 4 - ui/lib/components/my-tree-select/index.js | 4 - ui/lib/components/my-typography/index.js | 5 - ui/lib/components/my-typography/src/Base.js | 374 - .../components/my-typography/src/Editable.vue | 52 - .../my-typography/src/Paragraph.vue | 79 - ui/lib/components/my-typography/src/Text.vue | 80 - ui/lib/components/my-typography/src/Title.vue | 99 - .../my-typography/src/Typography.vue | 79 - .../components/my-typography/src/ellipsis.js | 272 - ui/lib/components/my-water-fall-slot/index.js | 4 - ui/lib/components/my-water-fall/index.js | 4 - .../my-water-fall/src/Horizontal.vue | 79 - .../components/my-water-fall/src/Vertical.vue | 167 - .../my-water-fall/src/WaterFall.vue | 84 - .../my-water-fall/src/WaterFallSlot.vue | 75 - ui/lib/components/my-watermark/index.js | 4 - .../components/my-watermark/src/Watermark.vue | 143 - ui/lib/components/my-wave/index.js | 4 - ui/lib/components/my-wave/src/Wave.vue | 119 - ui/lib/components/my-wrapper/index.js | 5 - ui/lib/components/my-wrapper/src/Wrapper.vue | 184 - ui/lib/config.js | 167 - ui/lib/directives/clipboard.js | 77 - ui/lib/directives/contextmenu.js | 19 - ui/lib/directives/draggable.js | 547 - ui/lib/directives/droppable.js | 173 - ui/lib/directives/highlight.js | 62 - ui/lib/directives/resizable.js | 339 - ui/lib/directives/selecttext.js | 109 - ui/lib/directives/tree-connect.js | 12 - ui/lib/directives/waves.js | 39 - ui/lib/enhance.js | 55 - ui/lib/icons/accurate-search-fill.js | 20 - ui/lib/icons/accurate-search.js | 20 - ui/lib/icons/address-book-fill.js | 20 - ui/lib/icons/address-book.js | 20 - ui/lib/icons/adjust-fill.js | 20 - ui/lib/icons/adjust.js | 20 - ui/lib/icons/aims-fill.js | 20 - ui/lib/icons/aims.js | 20 - ui/lib/icons/airplane-fill.js | 20 - ui/lib/icons/airplane.js | 20 - ui/lib/icons/alarm-fill.js | 20 - ui/lib/icons/alarm.js | 20 - ui/lib/icons/alipay.js | 20 - ui/lib/icons/all-fill.js | 20 - ui/lib/icons/all.js | 20 - ui/lib/icons/ambulance-fill.js | 20 - ui/lib/icons/ambulance.js | 20 - ui/lib/icons/anchor-fill.js | 20 - ui/lib/icons/anchor.js | 20 - ui/lib/icons/annex-fill.js | 20 - ui/lib/icons/annex.js | 20 - ui/lib/icons/anonymous-fill.js | 20 - ui/lib/icons/anonymous.js | 20 - ui/lib/icons/approval-fill.js | 20 - ui/lib/icons/approval-filll.js | 20 - ui/lib/icons/approval.js | 20 - ui/lib/icons/archive-fill.js | 20 - ui/lib/icons/archive.js | 20 - ui/lib/icons/area-map-fill.js | 20 - ui/lib/icons/area-map.js | 20 - ui/lib/icons/arrow-down-fill.js | 20 - ui/lib/icons/arrow-down.js | 20 - ui/lib/icons/arrow-left-fill.js | 20 - ui/lib/icons/arrow-left.js | 20 - ui/lib/icons/arrow-right-fill.js | 20 - ui/lib/icons/arrow-right.js | 20 - ui/lib/icons/arrow-up-fill.js | 20 - ui/lib/icons/arrow-up.js | 20 - ui/lib/icons/associate-fill.js | 20 - ui/lib/icons/associate.js | 20 - ui/lib/icons/astronomical-fill.js | 20 - ui/lib/icons/astronomical.js | 20 - ui/lib/icons/audio-fill.js | 20 - ui/lib/icons/audio.js | 20 - ui/lib/icons/avi-fill.js | 20 - ui/lib/icons/avi.js | 20 - ui/lib/icons/baby-child-fill.js | 20 - ui/lib/icons/baby-child.js | 20 - ui/lib/icons/baby.js | 20 - ui/lib/icons/backstage-data-fill.js | 20 - ui/lib/icons/backstage-data.js | 20 - ui/lib/icons/backward-fill.js | 20 - ui/lib/icons/backward.js | 20 - ui/lib/icons/bad-fill.js | 20 - ui/lib/icons/bad.js | 20 - ui/lib/icons/badge-fill.js | 20 - ui/lib/icons/badge.js | 20 - ui/lib/icons/badreview.js | 20 - ui/lib/icons/baidu.js | 20 - ui/lib/icons/balance-fill.js | 20 - ui/lib/icons/balance.js | 20 - ui/lib/icons/ball-camera-fill.js | 20 - ui/lib/icons/ball-camera.js | 20 - ui/lib/icons/bar-code-fill.js | 20 - ui/lib/icons/bar-code.js | 20 - ui/lib/icons/base-signal-fill.js | 20 - ui/lib/icons/base-signal.js | 20 - ui/lib/icons/base-station-fill.js | 20 - ui/lib/icons/base-station.js | 20 - ui/lib/icons/bayonet-camera-fill.js | 20 - ui/lib/icons/bayonet-camera.js | 20 - ui/lib/icons/bed-fill.js | 20 - ui/lib/icons/bed.js | 20 - ui/lib/icons/bedbug.js | 20 - ui/lib/icons/beehive-fill.js | 20 - ui/lib/icons/beehive.js | 20 - ui/lib/icons/bell-fill.js | 20 - ui/lib/icons/bell-off-fill.js | 20 - ui/lib/icons/bell-off.js | 20 - ui/lib/icons/bell.js | 20 - ui/lib/icons/bigdata-fill.js | 20 - ui/lib/icons/bigdata.js | 20 - ui/lib/icons/bike-fill.js | 20 - ui/lib/icons/bike.js | 20 - ui/lib/icons/bill-fill.js | 20 - ui/lib/icons/bill.js | 20 - ui/lib/icons/blood-fill.js | 20 - ui/lib/icons/blood.js | 20 - ui/lib/icons/bluetooth-fill.js | 20 - ui/lib/icons/bluetooth.js | 20 - ui/lib/icons/board-fill.js | 20 - ui/lib/icons/board.js | 20 - ui/lib/icons/bold-arrow-down-fill.js | 20 - ui/lib/icons/bold-arrow-down.js | 20 - ui/lib/icons/bold-arrow-left-fill.js | 20 - ui/lib/icons/bold-arrow-left.js | 20 - ui/lib/icons/bold-arrow-right-fill.js | 20 - ui/lib/icons/bold-arrow-right.js | 20 - ui/lib/icons/bold-arrow-up-fill.js | 20 - ui/lib/icons/bold-arrow-up.js | 20 - ui/lib/icons/book-fill.js | 20 - ui/lib/icons/book.js | 20 - ui/lib/icons/bookmark-fill.js | 20 - ui/lib/icons/bookmark.js | 20 - ui/lib/icons/brain-fill.js | 20 - ui/lib/icons/brain.js | 20 - ui/lib/icons/branch-fill.js | 20 - ui/lib/icons/branch.js | 20 - ui/lib/icons/breathe-fill.js | 20 - ui/lib/icons/breathe.js | 20 - ui/lib/icons/briefcase-fill.js | 20 - ui/lib/icons/briefcase.js | 20 - ui/lib/icons/broadcast-fill.js | 20 - ui/lib/icons/broadcast.js | 20 - ui/lib/icons/build-fill.js | 20 - ui/lib/icons/build.js | 20 - ui/lib/icons/building-fill.js | 20 - ui/lib/icons/building.js | 20 - ui/lib/icons/bulb-fill.js | 20 - ui/lib/icons/bulb.js | 20 - ui/lib/icons/bullseye-fill.js | 20 - ui/lib/icons/bullseye.js | 20 - ui/lib/icons/bus-fill.js | 20 - ui/lib/icons/bus.js | 20 - ui/lib/icons/caidaquan.js | 20 - ui/lib/icons/cainiao.js | 20 - ui/lib/icons/calendar-fill.js | 20 - ui/lib/icons/calendar-v2.js | 20 - ui/lib/icons/calendar.js | 20 - ui/lib/icons/calendar2-fill.js | 20 - ui/lib/icons/calendar2.js | 20 - ui/lib/icons/call-fill.js | 20 - ui/lib/icons/call.js | 20 - ui/lib/icons/camera-fill.js | 20 - ui/lib/icons/camera-old-fill.js | 20 - ui/lib/icons/camera-old.js | 20 - ui/lib/icons/camera.js | 20 - ui/lib/icons/car-collision-fill.js | 20 - ui/lib/icons/car-collision.js | 20 - ui/lib/icons/car-fill.js | 20 - ui/lib/icons/car-v2.js | 20 - ui/lib/icons/car.js | 20 - ui/lib/icons/car2-fill.js | 20 - ui/lib/icons/car2.js | 20 - ui/lib/icons/card-fill.js | 20 - ui/lib/icons/card-solid.js | 20 - ui/lib/icons/card.js | 20 - ui/lib/icons/careful-fill.js | 20 - ui/lib/icons/careful.js | 20 - ui/lib/icons/case-file-fill.js | 20 - ui/lib/icons/case-file.js | 20 - ui/lib/icons/cbox-fill.js | 20 - ui/lib/icons/cbox.js | 20 - ui/lib/icons/cdr-fill.js | 20 - ui/lib/icons/cdr.js | 20 - ui/lib/icons/chart-bar.js | 20 - ui/lib/icons/chart-line-fill.js | 20 - ui/lib/icons/chart-line.js | 20 - ui/lib/icons/chart-trend-fill.js | 20 - ui/lib/icons/chart-trend.js | 20 - ui/lib/icons/chat-border.js | 20 - ui/lib/icons/chat-fill.js | 20 - ui/lib/icons/chat.js | 20 - ui/lib/icons/check-fill.js | 20 - ui/lib/icons/check.js | 20 - ui/lib/icons/checkbox-fill.js | 20 - ui/lib/icons/checkbox-minus-fill.js | 20 - ui/lib/icons/checkbox-minus.js | 20 - ui/lib/icons/checkbox-off.js | 20 - ui/lib/icons/checkbox-ok-fill.js | 20 - ui/lib/icons/checkbox-ok.js | 20 - ui/lib/icons/checkbox-on.js | 20 - ui/lib/icons/checkbox-plus-fill.js | 20 - ui/lib/icons/checkbox-plus.js | 20 - ui/lib/icons/checkbox.js | 20 - ui/lib/icons/chemistry-fill.js | 20 - ui/lib/icons/chemistry.js | 20 - ui/lib/icons/child.js | 20 - ui/lib/icons/children-fill.js | 20 - ui/lib/icons/children.js | 20 - ui/lib/icons/chinapost.js | 20 - ui/lib/icons/chip-fill.js | 20 - ui/lib/icons/chip.js | 20 - ui/lib/icons/choice-fill.js | 20 - ui/lib/icons/choice.js | 20 - ui/lib/icons/circler-layout-fill.js | 20 - ui/lib/icons/circler-layout.js | 20 - ui/lib/icons/circulation-fill.js | 20 - ui/lib/icons/circulation.js | 20 - ui/lib/icons/city-fill.js | 20 - ui/lib/icons/city.js | 20 - ui/lib/icons/clock-fill.js | 20 - ui/lib/icons/clock.js | 20 - ui/lib/icons/clothes-fill.js | 20 - ui/lib/icons/clothes.js | 20 - ui/lib/icons/cloud-disk-fill.js | 20 - ui/lib/icons/cloud-disk.js | 20 - ui/lib/icons/cloud-download-fill.js | 20 - ui/lib/icons/cloud-download.js | 20 - ui/lib/icons/cloud-fill.js | 20 - ui/lib/icons/cloud-link-fill.js | 20 - ui/lib/icons/cloud-link.js | 20 - ui/lib/icons/cloud-search-fill.js | 20 - ui/lib/icons/cloud-search.js | 20 - ui/lib/icons/cloud-server-fill.js | 20 - ui/lib/icons/cloud-server.js | 20 - ui/lib/icons/cloud-service-fill.js | 20 - ui/lib/icons/cloud-service.js | 20 - ui/lib/icons/cloud-upload-fill.js | 20 - ui/lib/icons/cloud-upload.js | 20 - ui/lib/icons/cloud.js | 20 - ui/lib/icons/coach-fill.js | 20 - ui/lib/icons/coach.js | 20 - ui/lib/icons/code-branch.js | 20 - ui/lib/icons/code-fill.js | 20 - ui/lib/icons/code.js | 20 - ui/lib/icons/coffee-fill.js | 20 - ui/lib/icons/coffee.js | 20 - ui/lib/icons/collaboration-fill.js | 20 - ui/lib/icons/collaboration-system-fill.js | 20 - ui/lib/icons/collaboration-system.js | 20 - ui/lib/icons/collaboration.js | 20 - ui/lib/icons/collapsed.js | 20 - ui/lib/icons/collision-fill.js | 20 - ui/lib/icons/collision.js | 20 - ui/lib/icons/columns-fill.js | 20 - ui/lib/icons/columns.js | 20 - ui/lib/icons/combine-fill.js | 20 - ui/lib/icons/combine.js | 20 - ui/lib/icons/comment-fill.js | 20 - ui/lib/icons/comment-v2.js | 20 - ui/lib/icons/comment.js | 20 - ui/lib/icons/comment2-fill.js | 20 - ui/lib/icons/comment2.js | 20 - ui/lib/icons/compact-car-fill.js | 20 - ui/lib/icons/compact-car.js | 20 - ui/lib/icons/compass-fill.js | 20 - ui/lib/icons/compass.js | 20 - ui/lib/icons/component-fill.js | 20 - ui/lib/icons/component.js | 20 - ui/lib/icons/components-fill.js | 20 - ui/lib/icons/components.js | 20 - ui/lib/icons/computer-fill.js | 20 - ui/lib/icons/computer.js | 20 - ui/lib/icons/cooperation-fill.js | 20 - ui/lib/icons/cooperation.js | 20 - ui/lib/icons/copier-fill.js | 20 - ui/lib/icons/copier.js | 20 - ui/lib/icons/copy-comparison-fill.js | 20 - ui/lib/icons/copy-comparison-full.js | 20 - ui/lib/icons/copy-comparison.js | 20 - ui/lib/icons/copy-fill.js | 20 - ui/lib/icons/copy-rect-fill.js | 20 - ui/lib/icons/copy-rect.js | 20 - ui/lib/icons/copy.js | 20 - ui/lib/icons/corpse-fill.js | 20 - ui/lib/icons/corpse.js | 20 - ui/lib/icons/cpu-fill.js | 20 - ui/lib/icons/cpu.js | 20 - ui/lib/icons/credentials-fill.js | 20 - ui/lib/icons/credentials.js | 20 - ui/lib/icons/crop-fill.js | 20 - ui/lib/icons/crop.js | 20 - ui/lib/icons/cuff-fill.js | 20 - ui/lib/icons/cuff.js | 20 - ui/lib/icons/cup-fill.js | 20 - ui/lib/icons/cup.js | 20 - ui/lib/icons/cycle-fill.js | 20 - ui/lib/icons/cycle.js | 20 - ui/lib/icons/dad.js | 20 - ui/lib/icons/danger-fill.js | 20 - ui/lib/icons/danger.js | 20 - ui/lib/icons/dark-fill.js | 20 - ui/lib/icons/dark.js | 20 - ui/lib/icons/dashboard-fill.js | 20 - ui/lib/icons/dashboard.js | 20 - ui/lib/icons/data-Inquire-fill.js | 20 - ui/lib/icons/data-abnormal-fill.js | 20 - ui/lib/icons/data-abnormal.js | 20 - ui/lib/icons/data-download-fill.js | 20 - ui/lib/icons/data-download.js | 20 - ui/lib/icons/data-lnquire-fill.js | 20 - ui/lib/icons/data-lnquire.js | 20 - ui/lib/icons/data-management-fill.js | 20 - ui/lib/icons/data-management.js | 20 - ui/lib/icons/data-update-fill.js | 20 - ui/lib/icons/data-update.js | 20 - ui/lib/icons/database-fill.js | 20 - ui/lib/icons/database.js | 20 - ui/lib/icons/debug-fill.js | 20 - ui/lib/icons/debug.js | 20 - ui/lib/icons/delete-fill.js | 20 - ui/lib/icons/delete.js | 20 - ui/lib/icons/desktop-fill.js | 20 - ui/lib/icons/desktop.js | 20 - ui/lib/icons/destroy-fill.js | 20 - ui/lib/icons/destroy.js | 20 - ui/lib/icons/dialog-close.js | 20 - ui/lib/icons/dialog-maximize.js | 20 - ui/lib/icons/dialog-minimize.js | 20 - ui/lib/icons/dialog-window.js | 20 - ui/lib/icons/dianxin-fill.js | 20 - ui/lib/icons/dianxin.js | 20 - ui/lib/icons/dingtalk.js | 20 - ui/lib/icons/direction-fill.js | 20 - ui/lib/icons/direction.js | 20 - ui/lib/icons/disability.js | 20 - ui/lib/icons/disappointed-fill.js | 20 - ui/lib/icons/disappointed.js | 20 - ui/lib/icons/dna-fill.js | 20 - ui/lib/icons/dna.js | 20 - ui/lib/icons/doctor-fill.js | 20 - ui/lib/icons/doctor-hat.js | 20 - ui/lib/icons/doctor.js | 20 - ui/lib/icons/double-arrow-down-fill.js | 20 - ui/lib/icons/double-arrow-down.js | 20 - ui/lib/icons/double-arrow-left-fill.js | 20 - ui/lib/icons/double-arrow-left.js | 20 - ui/lib/icons/double-arrow-right-fill.js | 20 - ui/lib/icons/double-arrow-right.js | 20 - ui/lib/icons/double-arrow-up-fill.js | 20 - ui/lib/icons/double-arrow-up.js | 20 - ui/lib/icons/double-circle-fill.js | 20 - ui/lib/icons/double-circle.js | 20 - ui/lib/icons/douyin.js | 20 - ui/lib/icons/download-fill.js | 20 - ui/lib/icons/download.js | 20 - ui/lib/icons/drip-fill.js | 20 - ui/lib/icons/drip.js | 20 - ui/lib/icons/dropper-fill.js | 20 - ui/lib/icons/dropper.js | 20 - ui/lib/icons/drug-fill.js | 20 - ui/lib/icons/drug.js | 20 - ui/lib/icons/e.js | 20 - ui/lib/icons/ear-fill.js | 20 - ui/lib/icons/ear.js | 20 - ui/lib/icons/earth-fill.js | 20 - ui/lib/icons/earth.js | 20 - ui/lib/icons/edit-fill.js | 20 - ui/lib/icons/edit.js | 20 - ui/lib/icons/electricity-fill.js | 20 - ui/lib/icons/electricity.js | 20 - ui/lib/icons/elment.js | 20 - ui/lib/icons/ems.js | 20 - ui/lib/icons/enlarge-fill.js | 20 - ui/lib/icons/enlarge.js | 20 - ui/lib/icons/enter.js | 20 - ui/lib/icons/envelope-fill.js | 20 - ui/lib/icons/envelope-open-fill.js | 20 - ui/lib/icons/envelope-open.js | 20 - ui/lib/icons/envelope.js | 20 - ui/lib/icons/esm-fill.js | 20 - ui/lib/icons/esm.js | 20 - ui/lib/icons/evaluation-fill.js | 20 - ui/lib/icons/evaluation.js | 20 - ui/lib/icons/excel-fill.js | 20 - ui/lib/icons/excel.js | 20 - ui/lib/icons/exchange-fill.js | 20 - ui/lib/icons/exchange.js | 20 - ui/lib/icons/exit-fill.js | 20 - ui/lib/icons/exit.js | 20 - ui/lib/icons/expand-fill.js | 20 - ui/lib/icons/expand.js | 20 - ui/lib/icons/explain-fill.js | 20 - ui/lib/icons/explain.js | 20 - ui/lib/icons/express-package-fill.js | 20 - ui/lib/icons/express-package.js | 20 - ui/lib/icons/eye-fill.js | 20 - ui/lib/icons/eye-open.js | 20 - ui/lib/icons/eye.js | 20 - ui/lib/icons/factory-fill.js | 20 - ui/lib/icons/factory.js | 20 - ui/lib/icons/failure-fill.js | 20 - ui/lib/icons/failure.js | 20 - ui/lib/icons/fall-fill.js | 20 - ui/lib/icons/fall.js | 20 - ui/lib/icons/family.js | 20 - ui/lib/icons/father-son.js | 20 - ui/lib/icons/fax-fill.js | 20 - ui/lib/icons/fax.js | 20 - ui/lib/icons/fcbox.js | 20 - ui/lib/icons/fence-fill.js | 20 - ui/lib/icons/fence.js | 20 - ui/lib/icons/fenxiang.js | 20 - ui/lib/icons/fetion.js | 20 - ui/lib/icons/file-fill.js | 20 - ui/lib/icons/file-text-fill.js | 20 - ui/lib/icons/file-text.js | 20 - ui/lib/icons/file.js | 20 - ui/lib/icons/files-fill.js | 20 - ui/lib/icons/files.js | 20 - ui/lib/icons/film-fill.js | 20 - ui/lib/icons/film.js | 20 - ui/lib/icons/filter-fill.js | 20 - ui/lib/icons/filter.js | 20 - ui/lib/icons/fingerprint-fill.js | 20 - ui/lib/icons/fingerprint.js | 20 - ui/lib/icons/firearms-fill.js | 20 - ui/lib/icons/firearms.js | 20 - ui/lib/icons/fix.js | 20 - ui/lib/icons/fixed-fill.js | 20 - ui/lib/icons/fixed-telephone-fill.js | 20 - ui/lib/icons/fixed-telephone.js | 20 - ui/lib/icons/fixed.js | 20 - ui/lib/icons/flag-fill.js | 20 - ui/lib/icons/flag.js | 20 - ui/lib/icons/flash.js | 20 - ui/lib/icons/flask-fill.js | 20 - ui/lib/icons/flask.js | 20 - ui/lib/icons/flat-fill.js | 20 - ui/lib/icons/flat.js | 20 - ui/lib/icons/floor-building-fill.js | 20 - ui/lib/icons/floor-building.js | 20 - ui/lib/icons/flower-fill.js | 20 - ui/lib/icons/flower.js | 20 - ui/lib/icons/fly-letter.js | 20 - ui/lib/icons/folder-fill.js | 20 - ui/lib/icons/folder-open-fill.js | 20 - ui/lib/icons/folder-open.js | 20 - ui/lib/icons/folder.js | 20 - ui/lib/icons/foot-fill.js | 20 - ui/lib/icons/foot.js | 20 - ui/lib/icons/footprint-fill.js | 20 - ui/lib/icons/footprint.js | 20 - ui/lib/icons/four-squares-fill.js | 20 - ui/lib/icons/four-squares.js | 20 - ui/lib/icons/freshhema.js | 20 - ui/lib/icons/full-fill.js | 20 - ui/lib/icons/full.js | 20 - ui/lib/icons/fullscreen-exit.js | 20 - ui/lib/icons/fullscreen.js | 20 - ui/lib/icons/fuwupingjia-kefu.js | 20 - ui/lib/icons/gantt-fill.js | 20 - ui/lib/icons/gantt.js | 20 - ui/lib/icons/gearmore-fill.js | 20 - ui/lib/icons/gearmore.js | 20 - ui/lib/icons/gentleman.js | 20 - ui/lib/icons/gift-fill.js | 20 - ui/lib/icons/gift.js | 20 - ui/lib/icons/go-circle.js | 20 - ui/lib/icons/go-connect.js | 20 - ui/lib/icons/go-excel.js | 20 - ui/lib/icons/go-far.js | 20 - ui/lib/icons/go-fill.js | 20 - ui/lib/icons/go-grid.js | 20 - ui/lib/icons/go-hide.js | 20 - ui/lib/icons/go-image.js | 20 - ui/lib/icons/go-invert.js | 20 - ui/lib/icons/go-json.js | 20 - ui/lib/icons/go-lock.js | 20 - ui/lib/icons/go-near.js | 20 - ui/lib/icons/go-network.js | 20 - ui/lib/icons/go-org.js | 20 - ui/lib/icons/go-redo.js | 20 - ui/lib/icons/go-search.js | 20 - ui/lib/icons/go-select.js | 20 - ui/lib/icons/go-show-all.js | 20 - ui/lib/icons/go-undo.js | 20 - ui/lib/icons/go-unlock.js | 20 - ui/lib/icons/go-view.js | 20 - ui/lib/icons/go-visible.js | 20 - ui/lib/icons/go-zoom-in.js | 20 - ui/lib/icons/go-zoom-out.js | 20 - ui/lib/icons/go.js | 20 - ui/lib/icons/gps-fill.js | 20 - ui/lib/icons/gps.js | 20 - ui/lib/icons/grandma.js | 20 - ui/lib/icons/grandpa.js | 20 - ui/lib/icons/grid-layout-fill.js | 20 - ui/lib/icons/grid-layout.js | 20 - ui/lib/icons/group-fill.js | 20 - ui/lib/icons/group.js | 20 - ui/lib/icons/hammer-fill.js | 20 - ui/lib/icons/hammer.js | 20 - ui/lib/icons/hand-fill.js | 20 - ui/lib/icons/hand.js | 20 - ui/lib/icons/handbag-fill.js | 20 - ui/lib/icons/handbag.js | 20 - ui/lib/icons/happy-fill.js | 20 - ui/lib/icons/happy.js | 20 - ui/lib/icons/headphones-fill.js | 20 - ui/lib/icons/headphones.js | 20 - ui/lib/icons/headset-fill.js | 20 - ui/lib/icons/headset.js | 20 - ui/lib/icons/hear-fill.js | 20 - ui/lib/icons/hear-half.js | 20 - ui/lib/icons/hear.js | 20 - ui/lib/icons/heart-fill.js | 20 - ui/lib/icons/heart-rate-fill.js | 20 - ui/lib/icons/heart-rate.js | 20 - ui/lib/icons/heart.js | 20 - ui/lib/icons/helicopter-fill.js | 20 - ui/lib/icons/helicopter.js | 20 - ui/lib/icons/help.js | 20 - ui/lib/icons/high-building-fill.js | 20 - ui/lib/icons/high-building.js | 20 - ui/lib/icons/high-road-fill.js | 20 - ui/lib/icons/high-road.js | 20 - ui/lib/icons/histogram-fill.js | 20 - ui/lib/icons/histogram.js | 20 - ui/lib/icons/history-fill.js | 20 - ui/lib/icons/history.js | 20 - ui/lib/icons/hit-fill.js | 20 - ui/lib/icons/hit.js | 20 - ui/lib/icons/home-fill.js | 20 - ui/lib/icons/home.js | 20 - ui/lib/icons/hospital-fill.js | 20 - ui/lib/icons/hospital.js | 20 - ui/lib/icons/hot-spot-signal-fill.js | 20 - ui/lib/icons/hot-spot-signal.js | 20 - ui/lib/icons/hotspot-fill.js | 20 - ui/lib/icons/hotspot.js | 20 - ui/lib/icons/house-fill.js | 20 - ui/lib/icons/house.js | 20 - ui/lib/icons/id-card-fill.js | 20 - ui/lib/icons/id-card.js | 20 - ui/lib/icons/idea-fill.js | 20 - ui/lib/icons/idea.js | 20 - ui/lib/icons/image-fill.js | 20 - ui/lib/icons/image.js | 20 - ui/lib/icons/imei-fill.js | 20 - ui/lib/icons/imei.js | 20 - ui/lib/icons/imsi-fill.js | 20 - ui/lib/icons/imsi.js | 20 - ui/lib/icons/inbox-fill.js | 20 - ui/lib/icons/inbox.js | 20 - ui/lib/icons/indent-remove-fill.js | 20 - ui/lib/icons/indent-remove.js | 20 - ui/lib/icons/indent.js | 20 - ui/lib/icons/index.js | 1035 - ui/lib/icons/indicator-fill.js | 20 - ui/lib/icons/indicator.js | 20 - ui/lib/icons/info-fill.js | 20 - ui/lib/icons/info.js | 20 - ui/lib/icons/insert-bottom-fill.js | 20 - ui/lib/icons/insert-bottom.js | 20 - ui/lib/icons/insert-left-fill.js | 20 - ui/lib/icons/insert-left.js | 20 - ui/lib/icons/insert-right-fill.js | 20 - ui/lib/icons/insert-right.js | 20 - ui/lib/icons/insert-top-fill.js | 20 - ui/lib/icons/insert-top.js | 20 - ui/lib/icons/inside-play.js | 20 - ui/lib/icons/internet-fill.js | 20 - ui/lib/icons/internet.js | 20 - ui/lib/icons/invert-fill.js | 20 - ui/lib/icons/invert.js | 20 - ui/lib/icons/invisible-fill.js | 20 - ui/lib/icons/invisible.js | 20 - ui/lib/icons/jail-fill.js | 20 - ui/lib/icons/jail.js | 20 - ui/lib/icons/json-fill.js | 20 - ui/lib/icons/json.js | 20 - ui/lib/icons/judge-fill.js | 20 - ui/lib/icons/judge.js | 20 - ui/lib/icons/key-fill.js | 20 - ui/lib/icons/key.js | 20 - ui/lib/icons/keyborad-fill.js | 20 - ui/lib/icons/keyborad.js | 20 - ui/lib/icons/kidney-fill.js | 20 - ui/lib/icons/kidney.js | 20 - ui/lib/icons/kinship-fill.js | 20 - ui/lib/icons/kinship.js | 20 - ui/lib/icons/knowledge-fill.js | 20 - ui/lib/icons/knowledge.js | 20 - ui/lib/icons/kuaishou.js | 20 - ui/lib/icons/lady.js | 20 - ui/lib/icons/lcd-fill.js | 20 - ui/lib/icons/lcd.js | 20 - ui/lib/icons/liantong-fill.js | 20 - ui/lib/icons/liantong.js | 20 - ui/lib/icons/life-buoy.js | 20 - ui/lib/icons/light-fill.js | 20 - ui/lib/icons/light.js | 20 - ui/lib/icons/lightning-fill.js | 20 - ui/lib/icons/lightning.js | 20 - ui/lib/icons/like-fill.js | 20 - ui/lib/icons/like.js | 20 - ui/lib/icons/line-phone-fill.js | 20 - ui/lib/icons/line-phone.js | 20 - ui/lib/icons/link-arrow-h-fill.js | 20 - ui/lib/icons/link-arrow-h.js | 20 - ui/lib/icons/link-arrow-v-fill.js | 20 - ui/lib/icons/link-arrow-v.js | 20 - ui/lib/icons/link-fill.js | 20 - ui/lib/icons/link-off-fill.js | 20 - ui/lib/icons/link-off.js | 20 - ui/lib/icons/link.js | 20 - ui/lib/icons/list-v2.js | 20 - ui/lib/icons/list-v3.js | 20 - ui/lib/icons/list-v4.js | 20 - ui/lib/icons/list.js | 20 - ui/lib/icons/list2-fill.js | 20 - ui/lib/icons/list2.js | 20 - ui/lib/icons/list3-fill.js | 20 - ui/lib/icons/list3.js | 20 - ui/lib/icons/list4-fill.js | 20 - ui/lib/icons/list4.js | 20 - ui/lib/icons/load.js | 20 - ui/lib/icons/loading-fill.js | 20 - ui/lib/icons/loading.js | 20 - ui/lib/icons/location-fill.js | 20 - ui/lib/icons/location.js | 20 - ui/lib/icons/lock-fill.js | 20 - ui/lib/icons/lock-off-v2.js | 20 - ui/lib/icons/lock-off.js | 20 - ui/lib/icons/lock.js | 20 - ui/lib/icons/locus-fill.js | 20 - ui/lib/icons/locus.js | 20 - ui/lib/icons/login-fill.js | 20 - ui/lib/icons/login.js | 20 - ui/lib/icons/logo-colour-v2.js | 20 - ui/lib/icons/logo-colour.js | 20 - ui/lib/icons/logo.js | 20 - ui/lib/icons/logout.js | 20 - ui/lib/icons/loop-fill.js | 20 - ui/lib/icons/loop.js | 20 - ui/lib/icons/m.js | 20 - ui/lib/icons/mac-fill.js | 20 - ui/lib/icons/mac.js | 20 - ui/lib/icons/magic-fill.js | 20 - ui/lib/icons/magic.js | 20 - ui/lib/icons/man-fill.js | 20 - ui/lib/icons/man.js | 20 - ui/lib/icons/manage-circuit-fill.js | 20 - ui/lib/icons/manage-circuit.js | 20 - ui/lib/icons/map-architecture.js | 20 - ui/lib/icons/map-connect-fill.js | 20 - ui/lib/icons/map-connect.js | 20 - ui/lib/icons/map-direction-fill.js | 20 - ui/lib/icons/map-direction.js | 20 - ui/lib/icons/map-fill.js | 20 - ui/lib/icons/map-finger-fill.js | 20 - ui/lib/icons/map-finger.js | 20 - ui/lib/icons/map-gas-fill.js | 20 - ui/lib/icons/map-gas.js | 20 - ui/lib/icons/map-indicator-fill.js | 20 - ui/lib/icons/map-indicator.js | 20 - ui/lib/icons/map-link-fill.js | 20 - ui/lib/icons/map-link.js | 20 - ui/lib/icons/map-oil-fill.js | 20 - ui/lib/icons/map-oil.js | 20 - ui/lib/icons/map-pin-fill.js | 20 - ui/lib/icons/map-pin.js | 20 - ui/lib/icons/map-ruler-fill.js | 20 - ui/lib/icons/map-ruler.js | 20 - ui/lib/icons/map-site-fill.js | 20 - ui/lib/icons/map-site.js | 20 - ui/lib/icons/map-thumbtack-fill.js | 20 - ui/lib/icons/map-thumbtack.js | 20 - ui/lib/icons/map.js | 20 - ui/lib/icons/mbile-fill.js | 20 - ui/lib/icons/mbile.js | 20 - ui/lib/icons/meituan.js | 20 - ui/lib/icons/men.js | 20 - ui/lib/icons/message-fill.js | 20 - ui/lib/icons/message.js | 20 - ui/lib/icons/mi.js | 20 - ui/lib/icons/mic-off-fill.js | 20 - ui/lib/icons/mic-off.js | 20 - ui/lib/icons/mic-on-fill.js | 20 - ui/lib/icons/mic-on.js | 20 - ui/lib/icons/microblog.js | 20 - ui/lib/icons/microphone-fill.js | 20 - ui/lib/icons/microphone.js | 20 - ui/lib/icons/microscope-fill.js | 20 - ui/lib/icons/microscope.js | 20 - ui/lib/icons/mid-fill.js | 20 - ui/lib/icons/mid.js | 20 - ui/lib/icons/mind-fill.js | 20 - ui/lib/icons/mind.js | 20 - ui/lib/icons/mind2-fill.js | 20 - ui/lib/icons/mind2.js | 20 - ui/lib/icons/minus-border.js | 20 - ui/lib/icons/minus-fill.js | 20 - ui/lib/icons/minus.js | 20 - ui/lib/icons/missfresh.js | 20 - ui/lib/icons/mitalk.js | 20 - ui/lib/icons/mom.js | 20 - ui/lib/icons/momo.js | 20 - ui/lib/icons/monitor-camera-fill.js | 20 - ui/lib/icons/monitor-camera.js | 20 - ui/lib/icons/mono-bottom-fill.js | 20 - ui/lib/icons/mono-bottom.js | 20 - ui/lib/icons/mono-left-fill.js | 20 - ui/lib/icons/mono-left.js | 20 - ui/lib/icons/mono-right-fill.js | 20 - ui/lib/icons/mono-right.js | 20 - ui/lib/icons/mono-top-fill.js | 20 - ui/lib/icons/mono-top.js | 20 - ui/lib/icons/mother-son.js | 20 - ui/lib/icons/motor-fill.js | 20 - ui/lib/icons/motor.js | 20 - ui/lib/icons/moustache-fill.js | 20 - ui/lib/icons/moustache.js | 20 - ui/lib/icons/mouth-fill.js | 20 - ui/lib/icons/mouth.js | 20 - ui/lib/icons/move-fill.js | 20 - ui/lib/icons/move.js | 20 - ui/lib/icons/multiply-fill.js | 20 - ui/lib/icons/multiply.js | 20 - ui/lib/icons/music-fill.js | 20 - ui/lib/icons/music.js | 20 - ui/lib/icons/mute-fill.js | 20 - ui/lib/icons/mute.js | 20 - ui/lib/icons/name-card-fill.js | 20 - ui/lib/icons/name-card.js | 20 - ui/lib/icons/narrow-fill.js | 20 - ui/lib/icons/narrow.js | 20 - ui/lib/icons/network-fill.js | 20 - ui/lib/icons/network-layout-fill.js | 20 - ui/lib/icons/network-layout.js | 20 - ui/lib/icons/network.js | 20 - ui/lib/icons/news-failure.js | 20 - ui/lib/icons/news-fill.js | 20 - ui/lib/icons/news-info.js | 20 - ui/lib/icons/news-success.js | 20 - ui/lib/icons/news-warn.js | 20 - ui/lib/icons/news.js | 20 - ui/lib/icons/newspaper-fill.js | 20 - ui/lib/icons/newspaper.js | 20 - ui/lib/icons/next-fill.js | 20 - ui/lib/icons/next-step-fill.js | 20 - ui/lib/icons/next-step.js | 20 - ui/lib/icons/next.js | 20 - ui/lib/icons/nfc-fill.js | 20 - ui/lib/icons/nfc.js | 20 - ui/lib/icons/nine-squares-fill.js | 20 - ui/lib/icons/nine-squares.js | 20 - ui/lib/icons/no-fill.js | 20 - ui/lib/icons/no.js | 20 - ui/lib/icons/nose-fill.js | 20 - ui/lib/icons/nose.js | 20 - ui/lib/icons/note-fill.js | 20 - ui/lib/icons/note.js | 20 - ui/lib/icons/notebook-fill.js | 20 - ui/lib/icons/notebook.js | 20 - ui/lib/icons/num-list-fill.js | 20 - ui/lib/icons/num-list.js | 20 - ui/lib/icons/number-sign-fill.js | 20 - ui/lib/icons/number-sign.js | 20 - ui/lib/icons/odbc-fill.js | 20 - ui/lib/icons/odbc.js | 20 - ui/lib/icons/ok-fill.js | 20 - ui/lib/icons/ok.js | 20 - ui/lib/icons/orbit-fill.js | 20 - ui/lib/icons/orbit.js | 20 - ui/lib/icons/org-fill.js | 20 - ui/lib/icons/org.js | 20 - ui/lib/icons/organiz-fill.js | 20 - ui/lib/icons/organiz.js | 20 - ui/lib/icons/organization-fill.js | 20 - ui/lib/icons/organization.js | 20 - ui/lib/icons/outdent.js | 20 - ui/lib/icons/pad-fill.js | 20 - ui/lib/icons/pad.js | 20 - ui/lib/icons/palm-fill.js | 20 - ui/lib/icons/palm.js | 20 - ui/lib/icons/paper-fill.js | 20 - ui/lib/icons/paper.js | 20 - ui/lib/icons/partake-fill.js | 20 - ui/lib/icons/partake.js | 20 - ui/lib/icons/paste-fill.js | 20 - ui/lib/icons/paste.js | 20 - ui/lib/icons/pause-circle-fill.js | 20 - ui/lib/icons/pause-circle.js | 20 - ui/lib/icons/pause-fill.js | 20 - ui/lib/icons/pause.js | 20 - ui/lib/icons/pay-jingdong.js | 20 - ui/lib/icons/pay-taobao.js | 20 - ui/lib/icons/pc-fill.js | 20 - ui/lib/icons/pc.js | 20 - ui/lib/icons/pdf-fill.js | 20 - ui/lib/icons/pdf.js | 20 - ui/lib/icons/pencil-fill.js | 20 - ui/lib/icons/pencil.js | 20 - ui/lib/icons/pendant-fill.js | 20 - ui/lib/icons/pendant.js | 20 - ui/lib/icons/people-network-fill.js | 20 - ui/lib/icons/people-network.js | 20 - ui/lib/icons/percentage-fill.js | 20 - ui/lib/icons/percentage.js | 20 - ui/lib/icons/phone-fill.js | 20 - ui/lib/icons/phone-signal-fill.js | 20 - ui/lib/icons/phone-signal.js | 20 - ui/lib/icons/phone.js | 20 - ui/lib/icons/pie-chart-fill.js | 20 - ui/lib/icons/pie-chart.js | 20 - ui/lib/icons/pin.js | 20 - ui/lib/icons/pinduoduo.js | 20 - ui/lib/icons/plasma-fill.js | 20 - ui/lib/icons/plasma.js | 20 - ui/lib/icons/play-fill.js | 20 - ui/lib/icons/play.js | 20 - ui/lib/icons/plug.js | 20 - ui/lib/icons/plume-fill.js | 20 - ui/lib/icons/plume.js | 20 - ui/lib/icons/plus-border.js | 20 - ui/lib/icons/plus-fill.js | 20 - ui/lib/icons/plus.js | 20 - ui/lib/icons/police-fill.js | 20 - ui/lib/icons/police.js | 20 - ui/lib/icons/policeman-fill.js | 20 - ui/lib/icons/policeman.js | 20 - ui/lib/icons/pop-fill.js | 20 - ui/lib/icons/pop.js | 20 - ui/lib/icons/power-fill.js | 20 - ui/lib/icons/power.js | 20 - ui/lib/icons/poweroff.js | 20 - ui/lib/icons/ppt-fill.js | 20 - ui/lib/icons/ppt.js | 20 - ui/lib/icons/pregnancy.js | 20 - ui/lib/icons/prev-fill.js | 20 - ui/lib/icons/prev-step-fill.js | 20 - ui/lib/icons/prev-step.js | 20 - ui/lib/icons/prev.js | 20 - ui/lib/icons/print-fill.js | 20 - ui/lib/icons/print.js | 20 - ui/lib/icons/printing-fill.js | 20 - ui/lib/icons/printing.js | 20 - ui/lib/icons/prison-fill.js | 20 - ui/lib/icons/prison.js | 20 - ui/lib/icons/process-fill.js | 20 - ui/lib/icons/process.js | 20 - ui/lib/icons/projector-fill.js | 20 - ui/lib/icons/projector.js | 20 - ui/lib/icons/purse-fill.js | 20 - ui/lib/icons/purse.js | 20 - ui/lib/icons/qq.js | 20 - ui/lib/icons/qrcode-fill.js | 20 - ui/lib/icons/qrcode.js | 20 - ui/lib/icons/question-circle.js | 20 - ui/lib/icons/question-fill.js | 20 - ui/lib/icons/question.js | 20 - ui/lib/icons/radio-off-fill.js | 20 - ui/lib/icons/radio-off.js | 20 - ui/lib/icons/radio-on-fill.js | 20 - ui/lib/icons/radio-on.js | 20 - ui/lib/icons/random-fill.js | 20 - ui/lib/icons/random.js | 20 - ui/lib/icons/rank-fill.js | 20 - ui/lib/icons/rank.js | 20 - ui/lib/icons/read-fill.js | 20 - ui/lib/icons/read.js | 20 - ui/lib/icons/recall-fill.js | 20 - ui/lib/icons/recall.js | 20 - ui/lib/icons/reception-fill.js | 20 - ui/lib/icons/reception.js | 20 - ui/lib/icons/record-fill.js | 20 - ui/lib/icons/record-sound-fill.js | 20 - ui/lib/icons/record-sound.js | 20 - ui/lib/icons/record-video-fill.js | 20 - ui/lib/icons/record-video.js | 20 - ui/lib/icons/record.js | 20 - ui/lib/icons/redo-fill.js | 20 - ui/lib/icons/redo.js | 20 - ui/lib/icons/refresh-fill.js | 20 - ui/lib/icons/refresh.js | 20 - ui/lib/icons/relation-analysis-fill.js | 20 - ui/lib/icons/relation-analysis.js | 20 - ui/lib/icons/relation-fill.js | 20 - ui/lib/icons/relation.js | 20 - ui/lib/icons/relieve-fill.js | 20 - ui/lib/icons/relieve.js | 20 - ui/lib/icons/reply-fill.js | 20 - ui/lib/icons/reply.js | 20 - ui/lib/icons/report-fill.js | 20 - ui/lib/icons/report.js | 20 - ui/lib/icons/reset-fill.js | 20 - ui/lib/icons/reset.js | 20 - ui/lib/icons/rise-fill.js | 20 - ui/lib/icons/rise-full.js | 20 - ui/lib/icons/rise.js | 20 - ui/lib/icons/rmb-fill.js | 20 - ui/lib/icons/rmb.js | 20 - ui/lib/icons/roadblock-fill.js | 20 - ui/lib/icons/roadblock.js | 20 - ui/lib/icons/rocket-fill.js | 20 - ui/lib/icons/rocket.js | 20 - ui/lib/icons/router-fill.js | 20 - ui/lib/icons/router.js | 20 - ui/lib/icons/row-fill.js | 20 - ui/lib/icons/row.js | 20 - ui/lib/icons/rss-fill.js | 20 - ui/lib/icons/rss-full.js | 20 - ui/lib/icons/rss.js | 20 - ui/lib/icons/rubber-fill.js | 20 - ui/lib/icons/rubber.js | 20 - ui/lib/icons/s.js | 20 - ui/lib/icons/sad-fill.js | 20 - ui/lib/icons/sad-full.js | 20 - ui/lib/icons/sad.js | 20 - ui/lib/icons/safe-fill.js | 20 - ui/lib/icons/safe.js | 20 - ui/lib/icons/satellite-fill.js | 20 - ui/lib/icons/satellite-signal-fill.js | 20 - ui/lib/icons/satellite-signal.js | 20 - ui/lib/icons/satellite.js | 20 - ui/lib/icons/save-fill.js | 20 - ui/lib/icons/save.js | 20 - ui/lib/icons/search-fill.js | 20 - ui/lib/icons/search.js | 20 - ui/lib/icons/security-shield-fill.js | 20 - ui/lib/icons/security-shield.js | 20 - ui/lib/icons/send-sms-fill.js | 20 - ui/lib/icons/send-sms.js | 20 - ui/lib/icons/server-fill.js | 20 - ui/lib/icons/server-host-fill.js | 20 - ui/lib/icons/server-host.js | 20 - ui/lib/icons/server-update-fill.js | 20 - ui/lib/icons/server-update.js | 20 - ui/lib/icons/server.js | 20 - ui/lib/icons/service-fill.js | 20 - ui/lib/icons/service.js | 20 - ui/lib/icons/servicer-fill.js | 20 - ui/lib/icons/servicer.js | 20 - ui/lib/icons/set.js | 20 - ui/lib/icons/setting-fill.js | 20 - ui/lib/icons/setting.js | 20 - ui/lib/icons/sf.js | 20 - ui/lib/icons/share-fill.js | 20 - ui/lib/icons/share.js | 20 - ui/lib/icons/sheet-fill.js | 20 - ui/lib/icons/sheet.js | 20 - ui/lib/icons/shield-fill.js | 20 - ui/lib/icons/shield.js | 20 - ui/lib/icons/ship-fill.js | 20 - ui/lib/icons/ship.js | 20 - ui/lib/icons/shoe-print-fill.js | 20 - ui/lib/icons/shoe-print.js | 20 - ui/lib/icons/shop-fill.js | 20 - ui/lib/icons/shop.js | 20 - ui/lib/icons/sign-review-fill.js | 20 - ui/lib/icons/sign-review.js | 20 - ui/lib/icons/signal-fill.js | 20 - ui/lib/icons/signal.js | 20 - ui/lib/icons/sim-fill.js | 20 - ui/lib/icons/sim.js | 20 - ui/lib/icons/sketchpad-fill.js | 20 - ui/lib/icons/sketchpad-theme.js | 20 - ui/lib/icons/sketchpad.js | 20 - ui/lib/icons/slider-fill.js | 20 - ui/lib/icons/slider.js | 20 - ui/lib/icons/smile-fill.js | 20 - ui/lib/icons/smile.js | 20 - ui/lib/icons/sms-fill.js | 20 - ui/lib/icons/sms.js | 20 - ui/lib/icons/soound-min.js | 20 - ui/lib/icons/sort-asc-fill.js | 20 - ui/lib/icons/sort-asc.js | 20 - ui/lib/icons/sort-desc-fill.js | 20 - ui/lib/icons/sort-desc.js | 20 - ui/lib/icons/sort-down-fill.js | 20 - ui/lib/icons/sort-down.js | 20 - ui/lib/icons/sort-fill.js | 20 - ui/lib/icons/sort-up-fill.js | 20 - ui/lib/icons/sort-up.js | 20 - ui/lib/icons/sort.js | 20 - ui/lib/icons/sound-max-fill.js | 20 - ui/lib/icons/sound-max.js | 20 - ui/lib/icons/sound-min-fill.js | 20 - ui/lib/icons/sound-min.js | 20 - ui/lib/icons/sound.js | 20 - ui/lib/icons/sound2-fill.js | 20 - ui/lib/icons/sound2.js | 20 - ui/lib/icons/spanner.js | 20 - ui/lib/icons/speaker-fill.js | 20 - ui/lib/icons/speaker.js | 20 - ui/lib/icons/spin-fill.js | 20 - ui/lib/icons/spin.js | 20 - ui/lib/icons/spin2-fill.js | 20 - ui/lib/icons/spin2.js | 20 - ui/lib/icons/split-screen-compare-fill.js | 20 - ui/lib/icons/split-screen-compare.js | 20 - ui/lib/icons/spread-fill.js | 20 - ui/lib/icons/spread.js | 20 - ui/lib/icons/stamp-fill.js | 20 - ui/lib/icons/stamp.js | 20 - ui/lib/icons/star-fill.js | 20 - ui/lib/icons/star-half.js | 20 - ui/lib/icons/star-line.js | 20 - ui/lib/icons/star-on.js | 20 - ui/lib/icons/star.js | 20 - ui/lib/icons/start-fill.js | 20 - ui/lib/icons/start.js | 20 - ui/lib/icons/statistics-fill.js | 20 - ui/lib/icons/statistics.js | 20 - ui/lib/icons/stomach-fill.js | 20 - ui/lib/icons/stomach.js | 20 - ui/lib/icons/stop-circle-fill.js | 20 - ui/lib/icons/stop-circle.js | 20 - ui/lib/icons/stop-fill.js | 20 - ui/lib/icons/stop.js | 20 - ui/lib/icons/story-building-fill.js | 20 - ui/lib/icons/story-building.js | 20 - ui/lib/icons/stranger-fill.js | 20 - ui/lib/icons/stranger.js | 20 - ui/lib/icons/subway-fill.js | 20 - ui/lib/icons/subway.js | 20 - ui/lib/icons/success-fill.js | 20 - ui/lib/icons/success.js | 20 - ui/lib/icons/suitcase-fill.js | 20 - ui/lib/icons/suitcase.js | 20 - ui/lib/icons/supervision-fill.js | 20 - ui/lib/icons/supervision.js | 20 - ui/lib/icons/survival-fill.js | 20 - ui/lib/icons/survival.js | 20 - ui/lib/icons/suspect-fill.js | 20 - ui/lib/icons/suspect.js | 20 - ui/lib/icons/synthetic-combat-fill.js | 20 - ui/lib/icons/synthetic-combat.js | 20 - ui/lib/icons/t-pc-fill.js | 20 - ui/lib/icons/t-pc.js | 20 - ui/lib/icons/tableware-fill.js | 20 - ui/lib/icons/tableware.js | 20 - ui/lib/icons/tag-fill.js | 20 - ui/lib/icons/tag.js | 20 - ui/lib/icons/tags-fill.js | 20 - ui/lib/icons/tags.js | 20 - ui/lib/icons/tandem-fill.js | 20 - ui/lib/icons/tandem.js | 20 - ui/lib/icons/target-fill.js | 20 - ui/lib/icons/target.js | 20 - ui/lib/icons/taxi-fill.js | 20 - ui/lib/icons/taxi.js | 20 - ui/lib/icons/team-fill.js | 20 - ui/lib/icons/team.js | 20 - ui/lib/icons/teamwork-fill.js | 20 - ui/lib/icons/teamwork.js | 20 - ui/lib/icons/theft-fill.js | 20 - ui/lib/icons/theft.js | 20 - ui/lib/icons/thief-fill.js | 20 - ui/lib/icons/thief.js | 20 - ui/lib/icons/ticket-fill.js | 20 - ui/lib/icons/ticket.js | 20 - ui/lib/icons/time-fill.js | 20 - ui/lib/icons/time.js | 20 - ui/lib/icons/tongue-fill.js | 20 - ui/lib/icons/tongue.js | 20 - ui/lib/icons/tooth-fill.js | 20 - ui/lib/icons/tooth.js | 20 - ui/lib/icons/traffic-light-fill.js | 20 - ui/lib/icons/traffic-light.js | 20 - ui/lib/icons/train-fill.js | 20 - ui/lib/icons/train.js | 20 - ui/lib/icons/tram-fill.js | 20 - ui/lib/icons/tram.js | 20 - ui/lib/icons/transport-fill.js | 20 - ui/lib/icons/transport.js | 20 - ui/lib/icons/treatment-fill.js | 20 - ui/lib/icons/treatment.js | 20 - ui/lib/icons/trophy-fill.js | 20 - ui/lib/icons/trophy.js | 20 - ui/lib/icons/truck-fill.js | 20 - ui/lib/icons/truck.js | 20 - ui/lib/icons/tv-box-fill.js | 20 - ui/lib/icons/tv-box.js | 20 - ui/lib/icons/tv-fill.js | 20 - ui/lib/icons/tv.js | 20 - ui/lib/icons/txt-fill.js | 20 - ui/lib/icons/txt.js | 20 - ui/lib/icons/umbrella.js | 20 - ui/lib/icons/undo-fill.js | 20 - ui/lib/icons/undo.js | 20 - ui/lib/icons/union-pay-fill.js | 20 - ui/lib/icons/union-pay.js | 20 - ui/lib/icons/university-fill.js | 20 - ui/lib/icons/university.js | 20 - ui/lib/icons/unlock-fill.js | 20 - ui/lib/icons/unlock.js | 20 - ui/lib/icons/upload-fill.js | 20 - ui/lib/icons/upload.js | 20 - ui/lib/icons/usb-fill.js | 20 - ui/lib/icons/usb.js | 20 - ui/lib/icons/user-fill.js | 20 - ui/lib/icons/user-man-fill.js | 20 - ui/lib/icons/user-man.js | 20 - ui/lib/icons/user-v2.js | 20 - ui/lib/icons/user-women-fill.js | 20 - ui/lib/icons/user-women.js | 20 - ui/lib/icons/user.js | 20 - ui/lib/icons/vcr-fill.js | 20 - ui/lib/icons/vcr.js | 20 - ui/lib/icons/victim.js | 20 - ui/lib/icons/video-camera-fill.js | 20 - ui/lib/icons/video-camera.js | 20 - ui/lib/icons/view-fill.js | 20 - ui/lib/icons/view.js | 20 - ui/lib/icons/visible-fill.js | 20 - ui/lib/icons/visible.js | 20 - ui/lib/icons/voice-box-fill.js | 20 - ui/lib/icons/voice-box.js | 20 - ui/lib/icons/voiceprint-fill.js | 20 - ui/lib/icons/voiceprint.js | 20 - ui/lib/icons/warning-fill.js | 20 - ui/lib/icons/warning.js | 20 - ui/lib/icons/warning2-fill.js | 20 - ui/lib/icons/warning2.js | 20 - ui/lib/icons/warplane-fill.js | 20 - ui/lib/icons/warplane.js | 20 - ui/lib/icons/wechat.js | 20 - ui/lib/icons/where-fill.js | 20 - ui/lib/icons/where.js | 20 - ui/lib/icons/whole-fill.js | 20 - ui/lib/icons/whole.js | 20 - ui/lib/icons/wifi-fill.js | 20 - ui/lib/icons/wifi.js | 20 - ui/lib/icons/window-close-fill.js | 20 - ui/lib/icons/window-close-full.js | 20 - ui/lib/icons/window-close.js | 20 - ui/lib/icons/window-down-fill.js | 20 - ui/lib/icons/window-down-full.js | 20 - ui/lib/icons/window-down.js | 20 - ui/lib/icons/window-fill.js | 20 - ui/lib/icons/window-max-fill.js | 20 - ui/lib/icons/window-max-full.js | 20 - ui/lib/icons/window-max.js | 20 - ui/lib/icons/window-min-fill.js | 20 - ui/lib/icons/window-min-full.js | 20 - ui/lib/icons/window-min.js | 20 - ui/lib/icons/window-normal-fill.js | 20 - ui/lib/icons/window-normal-full.js | 20 - ui/lib/icons/window-normal.js | 20 - ui/lib/icons/window-up-fill.js | 20 - ui/lib/icons/window-up-full.js | 20 - ui/lib/icons/window-up.js | 20 - ui/lib/icons/window.js | 20 - ui/lib/icons/women-fill.js | 20 - ui/lib/icons/women.js | 20 - ui/lib/icons/word-fill.js | 20 - ui/lib/icons/word.js | 20 - ui/lib/icons/work-card-fill.js | 20 - ui/lib/icons/work-card-fuil.js | 20 - ui/lib/icons/work-card.js | 20 - ui/lib/icons/work-permit-fill.js | 20 - ui/lib/icons/work-permit.js | 20 - ui/lib/icons/wrench-fill.js | 20 - ui/lib/icons/wrench.js | 20 - ui/lib/icons/yidong-fill.js | 20 - ui/lib/icons/yidong.js | 20 - ui/lib/icons/zip-fill.js | 20 - ui/lib/icons/zip.js | 20 - ui/lib/import/app/development.js | 3 - ui/lib/import/app/production.js | 1 - ui/lib/import/app/test.js | 2 - ui/lib/import/theme/development.js | 35 - ui/lib/import/theme/production.js | 27 - ui/lib/import/view/development.js | 3 - ui/lib/import/view/production.js | 1 - ui/lib/import/view/test.js | 2 - ui/lib/index.js | 39 - ui/lib/master.js | 166 - ui/lib/styles/base.scss | 20 - ui/lib/styles/common/_colors.scss | 194 - ui/lib/styles/common/_ui.scss | 141 - ui/lib/styles/common/_var.scss | 2 - ui/lib/styles/extend/fix-element-ui.scss | 307 - ui/lib/styles/extend/picker-panel.scss | 81 - ui/lib/styles/index.scss | 105 - ui/lib/styles/mixins/_config.scss | 4 - ui/lib/styles/mixins/_function.scss | 44 - ui/lib/styles/mixins/_index.scss | 2 - ui/lib/styles/mixins/_mixins.scss | 204 - ui/lib/styles/mixins/_utils.scss | 39 - ui/lib/styles/my-affix.scss | 6 - ui/lib/styles/my-anchor.scss | 64 - ui/lib/styles/my-at-input.scss | 48 - ui/lib/styles/my-autocomplete.scss | 5 - ui/lib/styles/my-avatar.scss | 108 - ui/lib/styles/my-avatars.scss | 14 - ui/lib/styles/my-back-top.scss | 54 - ui/lib/styles/my-breadcrumb.scss | 262 - ui/lib/styles/my-card-list.scss | 22 - ui/lib/styles/my-cascader.scss | 5 - ui/lib/styles/my-checkbox.scss | 14 - ui/lib/styles/my-child-app.scss | 4 - ui/lib/styles/my-clipboard.scss | 5 - ui/lib/styles/my-color-picker.scss | 0 ui/lib/styles/my-config.scss | 0 ui/lib/styles/my-container.scss | 47 - ui/lib/styles/my-contextmenu.scss | 124 - ui/lib/styles/my-corner-mark.scss | 64 - ui/lib/styles/my-cron.scss | 39 - ui/lib/styles/my-crud.scss | 48 - ui/lib/styles/my-date-picker.scss | 6 - ui/lib/styles/my-date.scss | 25 - ui/lib/styles/my-description.scss | 77 - ui/lib/styles/my-detail-item.scss | 69 - ui/lib/styles/my-detail.scss | 108 - ui/lib/styles/my-dialog.scss | 178 - ui/lib/styles/my-drag.scss | 39 - ui/lib/styles/my-drop.scss | 22 - ui/lib/styles/my-edit-tags.scss | 46 - ui/lib/styles/my-editor.scss | 0 ui/lib/styles/my-empty.scss | 34 - ui/lib/styles/my-filter.scss | 28 - ui/lib/styles/my-fixed.scss | 26 - ui/lib/styles/my-flex-item.scss | 49 - ui/lib/styles/my-flex.scss | 104 - ui/lib/styles/my-flip.scss | 141 - ui/lib/styles/my-float-item.scss | 18 - ui/lib/styles/my-float.scss | 10 - ui/lib/styles/my-form-custom.scss | 0 ui/lib/styles/my-form.scss | 41 - ui/lib/styles/my-go-draft.scss | 63 - ui/lib/styles/my-header.scss | 299 - ui/lib/styles/my-highlight.scss | 23 - ui/lib/styles/my-icon.scss | 50 - ui/lib/styles/my-img-wall.scss | 24 - ui/lib/styles/my-input-number.scss | 5 - ui/lib/styles/my-input.scss | 0 ui/lib/styles/my-key-val-list.scss | 10 - ui/lib/styles/my-layout.scss | 117 - ui/lib/styles/my-lazy.scss | 43 - ui/lib/styles/my-list.scss | 190 - ui/lib/styles/my-location-picker.scss | 70 - ui/lib/styles/my-login.scss | 97 - ui/lib/styles/my-marquee.scss | 22 - ui/lib/styles/my-master-app.scss | 6 - ui/lib/styles/my-menu.scss | 416 - ui/lib/styles/my-micro-app.scss | 17 - ui/lib/styles/my-navbar.scss | 341 - ui/lib/styles/my-number.scss | 56 - ui/lib/styles/my-panel.scss | 215 - ui/lib/styles/my-paragraph.scss | 5 - ui/lib/styles/my-particle.scss | 3 - ui/lib/styles/my-popper.scss | 17 - ui/lib/styles/my-print.scss | 37 - ui/lib/styles/my-pro.scss | 234 - ui/lib/styles/my-promise.scss | 0 ui/lib/styles/my-radial-menu.scss | 63 - ui/lib/styles/my-radio.scss | 18 - ui/lib/styles/my-range.scss | 18 - ui/lib/styles/my-rate.scss | 22 - ui/lib/styles/my-resize.scss | 63 - ui/lib/styles/my-result.scss | 74 - ui/lib/styles/my-revolve.scss | 19 - ui/lib/styles/my-search-box.scss | 74 - ui/lib/styles/my-select-field.scss | 3 - ui/lib/styles/my-select.scss | 5 - ui/lib/styles/my-sidebar.scss | 232 - ui/lib/styles/my-skeleton.scss | 119 - ui/lib/styles/my-slide-layout.scss | 149 - ui/lib/styles/my-slider.scss | 0 ui/lib/styles/my-sortable.scss | 0 ui/lib/styles/my-spin.scss | 193 - ui/lib/styles/my-stat-card.scss | 72 - ui/lib/styles/my-svg-line.scss | 5 - ui/lib/styles/my-switch.scss | 0 ui/lib/styles/my-table.scss | 112 - ui/lib/styles/my-tabs.scss | 153 - ui/lib/styles/my-tag-canvas.scss | 0 ui/lib/styles/my-tag-input.scss | 9 - ui/lib/styles/my-tag-select.scss | 109 - ui/lib/styles/my-text.scss | 6 - ui/lib/styles/my-three-menu.scss | 50 - ui/lib/styles/my-timer.scss | 25 - ui/lib/styles/my-title.scss | 57 - ui/lib/styles/my-tree-connect.scss | 90 - ui/lib/styles/my-tree-select.scss | 29 - ui/lib/styles/my-typography.scss | 106 - ui/lib/styles/my-water-fall-slot.scss | 0 ui/lib/styles/my-water-fall.scss | 47 - ui/lib/styles/my-watermark.scss | 22 - ui/lib/styles/my-wave.scss | 0 ui/lib/styles/my-wrapper.scss | 123 - ui/lib/styles/themes/_dark.scss | 157 - ui/lib/styles/themes/_default.scss | 1 - ui/lib/utils/ajax.js | 357 - ui/lib/utils/axios.js | 215 - ui/lib/utils/bom.js | 39 - ui/lib/utils/bridge.js | 136 - ui/lib/utils/bus.js | 25 - ui/lib/utils/color.js | 177 - ui/lib/utils/cookie.js | 79 - ui/lib/utils/crypto.js | 67 - ui/lib/utils/date.js | 68 - ui/lib/utils/dictionary.js | 58 - ui/lib/utils/dom.js | 70 - ui/lib/utils/download.js | 102 - ui/lib/utils/events.js | 147 - ui/lib/utils/excel.js | 438 - ui/lib/utils/helper.js | 32 - ui/lib/utils/log.js | 108 - ui/lib/utils/lunar.js | 558 - ui/lib/utils/messager.js | 212 - ui/lib/utils/mock.js | 135 - ui/lib/utils/money.js | 36 - ui/lib/utils/queue.js | 158 - ui/lib/utils/regex.js | 65 - ui/lib/utils/responsive-col.js | 144 - ui/lib/utils/responsive.js | 120 - ui/lib/utils/scale.js | 105 - ui/lib/utils/skin.js | 111 - ui/lib/utils/socket.js | 192 - ui/lib/utils/storage.js | 63 - ui/lib/utils/styleChecker.js | 22 - ui/lib/utils/tree.js | 141 - ui/lib/utils/tween.js | 336 - ui/lib/utils/url.js | 107 - ui/lib/utils/util.js | 220 - ui/lib/widgets/charts/column-bar/index.vue | 297 - ui/lib/widgets/dict-management/dict-module.js | 74 - ui/lib/widgets/dict-management/dict-opts.js | 103 - .../dict-management/filter/date-format.js | 68 - .../widgets/dict-management/filter/index.js | 34 - ui/lib/widgets/dict-management/index.js | 25 - ui/lib/widgets/go-panel-node/panel-node.js | 681 - ui/lib/widgets/list-picker/core.vue | 314 - ui/lib/widgets/list-picker/index.vue | 137 - .../widgets/member-picker/auto-complete.vue | 95 - ui/lib/widgets/member-picker/core.vue | 140 - ui/lib/widgets/member-picker/index.vue | 168 - ui/lib/widgets/member-picker/input-area.vue | 155 - ui/lib/widgets/member-picker/org-list.vue | 335 - ui/lib/widgets/org-member-picker/index.vue | 328 - ui/lib/widgets/org-member-picker/org-tree.vue | 187 - .../widgets/org-member-picker/person-list.vue | 191 - ui/lib/widgets/path.js | 8 - vue.config.js | 103 +- yarn.lock | 13577 -- 2937 files changed, 8664 insertions(+), 381507 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .npmignore create mode 100644 Dockerfile delete mode 100644 bin/my.js delete mode 100644 core/babel.config.js delete mode 100644 core/babel.plugins.js delete mode 100644 core/bin/app.js delete mode 100644 core/bin/bridge.js delete mode 100644 core/bin/coder.js delete mode 100644 core/bin/color.js delete mode 100644 core/bin/create.js delete mode 100644 core/bin/demo.js delete mode 100644 core/bin/fix.js delete mode 100644 core/bin/jsdoc.js delete mode 100644 core/bin/page.js delete mode 100644 core/bin/preview.js delete mode 100644 core/bin/ready.js delete mode 100644 core/bin/route.js delete mode 100644 core/bin/server.js delete mode 100644 core/bin/start.js delete mode 100644 core/bin/svg.js delete mode 100644 core/bin/theme.js delete mode 100644 core/bin/widgets.js delete mode 100644 core/build/app.js delete mode 100644 core/build/bridge-builder.js delete mode 100644 core/build/bridge-entry.js delete mode 100644 core/build/coder.js delete mode 100644 core/build/colors.js delete mode 100644 core/build/demo-builder.js delete mode 100644 core/build/dev-theme-switch.js delete mode 100644 core/build/fix.js delete mode 100644 core/build/front-matter.js delete mode 100644 core/build/jsdoc-builder.js delete mode 100644 core/build/prod-theme-builder.js delete mode 100644 core/build/routes.js delete mode 100644 core/build/svg.js delete mode 100644 core/build/theme.js delete mode 100644 core/config.js delete mode 100644 core/config/coder.config.js delete mode 100644 core/config/jsdoc.charts.config.js delete mode 100644 core/config/jsdoc.components.config.js delete mode 100644 core/config/jsdoc.dv.config.js delete mode 100644 core/config/jsdoc.factory.js delete mode 100644 core/config/jsdoc.map.config.js delete mode 100644 core/config/jsdoc.utils.config.js delete mode 100644 core/config/proxy.factory.js delete mode 100644 core/config/webpack.base.extend.js delete mode 100644 core/config/webpack.bridge.config.js delete mode 100644 core/config/webpack.dev.extend.js delete mode 100644 core/config/webpack.docs.extend.js delete mode 100644 core/config/webpack.prod.extend.js delete mode 100644 core/config/webpack.theme.factory.js delete mode 100644 core/config/wepack.bridge.lib.config.js delete mode 100644 core/index.js delete mode 100644 core/loaders/component-loader.js delete mode 100644 core/loaders/docs-extend-md-loader.js delete mode 100644 core/loaders/theme-var-scss-loader.js delete mode 100644 core/plugins/auto-routes-plugin.js delete mode 100644 core/plugins/copy-theme-after-compiled-plugin.js delete mode 100644 core/plugins/html-inject-config-plugin.js delete mode 100644 core/plugins/html-inject-theme-plugin.js delete mode 100644 core/plugins/theme-switch-for-compile-plugin.js delete mode 100644 core/plugins/vue-jsdoc-plugin.js delete mode 100644 core/renders/coder/api.js delete mode 100644 core/renders/coder/icons.js delete mode 100644 core/renders/coder/mixin.js delete mode 100644 core/renders/coder/mock.js delete mode 100644 core/renders/coder/store.js delete mode 100644 core/renders/coder/types.js delete mode 100644 core/renders/routes-wrapper.js delete mode 100644 core/renders/routes.js delete mode 100644 core/renders/svg-component.js delete mode 100644 core/server/app.js delete mode 100644 core/server/db.js delete mode 100644 core/server/dev.js delete mode 100644 core/server/http.js delete mode 100644 core/templates/app/config.js delete mode 100644 core/templates/app/main.js delete mode 100644 core/templates/app/router/routes.js delete mode 100644 core/templates/app/store/getters.js delete mode 100644 core/templates/app/store/index.js delete mode 100644 core/templates/app/store/mutations.js delete mode 100644 core/templates/app/store/state.js delete mode 100644 core/templates/app/views/_404.vue delete mode 100644 core/templates/app/views/index.vue delete mode 100644 core/templates/jsdoc/README.md delete mode 100644 core/templates/jsdoc/package.json delete mode 100644 core/templates/jsdoc/publish.js delete mode 100644 core/templates/jsdoc/static/scripts/collapse.js delete mode 100644 core/templates/jsdoc/static/scripts/linenumber.js delete mode 100644 core/templates/jsdoc/static/scripts/nav.js delete mode 100644 core/templates/jsdoc/static/scripts/polyfill.js delete mode 100644 core/templates/jsdoc/static/scripts/prettify/Apache-License-2.0.txt delete mode 100644 core/templates/jsdoc/static/scripts/prettify/lang-css.js delete mode 100644 core/templates/jsdoc/static/scripts/prettify/prettify.js delete mode 100644 core/templates/jsdoc/static/scripts/search.js delete mode 100644 core/templates/jsdoc/static/styles/jsdoc.css delete mode 100644 core/templates/jsdoc/static/styles/prettify.css delete mode 100644 core/templates/jsdoc/tmpl/augments.tmpl delete mode 100644 core/templates/jsdoc/tmpl/container.tmpl delete mode 100644 core/templates/jsdoc/tmpl/details.tmpl delete mode 100644 core/templates/jsdoc/tmpl/example.tmpl delete mode 100644 core/templates/jsdoc/tmpl/examples.tmpl delete mode 100644 core/templates/jsdoc/tmpl/exceptions.tmpl delete mode 100644 core/templates/jsdoc/tmpl/layout.tmpl delete mode 100644 core/templates/jsdoc/tmpl/mainpage.tmpl delete mode 100644 core/templates/jsdoc/tmpl/members.tmpl delete mode 100644 core/templates/jsdoc/tmpl/method.tmpl delete mode 100644 core/templates/jsdoc/tmpl/modifies.tmpl delete mode 100644 core/templates/jsdoc/tmpl/params.tmpl delete mode 100644 core/templates/jsdoc/tmpl/properties.tmpl delete mode 100644 core/templates/jsdoc/tmpl/returns.tmpl delete mode 100644 core/templates/jsdoc/tmpl/source.tmpl delete mode 100644 core/templates/jsdoc/tmpl/tutorial.tmpl delete mode 100644 core/templates/jsdoc/tmpl/type.tmpl delete mode 100644 core/utils.js delete mode 100644 core/vue.config.js delete mode 100644 home.jpg delete mode 100644 my.config.js create mode 100644 nginx.conf rename {src/package => package}/Log.js (63%) rename {src/package => package}/designer/ProcessDesigner.vue (52%) rename {src/package => package}/designer/index.js (72%) rename {src/package => package}/designer/plugins/content-pad/contentPadProvider.js (44%) create mode 100644 package/designer/plugins/content-pad/index.js create mode 100644 package/designer/plugins/defaultEmpty.js rename {src/package => package}/designer/plugins/descriptor/activitiDescriptor.json (100%) rename {src/package => package}/designer/plugins/descriptor/camundaDescriptor.json (100%) rename {src/package => package}/designer/plugins/descriptor/flowableDescriptor.json (100%) rename {src/package => package}/designer/plugins/extension-moddle/activiti/activitiExtension.js (44%) rename {src/package => package}/designer/plugins/extension-moddle/activiti/index.js (50%) create mode 100644 package/designer/plugins/extension-moddle/camunda/extension.js create mode 100644 package/designer/plugins/extension-moddle/camunda/index.js create mode 100644 package/designer/plugins/extension-moddle/flowable/flowableExtension.js create mode 100644 package/designer/plugins/extension-moddle/flowable/index.js rename {src/package => package}/designer/plugins/palette/CustomPalette.js (42%) create mode 100644 package/designer/plugins/palette/index.js rename {src/package => package}/designer/plugins/palette/paletteProvider.js (51%) rename {src/package => package}/designer/plugins/translate/customTranslate.js (87%) create mode 100644 package/designer/plugins/translate/zh.js create mode 100644 package/highlight/index.js rename {src/package => package}/index.js (58%) rename {src/package => package}/palette/ProcessPalette.vue (87%) rename {src/package => package}/palette/index.js (72%) rename {src/package => package}/penal/PropertiesPanel.vue (73%) rename {src/package => package}/penal/base/ElementBaseInfo.vue (93%) rename {src/package => package}/penal/flow-condition/FlowCondition.vue (79%) rename {src/package => package}/penal/form/ElementForm.vue (90%) rename {src/package => package}/penal/index.js (72%) rename {src/package => package}/penal/listeners/ElementListeners.vue (88%) rename {src/package => package}/penal/listeners/UserTaskListeners.vue (90%) rename {src/package => package}/penal/listeners/template.js (100%) rename {src/package => package}/penal/listeners/utilSelf.js (45%) rename {src/package => package}/penal/multi-instance/ElementMultiInstance.vue (85%) rename {src/package => package}/penal/other/ElementOtherConfig.vue (88%) rename {src/package => package}/penal/properties/ElementProperties.vue (84%) rename {src/package => package}/penal/signal-message/SignalAndMessage.vue (81%) rename {src/package => package}/penal/task/ElementTask.vue (78%) rename {src/package => package}/penal/task/task-components/ReceiveTask.vue (88%) rename {src/package => package}/penal/task/task-components/ScriptTask.vue (83%) rename {src/package => package}/penal/task/task-components/UserTask.vue (59%) rename {src/package => package}/theme/element-variables.scss (100%) rename {src/package => package}/theme/index.scss (100%) rename {src/package => package}/theme/process-designer.scss (100%) rename {src/package => package}/theme/process-panel.scss (100%) rename {src/package => package}/utils.js (75%) create mode 100644 public/alipay.png delete mode 100644 public/assets/bridge/index.html delete mode 100644 public/assets/bridge/js/bridge.2711d44e.js delete mode 100644 public/assets/bridge/lib/index.js delete mode 100644 public/config.js delete mode 100644 public/data/CITY.json delete mode 100644 public/data/DEPT.json delete mode 100644 public/favicon.ico create mode 100644 public/icon-process.png create mode 100644 public/logo.ico delete mode 100644 public/newDiagram.bpmn create mode 100644 public/wechat.jpg create mode 100644 public/wechat.png delete mode 100644 schemas/mockForExample.js delete mode 100644 schemas/slim-clue.js create mode 100644 screenshot/image-20210422140659561.png create mode 100644 screenshot/image-20210422140728176.png create mode 100644 screenshot/image-20210422140805725.png create mode 100644 screenshot/image-20210422140906725.png create mode 100644 screenshot/image-20210422140924114.png create mode 100644 screenshot/image-20210422140939414.png create mode 100644 screenshot/image-20210422141009316.png create mode 100644 screenshot/image-20210422141035638.png create mode 100644 screenshot/image-20210422141220571.png create mode 100644 screenshot/image-20210422141354311.png rename core/templates/app/components/.gitkeep => script/update.js (100%) rename src/{views/index.vue => App.vue} (49%) delete mode 100644 src/apps.js delete mode 100644 src/assets/data/CITY.json delete mode 100644 src/assets/data/min-tree.json delete mode 100644 src/assets/data/tree.json delete mode 100644 src/config.js delete mode 100644 src/constant.js delete mode 100644 src/helper/dict-management/dict-module.js delete mode 100644 src/helper/dict-management/dict-opts.js delete mode 100644 src/helper/dict-management/filter/date-format.js delete mode 100644 src/helper/dict-management/filter/index.js delete mode 100644 src/helper/dict-management/index.js delete mode 100644 src/mapping/index.js delete mode 100644 src/mock/example.js delete mode 100644 src/mock/flights.json delete mode 100644 src/mock/index.js delete mode 100644 src/mock/templates.js create mode 100644 src/modules/auto-place/rewriteAutoPlace.js create mode 100644 src/modules/extension/user.json delete mode 100644 src/package/designer/plugins/content-pad/index.js delete mode 100644 src/package/designer/plugins/defaultEmpty.js delete mode 100644 src/package/designer/plugins/palette/index.js delete mode 100644 src/package/designer/plugins/translate/zh.js delete mode 100644 src/package/highlight/index.js delete mode 100644 src/router/routes.js delete mode 100644 src/store/getters.js delete mode 100644 src/store/index.js delete mode 100644 src/store/modules/dict.js delete mode 100644 src/store/modules/index.js delete mode 100644 src/store/mutations.js delete mode 100644 src/store/state.js delete mode 100644 src/style/_vars.scss delete mode 100644 src/style/base.scss delete mode 100644 src/style/index.scss delete mode 100644 src/style/themes/_dark.scss delete mode 100644 src/style/themes/_default.scss delete mode 100644 src/style/vars/_theme.scss delete mode 100644 src/views/_404.vue delete mode 100644 svg/accurate-search-fill.svg delete mode 100644 svg/accurate-search.svg delete mode 100644 svg/address-book-fill.svg delete mode 100644 svg/address-book.svg delete mode 100644 svg/adjust-fill.svg delete mode 100644 svg/adjust.svg delete mode 100644 svg/aims-fill.svg delete mode 100644 svg/aims.svg delete mode 100644 svg/airplane-fill.svg delete mode 100644 svg/airplane.svg delete mode 100644 svg/alarm-fill.svg delete mode 100644 svg/alarm.svg delete mode 100644 svg/alipay.svg delete mode 100644 svg/all-fill.svg delete mode 100644 svg/all.svg delete mode 100644 svg/ambulance-fill.svg delete mode 100644 svg/ambulance.svg delete mode 100644 svg/anchor-fill.svg delete mode 100644 svg/anchor.svg delete mode 100644 svg/annex-fill.svg delete mode 100644 svg/annex.svg delete mode 100644 svg/anonymous-fill.svg delete mode 100644 svg/anonymous.svg delete mode 100644 svg/approval-fill.svg delete mode 100644 svg/approval.svg delete mode 100644 svg/archive-fill.svg delete mode 100644 svg/archive.svg delete mode 100644 svg/area-map-fill.svg delete mode 100644 svg/area-map.svg delete mode 100644 svg/arrow-down-fill.svg delete mode 100644 svg/arrow-down.svg delete mode 100644 svg/arrow-left-fill.svg delete mode 100644 svg/arrow-left.svg delete mode 100644 svg/arrow-right-fill.svg delete mode 100644 svg/arrow-right.svg delete mode 100644 svg/arrow-up-fill.svg delete mode 100644 svg/arrow-up.svg delete mode 100644 svg/associate-fill.svg delete mode 100644 svg/associate.svg delete mode 100644 svg/astronomical-fill.svg delete mode 100644 svg/astronomical.svg delete mode 100644 svg/audio-fill.svg delete mode 100644 svg/audio.svg delete mode 100644 svg/avi-fill.svg delete mode 100644 svg/avi.svg delete mode 100644 svg/baby-child-fill.svg delete mode 100644 svg/baby-child.svg delete mode 100644 svg/baby.svg delete mode 100644 svg/backstage-data-fill.svg delete mode 100644 svg/backstage-data.svg delete mode 100644 svg/backward-fill.svg delete mode 100644 svg/backward.svg delete mode 100644 svg/bad-fill.svg delete mode 100644 svg/bad.svg delete mode 100644 svg/badge-fill.svg delete mode 100644 svg/badge.svg delete mode 100644 svg/baidu.svg delete mode 100644 svg/balance-fill.svg delete mode 100644 svg/balance.svg delete mode 100644 svg/ball-camera-fill.svg delete mode 100644 svg/ball-camera.svg delete mode 100644 svg/bar-code-fill.svg delete mode 100644 svg/bar-code.svg delete mode 100644 svg/base-signal-fill.svg delete mode 100644 svg/base-signal.svg delete mode 100644 svg/base-station-fill.svg delete mode 100644 svg/base-station.svg delete mode 100644 svg/bayonet-camera-fill.svg delete mode 100644 svg/bayonet-camera.svg delete mode 100644 svg/bed-fill.svg delete mode 100644 svg/bed.svg delete mode 100644 svg/beehive-fill.svg delete mode 100644 svg/beehive.svg delete mode 100644 svg/bell-fill.svg delete mode 100644 svg/bell-off-fill.svg delete mode 100644 svg/bell-off.svg delete mode 100644 svg/bell.svg delete mode 100644 svg/bigdata-fill.svg delete mode 100644 svg/bigdata.svg delete mode 100644 svg/bike-fill.svg delete mode 100644 svg/bike.svg delete mode 100644 svg/bill-fill.svg delete mode 100644 svg/bill.svg delete mode 100644 svg/blood-fill.svg delete mode 100644 svg/blood.svg delete mode 100644 svg/bluetooth-fill.svg delete mode 100644 svg/bluetooth.svg delete mode 100644 svg/board-fill.svg delete mode 100644 svg/board.svg delete mode 100644 svg/bold-arrow-down-fill.svg delete mode 100644 svg/bold-arrow-down.svg delete mode 100644 svg/bold-arrow-left-fill.svg delete mode 100644 svg/bold-arrow-left.svg delete mode 100644 svg/bold-arrow-right-fill.svg delete mode 100644 svg/bold-arrow-right.svg delete mode 100644 svg/bold-arrow-up-fill.svg delete mode 100644 svg/bold-arrow-up.svg delete mode 100644 svg/book-fill.svg delete mode 100644 svg/book.svg delete mode 100644 svg/bookmark-fill.svg delete mode 100644 svg/bookmark.svg delete mode 100644 svg/brain-fill.svg delete mode 100644 svg/brain.svg delete mode 100644 svg/branch-fill.svg delete mode 100644 svg/branch.svg delete mode 100644 svg/breathe-fill.svg delete mode 100644 svg/breathe.svg delete mode 100644 svg/briefcase-fill.svg delete mode 100644 svg/briefcase.svg delete mode 100644 svg/broadcast-fill.svg delete mode 100644 svg/broadcast.svg delete mode 100644 svg/build-fill.svg delete mode 100644 svg/build.svg delete mode 100644 svg/building-fill.svg delete mode 100644 svg/building.svg delete mode 100644 svg/bulb-fill.svg delete mode 100644 svg/bulb.svg delete mode 100644 svg/bullseye-fill.svg delete mode 100644 svg/bullseye.svg delete mode 100644 svg/bus-fill.svg delete mode 100644 svg/bus.svg delete mode 100644 svg/caidaquan.svg delete mode 100644 svg/cainiao.svg delete mode 100644 svg/calendar-fill.svg delete mode 100644 svg/calendar.svg delete mode 100644 svg/calendar2-fill.svg delete mode 100644 svg/calendar2.svg delete mode 100644 svg/call-fill.svg delete mode 100644 svg/call.svg delete mode 100644 svg/camera-fill.svg delete mode 100644 svg/camera-old-fill.svg delete mode 100644 svg/camera-old.svg delete mode 100644 svg/camera.svg delete mode 100644 svg/car-collision-fill.svg delete mode 100644 svg/car-collision.svg delete mode 100644 svg/car-fill.svg delete mode 100644 svg/car.svg delete mode 100644 svg/car2-fill.svg delete mode 100644 svg/car2.svg delete mode 100644 svg/card-fill.svg delete mode 100644 svg/card.svg delete mode 100644 svg/careful-fill.svg delete mode 100644 svg/careful.svg delete mode 100644 svg/case-file-fill.svg delete mode 100644 svg/case-file.svg delete mode 100644 svg/cbox-fill.svg delete mode 100644 svg/cbox.svg delete mode 100644 svg/cdr-fill.svg delete mode 100644 svg/cdr.svg delete mode 100644 svg/chart-line-fill.svg delete mode 100644 svg/chart-line.svg delete mode 100644 svg/chart-trend-fill.svg delete mode 100644 svg/chart-trend.svg delete mode 100644 svg/chat-fill.svg delete mode 100644 svg/chat.svg delete mode 100644 svg/check-fill.svg delete mode 100644 svg/check.svg delete mode 100644 svg/checkbox-fill.svg delete mode 100644 svg/checkbox-minus-fill.svg delete mode 100644 svg/checkbox-minus.svg delete mode 100644 svg/checkbox-ok-fill.svg delete mode 100644 svg/checkbox-ok.svg delete mode 100644 svg/checkbox-plus-fill.svg delete mode 100644 svg/checkbox-plus.svg delete mode 100644 svg/checkbox.svg delete mode 100644 svg/chemistry-fill.svg delete mode 100644 svg/chemistry.svg delete mode 100644 svg/child.svg delete mode 100644 svg/children-fill.svg delete mode 100644 svg/children.svg delete mode 100644 svg/chinapost.svg delete mode 100644 svg/chip-fill.svg delete mode 100644 svg/chip.svg delete mode 100644 svg/choice-fill.svg delete mode 100644 svg/choice.svg delete mode 100644 svg/circler-layout-fill.svg delete mode 100644 svg/circler-layout.svg delete mode 100644 svg/circulation-fill.svg delete mode 100644 svg/circulation.svg delete mode 100644 svg/city-fill.svg delete mode 100644 svg/city.svg delete mode 100644 svg/clock-fill.svg delete mode 100644 svg/clock.svg delete mode 100644 svg/clothes-fill.svg delete mode 100644 svg/clothes.svg delete mode 100644 svg/cloud-disk-fill.svg delete mode 100644 svg/cloud-disk.svg delete mode 100644 svg/cloud-download-fill.svg delete mode 100644 svg/cloud-download.svg delete mode 100644 svg/cloud-fill.svg delete mode 100644 svg/cloud-link-fill.svg delete mode 100644 svg/cloud-link.svg delete mode 100644 svg/cloud-search-fill.svg delete mode 100644 svg/cloud-search.svg delete mode 100644 svg/cloud-server-fill.svg delete mode 100644 svg/cloud-server.svg delete mode 100644 svg/cloud-service-fill.svg delete mode 100644 svg/cloud-service.svg delete mode 100644 svg/cloud-upload-fill.svg delete mode 100644 svg/cloud-upload.svg delete mode 100644 svg/cloud.svg delete mode 100644 svg/coach-fill.svg delete mode 100644 svg/coach.svg delete mode 100644 svg/code-fill.svg delete mode 100644 svg/code.svg delete mode 100644 svg/coffee-fill.svg delete mode 100644 svg/coffee.svg delete mode 100644 svg/collaboration-fill.svg delete mode 100644 svg/collaboration-system-fill.svg delete mode 100644 svg/collaboration-system.svg delete mode 100644 svg/collaboration.svg delete mode 100644 svg/collision-fill.svg delete mode 100644 svg/collision.svg delete mode 100644 svg/columns-fill.svg delete mode 100644 svg/columns.svg delete mode 100644 svg/combine-fill.svg delete mode 100644 svg/combine.svg delete mode 100644 svg/comment-fill.svg delete mode 100644 svg/comment.svg delete mode 100644 svg/comment2-fill.svg delete mode 100644 svg/comment2.svg delete mode 100644 svg/compact-car-fill.svg delete mode 100644 svg/compact-car.svg delete mode 100644 svg/compass-fill.svg delete mode 100644 svg/compass.svg delete mode 100644 svg/component-fill.svg delete mode 100644 svg/component.svg delete mode 100644 svg/components-fill.svg delete mode 100644 svg/components.svg delete mode 100644 svg/computer-fill.svg delete mode 100644 svg/computer.svg delete mode 100644 svg/cooperation-fill.svg delete mode 100644 svg/cooperation.svg delete mode 100644 svg/copier-fill.svg delete mode 100644 svg/copier.svg delete mode 100644 svg/copy-comparison-fill.svg delete mode 100644 svg/copy-comparison.svg delete mode 100644 svg/copy-fill.svg delete mode 100644 svg/copy-rect-fill.svg delete mode 100644 svg/copy-rect.svg delete mode 100644 svg/copy.svg delete mode 100644 svg/corpse-fill.svg delete mode 100644 svg/corpse.svg delete mode 100644 svg/cpu-fill.svg delete mode 100644 svg/cpu.svg delete mode 100644 svg/credentials-fill.svg delete mode 100644 svg/credentials.svg delete mode 100644 svg/crop-fill.svg delete mode 100644 svg/crop.svg delete mode 100644 svg/cuff-fill.svg delete mode 100644 svg/cuff.svg delete mode 100644 svg/cup-fill.svg delete mode 100644 svg/cup.svg delete mode 100644 svg/cycle-fill.svg delete mode 100644 svg/cycle.svg delete mode 100644 svg/dad.svg delete mode 100644 svg/danger-fill.svg delete mode 100644 svg/danger.svg delete mode 100644 svg/dark-fill.svg delete mode 100644 svg/dark.svg delete mode 100644 svg/dashboard-fill.svg delete mode 100644 svg/dashboard.svg delete mode 100644 svg/data-abnormal-fill.svg delete mode 100644 svg/data-abnormal.svg delete mode 100644 svg/data-download-fill.svg delete mode 100644 svg/data-download.svg delete mode 100644 svg/data-lnquire-fill.svg delete mode 100644 svg/data-lnquire.svg delete mode 100644 svg/data-management-fill.svg delete mode 100644 svg/data-management.svg delete mode 100644 svg/data-update-fill.svg delete mode 100644 svg/data-update.svg delete mode 100644 svg/database-fill.svg delete mode 100644 svg/database.svg delete mode 100644 svg/debug-fill.svg delete mode 100644 svg/debug.svg delete mode 100644 svg/delete-fill.svg delete mode 100644 svg/delete.svg delete mode 100644 svg/desktop-fill.svg delete mode 100644 svg/desktop.svg delete mode 100644 svg/destroy-fill.svg delete mode 100644 svg/destroy.svg delete mode 100644 svg/dianxin-fill.svg delete mode 100644 svg/dianxin.svg delete mode 100644 svg/dingtalk.svg delete mode 100644 svg/direction-fill.svg delete mode 100644 svg/direction.svg delete mode 100644 svg/disability.svg delete mode 100644 svg/disappointed-fill.svg delete mode 100644 svg/disappointed.svg delete mode 100644 svg/dna-fill.svg delete mode 100644 svg/dna.svg delete mode 100644 svg/doctor-fill.svg delete mode 100644 svg/doctor.svg delete mode 100644 svg/double-arrow-down-fill.svg delete mode 100644 svg/double-arrow-down.svg delete mode 100644 svg/double-arrow-left-fill.svg delete mode 100644 svg/double-arrow-left.svg delete mode 100644 svg/double-arrow-right-fill.svg delete mode 100644 svg/double-arrow-right.svg delete mode 100644 svg/double-arrow-up-fill.svg delete mode 100644 svg/double-arrow-up.svg delete mode 100644 svg/double-circle-fill.svg delete mode 100644 svg/double-circle.svg delete mode 100644 svg/douyin.svg delete mode 100644 svg/download-fill.svg delete mode 100644 svg/download.svg delete mode 100644 svg/drip-fill.svg delete mode 100644 svg/drip.svg delete mode 100644 svg/dropper-fill.svg delete mode 100644 svg/dropper.svg delete mode 100644 svg/drug-fill.svg delete mode 100644 svg/drug.svg delete mode 100644 svg/ear-fill.svg delete mode 100644 svg/ear.svg delete mode 100644 svg/earth-fill.svg delete mode 100644 svg/earth.svg delete mode 100644 svg/edit-fill.svg delete mode 100644 svg/edit.svg delete mode 100644 svg/electricity-fill.svg delete mode 100644 svg/electricity.svg delete mode 100644 svg/elment.svg delete mode 100644 svg/ems.svg delete mode 100644 svg/enlarge-fill.svg delete mode 100644 svg/enlarge.svg delete mode 100644 svg/envelope-fill.svg delete mode 100644 svg/envelope-open-fill.svg delete mode 100644 svg/envelope-open.svg delete mode 100644 svg/envelope.svg delete mode 100644 svg/esm-fill.svg delete mode 100644 svg/esm.svg delete mode 100644 svg/evaluation-fill.svg delete mode 100644 svg/evaluation.svg delete mode 100644 svg/excel-fill.svg delete mode 100644 svg/excel.svg delete mode 100644 svg/exchange-fill.svg delete mode 100644 svg/exchange.svg delete mode 100644 svg/exit-fill.svg delete mode 100644 svg/exit.svg delete mode 100644 svg/expand-fill.svg delete mode 100644 svg/expand.svg delete mode 100644 svg/explain-fill.svg delete mode 100644 svg/explain.svg delete mode 100644 svg/express-package-fill.svg delete mode 100644 svg/express-package.svg delete mode 100644 svg/eye-fill.svg delete mode 100644 svg/eye.svg delete mode 100644 svg/factory-fill.svg delete mode 100644 svg/factory.svg delete mode 100644 svg/failure-fill.svg delete mode 100644 svg/failure.svg delete mode 100644 svg/fall-fill.svg delete mode 100644 svg/fall.svg delete mode 100644 svg/family.svg delete mode 100644 svg/father-son.svg delete mode 100644 svg/fax-fill.svg delete mode 100644 svg/fax.svg delete mode 100644 svg/fcbox.svg delete mode 100644 svg/fence-fill.svg delete mode 100644 svg/fence.svg delete mode 100644 svg/fetion.svg delete mode 100644 svg/file-fill.svg delete mode 100644 svg/file-text-fill.svg delete mode 100644 svg/file-text.svg delete mode 100644 svg/file.svg delete mode 100644 svg/files-fill.svg delete mode 100644 svg/files.svg delete mode 100644 svg/film-fill.svg delete mode 100644 svg/film.svg delete mode 100644 svg/filter-fill.svg delete mode 100644 svg/filter.svg delete mode 100644 svg/fingerprint-fill.svg delete mode 100644 svg/fingerprint.svg delete mode 100644 svg/firearms-fill.svg delete mode 100644 svg/firearms.svg delete mode 100644 svg/fixed-fill.svg delete mode 100644 svg/fixed-telephone-fill.svg delete mode 100644 svg/fixed-telephone.svg delete mode 100644 svg/fixed.svg delete mode 100644 svg/flag-fill.svg delete mode 100644 svg/flag.svg delete mode 100644 svg/flask-fill.svg delete mode 100644 svg/flask.svg delete mode 100644 svg/flat-fill.svg delete mode 100644 svg/flat.svg delete mode 100644 svg/floor-building-fill.svg delete mode 100644 svg/floor-building.svg delete mode 100644 svg/flower-fill.svg delete mode 100644 svg/flower.svg delete mode 100644 svg/folder-fill.svg delete mode 100644 svg/folder-open-fill.svg delete mode 100644 svg/folder-open.svg delete mode 100644 svg/folder.svg delete mode 100644 svg/foot-fill.svg delete mode 100644 svg/foot.svg delete mode 100644 svg/footprint-fill.svg delete mode 100644 svg/footprint.svg delete mode 100644 svg/four-squares-fill.svg delete mode 100644 svg/four-squares.svg delete mode 100644 svg/freshhema.svg delete mode 100644 svg/full-fill.svg delete mode 100644 svg/full.svg delete mode 100644 svg/gantt-fill.svg delete mode 100644 svg/gantt.svg delete mode 100644 svg/gearmore-fill.svg delete mode 100644 svg/gearmore.svg delete mode 100644 svg/gift-fill.svg delete mode 100644 svg/gift.svg delete mode 100644 svg/go-fill.svg delete mode 100644 svg/go.svg delete mode 100644 svg/gps-fill.svg delete mode 100644 svg/gps.svg delete mode 100644 svg/grandma.svg delete mode 100644 svg/grandpa.svg delete mode 100644 svg/grid-layout-fill.svg delete mode 100644 svg/grid-layout.svg delete mode 100644 svg/group-fill.svg delete mode 100644 svg/group.svg delete mode 100644 svg/hammer-fill.svg delete mode 100644 svg/hammer.svg delete mode 100644 svg/hand-fill.svg delete mode 100644 svg/hand.svg delete mode 100644 svg/handbag-fill.svg delete mode 100644 svg/handbag.svg delete mode 100644 svg/happy-fill.svg delete mode 100644 svg/happy.svg delete mode 100644 svg/headphones-fill.svg delete mode 100644 svg/headphones.svg delete mode 100644 svg/headset-fill.svg delete mode 100644 svg/headset.svg delete mode 100644 svg/hear-fill.svg delete mode 100644 svg/hear-half.svg delete mode 100644 svg/hear.svg delete mode 100644 svg/heart-fill.svg delete mode 100644 svg/heart-rate-fill.svg delete mode 100644 svg/heart-rate.svg delete mode 100644 svg/heart.svg delete mode 100644 svg/helicopter-fill.svg delete mode 100644 svg/helicopter.svg delete mode 100644 svg/high-building-fill.svg delete mode 100644 svg/high-building.svg delete mode 100644 svg/high-road-fill.svg delete mode 100644 svg/high-road.svg delete mode 100644 svg/histogram-fill.svg delete mode 100644 svg/histogram.svg delete mode 100644 svg/history-fill.svg delete mode 100644 svg/history.svg delete mode 100644 svg/hit-fill.svg delete mode 100644 svg/hit.svg delete mode 100644 svg/home-fill.svg delete mode 100644 svg/home.svg delete mode 100644 svg/hospital-fill.svg delete mode 100644 svg/hospital.svg delete mode 100644 svg/hot-spot-signal-fill.svg delete mode 100644 svg/hot-spot-signal.svg delete mode 100644 svg/hotspot-fill.svg delete mode 100644 svg/hotspot.svg delete mode 100644 svg/house-fill.svg delete mode 100644 svg/house.svg delete mode 100644 svg/id-card-fill.svg delete mode 100644 svg/id-card.svg delete mode 100644 svg/idea-fill.svg delete mode 100644 svg/idea.svg delete mode 100644 svg/image-fill.svg delete mode 100644 svg/image.svg delete mode 100644 svg/imei-fill.svg delete mode 100644 svg/imei.svg delete mode 100644 svg/imsi-fill.svg delete mode 100644 svg/imsi.svg delete mode 100644 svg/inbox-fill.svg delete mode 100644 svg/inbox.svg delete mode 100644 svg/indent-remove-fill.svg delete mode 100644 svg/indent-remove.svg delete mode 100644 svg/indicator-fill.svg delete mode 100644 svg/indicator.svg delete mode 100644 svg/info-fill.svg delete mode 100644 svg/info.svg delete mode 100644 svg/insert-bottom-fill.svg delete mode 100644 svg/insert-bottom.svg delete mode 100644 svg/insert-left-fill.svg delete mode 100644 svg/insert-left.svg delete mode 100644 svg/insert-right-fill.svg delete mode 100644 svg/insert-right.svg delete mode 100644 svg/insert-top-fill.svg delete mode 100644 svg/insert-top.svg delete mode 100644 svg/internet-fill.svg delete mode 100644 svg/internet.svg delete mode 100644 svg/invert-fill.svg delete mode 100644 svg/invert.svg delete mode 100644 svg/invisible-fill.svg delete mode 100644 svg/invisible.svg delete mode 100644 svg/jail-fill.svg delete mode 100644 svg/jail.svg delete mode 100644 svg/json-fill.svg delete mode 100644 svg/json.svg delete mode 100644 svg/judge-fill.svg delete mode 100644 svg/judge.svg delete mode 100644 svg/key-fill.svg delete mode 100644 svg/key.svg delete mode 100644 svg/keyborad-fill.svg delete mode 100644 svg/keyborad.svg delete mode 100644 svg/kidney-fill.svg delete mode 100644 svg/kidney.svg delete mode 100644 svg/kinship-fill.svg delete mode 100644 svg/kinship.svg delete mode 100644 svg/knowledge-fill.svg delete mode 100644 svg/knowledge.svg delete mode 100644 svg/kuaishou.svg delete mode 100644 svg/lcd-fill.svg delete mode 100644 svg/lcd.svg delete mode 100644 svg/liantong-fill.svg delete mode 100644 svg/liantong.svg delete mode 100644 svg/light-fill.svg delete mode 100644 svg/light.svg delete mode 100644 svg/lightning-fill.svg delete mode 100644 svg/lightning.svg delete mode 100644 svg/like-fill.svg delete mode 100644 svg/like.svg delete mode 100644 svg/line-phone-fill.svg delete mode 100644 svg/line-phone.svg delete mode 100644 svg/link-arrow-h-fill.svg delete mode 100644 svg/link-arrow-h.svg delete mode 100644 svg/link-arrow-v-fill.svg delete mode 100644 svg/link-arrow-v.svg delete mode 100644 svg/link-fill.svg delete mode 100644 svg/link-off-fill.svg delete mode 100644 svg/link-off.svg delete mode 100644 svg/link.svg delete mode 100644 svg/list2-fill.svg delete mode 100644 svg/list2.svg delete mode 100644 svg/list3-fill.svg delete mode 100644 svg/list3.svg delete mode 100644 svg/list4-fill.svg delete mode 100644 svg/list4.svg delete mode 100644 svg/loading-fill.svg delete mode 100644 svg/loading.svg delete mode 100644 svg/location-fill.svg delete mode 100644 svg/location.svg delete mode 100644 svg/lock-fill.svg delete mode 100644 svg/lock.svg delete mode 100644 svg/locus-fill.svg delete mode 100644 svg/locus.svg delete mode 100644 svg/login-fill.svg delete mode 100644 svg/login.svg delete mode 100644 svg/loop-fill.svg delete mode 100644 svg/loop.svg delete mode 100644 svg/mac-fill.svg delete mode 100644 svg/mac.svg delete mode 100644 svg/magic-fill.svg delete mode 100644 svg/magic.svg delete mode 100644 svg/man-fill.svg delete mode 100644 svg/man.svg delete mode 100644 svg/manage-circuit-fill.svg delete mode 100644 svg/manage-circuit.svg delete mode 100644 svg/map-connect-fill.svg delete mode 100644 svg/map-connect.svg delete mode 100644 svg/map-direction-fill.svg delete mode 100644 svg/map-direction.svg delete mode 100644 svg/map-fill.svg delete mode 100644 svg/map-finger-fill.svg delete mode 100644 svg/map-finger.svg delete mode 100644 svg/map-gas-fill.svg delete mode 100644 svg/map-gas.svg delete mode 100644 svg/map-indicator-fill.svg delete mode 100644 svg/map-indicator.svg delete mode 100644 svg/map-link-fill.svg delete mode 100644 svg/map-link.svg delete mode 100644 svg/map-oil-fill.svg delete mode 100644 svg/map-oil.svg delete mode 100644 svg/map-pin-fill.svg delete mode 100644 svg/map-pin.svg delete mode 100644 svg/map-ruler-fill.svg delete mode 100644 svg/map-ruler.svg delete mode 100644 svg/map-site-fill.svg delete mode 100644 svg/map-site.svg delete mode 100644 svg/map-thumbtack-fill.svg delete mode 100644 svg/map-thumbtack.svg delete mode 100644 svg/map.svg delete mode 100644 svg/mbile-fill.svg delete mode 100644 svg/mbile.svg delete mode 100644 svg/meituan.svg delete mode 100644 svg/message-fill.svg delete mode 100644 svg/message.svg delete mode 100644 svg/mic-off-fill.svg delete mode 100644 svg/mic-off.svg delete mode 100644 svg/mic-on-fill.svg delete mode 100644 svg/mic-on.svg delete mode 100644 svg/microblog.svg delete mode 100644 svg/microphone-fill.svg delete mode 100644 svg/microphone.svg delete mode 100644 svg/microscope-fill.svg delete mode 100644 svg/microscope.svg delete mode 100644 svg/mid-fill.svg delete mode 100644 svg/mid.svg delete mode 100644 svg/mind-fill.svg delete mode 100644 svg/mind.svg delete mode 100644 svg/mind2-fill.svg delete mode 100644 svg/mind2.svg delete mode 100644 svg/minus-fill.svg delete mode 100644 svg/minus.svg delete mode 100644 svg/missfresh.svg delete mode 100644 svg/mitalk.svg delete mode 100644 svg/mom.svg delete mode 100644 svg/momo.svg delete mode 100644 svg/monitor-camera-fill.svg delete mode 100644 svg/monitor-camera.svg delete mode 100644 svg/mono-bottom-fill.svg delete mode 100644 svg/mono-bottom.svg delete mode 100644 svg/mono-left-fill.svg delete mode 100644 svg/mono-left.svg delete mode 100644 svg/mono-right-fill.svg delete mode 100644 svg/mono-right.svg delete mode 100644 svg/mono-top-fill.svg delete mode 100644 svg/mono-top.svg delete mode 100644 svg/mother-son.svg delete mode 100644 svg/motor-fill.svg delete mode 100644 svg/motor.svg delete mode 100644 svg/moustache-fill.svg delete mode 100644 svg/moustache.svg delete mode 100644 svg/mouth-fill.svg delete mode 100644 svg/mouth.svg delete mode 100644 svg/move-fill.svg delete mode 100644 svg/move.svg delete mode 100644 svg/multiply-fill.svg delete mode 100644 svg/multiply.svg delete mode 100644 svg/music-fill.svg delete mode 100644 svg/music.svg delete mode 100644 svg/mute-fill.svg delete mode 100644 svg/mute.svg delete mode 100644 svg/name-card-fill.svg delete mode 100644 svg/name-card.svg delete mode 100644 svg/narrow-fill.svg delete mode 100644 svg/narrow.svg delete mode 100644 svg/network-fill.svg delete mode 100644 svg/network-layout-fill.svg delete mode 100644 svg/network-layout.svg delete mode 100644 svg/network.svg delete mode 100644 svg/news-fill.svg delete mode 100644 svg/news.svg delete mode 100644 svg/newspaper-fill.svg delete mode 100644 svg/newspaper.svg delete mode 100644 svg/next-fill.svg delete mode 100644 svg/next-step-fill.svg delete mode 100644 svg/next-step.svg delete mode 100644 svg/next.svg delete mode 100644 svg/nfc-fill.svg delete mode 100644 svg/nfc.svg delete mode 100644 svg/nine-squares-fill.svg delete mode 100644 svg/nine-squares.svg delete mode 100644 svg/no-fill.svg delete mode 100644 svg/no.svg delete mode 100644 svg/nose-fill.svg delete mode 100644 svg/nose.svg delete mode 100644 svg/note-fill.svg delete mode 100644 svg/note.svg delete mode 100644 svg/notebook-fill.svg delete mode 100644 svg/notebook.svg delete mode 100644 svg/num-list-fill.svg delete mode 100644 svg/num-list.svg delete mode 100644 svg/number-sign-fill.svg delete mode 100644 svg/number-sign.svg delete mode 100644 svg/odbc-fill.svg delete mode 100644 svg/odbc.svg delete mode 100644 svg/ok-fill.svg delete mode 100644 svg/ok.svg delete mode 100644 svg/orbit-fill.svg delete mode 100644 svg/orbit.svg delete mode 100644 svg/org-fill.svg delete mode 100644 svg/org.svg delete mode 100644 svg/organiz-fill.svg delete mode 100644 svg/organiz.svg delete mode 100644 svg/organization-fill.svg delete mode 100644 svg/organization.svg delete mode 100644 svg/pad-fill.svg delete mode 100644 svg/pad.svg delete mode 100644 svg/palm-fill.svg delete mode 100644 svg/palm.svg delete mode 100644 svg/paper-fill.svg delete mode 100644 svg/paper.svg delete mode 100644 svg/partake-fill.svg delete mode 100644 svg/partake.svg delete mode 100644 svg/paste-fill.svg delete mode 100644 svg/paste.svg delete mode 100644 svg/pause-circle-fill.svg delete mode 100644 svg/pause-circle.svg delete mode 100644 svg/pause-fill.svg delete mode 100644 svg/pause.svg delete mode 100644 svg/pay-jingdong.svg delete mode 100644 svg/pay-taobao.svg delete mode 100644 svg/pc-fill.svg delete mode 100644 svg/pc.svg delete mode 100644 svg/pdf-fill.svg delete mode 100644 svg/pdf.svg delete mode 100644 svg/pencil-fill.svg delete mode 100644 svg/pencil.svg delete mode 100644 svg/pendant-fill.svg delete mode 100644 svg/pendant.svg delete mode 100644 svg/people-network-fill.svg delete mode 100644 svg/people-network.svg delete mode 100644 svg/percentage-fill.svg delete mode 100644 svg/percentage.svg delete mode 100644 svg/phone-fill.svg delete mode 100644 svg/phone-signal-fill.svg delete mode 100644 svg/phone-signal.svg delete mode 100644 svg/phone.svg delete mode 100644 svg/pie-chart-fill.svg delete mode 100644 svg/pie-chart.svg delete mode 100644 svg/pinduoduo.svg delete mode 100644 svg/plasma-fill.svg delete mode 100644 svg/plasma.svg delete mode 100644 svg/play-fill.svg delete mode 100644 svg/play.svg delete mode 100644 svg/plume-fill.svg delete mode 100644 svg/plume.svg delete mode 100644 svg/plus-fill.svg delete mode 100644 svg/plus.svg delete mode 100644 svg/police-fill.svg delete mode 100644 svg/police.svg delete mode 100644 svg/policeman-fill.svg delete mode 100644 svg/policeman.svg delete mode 100644 svg/pop-fill.svg delete mode 100644 svg/pop.svg delete mode 100644 svg/power-fill.svg delete mode 100644 svg/power.svg delete mode 100644 svg/ppt-fill.svg delete mode 100644 svg/ppt.svg delete mode 100644 svg/pregnancy.svg delete mode 100644 svg/prev-fill.svg delete mode 100644 svg/prev-step-fill.svg delete mode 100644 svg/prev-step.svg delete mode 100644 svg/prev.svg delete mode 100644 svg/print-fill.svg delete mode 100644 svg/print.svg delete mode 100644 svg/printing-fill.svg delete mode 100644 svg/printing.svg delete mode 100644 svg/prison-fill.svg delete mode 100644 svg/prison.svg delete mode 100644 svg/process-fill.svg delete mode 100644 svg/process.svg delete mode 100644 svg/projector-fill.svg delete mode 100644 svg/projector.svg delete mode 100644 svg/purse-fill.svg delete mode 100644 svg/purse.svg delete mode 100644 svg/qq.svg delete mode 100644 svg/qrcode-fill.svg delete mode 100644 svg/qrcode.svg delete mode 100644 svg/question-fill.svg delete mode 100644 svg/question.svg delete mode 100644 svg/radio-off-fill.svg delete mode 100644 svg/radio-off.svg delete mode 100644 svg/radio-on-fill.svg delete mode 100644 svg/radio-on.svg delete mode 100644 svg/random-fill.svg delete mode 100644 svg/random.svg delete mode 100644 svg/rank-fill.svg delete mode 100644 svg/rank.svg delete mode 100644 svg/read-fill.svg delete mode 100644 svg/read.svg delete mode 100644 svg/recall-fill.svg delete mode 100644 svg/recall.svg delete mode 100644 svg/reception-fill.svg delete mode 100644 svg/reception.svg delete mode 100644 svg/record-fill.svg delete mode 100644 svg/record-sound-fill.svg delete mode 100644 svg/record-sound.svg delete mode 100644 svg/record-video-fill.svg delete mode 100644 svg/record-video.svg delete mode 100644 svg/record.svg delete mode 100644 svg/redo-fill.svg delete mode 100644 svg/redo.svg delete mode 100644 svg/refresh-fill.svg delete mode 100644 svg/refresh.svg delete mode 100644 svg/relation-analysis-fill.svg delete mode 100644 svg/relation-analysis.svg delete mode 100644 svg/relation-fill.svg delete mode 100644 svg/relation.svg delete mode 100644 svg/relieve-fill.svg delete mode 100644 svg/relieve.svg delete mode 100644 svg/reply-fill.svg delete mode 100644 svg/reply.svg delete mode 100644 svg/report-fill.svg delete mode 100644 svg/report.svg delete mode 100644 svg/reset-fill.svg delete mode 100644 svg/reset.svg delete mode 100644 svg/rise-fill.svg delete mode 100644 svg/rise.svg delete mode 100644 svg/rmb-fill.svg delete mode 100644 svg/rmb.svg delete mode 100644 svg/roadblock-fill.svg delete mode 100644 svg/roadblock.svg delete mode 100644 svg/rocket-fill.svg delete mode 100644 svg/rocket.svg delete mode 100644 svg/router-fill.svg delete mode 100644 svg/router.svg delete mode 100644 svg/row-fill.svg delete mode 100644 svg/row.svg delete mode 100644 svg/rss-fill.svg delete mode 100644 svg/rss.svg delete mode 100644 svg/rubber-fill.svg delete mode 100644 svg/rubber.svg delete mode 100644 svg/sad-fill.svg delete mode 100644 svg/sad.svg delete mode 100644 svg/safe-fill.svg delete mode 100644 svg/safe.svg delete mode 100644 svg/satellite-fill.svg delete mode 100644 svg/satellite-signal-fill.svg delete mode 100644 svg/satellite-signal.svg delete mode 100644 svg/satellite.svg delete mode 100644 svg/save-fill.svg delete mode 100644 svg/save.svg delete mode 100644 svg/search-fill.svg delete mode 100644 svg/search.svg delete mode 100644 svg/security-shield-fill.svg delete mode 100644 svg/security-shield.svg delete mode 100644 svg/send-sms-fill.svg delete mode 100644 svg/send-sms.svg delete mode 100644 svg/server-fill.svg delete mode 100644 svg/server-host-fill.svg delete mode 100644 svg/server-host.svg delete mode 100644 svg/server-update-fill.svg delete mode 100644 svg/server-update.svg delete mode 100644 svg/server.svg delete mode 100644 svg/service-fill.svg delete mode 100644 svg/service.svg delete mode 100644 svg/servicer-fill.svg delete mode 100644 svg/servicer.svg delete mode 100644 svg/setting-fill.svg delete mode 100644 svg/setting.svg delete mode 100644 svg/sf.svg delete mode 100644 svg/share-fill.svg delete mode 100644 svg/share.svg delete mode 100644 svg/sheet-fill.svg delete mode 100644 svg/sheet.svg delete mode 100644 svg/shield-fill.svg delete mode 100644 svg/shield.svg delete mode 100644 svg/ship-fill.svg delete mode 100644 svg/ship.svg delete mode 100644 svg/shoe-print-fill.svg delete mode 100644 svg/shoe-print.svg delete mode 100644 svg/shop-fill.svg delete mode 100644 svg/shop.svg delete mode 100644 svg/sign-review-fill.svg delete mode 100644 svg/sign-review.svg delete mode 100644 svg/signal-fill.svg delete mode 100644 svg/signal.svg delete mode 100644 svg/sim-fill.svg delete mode 100644 svg/sim.svg delete mode 100644 svg/sketchpad-fill.svg delete mode 100644 svg/sketchpad.svg delete mode 100644 svg/slider-fill.svg delete mode 100644 svg/slider.svg delete mode 100644 svg/smile-fill.svg delete mode 100644 svg/smile.svg delete mode 100644 svg/sms-fill.svg delete mode 100644 svg/sms.svg delete mode 100644 svg/sort-asc-fill.svg delete mode 100644 svg/sort-asc.svg delete mode 100644 svg/sort-desc-fill.svg delete mode 100644 svg/sort-desc.svg delete mode 100644 svg/sort-down-fill.svg delete mode 100644 svg/sort-down.svg delete mode 100644 svg/sort-fill.svg delete mode 100644 svg/sort-up-fill.svg delete mode 100644 svg/sort-up.svg delete mode 100644 svg/sort.svg delete mode 100644 svg/sound-max-fill.svg delete mode 100644 svg/sound-max.svg delete mode 100644 svg/sound-min-fill.svg delete mode 100644 svg/sound-min.svg delete mode 100644 svg/sound2-fill.svg delete mode 100644 svg/sound2.svg delete mode 100644 svg/speaker-fill.svg delete mode 100644 svg/speaker.svg delete mode 100644 svg/spin-fill.svg delete mode 100644 svg/spin.svg delete mode 100644 svg/spin2-fill.svg delete mode 100644 svg/spin2.svg delete mode 100644 svg/split-screen-compare-fill.svg delete mode 100644 svg/split-screen-compare.svg delete mode 100644 svg/spread-fill.svg delete mode 100644 svg/spread.svg delete mode 100644 svg/stamp-fill.svg delete mode 100644 svg/stamp.svg delete mode 100644 svg/star-fill.svg delete mode 100644 svg/star-half.svg delete mode 100644 svg/star.svg delete mode 100644 svg/start-fill.svg delete mode 100644 svg/start.svg delete mode 100644 svg/statistics-fill.svg delete mode 100644 svg/statistics.svg delete mode 100644 svg/stomach-fill.svg delete mode 100644 svg/stomach.svg delete mode 100644 svg/stop-circle-fill.svg delete mode 100644 svg/stop-circle.svg delete mode 100644 svg/stop-fill.svg delete mode 100644 svg/stop.svg delete mode 100644 svg/story-building-fill.svg delete mode 100644 svg/story-building.svg delete mode 100644 svg/stranger-fill.svg delete mode 100644 svg/stranger.svg delete mode 100644 svg/subway-fill.svg delete mode 100644 svg/subway.svg delete mode 100644 svg/success-fill.svg delete mode 100644 svg/success.svg delete mode 100644 svg/suitcase-fill.svg delete mode 100644 svg/suitcase.svg delete mode 100644 svg/supervision-fill.svg delete mode 100644 svg/supervision.svg delete mode 100644 svg/survival-fill.svg delete mode 100644 svg/survival.svg delete mode 100644 svg/suspect-fill.svg delete mode 100644 svg/suspect.svg delete mode 100644 svg/synthetic-combat-fill.svg delete mode 100644 svg/synthetic-combat.svg delete mode 100644 svg/t-pc-fill.svg delete mode 100644 svg/t-pc.svg delete mode 100644 svg/tableware-fill.svg delete mode 100644 svg/tableware.svg delete mode 100644 svg/tag-fill.svg delete mode 100644 svg/tag.svg delete mode 100644 svg/tags-fill.svg delete mode 100644 svg/tags.svg delete mode 100644 svg/tandem-fill.svg delete mode 100644 svg/tandem.svg delete mode 100644 svg/target-fill.svg delete mode 100644 svg/target.svg delete mode 100644 svg/taxi-fill.svg delete mode 100644 svg/taxi.svg delete mode 100644 svg/team-fill.svg delete mode 100644 svg/team.svg delete mode 100644 svg/teamwork-fill.svg delete mode 100644 svg/teamwork.svg delete mode 100644 svg/theft-fill.svg delete mode 100644 svg/theft.svg delete mode 100644 svg/thief-fill.svg delete mode 100644 svg/thief.svg delete mode 100644 svg/ticket-fill.svg delete mode 100644 svg/ticket.svg delete mode 100644 svg/time-fill.svg delete mode 100644 svg/time.svg delete mode 100644 svg/tongue-fill.svg delete mode 100644 svg/tongue.svg delete mode 100644 svg/tooth-fill.svg delete mode 100644 svg/tooth.svg delete mode 100644 svg/traffic-light-fill.svg delete mode 100644 svg/traffic-light.svg delete mode 100644 svg/train-fill.svg delete mode 100644 svg/train.svg delete mode 100644 svg/tram-fill.svg delete mode 100644 svg/tram.svg delete mode 100644 svg/transport-fill.svg delete mode 100644 svg/transport.svg delete mode 100644 svg/treatment-fill.svg delete mode 100644 svg/treatment.svg delete mode 100644 svg/trophy-fill.svg delete mode 100644 svg/trophy.svg delete mode 100644 svg/truck-fill.svg delete mode 100644 svg/truck.svg delete mode 100644 svg/tv-box-fill.svg delete mode 100644 svg/tv-box.svg delete mode 100644 svg/tv-fill.svg delete mode 100644 svg/tv.svg delete mode 100644 svg/txt-fill.svg delete mode 100644 svg/txt.svg delete mode 100644 svg/undo-fill.svg delete mode 100644 svg/undo.svg delete mode 100644 svg/union-pay-fill.svg delete mode 100644 svg/union-pay.svg delete mode 100644 svg/university-fill.svg delete mode 100644 svg/university.svg delete mode 100644 svg/unlock-fill.svg delete mode 100644 svg/unlock.svg delete mode 100644 svg/upload-fill.svg delete mode 100644 svg/upload.svg delete mode 100644 svg/usb-fill.svg delete mode 100644 svg/usb.svg delete mode 100644 svg/user-fill.svg delete mode 100644 svg/user-man-fill.svg delete mode 100644 svg/user-man.svg delete mode 100644 svg/user-women-fill.svg delete mode 100644 svg/user-women.svg delete mode 100644 svg/user.svg delete mode 100644 svg/vcr-fill.svg delete mode 100644 svg/vcr.svg delete mode 100644 svg/video-camera-fill.svg delete mode 100644 svg/video-camera.svg delete mode 100644 svg/view-fill.svg delete mode 100644 svg/view.svg delete mode 100644 svg/visible-fill.svg delete mode 100644 svg/visible.svg delete mode 100644 svg/voice-box-fill.svg delete mode 100644 svg/voice-box.svg delete mode 100644 svg/voiceprint-fill.svg delete mode 100644 svg/voiceprint.svg delete mode 100644 svg/warning-fill.svg delete mode 100644 svg/warning.svg delete mode 100644 svg/warning2-fill.svg delete mode 100644 svg/warning2.svg delete mode 100644 svg/warplane-fill.svg delete mode 100644 svg/warplane.svg delete mode 100644 svg/wechat.svg delete mode 100644 svg/where-fill.svg delete mode 100644 svg/where.svg delete mode 100644 svg/whole-fill.svg delete mode 100644 svg/whole.svg delete mode 100644 svg/wifi-fill.svg delete mode 100644 svg/wifi.svg delete mode 100644 svg/window-close-fill.svg delete mode 100644 svg/window-close.svg delete mode 100644 svg/window-down-fill.svg delete mode 100644 svg/window-down.svg delete mode 100644 svg/window-fill.svg delete mode 100644 svg/window-max-fill.svg delete mode 100644 svg/window-max.svg delete mode 100644 svg/window-min-fill.svg delete mode 100644 svg/window-min.svg delete mode 100644 svg/window-normal-fill.svg delete mode 100644 svg/window-normal.svg delete mode 100644 svg/window-up-fill.svg delete mode 100644 svg/window-up.svg delete mode 100644 svg/window.svg delete mode 100644 svg/women-fill.svg delete mode 100644 svg/women.svg delete mode 100644 svg/word-fill.svg delete mode 100644 svg/word.svg delete mode 100644 svg/work-card-fill.svg delete mode 100644 svg/work-card.svg delete mode 100644 svg/work-permit-fill.svg delete mode 100644 svg/work-permit.svg delete mode 100644 svg/wrench-fill.svg delete mode 100644 svg/wrench.svg delete mode 100644 svg/yidong-fill.svg delete mode 100644 svg/yidong.svg delete mode 100644 svg/zip-fill.svg delete mode 100644 svg/zip.svg rename ui/lib/styles/my-capture.scss => types/index.d.ts (100%) create mode 100644 types/process-designer.d.ts delete mode 100644 ui/lib/access/Access.js delete mode 100644 ui/lib/access/config.js delete mode 100644 ui/lib/access/guarder.js delete mode 100644 ui/lib/access/index.js delete mode 100644 ui/lib/access/install.js delete mode 100644 ui/lib/access/interceptors.js delete mode 100644 ui/lib/access/middleware/can.js delete mode 100644 ui/lib/access/middleware/login.js delete mode 100644 ui/lib/access/middleware/role.js delete mode 100644 ui/lib/access/middleware/router.js delete mode 100644 ui/lib/analysis.js delete mode 100644 ui/lib/app.js delete mode 100644 ui/lib/assets/bg/01.jpg delete mode 100644 ui/lib/assets/bg/02.png delete mode 100644 ui/lib/assets/bg/03.jpg delete mode 100644 ui/lib/assets/bg/04.jpg delete mode 100644 ui/lib/assets/bg/05.jpg delete mode 100644 ui/lib/assets/color.json delete mode 100644 ui/lib/assets/favicon.ico delete mode 100644 ui/lib/assets/icons/demo.css delete mode 100644 ui/lib/assets/icons/demo_index.html delete mode 100644 ui/lib/assets/icons/iconfont.css delete mode 100644 ui/lib/assets/icons/iconfont.eot delete mode 100644 ui/lib/assets/icons/iconfont.json delete mode 100644 ui/lib/assets/icons/iconfont.ttf delete mode 100644 ui/lib/assets/icons/iconfont.woff delete mode 100644 ui/lib/assets/icons/iconfont.woff2 delete mode 100644 ui/lib/assets/img/PRESENTED_IMAGE_DEFAULT.png delete mode 100644 ui/lib/assets/img/PRESENTED_IMAGE_SIMPLE.png delete mode 100644 ui/lib/assets/img/placeholder.png delete mode 100644 ui/lib/assets/logo.png delete mode 100644 ui/lib/assets/man/0.png delete mode 100644 ui/lib/assets/man/1.png delete mode 100644 ui/lib/assets/man/10.png delete mode 100644 ui/lib/assets/man/11.png delete mode 100644 ui/lib/assets/man/12.png delete mode 100644 ui/lib/assets/man/13.png delete mode 100644 ui/lib/assets/man/14.png delete mode 100644 ui/lib/assets/man/15.png delete mode 100644 ui/lib/assets/man/16.png delete mode 100644 ui/lib/assets/man/17.png delete mode 100644 ui/lib/assets/man/18.png delete mode 100644 ui/lib/assets/man/19.png delete mode 100644 ui/lib/assets/man/2.png delete mode 100644 ui/lib/assets/man/20.png delete mode 100644 ui/lib/assets/man/21.png delete mode 100644 ui/lib/assets/man/22.png delete mode 100644 ui/lib/assets/man/23.png delete mode 100644 ui/lib/assets/man/24.png delete mode 100644 ui/lib/assets/man/3.png delete mode 100644 ui/lib/assets/man/4.png delete mode 100644 ui/lib/assets/man/5.png delete mode 100644 ui/lib/assets/man/6.png delete mode 100644 ui/lib/assets/man/7.png delete mode 100644 ui/lib/assets/man/8.png delete mode 100644 ui/lib/assets/man/9.png delete mode 100644 ui/lib/assets/myweb.png delete mode 100644 ui/lib/assets/police.png delete mode 100644 ui/lib/assets/xdh.png delete mode 100644 ui/lib/components/index.js delete mode 100644 ui/lib/components/my-affix/index.js delete mode 100644 ui/lib/components/my-affix/src/Affix.vue delete mode 100644 ui/lib/components/my-anchor/index.js delete mode 100644 ui/lib/components/my-anchor/src/Anchor.vue delete mode 100644 ui/lib/components/my-anchor/src/Link.vue delete mode 100644 ui/lib/components/my-at-input/index.js delete mode 100644 ui/lib/components/my-at-input/src/AtInput.vue delete mode 100644 ui/lib/components/my-autocomplete/index.js delete mode 100644 ui/lib/components/my-avatar/index.js delete mode 100644 ui/lib/components/my-avatar/src/Avatar.vue delete mode 100644 ui/lib/components/my-avatar/src/Avatars.vue delete mode 100644 ui/lib/components/my-avatars/index.js delete mode 100644 ui/lib/components/my-back-top/index.js delete mode 100644 ui/lib/components/my-back-top/src/BackTop.vue delete mode 100644 ui/lib/components/my-breadcrumb/index.js delete mode 100644 ui/lib/components/my-capture/index.js delete mode 100644 ui/lib/components/my-capture/src/Capture.vue delete mode 100644 ui/lib/components/my-card-list/index.js delete mode 100644 ui/lib/components/my-card-list/src/CardList.vue delete mode 100644 ui/lib/components/my-cascader/index.js delete mode 100644 ui/lib/components/my-checkbox/index.js delete mode 100644 ui/lib/components/my-child-app/index.js delete mode 100644 ui/lib/components/my-child-app/src/App.vue delete mode 100644 ui/lib/components/my-clipboard/index.js delete mode 100644 ui/lib/components/my-clipboard/src/Clipboard.vue delete mode 100644 ui/lib/components/my-color-picker/index.js delete mode 100644 ui/lib/components/my-config/index.js delete mode 100644 ui/lib/components/my-config/src/Config.vue delete mode 100644 ui/lib/components/my-container/index.js delete mode 100644 ui/lib/components/my-container/src/Container.vue delete mode 100644 ui/lib/components/my-contextmenu/index.js delete mode 100644 ui/lib/components/my-contextmenu/src/Index.vue delete mode 100644 ui/lib/components/my-contextmenu/src/Menu.vue delete mode 100644 ui/lib/components/my-contextmenu/src/MenuItem.vue delete mode 100644 ui/lib/components/my-corner-mark/index.js delete mode 100644 ui/lib/components/my-corner-mark/src/CornerMark.vue delete mode 100644 ui/lib/components/my-cron/index.js delete mode 100644 ui/lib/components/my-cron/src/Cron.vue delete mode 100644 ui/lib/components/my-cron/src/cn.js delete mode 100644 ui/lib/components/my-crud/index.js delete mode 100644 ui/lib/components/my-crud/src/Crud.vue delete mode 100644 ui/lib/components/my-crud/src/Detail.vue delete mode 100644 ui/lib/components/my-crud/src/Handle.vue delete mode 100644 ui/lib/components/my-crud/src/Handlebar.vue delete mode 100644 ui/lib/components/my-crud/src/adapter.js delete mode 100644 ui/lib/components/my-date-picker/index.js delete mode 100644 ui/lib/components/my-date/index.js delete mode 100644 ui/lib/components/my-date/src/Date.vue delete mode 100644 ui/lib/components/my-description/index.js delete mode 100644 ui/lib/components/my-description/src/Description.vue delete mode 100644 ui/lib/components/my-detail-item/index.js delete mode 100644 ui/lib/components/my-detail/index.js delete mode 100644 ui/lib/components/my-detail/src/Col.js delete mode 100644 ui/lib/components/my-detail/src/Detail.vue delete mode 100644 ui/lib/components/my-detail/src/DetailItem.vue delete mode 100644 ui/lib/components/my-dialog/index.js delete mode 100644 ui/lib/components/my-dialog/src/Dialog.vue delete mode 100644 ui/lib/components/my-dialog/src/Panel.vue delete mode 100644 ui/lib/components/my-dialog/src/SrcFrame.vue delete mode 100644 ui/lib/components/my-drag/index.js delete mode 100644 ui/lib/components/my-drag/src/Drag.vue delete mode 100644 ui/lib/components/my-drop/index.js delete mode 100644 ui/lib/components/my-drop/src/Drop.vue delete mode 100644 ui/lib/components/my-edit-tags/index.js delete mode 100644 ui/lib/components/my-edit-tags/src/EditTags.vue delete mode 100644 ui/lib/components/my-editor/index.js delete mode 100644 ui/lib/components/my-empty/index.js delete mode 100644 ui/lib/components/my-empty/src/Empty.vue delete mode 100644 ui/lib/components/my-filter/index.js delete mode 100644 ui/lib/components/my-filter/src/Filter.vue delete mode 100644 ui/lib/components/my-fixed/index.js delete mode 100644 ui/lib/components/my-fixed/src/Fixed.vue delete mode 100644 ui/lib/components/my-flex-item/index.js delete mode 100644 ui/lib/components/my-flex/index.js delete mode 100644 ui/lib/components/my-flex/src/Flex.vue delete mode 100644 ui/lib/components/my-flex/src/FlexItem.vue delete mode 100644 ui/lib/components/my-flip/index.js delete mode 100644 ui/lib/components/my-flip/src/Flip.vue delete mode 100644 ui/lib/components/my-float-item/index.js delete mode 100644 ui/lib/components/my-float/index.js delete mode 100644 ui/lib/components/my-float/src/Float.vue delete mode 100644 ui/lib/components/my-float/src/FloatItem.vue delete mode 100644 ui/lib/components/my-form-custom/index.js delete mode 100644 ui/lib/components/my-form/index.js delete mode 100644 ui/lib/components/my-form/src/Base.js delete mode 100644 ui/lib/components/my-form/src/Custom.js delete mode 100644 ui/lib/components/my-form/src/Form.vue delete mode 100644 ui/lib/components/my-form/src/common/BasePicker.vue delete mode 100644 ui/lib/components/my-form/src/common/Editor.vue delete mode 100644 ui/lib/components/my-form/src/common/IconItem.vue delete mode 100644 ui/lib/components/my-form/src/common/PickerPanel.vue delete mode 100644 ui/lib/components/my-form/src/common/Popover.js delete mode 100644 ui/lib/components/my-form/src/common/TagInput.vue delete mode 100644 ui/lib/components/my-form/src/common/TagSelect.vue delete mode 100644 ui/lib/components/my-form/src/common/TreeSelect.vue delete mode 100644 ui/lib/components/my-form/src/common/UploadAdapter.js delete mode 100644 ui/lib/components/my-form/src/fields/Autocomplete.js delete mode 100644 ui/lib/components/my-form/src/fields/Cascader.js delete mode 100644 ui/lib/components/my-form/src/fields/Checkbox.js delete mode 100644 ui/lib/components/my-form/src/fields/ColorPicker.js delete mode 100644 ui/lib/components/my-form/src/fields/Cron.js delete mode 100644 ui/lib/components/my-form/src/fields/DatePicker.js delete mode 100644 ui/lib/components/my-form/src/fields/Editor.js delete mode 100644 ui/lib/components/my-form/src/fields/Input.js delete mode 100644 ui/lib/components/my-form/src/fields/InputNumber.js delete mode 100644 ui/lib/components/my-form/src/fields/Radio.js delete mode 100644 ui/lib/components/my-form/src/fields/Range.js delete mode 100644 ui/lib/components/my-form/src/fields/Rate.js delete mode 100644 ui/lib/components/my-form/src/fields/Select.js delete mode 100644 ui/lib/components/my-form/src/fields/Slider.js delete mode 100644 ui/lib/components/my-form/src/fields/Switch.js delete mode 100644 ui/lib/components/my-form/src/fields/TagInput.js delete mode 100644 ui/lib/components/my-form/src/fields/TagSelect.js delete mode 100644 ui/lib/components/my-form/src/fields/TreeSelect.js delete mode 100644 ui/lib/components/my-header/index.js delete mode 100644 ui/lib/components/my-header/src/Header.vue delete mode 100644 ui/lib/components/my-highlight/index.js delete mode 100644 ui/lib/components/my-highlight/src/Highlight.js delete mode 100644 ui/lib/components/my-icon/index.js delete mode 100644 ui/lib/components/my-icon/src/Icon.vue delete mode 100644 ui/lib/components/my-img-wall/index.js delete mode 100644 ui/lib/components/my-img-wall/src/Horizontal.vue delete mode 100644 ui/lib/components/my-img-wall/src/ImgWall.vue delete mode 100644 ui/lib/components/my-img-wall/src/Vertical.vue delete mode 100644 ui/lib/components/my-input-number/index.js delete mode 100644 ui/lib/components/my-input/index.js delete mode 100644 ui/lib/components/my-key-val-list/index.js delete mode 100644 ui/lib/components/my-key-val-list/src/KeyValList.vue delete mode 100644 ui/lib/components/my-layout/index.js delete mode 100644 ui/lib/components/my-layout/src/Layout.vue delete mode 100644 ui/lib/components/my-lazy/index.js delete mode 100644 ui/lib/components/my-lazy/src/Lazy.vue delete mode 100644 ui/lib/components/my-list/index.js delete mode 100644 ui/lib/components/my-list/src/List.vue delete mode 100644 ui/lib/components/my-list/src/Pager.js delete mode 100644 ui/lib/components/my-list/src/Scroll.js delete mode 100644 ui/lib/components/my-list/src/Style.js delete mode 100644 ui/lib/components/my-list/src/Virtual.js delete mode 100644 ui/lib/components/my-location-picker/index.js delete mode 100644 ui/lib/components/my-location-picker/src/Index.vue delete mode 100644 ui/lib/components/my-location-picker/src/MapContent.vue delete mode 100644 ui/lib/components/my-location-picker/src/Tip.vue delete mode 100644 ui/lib/components/my-location-picker/src/Tool.vue delete mode 100644 ui/lib/components/my-login/index.js delete mode 100644 ui/lib/components/my-login/src/Login.vue delete mode 100644 ui/lib/components/my-marquee/index.js delete mode 100644 ui/lib/components/my-marquee/src/Marquee.vue delete mode 100644 ui/lib/components/my-master-app/index.js delete mode 100644 ui/lib/components/my-master-app/src/Master.vue delete mode 100644 ui/lib/components/my-menu/index.js delete mode 100644 ui/lib/components/my-menu/src/Menu.vue delete mode 100644 ui/lib/components/my-menu/src/renderers.js delete mode 100644 ui/lib/components/my-micro-app/index.js delete mode 100644 ui/lib/components/my-micro-app/src/MicroApp.vue delete mode 100644 ui/lib/components/my-navbar/index.js delete mode 100644 ui/lib/components/my-navbar/src/Action.vue delete mode 100644 ui/lib/components/my-navbar/src/FullScreenAction.vue delete mode 100644 ui/lib/components/my-navbar/src/IconAction.vue delete mode 100644 ui/lib/components/my-navbar/src/Navbar.vue delete mode 100644 ui/lib/components/my-navbar/src/UserAction.vue delete mode 100644 ui/lib/components/my-navbar/src/dropdown.js delete mode 100644 ui/lib/components/my-number/index.js delete mode 100644 ui/lib/components/my-number/src/CountUp.js delete mode 100644 ui/lib/components/my-number/src/Number.vue delete mode 100644 ui/lib/components/my-panel/index.js delete mode 100644 ui/lib/components/my-panel/src/Action.vue delete mode 100644 ui/lib/components/my-panel/src/Panel.vue delete mode 100644 ui/lib/components/my-paragraph/index.js delete mode 100644 ui/lib/components/my-particle/index.js delete mode 100644 ui/lib/components/my-particle/src/Particle.vue delete mode 100644 ui/lib/components/my-popper/index.js delete mode 100644 ui/lib/components/my-popper/src/Popper.vue delete mode 100644 ui/lib/components/my-print/index.js delete mode 100644 ui/lib/components/my-print/src/Print.vue delete mode 100644 ui/lib/components/my-pro/index.js delete mode 100644 ui/lib/components/my-pro/src/Breadcrumb.vue delete mode 100644 ui/lib/components/my-pro/src/Pro.vue delete mode 100644 ui/lib/components/my-pro/src/Tabs.vue delete mode 100644 ui/lib/components/my-promise/index.js delete mode 100644 ui/lib/components/my-promise/src/Promise.vue delete mode 100644 ui/lib/components/my-radial-menu/index.js delete mode 100644 ui/lib/components/my-radial-menu/src/MenuItem.vue delete mode 100644 ui/lib/components/my-radial-menu/src/RadialMenu.vue delete mode 100644 ui/lib/components/my-radial-menu/src/utils.js delete mode 100644 ui/lib/components/my-radio/index.js delete mode 100644 ui/lib/components/my-range/index.js delete mode 100644 ui/lib/components/my-rate/index.js delete mode 100644 ui/lib/components/my-resize/index.js delete mode 100644 ui/lib/components/my-resize/src/Resize.vue delete mode 100644 ui/lib/components/my-result/index.js delete mode 100644 ui/lib/components/my-result/src/Result.vue delete mode 100644 ui/lib/components/my-result/src/noFound.js delete mode 100644 ui/lib/components/my-result/src/serverError.js delete mode 100644 ui/lib/components/my-result/src/unauthorized.js delete mode 100644 ui/lib/components/my-revolve/index.js delete mode 100644 ui/lib/components/my-revolve/men.js delete mode 100644 ui/lib/components/my-revolve/src/Revolve.vue delete mode 100644 ui/lib/components/my-search-box/index.js delete mode 100644 ui/lib/components/my-search-box/src/SearchBox.vue delete mode 100644 ui/lib/components/my-select-field/index.js delete mode 100644 ui/lib/components/my-select-field/src/SelectField.vue delete mode 100644 ui/lib/components/my-select/index.js delete mode 100644 ui/lib/components/my-sidebar/index.js delete mode 100644 ui/lib/components/my-sidebar/src/Sidebar.vue delete mode 100644 ui/lib/components/my-skeleton/index.js delete mode 100644 ui/lib/components/my-skeleton/src/Skeleton.vue delete mode 100644 ui/lib/components/my-slide-layout/index.js delete mode 100644 ui/lib/components/my-slide-layout/src/Slidelayout.vue delete mode 100644 ui/lib/components/my-slider/index.js delete mode 100644 ui/lib/components/my-sortable/index.js delete mode 100644 ui/lib/components/my-sortable/src/Sortable.js delete mode 100644 ui/lib/components/my-sortable/src/Sortable.vue delete mode 100644 ui/lib/components/my-spin/index.js delete mode 100644 ui/lib/components/my-spin/src/Spin.vue delete mode 100644 ui/lib/components/my-stat-card/index.js delete mode 100644 ui/lib/components/my-stat-card/src/Action.vue delete mode 100644 ui/lib/components/my-stat-card/src/StatCard.vue delete mode 100644 ui/lib/components/my-svg-line/index.js delete mode 100644 ui/lib/components/my-svg-line/src/SvgLine.vue delete mode 100644 ui/lib/components/my-switch/index.js delete mode 100644 ui/lib/components/my-table/index.js delete mode 100644 ui/lib/components/my-table/src/ColumnFilter.vue delete mode 100644 ui/lib/components/my-table/src/Columns.vue delete mode 100644 ui/lib/components/my-table/src/Pager.js delete mode 100644 ui/lib/components/my-table/src/Scroll.js delete mode 100644 ui/lib/components/my-table/src/Sortable.js delete mode 100644 ui/lib/components/my-table/src/Table.vue delete mode 100644 ui/lib/components/my-table/src/Toolbar.vue delete mode 100644 ui/lib/components/my-table/src/Virtual.js delete mode 100644 ui/lib/components/my-tabs/index.js delete mode 100644 ui/lib/components/my-tabs/src/Tabs.vue delete mode 100644 ui/lib/components/my-tag-canvas/index.js delete mode 100644 ui/lib/components/my-tag-canvas/src/TagCanvas.vue delete mode 100644 ui/lib/components/my-tag-canvas/src/tagcanvas.js delete mode 100644 ui/lib/components/my-tag-input/index.js delete mode 100644 ui/lib/components/my-tag-select/index.js delete mode 100644 ui/lib/components/my-text/index.js delete mode 100644 ui/lib/components/my-three-menu/index.js delete mode 100644 ui/lib/components/my-three-menu/src/ThreeMenu.vue delete mode 100644 ui/lib/components/my-timer/index.js delete mode 100644 ui/lib/components/my-timer/src/Timer.vue delete mode 100644 ui/lib/components/my-title/index.js delete mode 100644 ui/lib/components/my-tree-select/index.js delete mode 100644 ui/lib/components/my-typography/index.js delete mode 100644 ui/lib/components/my-typography/src/Base.js delete mode 100644 ui/lib/components/my-typography/src/Editable.vue delete mode 100644 ui/lib/components/my-typography/src/Paragraph.vue delete mode 100644 ui/lib/components/my-typography/src/Text.vue delete mode 100644 ui/lib/components/my-typography/src/Title.vue delete mode 100644 ui/lib/components/my-typography/src/Typography.vue delete mode 100644 ui/lib/components/my-typography/src/ellipsis.js delete mode 100644 ui/lib/components/my-water-fall-slot/index.js delete mode 100644 ui/lib/components/my-water-fall/index.js delete mode 100644 ui/lib/components/my-water-fall/src/Horizontal.vue delete mode 100644 ui/lib/components/my-water-fall/src/Vertical.vue delete mode 100644 ui/lib/components/my-water-fall/src/WaterFall.vue delete mode 100644 ui/lib/components/my-water-fall/src/WaterFallSlot.vue delete mode 100644 ui/lib/components/my-watermark/index.js delete mode 100644 ui/lib/components/my-watermark/src/Watermark.vue delete mode 100644 ui/lib/components/my-wave/index.js delete mode 100644 ui/lib/components/my-wave/src/Wave.vue delete mode 100644 ui/lib/components/my-wrapper/index.js delete mode 100644 ui/lib/components/my-wrapper/src/Wrapper.vue delete mode 100644 ui/lib/config.js delete mode 100644 ui/lib/directives/clipboard.js delete mode 100644 ui/lib/directives/contextmenu.js delete mode 100644 ui/lib/directives/draggable.js delete mode 100644 ui/lib/directives/droppable.js delete mode 100644 ui/lib/directives/highlight.js delete mode 100644 ui/lib/directives/resizable.js delete mode 100644 ui/lib/directives/selecttext.js delete mode 100644 ui/lib/directives/tree-connect.js delete mode 100644 ui/lib/directives/waves.js delete mode 100644 ui/lib/enhance.js delete mode 100644 ui/lib/icons/accurate-search-fill.js delete mode 100644 ui/lib/icons/accurate-search.js delete mode 100644 ui/lib/icons/address-book-fill.js delete mode 100644 ui/lib/icons/address-book.js delete mode 100644 ui/lib/icons/adjust-fill.js delete mode 100644 ui/lib/icons/adjust.js delete mode 100644 ui/lib/icons/aims-fill.js delete mode 100644 ui/lib/icons/aims.js delete mode 100644 ui/lib/icons/airplane-fill.js delete mode 100644 ui/lib/icons/airplane.js delete mode 100644 ui/lib/icons/alarm-fill.js delete mode 100644 ui/lib/icons/alarm.js delete mode 100644 ui/lib/icons/alipay.js delete mode 100644 ui/lib/icons/all-fill.js delete mode 100644 ui/lib/icons/all.js delete mode 100644 ui/lib/icons/ambulance-fill.js delete mode 100644 ui/lib/icons/ambulance.js delete mode 100644 ui/lib/icons/anchor-fill.js delete mode 100644 ui/lib/icons/anchor.js delete mode 100644 ui/lib/icons/annex-fill.js delete mode 100644 ui/lib/icons/annex.js delete mode 100644 ui/lib/icons/anonymous-fill.js delete mode 100644 ui/lib/icons/anonymous.js delete mode 100644 ui/lib/icons/approval-fill.js delete mode 100644 ui/lib/icons/approval-filll.js delete mode 100644 ui/lib/icons/approval.js delete mode 100644 ui/lib/icons/archive-fill.js delete mode 100644 ui/lib/icons/archive.js delete mode 100644 ui/lib/icons/area-map-fill.js delete mode 100644 ui/lib/icons/area-map.js delete mode 100644 ui/lib/icons/arrow-down-fill.js delete mode 100644 ui/lib/icons/arrow-down.js delete mode 100644 ui/lib/icons/arrow-left-fill.js delete mode 100644 ui/lib/icons/arrow-left.js delete mode 100644 ui/lib/icons/arrow-right-fill.js delete mode 100644 ui/lib/icons/arrow-right.js delete mode 100644 ui/lib/icons/arrow-up-fill.js delete mode 100644 ui/lib/icons/arrow-up.js delete mode 100644 ui/lib/icons/associate-fill.js delete mode 100644 ui/lib/icons/associate.js delete mode 100644 ui/lib/icons/astronomical-fill.js delete mode 100644 ui/lib/icons/astronomical.js delete mode 100644 ui/lib/icons/audio-fill.js delete mode 100644 ui/lib/icons/audio.js delete mode 100644 ui/lib/icons/avi-fill.js delete mode 100644 ui/lib/icons/avi.js delete mode 100644 ui/lib/icons/baby-child-fill.js delete mode 100644 ui/lib/icons/baby-child.js delete mode 100644 ui/lib/icons/baby.js delete mode 100644 ui/lib/icons/backstage-data-fill.js delete mode 100644 ui/lib/icons/backstage-data.js delete mode 100644 ui/lib/icons/backward-fill.js delete mode 100644 ui/lib/icons/backward.js delete mode 100644 ui/lib/icons/bad-fill.js delete mode 100644 ui/lib/icons/bad.js delete mode 100644 ui/lib/icons/badge-fill.js delete mode 100644 ui/lib/icons/badge.js delete mode 100644 ui/lib/icons/badreview.js delete mode 100644 ui/lib/icons/baidu.js delete mode 100644 ui/lib/icons/balance-fill.js delete mode 100644 ui/lib/icons/balance.js delete mode 100644 ui/lib/icons/ball-camera-fill.js delete mode 100644 ui/lib/icons/ball-camera.js delete mode 100644 ui/lib/icons/bar-code-fill.js delete mode 100644 ui/lib/icons/bar-code.js delete mode 100644 ui/lib/icons/base-signal-fill.js delete mode 100644 ui/lib/icons/base-signal.js delete mode 100644 ui/lib/icons/base-station-fill.js delete mode 100644 ui/lib/icons/base-station.js delete mode 100644 ui/lib/icons/bayonet-camera-fill.js delete mode 100644 ui/lib/icons/bayonet-camera.js delete mode 100644 ui/lib/icons/bed-fill.js delete mode 100644 ui/lib/icons/bed.js delete mode 100644 ui/lib/icons/bedbug.js delete mode 100644 ui/lib/icons/beehive-fill.js delete mode 100644 ui/lib/icons/beehive.js delete mode 100644 ui/lib/icons/bell-fill.js delete mode 100644 ui/lib/icons/bell-off-fill.js delete mode 100644 ui/lib/icons/bell-off.js delete mode 100644 ui/lib/icons/bell.js delete mode 100644 ui/lib/icons/bigdata-fill.js delete mode 100644 ui/lib/icons/bigdata.js delete mode 100644 ui/lib/icons/bike-fill.js delete mode 100644 ui/lib/icons/bike.js delete mode 100644 ui/lib/icons/bill-fill.js delete mode 100644 ui/lib/icons/bill.js delete mode 100644 ui/lib/icons/blood-fill.js delete mode 100644 ui/lib/icons/blood.js delete mode 100644 ui/lib/icons/bluetooth-fill.js delete mode 100644 ui/lib/icons/bluetooth.js delete mode 100644 ui/lib/icons/board-fill.js delete mode 100644 ui/lib/icons/board.js delete mode 100644 ui/lib/icons/bold-arrow-down-fill.js delete mode 100644 ui/lib/icons/bold-arrow-down.js delete mode 100644 ui/lib/icons/bold-arrow-left-fill.js delete mode 100644 ui/lib/icons/bold-arrow-left.js delete mode 100644 ui/lib/icons/bold-arrow-right-fill.js delete mode 100644 ui/lib/icons/bold-arrow-right.js delete mode 100644 ui/lib/icons/bold-arrow-up-fill.js delete mode 100644 ui/lib/icons/bold-arrow-up.js delete mode 100644 ui/lib/icons/book-fill.js delete mode 100644 ui/lib/icons/book.js delete mode 100644 ui/lib/icons/bookmark-fill.js delete mode 100644 ui/lib/icons/bookmark.js delete mode 100644 ui/lib/icons/brain-fill.js delete mode 100644 ui/lib/icons/brain.js delete mode 100644 ui/lib/icons/branch-fill.js delete mode 100644 ui/lib/icons/branch.js delete mode 100644 ui/lib/icons/breathe-fill.js delete mode 100644 ui/lib/icons/breathe.js delete mode 100644 ui/lib/icons/briefcase-fill.js delete mode 100644 ui/lib/icons/briefcase.js delete mode 100644 ui/lib/icons/broadcast-fill.js delete mode 100644 ui/lib/icons/broadcast.js delete mode 100644 ui/lib/icons/build-fill.js delete mode 100644 ui/lib/icons/build.js delete mode 100644 ui/lib/icons/building-fill.js delete mode 100644 ui/lib/icons/building.js delete mode 100644 ui/lib/icons/bulb-fill.js delete mode 100644 ui/lib/icons/bulb.js delete mode 100644 ui/lib/icons/bullseye-fill.js delete mode 100644 ui/lib/icons/bullseye.js delete mode 100644 ui/lib/icons/bus-fill.js delete mode 100644 ui/lib/icons/bus.js delete mode 100644 ui/lib/icons/caidaquan.js delete mode 100644 ui/lib/icons/cainiao.js delete mode 100644 ui/lib/icons/calendar-fill.js delete mode 100644 ui/lib/icons/calendar-v2.js delete mode 100644 ui/lib/icons/calendar.js delete mode 100644 ui/lib/icons/calendar2-fill.js delete mode 100644 ui/lib/icons/calendar2.js delete mode 100644 ui/lib/icons/call-fill.js delete mode 100644 ui/lib/icons/call.js delete mode 100644 ui/lib/icons/camera-fill.js delete mode 100644 ui/lib/icons/camera-old-fill.js delete mode 100644 ui/lib/icons/camera-old.js delete mode 100644 ui/lib/icons/camera.js delete mode 100644 ui/lib/icons/car-collision-fill.js delete mode 100644 ui/lib/icons/car-collision.js delete mode 100644 ui/lib/icons/car-fill.js delete mode 100644 ui/lib/icons/car-v2.js delete mode 100644 ui/lib/icons/car.js delete mode 100644 ui/lib/icons/car2-fill.js delete mode 100644 ui/lib/icons/car2.js delete mode 100644 ui/lib/icons/card-fill.js delete mode 100644 ui/lib/icons/card-solid.js delete mode 100644 ui/lib/icons/card.js delete mode 100644 ui/lib/icons/careful-fill.js delete mode 100644 ui/lib/icons/careful.js delete mode 100644 ui/lib/icons/case-file-fill.js delete mode 100644 ui/lib/icons/case-file.js delete mode 100644 ui/lib/icons/cbox-fill.js delete mode 100644 ui/lib/icons/cbox.js delete mode 100644 ui/lib/icons/cdr-fill.js delete mode 100644 ui/lib/icons/cdr.js delete mode 100644 ui/lib/icons/chart-bar.js delete mode 100644 ui/lib/icons/chart-line-fill.js delete mode 100644 ui/lib/icons/chart-line.js delete mode 100644 ui/lib/icons/chart-trend-fill.js delete mode 100644 ui/lib/icons/chart-trend.js delete mode 100644 ui/lib/icons/chat-border.js delete mode 100644 ui/lib/icons/chat-fill.js delete mode 100644 ui/lib/icons/chat.js delete mode 100644 ui/lib/icons/check-fill.js delete mode 100644 ui/lib/icons/check.js delete mode 100644 ui/lib/icons/checkbox-fill.js delete mode 100644 ui/lib/icons/checkbox-minus-fill.js delete mode 100644 ui/lib/icons/checkbox-minus.js delete mode 100644 ui/lib/icons/checkbox-off.js delete mode 100644 ui/lib/icons/checkbox-ok-fill.js delete mode 100644 ui/lib/icons/checkbox-ok.js delete mode 100644 ui/lib/icons/checkbox-on.js delete mode 100644 ui/lib/icons/checkbox-plus-fill.js delete mode 100644 ui/lib/icons/checkbox-plus.js delete mode 100644 ui/lib/icons/checkbox.js delete mode 100644 ui/lib/icons/chemistry-fill.js delete mode 100644 ui/lib/icons/chemistry.js delete mode 100644 ui/lib/icons/child.js delete mode 100644 ui/lib/icons/children-fill.js delete mode 100644 ui/lib/icons/children.js delete mode 100644 ui/lib/icons/chinapost.js delete mode 100644 ui/lib/icons/chip-fill.js delete mode 100644 ui/lib/icons/chip.js delete mode 100644 ui/lib/icons/choice-fill.js delete mode 100644 ui/lib/icons/choice.js delete mode 100644 ui/lib/icons/circler-layout-fill.js delete mode 100644 ui/lib/icons/circler-layout.js delete mode 100644 ui/lib/icons/circulation-fill.js delete mode 100644 ui/lib/icons/circulation.js delete mode 100644 ui/lib/icons/city-fill.js delete mode 100644 ui/lib/icons/city.js delete mode 100644 ui/lib/icons/clock-fill.js delete mode 100644 ui/lib/icons/clock.js delete mode 100644 ui/lib/icons/clothes-fill.js delete mode 100644 ui/lib/icons/clothes.js delete mode 100644 ui/lib/icons/cloud-disk-fill.js delete mode 100644 ui/lib/icons/cloud-disk.js delete mode 100644 ui/lib/icons/cloud-download-fill.js delete mode 100644 ui/lib/icons/cloud-download.js delete mode 100644 ui/lib/icons/cloud-fill.js delete mode 100644 ui/lib/icons/cloud-link-fill.js delete mode 100644 ui/lib/icons/cloud-link.js delete mode 100644 ui/lib/icons/cloud-search-fill.js delete mode 100644 ui/lib/icons/cloud-search.js delete mode 100644 ui/lib/icons/cloud-server-fill.js delete mode 100644 ui/lib/icons/cloud-server.js delete mode 100644 ui/lib/icons/cloud-service-fill.js delete mode 100644 ui/lib/icons/cloud-service.js delete mode 100644 ui/lib/icons/cloud-upload-fill.js delete mode 100644 ui/lib/icons/cloud-upload.js delete mode 100644 ui/lib/icons/cloud.js delete mode 100644 ui/lib/icons/coach-fill.js delete mode 100644 ui/lib/icons/coach.js delete mode 100644 ui/lib/icons/code-branch.js delete mode 100644 ui/lib/icons/code-fill.js delete mode 100644 ui/lib/icons/code.js delete mode 100644 ui/lib/icons/coffee-fill.js delete mode 100644 ui/lib/icons/coffee.js delete mode 100644 ui/lib/icons/collaboration-fill.js delete mode 100644 ui/lib/icons/collaboration-system-fill.js delete mode 100644 ui/lib/icons/collaboration-system.js delete mode 100644 ui/lib/icons/collaboration.js delete mode 100644 ui/lib/icons/collapsed.js delete mode 100644 ui/lib/icons/collision-fill.js delete mode 100644 ui/lib/icons/collision.js delete mode 100644 ui/lib/icons/columns-fill.js delete mode 100644 ui/lib/icons/columns.js delete mode 100644 ui/lib/icons/combine-fill.js delete mode 100644 ui/lib/icons/combine.js delete mode 100644 ui/lib/icons/comment-fill.js delete mode 100644 ui/lib/icons/comment-v2.js delete mode 100644 ui/lib/icons/comment.js delete mode 100644 ui/lib/icons/comment2-fill.js delete mode 100644 ui/lib/icons/comment2.js delete mode 100644 ui/lib/icons/compact-car-fill.js delete mode 100644 ui/lib/icons/compact-car.js delete mode 100644 ui/lib/icons/compass-fill.js delete mode 100644 ui/lib/icons/compass.js delete mode 100644 ui/lib/icons/component-fill.js delete mode 100644 ui/lib/icons/component.js delete mode 100644 ui/lib/icons/components-fill.js delete mode 100644 ui/lib/icons/components.js delete mode 100644 ui/lib/icons/computer-fill.js delete mode 100644 ui/lib/icons/computer.js delete mode 100644 ui/lib/icons/cooperation-fill.js delete mode 100644 ui/lib/icons/cooperation.js delete mode 100644 ui/lib/icons/copier-fill.js delete mode 100644 ui/lib/icons/copier.js delete mode 100644 ui/lib/icons/copy-comparison-fill.js delete mode 100644 ui/lib/icons/copy-comparison-full.js delete mode 100644 ui/lib/icons/copy-comparison.js delete mode 100644 ui/lib/icons/copy-fill.js delete mode 100644 ui/lib/icons/copy-rect-fill.js delete mode 100644 ui/lib/icons/copy-rect.js delete mode 100644 ui/lib/icons/copy.js delete mode 100644 ui/lib/icons/corpse-fill.js delete mode 100644 ui/lib/icons/corpse.js delete mode 100644 ui/lib/icons/cpu-fill.js delete mode 100644 ui/lib/icons/cpu.js delete mode 100644 ui/lib/icons/credentials-fill.js delete mode 100644 ui/lib/icons/credentials.js delete mode 100644 ui/lib/icons/crop-fill.js delete mode 100644 ui/lib/icons/crop.js delete mode 100644 ui/lib/icons/cuff-fill.js delete mode 100644 ui/lib/icons/cuff.js delete mode 100644 ui/lib/icons/cup-fill.js delete mode 100644 ui/lib/icons/cup.js delete mode 100644 ui/lib/icons/cycle-fill.js delete mode 100644 ui/lib/icons/cycle.js delete mode 100644 ui/lib/icons/dad.js delete mode 100644 ui/lib/icons/danger-fill.js delete mode 100644 ui/lib/icons/danger.js delete mode 100644 ui/lib/icons/dark-fill.js delete mode 100644 ui/lib/icons/dark.js delete mode 100644 ui/lib/icons/dashboard-fill.js delete mode 100644 ui/lib/icons/dashboard.js delete mode 100644 ui/lib/icons/data-Inquire-fill.js delete mode 100644 ui/lib/icons/data-abnormal-fill.js delete mode 100644 ui/lib/icons/data-abnormal.js delete mode 100644 ui/lib/icons/data-download-fill.js delete mode 100644 ui/lib/icons/data-download.js delete mode 100644 ui/lib/icons/data-lnquire-fill.js delete mode 100644 ui/lib/icons/data-lnquire.js delete mode 100644 ui/lib/icons/data-management-fill.js delete mode 100644 ui/lib/icons/data-management.js delete mode 100644 ui/lib/icons/data-update-fill.js delete mode 100644 ui/lib/icons/data-update.js delete mode 100644 ui/lib/icons/database-fill.js delete mode 100644 ui/lib/icons/database.js delete mode 100644 ui/lib/icons/debug-fill.js delete mode 100644 ui/lib/icons/debug.js delete mode 100644 ui/lib/icons/delete-fill.js delete mode 100644 ui/lib/icons/delete.js delete mode 100644 ui/lib/icons/desktop-fill.js delete mode 100644 ui/lib/icons/desktop.js delete mode 100644 ui/lib/icons/destroy-fill.js delete mode 100644 ui/lib/icons/destroy.js delete mode 100644 ui/lib/icons/dialog-close.js delete mode 100644 ui/lib/icons/dialog-maximize.js delete mode 100644 ui/lib/icons/dialog-minimize.js delete mode 100644 ui/lib/icons/dialog-window.js delete mode 100644 ui/lib/icons/dianxin-fill.js delete mode 100644 ui/lib/icons/dianxin.js delete mode 100644 ui/lib/icons/dingtalk.js delete mode 100644 ui/lib/icons/direction-fill.js delete mode 100644 ui/lib/icons/direction.js delete mode 100644 ui/lib/icons/disability.js delete mode 100644 ui/lib/icons/disappointed-fill.js delete mode 100644 ui/lib/icons/disappointed.js delete mode 100644 ui/lib/icons/dna-fill.js delete mode 100644 ui/lib/icons/dna.js delete mode 100644 ui/lib/icons/doctor-fill.js delete mode 100644 ui/lib/icons/doctor-hat.js delete mode 100644 ui/lib/icons/doctor.js delete mode 100644 ui/lib/icons/double-arrow-down-fill.js delete mode 100644 ui/lib/icons/double-arrow-down.js delete mode 100644 ui/lib/icons/double-arrow-left-fill.js delete mode 100644 ui/lib/icons/double-arrow-left.js delete mode 100644 ui/lib/icons/double-arrow-right-fill.js delete mode 100644 ui/lib/icons/double-arrow-right.js delete mode 100644 ui/lib/icons/double-arrow-up-fill.js delete mode 100644 ui/lib/icons/double-arrow-up.js delete mode 100644 ui/lib/icons/double-circle-fill.js delete mode 100644 ui/lib/icons/double-circle.js delete mode 100644 ui/lib/icons/douyin.js delete mode 100644 ui/lib/icons/download-fill.js delete mode 100644 ui/lib/icons/download.js delete mode 100644 ui/lib/icons/drip-fill.js delete mode 100644 ui/lib/icons/drip.js delete mode 100644 ui/lib/icons/dropper-fill.js delete mode 100644 ui/lib/icons/dropper.js delete mode 100644 ui/lib/icons/drug-fill.js delete mode 100644 ui/lib/icons/drug.js delete mode 100644 ui/lib/icons/e.js delete mode 100644 ui/lib/icons/ear-fill.js delete mode 100644 ui/lib/icons/ear.js delete mode 100644 ui/lib/icons/earth-fill.js delete mode 100644 ui/lib/icons/earth.js delete mode 100644 ui/lib/icons/edit-fill.js delete mode 100644 ui/lib/icons/edit.js delete mode 100644 ui/lib/icons/electricity-fill.js delete mode 100644 ui/lib/icons/electricity.js delete mode 100644 ui/lib/icons/elment.js delete mode 100644 ui/lib/icons/ems.js delete mode 100644 ui/lib/icons/enlarge-fill.js delete mode 100644 ui/lib/icons/enlarge.js delete mode 100644 ui/lib/icons/enter.js delete mode 100644 ui/lib/icons/envelope-fill.js delete mode 100644 ui/lib/icons/envelope-open-fill.js delete mode 100644 ui/lib/icons/envelope-open.js delete mode 100644 ui/lib/icons/envelope.js delete mode 100644 ui/lib/icons/esm-fill.js delete mode 100644 ui/lib/icons/esm.js delete mode 100644 ui/lib/icons/evaluation-fill.js delete mode 100644 ui/lib/icons/evaluation.js delete mode 100644 ui/lib/icons/excel-fill.js delete mode 100644 ui/lib/icons/excel.js delete mode 100644 ui/lib/icons/exchange-fill.js delete mode 100644 ui/lib/icons/exchange.js delete mode 100644 ui/lib/icons/exit-fill.js delete mode 100644 ui/lib/icons/exit.js delete mode 100644 ui/lib/icons/expand-fill.js delete mode 100644 ui/lib/icons/expand.js delete mode 100644 ui/lib/icons/explain-fill.js delete mode 100644 ui/lib/icons/explain.js delete mode 100644 ui/lib/icons/express-package-fill.js delete mode 100644 ui/lib/icons/express-package.js delete mode 100644 ui/lib/icons/eye-fill.js delete mode 100644 ui/lib/icons/eye-open.js delete mode 100644 ui/lib/icons/eye.js delete mode 100644 ui/lib/icons/factory-fill.js delete mode 100644 ui/lib/icons/factory.js delete mode 100644 ui/lib/icons/failure-fill.js delete mode 100644 ui/lib/icons/failure.js delete mode 100644 ui/lib/icons/fall-fill.js delete mode 100644 ui/lib/icons/fall.js delete mode 100644 ui/lib/icons/family.js delete mode 100644 ui/lib/icons/father-son.js delete mode 100644 ui/lib/icons/fax-fill.js delete mode 100644 ui/lib/icons/fax.js delete mode 100644 ui/lib/icons/fcbox.js delete mode 100644 ui/lib/icons/fence-fill.js delete mode 100644 ui/lib/icons/fence.js delete mode 100644 ui/lib/icons/fenxiang.js delete mode 100644 ui/lib/icons/fetion.js delete mode 100644 ui/lib/icons/file-fill.js delete mode 100644 ui/lib/icons/file-text-fill.js delete mode 100644 ui/lib/icons/file-text.js delete mode 100644 ui/lib/icons/file.js delete mode 100644 ui/lib/icons/files-fill.js delete mode 100644 ui/lib/icons/files.js delete mode 100644 ui/lib/icons/film-fill.js delete mode 100644 ui/lib/icons/film.js delete mode 100644 ui/lib/icons/filter-fill.js delete mode 100644 ui/lib/icons/filter.js delete mode 100644 ui/lib/icons/fingerprint-fill.js delete mode 100644 ui/lib/icons/fingerprint.js delete mode 100644 ui/lib/icons/firearms-fill.js delete mode 100644 ui/lib/icons/firearms.js delete mode 100644 ui/lib/icons/fix.js delete mode 100644 ui/lib/icons/fixed-fill.js delete mode 100644 ui/lib/icons/fixed-telephone-fill.js delete mode 100644 ui/lib/icons/fixed-telephone.js delete mode 100644 ui/lib/icons/fixed.js delete mode 100644 ui/lib/icons/flag-fill.js delete mode 100644 ui/lib/icons/flag.js delete mode 100644 ui/lib/icons/flash.js delete mode 100644 ui/lib/icons/flask-fill.js delete mode 100644 ui/lib/icons/flask.js delete mode 100644 ui/lib/icons/flat-fill.js delete mode 100644 ui/lib/icons/flat.js delete mode 100644 ui/lib/icons/floor-building-fill.js delete mode 100644 ui/lib/icons/floor-building.js delete mode 100644 ui/lib/icons/flower-fill.js delete mode 100644 ui/lib/icons/flower.js delete mode 100644 ui/lib/icons/fly-letter.js delete mode 100644 ui/lib/icons/folder-fill.js delete mode 100644 ui/lib/icons/folder-open-fill.js delete mode 100644 ui/lib/icons/folder-open.js delete mode 100644 ui/lib/icons/folder.js delete mode 100644 ui/lib/icons/foot-fill.js delete mode 100644 ui/lib/icons/foot.js delete mode 100644 ui/lib/icons/footprint-fill.js delete mode 100644 ui/lib/icons/footprint.js delete mode 100644 ui/lib/icons/four-squares-fill.js delete mode 100644 ui/lib/icons/four-squares.js delete mode 100644 ui/lib/icons/freshhema.js delete mode 100644 ui/lib/icons/full-fill.js delete mode 100644 ui/lib/icons/full.js delete mode 100644 ui/lib/icons/fullscreen-exit.js delete mode 100644 ui/lib/icons/fullscreen.js delete mode 100644 ui/lib/icons/fuwupingjia-kefu.js delete mode 100644 ui/lib/icons/gantt-fill.js delete mode 100644 ui/lib/icons/gantt.js delete mode 100644 ui/lib/icons/gearmore-fill.js delete mode 100644 ui/lib/icons/gearmore.js delete mode 100644 ui/lib/icons/gentleman.js delete mode 100644 ui/lib/icons/gift-fill.js delete mode 100644 ui/lib/icons/gift.js delete mode 100644 ui/lib/icons/go-circle.js delete mode 100644 ui/lib/icons/go-connect.js delete mode 100644 ui/lib/icons/go-excel.js delete mode 100644 ui/lib/icons/go-far.js delete mode 100644 ui/lib/icons/go-fill.js delete mode 100644 ui/lib/icons/go-grid.js delete mode 100644 ui/lib/icons/go-hide.js delete mode 100644 ui/lib/icons/go-image.js delete mode 100644 ui/lib/icons/go-invert.js delete mode 100644 ui/lib/icons/go-json.js delete mode 100644 ui/lib/icons/go-lock.js delete mode 100644 ui/lib/icons/go-near.js delete mode 100644 ui/lib/icons/go-network.js delete mode 100644 ui/lib/icons/go-org.js delete mode 100644 ui/lib/icons/go-redo.js delete mode 100644 ui/lib/icons/go-search.js delete mode 100644 ui/lib/icons/go-select.js delete mode 100644 ui/lib/icons/go-show-all.js delete mode 100644 ui/lib/icons/go-undo.js delete mode 100644 ui/lib/icons/go-unlock.js delete mode 100644 ui/lib/icons/go-view.js delete mode 100644 ui/lib/icons/go-visible.js delete mode 100644 ui/lib/icons/go-zoom-in.js delete mode 100644 ui/lib/icons/go-zoom-out.js delete mode 100644 ui/lib/icons/go.js delete mode 100644 ui/lib/icons/gps-fill.js delete mode 100644 ui/lib/icons/gps.js delete mode 100644 ui/lib/icons/grandma.js delete mode 100644 ui/lib/icons/grandpa.js delete mode 100644 ui/lib/icons/grid-layout-fill.js delete mode 100644 ui/lib/icons/grid-layout.js delete mode 100644 ui/lib/icons/group-fill.js delete mode 100644 ui/lib/icons/group.js delete mode 100644 ui/lib/icons/hammer-fill.js delete mode 100644 ui/lib/icons/hammer.js delete mode 100644 ui/lib/icons/hand-fill.js delete mode 100644 ui/lib/icons/hand.js delete mode 100644 ui/lib/icons/handbag-fill.js delete mode 100644 ui/lib/icons/handbag.js delete mode 100644 ui/lib/icons/happy-fill.js delete mode 100644 ui/lib/icons/happy.js delete mode 100644 ui/lib/icons/headphones-fill.js delete mode 100644 ui/lib/icons/headphones.js delete mode 100644 ui/lib/icons/headset-fill.js delete mode 100644 ui/lib/icons/headset.js delete mode 100644 ui/lib/icons/hear-fill.js delete mode 100644 ui/lib/icons/hear-half.js delete mode 100644 ui/lib/icons/hear.js delete mode 100644 ui/lib/icons/heart-fill.js delete mode 100644 ui/lib/icons/heart-rate-fill.js delete mode 100644 ui/lib/icons/heart-rate.js delete mode 100644 ui/lib/icons/heart.js delete mode 100644 ui/lib/icons/helicopter-fill.js delete mode 100644 ui/lib/icons/helicopter.js delete mode 100644 ui/lib/icons/help.js delete mode 100644 ui/lib/icons/high-building-fill.js delete mode 100644 ui/lib/icons/high-building.js delete mode 100644 ui/lib/icons/high-road-fill.js delete mode 100644 ui/lib/icons/high-road.js delete mode 100644 ui/lib/icons/histogram-fill.js delete mode 100644 ui/lib/icons/histogram.js delete mode 100644 ui/lib/icons/history-fill.js delete mode 100644 ui/lib/icons/history.js delete mode 100644 ui/lib/icons/hit-fill.js delete mode 100644 ui/lib/icons/hit.js delete mode 100644 ui/lib/icons/home-fill.js delete mode 100644 ui/lib/icons/home.js delete mode 100644 ui/lib/icons/hospital-fill.js delete mode 100644 ui/lib/icons/hospital.js delete mode 100644 ui/lib/icons/hot-spot-signal-fill.js delete mode 100644 ui/lib/icons/hot-spot-signal.js delete mode 100644 ui/lib/icons/hotspot-fill.js delete mode 100644 ui/lib/icons/hotspot.js delete mode 100644 ui/lib/icons/house-fill.js delete mode 100644 ui/lib/icons/house.js delete mode 100644 ui/lib/icons/id-card-fill.js delete mode 100644 ui/lib/icons/id-card.js delete mode 100644 ui/lib/icons/idea-fill.js delete mode 100644 ui/lib/icons/idea.js delete mode 100644 ui/lib/icons/image-fill.js delete mode 100644 ui/lib/icons/image.js delete mode 100644 ui/lib/icons/imei-fill.js delete mode 100644 ui/lib/icons/imei.js delete mode 100644 ui/lib/icons/imsi-fill.js delete mode 100644 ui/lib/icons/imsi.js delete mode 100644 ui/lib/icons/inbox-fill.js delete mode 100644 ui/lib/icons/inbox.js delete mode 100644 ui/lib/icons/indent-remove-fill.js delete mode 100644 ui/lib/icons/indent-remove.js delete mode 100644 ui/lib/icons/indent.js delete mode 100644 ui/lib/icons/index.js delete mode 100644 ui/lib/icons/indicator-fill.js delete mode 100644 ui/lib/icons/indicator.js delete mode 100644 ui/lib/icons/info-fill.js delete mode 100644 ui/lib/icons/info.js delete mode 100644 ui/lib/icons/insert-bottom-fill.js delete mode 100644 ui/lib/icons/insert-bottom.js delete mode 100644 ui/lib/icons/insert-left-fill.js delete mode 100644 ui/lib/icons/insert-left.js delete mode 100644 ui/lib/icons/insert-right-fill.js delete mode 100644 ui/lib/icons/insert-right.js delete mode 100644 ui/lib/icons/insert-top-fill.js delete mode 100644 ui/lib/icons/insert-top.js delete mode 100644 ui/lib/icons/inside-play.js delete mode 100644 ui/lib/icons/internet-fill.js delete mode 100644 ui/lib/icons/internet.js delete mode 100644 ui/lib/icons/invert-fill.js delete mode 100644 ui/lib/icons/invert.js delete mode 100644 ui/lib/icons/invisible-fill.js delete mode 100644 ui/lib/icons/invisible.js delete mode 100644 ui/lib/icons/jail-fill.js delete mode 100644 ui/lib/icons/jail.js delete mode 100644 ui/lib/icons/json-fill.js delete mode 100644 ui/lib/icons/json.js delete mode 100644 ui/lib/icons/judge-fill.js delete mode 100644 ui/lib/icons/judge.js delete mode 100644 ui/lib/icons/key-fill.js delete mode 100644 ui/lib/icons/key.js delete mode 100644 ui/lib/icons/keyborad-fill.js delete mode 100644 ui/lib/icons/keyborad.js delete mode 100644 ui/lib/icons/kidney-fill.js delete mode 100644 ui/lib/icons/kidney.js delete mode 100644 ui/lib/icons/kinship-fill.js delete mode 100644 ui/lib/icons/kinship.js delete mode 100644 ui/lib/icons/knowledge-fill.js delete mode 100644 ui/lib/icons/knowledge.js delete mode 100644 ui/lib/icons/kuaishou.js delete mode 100644 ui/lib/icons/lady.js delete mode 100644 ui/lib/icons/lcd-fill.js delete mode 100644 ui/lib/icons/lcd.js delete mode 100644 ui/lib/icons/liantong-fill.js delete mode 100644 ui/lib/icons/liantong.js delete mode 100644 ui/lib/icons/life-buoy.js delete mode 100644 ui/lib/icons/light-fill.js delete mode 100644 ui/lib/icons/light.js delete mode 100644 ui/lib/icons/lightning-fill.js delete mode 100644 ui/lib/icons/lightning.js delete mode 100644 ui/lib/icons/like-fill.js delete mode 100644 ui/lib/icons/like.js delete mode 100644 ui/lib/icons/line-phone-fill.js delete mode 100644 ui/lib/icons/line-phone.js delete mode 100644 ui/lib/icons/link-arrow-h-fill.js delete mode 100644 ui/lib/icons/link-arrow-h.js delete mode 100644 ui/lib/icons/link-arrow-v-fill.js delete mode 100644 ui/lib/icons/link-arrow-v.js delete mode 100644 ui/lib/icons/link-fill.js delete mode 100644 ui/lib/icons/link-off-fill.js delete mode 100644 ui/lib/icons/link-off.js delete mode 100644 ui/lib/icons/link.js delete mode 100644 ui/lib/icons/list-v2.js delete mode 100644 ui/lib/icons/list-v3.js delete mode 100644 ui/lib/icons/list-v4.js delete mode 100644 ui/lib/icons/list.js delete mode 100644 ui/lib/icons/list2-fill.js delete mode 100644 ui/lib/icons/list2.js delete mode 100644 ui/lib/icons/list3-fill.js delete mode 100644 ui/lib/icons/list3.js delete mode 100644 ui/lib/icons/list4-fill.js delete mode 100644 ui/lib/icons/list4.js delete mode 100644 ui/lib/icons/load.js delete mode 100644 ui/lib/icons/loading-fill.js delete mode 100644 ui/lib/icons/loading.js delete mode 100644 ui/lib/icons/location-fill.js delete mode 100644 ui/lib/icons/location.js delete mode 100644 ui/lib/icons/lock-fill.js delete mode 100644 ui/lib/icons/lock-off-v2.js delete mode 100644 ui/lib/icons/lock-off.js delete mode 100644 ui/lib/icons/lock.js delete mode 100644 ui/lib/icons/locus-fill.js delete mode 100644 ui/lib/icons/locus.js delete mode 100644 ui/lib/icons/login-fill.js delete mode 100644 ui/lib/icons/login.js delete mode 100644 ui/lib/icons/logo-colour-v2.js delete mode 100644 ui/lib/icons/logo-colour.js delete mode 100644 ui/lib/icons/logo.js delete mode 100644 ui/lib/icons/logout.js delete mode 100644 ui/lib/icons/loop-fill.js delete mode 100644 ui/lib/icons/loop.js delete mode 100644 ui/lib/icons/m.js delete mode 100644 ui/lib/icons/mac-fill.js delete mode 100644 ui/lib/icons/mac.js delete mode 100644 ui/lib/icons/magic-fill.js delete mode 100644 ui/lib/icons/magic.js delete mode 100644 ui/lib/icons/man-fill.js delete mode 100644 ui/lib/icons/man.js delete mode 100644 ui/lib/icons/manage-circuit-fill.js delete mode 100644 ui/lib/icons/manage-circuit.js delete mode 100644 ui/lib/icons/map-architecture.js delete mode 100644 ui/lib/icons/map-connect-fill.js delete mode 100644 ui/lib/icons/map-connect.js delete mode 100644 ui/lib/icons/map-direction-fill.js delete mode 100644 ui/lib/icons/map-direction.js delete mode 100644 ui/lib/icons/map-fill.js delete mode 100644 ui/lib/icons/map-finger-fill.js delete mode 100644 ui/lib/icons/map-finger.js delete mode 100644 ui/lib/icons/map-gas-fill.js delete mode 100644 ui/lib/icons/map-gas.js delete mode 100644 ui/lib/icons/map-indicator-fill.js delete mode 100644 ui/lib/icons/map-indicator.js delete mode 100644 ui/lib/icons/map-link-fill.js delete mode 100644 ui/lib/icons/map-link.js delete mode 100644 ui/lib/icons/map-oil-fill.js delete mode 100644 ui/lib/icons/map-oil.js delete mode 100644 ui/lib/icons/map-pin-fill.js delete mode 100644 ui/lib/icons/map-pin.js delete mode 100644 ui/lib/icons/map-ruler-fill.js delete mode 100644 ui/lib/icons/map-ruler.js delete mode 100644 ui/lib/icons/map-site-fill.js delete mode 100644 ui/lib/icons/map-site.js delete mode 100644 ui/lib/icons/map-thumbtack-fill.js delete mode 100644 ui/lib/icons/map-thumbtack.js delete mode 100644 ui/lib/icons/map.js delete mode 100644 ui/lib/icons/mbile-fill.js delete mode 100644 ui/lib/icons/mbile.js delete mode 100644 ui/lib/icons/meituan.js delete mode 100644 ui/lib/icons/men.js delete mode 100644 ui/lib/icons/message-fill.js delete mode 100644 ui/lib/icons/message.js delete mode 100644 ui/lib/icons/mi.js delete mode 100644 ui/lib/icons/mic-off-fill.js delete mode 100644 ui/lib/icons/mic-off.js delete mode 100644 ui/lib/icons/mic-on-fill.js delete mode 100644 ui/lib/icons/mic-on.js delete mode 100644 ui/lib/icons/microblog.js delete mode 100644 ui/lib/icons/microphone-fill.js delete mode 100644 ui/lib/icons/microphone.js delete mode 100644 ui/lib/icons/microscope-fill.js delete mode 100644 ui/lib/icons/microscope.js delete mode 100644 ui/lib/icons/mid-fill.js delete mode 100644 ui/lib/icons/mid.js delete mode 100644 ui/lib/icons/mind-fill.js delete mode 100644 ui/lib/icons/mind.js delete mode 100644 ui/lib/icons/mind2-fill.js delete mode 100644 ui/lib/icons/mind2.js delete mode 100644 ui/lib/icons/minus-border.js delete mode 100644 ui/lib/icons/minus-fill.js delete mode 100644 ui/lib/icons/minus.js delete mode 100644 ui/lib/icons/missfresh.js delete mode 100644 ui/lib/icons/mitalk.js delete mode 100644 ui/lib/icons/mom.js delete mode 100644 ui/lib/icons/momo.js delete mode 100644 ui/lib/icons/monitor-camera-fill.js delete mode 100644 ui/lib/icons/monitor-camera.js delete mode 100644 ui/lib/icons/mono-bottom-fill.js delete mode 100644 ui/lib/icons/mono-bottom.js delete mode 100644 ui/lib/icons/mono-left-fill.js delete mode 100644 ui/lib/icons/mono-left.js delete mode 100644 ui/lib/icons/mono-right-fill.js delete mode 100644 ui/lib/icons/mono-right.js delete mode 100644 ui/lib/icons/mono-top-fill.js delete mode 100644 ui/lib/icons/mono-top.js delete mode 100644 ui/lib/icons/mother-son.js delete mode 100644 ui/lib/icons/motor-fill.js delete mode 100644 ui/lib/icons/motor.js delete mode 100644 ui/lib/icons/moustache-fill.js delete mode 100644 ui/lib/icons/moustache.js delete mode 100644 ui/lib/icons/mouth-fill.js delete mode 100644 ui/lib/icons/mouth.js delete mode 100644 ui/lib/icons/move-fill.js delete mode 100644 ui/lib/icons/move.js delete mode 100644 ui/lib/icons/multiply-fill.js delete mode 100644 ui/lib/icons/multiply.js delete mode 100644 ui/lib/icons/music-fill.js delete mode 100644 ui/lib/icons/music.js delete mode 100644 ui/lib/icons/mute-fill.js delete mode 100644 ui/lib/icons/mute.js delete mode 100644 ui/lib/icons/name-card-fill.js delete mode 100644 ui/lib/icons/name-card.js delete mode 100644 ui/lib/icons/narrow-fill.js delete mode 100644 ui/lib/icons/narrow.js delete mode 100644 ui/lib/icons/network-fill.js delete mode 100644 ui/lib/icons/network-layout-fill.js delete mode 100644 ui/lib/icons/network-layout.js delete mode 100644 ui/lib/icons/network.js delete mode 100644 ui/lib/icons/news-failure.js delete mode 100644 ui/lib/icons/news-fill.js delete mode 100644 ui/lib/icons/news-info.js delete mode 100644 ui/lib/icons/news-success.js delete mode 100644 ui/lib/icons/news-warn.js delete mode 100644 ui/lib/icons/news.js delete mode 100644 ui/lib/icons/newspaper-fill.js delete mode 100644 ui/lib/icons/newspaper.js delete mode 100644 ui/lib/icons/next-fill.js delete mode 100644 ui/lib/icons/next-step-fill.js delete mode 100644 ui/lib/icons/next-step.js delete mode 100644 ui/lib/icons/next.js delete mode 100644 ui/lib/icons/nfc-fill.js delete mode 100644 ui/lib/icons/nfc.js delete mode 100644 ui/lib/icons/nine-squares-fill.js delete mode 100644 ui/lib/icons/nine-squares.js delete mode 100644 ui/lib/icons/no-fill.js delete mode 100644 ui/lib/icons/no.js delete mode 100644 ui/lib/icons/nose-fill.js delete mode 100644 ui/lib/icons/nose.js delete mode 100644 ui/lib/icons/note-fill.js delete mode 100644 ui/lib/icons/note.js delete mode 100644 ui/lib/icons/notebook-fill.js delete mode 100644 ui/lib/icons/notebook.js delete mode 100644 ui/lib/icons/num-list-fill.js delete mode 100644 ui/lib/icons/num-list.js delete mode 100644 ui/lib/icons/number-sign-fill.js delete mode 100644 ui/lib/icons/number-sign.js delete mode 100644 ui/lib/icons/odbc-fill.js delete mode 100644 ui/lib/icons/odbc.js delete mode 100644 ui/lib/icons/ok-fill.js delete mode 100644 ui/lib/icons/ok.js delete mode 100644 ui/lib/icons/orbit-fill.js delete mode 100644 ui/lib/icons/orbit.js delete mode 100644 ui/lib/icons/org-fill.js delete mode 100644 ui/lib/icons/org.js delete mode 100644 ui/lib/icons/organiz-fill.js delete mode 100644 ui/lib/icons/organiz.js delete mode 100644 ui/lib/icons/organization-fill.js delete mode 100644 ui/lib/icons/organization.js delete mode 100644 ui/lib/icons/outdent.js delete mode 100644 ui/lib/icons/pad-fill.js delete mode 100644 ui/lib/icons/pad.js delete mode 100644 ui/lib/icons/palm-fill.js delete mode 100644 ui/lib/icons/palm.js delete mode 100644 ui/lib/icons/paper-fill.js delete mode 100644 ui/lib/icons/paper.js delete mode 100644 ui/lib/icons/partake-fill.js delete mode 100644 ui/lib/icons/partake.js delete mode 100644 ui/lib/icons/paste-fill.js delete mode 100644 ui/lib/icons/paste.js delete mode 100644 ui/lib/icons/pause-circle-fill.js delete mode 100644 ui/lib/icons/pause-circle.js delete mode 100644 ui/lib/icons/pause-fill.js delete mode 100644 ui/lib/icons/pause.js delete mode 100644 ui/lib/icons/pay-jingdong.js delete mode 100644 ui/lib/icons/pay-taobao.js delete mode 100644 ui/lib/icons/pc-fill.js delete mode 100644 ui/lib/icons/pc.js delete mode 100644 ui/lib/icons/pdf-fill.js delete mode 100644 ui/lib/icons/pdf.js delete mode 100644 ui/lib/icons/pencil-fill.js delete mode 100644 ui/lib/icons/pencil.js delete mode 100644 ui/lib/icons/pendant-fill.js delete mode 100644 ui/lib/icons/pendant.js delete mode 100644 ui/lib/icons/people-network-fill.js delete mode 100644 ui/lib/icons/people-network.js delete mode 100644 ui/lib/icons/percentage-fill.js delete mode 100644 ui/lib/icons/percentage.js delete mode 100644 ui/lib/icons/phone-fill.js delete mode 100644 ui/lib/icons/phone-signal-fill.js delete mode 100644 ui/lib/icons/phone-signal.js delete mode 100644 ui/lib/icons/phone.js delete mode 100644 ui/lib/icons/pie-chart-fill.js delete mode 100644 ui/lib/icons/pie-chart.js delete mode 100644 ui/lib/icons/pin.js delete mode 100644 ui/lib/icons/pinduoduo.js delete mode 100644 ui/lib/icons/plasma-fill.js delete mode 100644 ui/lib/icons/plasma.js delete mode 100644 ui/lib/icons/play-fill.js delete mode 100644 ui/lib/icons/play.js delete mode 100644 ui/lib/icons/plug.js delete mode 100644 ui/lib/icons/plume-fill.js delete mode 100644 ui/lib/icons/plume.js delete mode 100644 ui/lib/icons/plus-border.js delete mode 100644 ui/lib/icons/plus-fill.js delete mode 100644 ui/lib/icons/plus.js delete mode 100644 ui/lib/icons/police-fill.js delete mode 100644 ui/lib/icons/police.js delete mode 100644 ui/lib/icons/policeman-fill.js delete mode 100644 ui/lib/icons/policeman.js delete mode 100644 ui/lib/icons/pop-fill.js delete mode 100644 ui/lib/icons/pop.js delete mode 100644 ui/lib/icons/power-fill.js delete mode 100644 ui/lib/icons/power.js delete mode 100644 ui/lib/icons/poweroff.js delete mode 100644 ui/lib/icons/ppt-fill.js delete mode 100644 ui/lib/icons/ppt.js delete mode 100644 ui/lib/icons/pregnancy.js delete mode 100644 ui/lib/icons/prev-fill.js delete mode 100644 ui/lib/icons/prev-step-fill.js delete mode 100644 ui/lib/icons/prev-step.js delete mode 100644 ui/lib/icons/prev.js delete mode 100644 ui/lib/icons/print-fill.js delete mode 100644 ui/lib/icons/print.js delete mode 100644 ui/lib/icons/printing-fill.js delete mode 100644 ui/lib/icons/printing.js delete mode 100644 ui/lib/icons/prison-fill.js delete mode 100644 ui/lib/icons/prison.js delete mode 100644 ui/lib/icons/process-fill.js delete mode 100644 ui/lib/icons/process.js delete mode 100644 ui/lib/icons/projector-fill.js delete mode 100644 ui/lib/icons/projector.js delete mode 100644 ui/lib/icons/purse-fill.js delete mode 100644 ui/lib/icons/purse.js delete mode 100644 ui/lib/icons/qq.js delete mode 100644 ui/lib/icons/qrcode-fill.js delete mode 100644 ui/lib/icons/qrcode.js delete mode 100644 ui/lib/icons/question-circle.js delete mode 100644 ui/lib/icons/question-fill.js delete mode 100644 ui/lib/icons/question.js delete mode 100644 ui/lib/icons/radio-off-fill.js delete mode 100644 ui/lib/icons/radio-off.js delete mode 100644 ui/lib/icons/radio-on-fill.js delete mode 100644 ui/lib/icons/radio-on.js delete mode 100644 ui/lib/icons/random-fill.js delete mode 100644 ui/lib/icons/random.js delete mode 100644 ui/lib/icons/rank-fill.js delete mode 100644 ui/lib/icons/rank.js delete mode 100644 ui/lib/icons/read-fill.js delete mode 100644 ui/lib/icons/read.js delete mode 100644 ui/lib/icons/recall-fill.js delete mode 100644 ui/lib/icons/recall.js delete mode 100644 ui/lib/icons/reception-fill.js delete mode 100644 ui/lib/icons/reception.js delete mode 100644 ui/lib/icons/record-fill.js delete mode 100644 ui/lib/icons/record-sound-fill.js delete mode 100644 ui/lib/icons/record-sound.js delete mode 100644 ui/lib/icons/record-video-fill.js delete mode 100644 ui/lib/icons/record-video.js delete mode 100644 ui/lib/icons/record.js delete mode 100644 ui/lib/icons/redo-fill.js delete mode 100644 ui/lib/icons/redo.js delete mode 100644 ui/lib/icons/refresh-fill.js delete mode 100644 ui/lib/icons/refresh.js delete mode 100644 ui/lib/icons/relation-analysis-fill.js delete mode 100644 ui/lib/icons/relation-analysis.js delete mode 100644 ui/lib/icons/relation-fill.js delete mode 100644 ui/lib/icons/relation.js delete mode 100644 ui/lib/icons/relieve-fill.js delete mode 100644 ui/lib/icons/relieve.js delete mode 100644 ui/lib/icons/reply-fill.js delete mode 100644 ui/lib/icons/reply.js delete mode 100644 ui/lib/icons/report-fill.js delete mode 100644 ui/lib/icons/report.js delete mode 100644 ui/lib/icons/reset-fill.js delete mode 100644 ui/lib/icons/reset.js delete mode 100644 ui/lib/icons/rise-fill.js delete mode 100644 ui/lib/icons/rise-full.js delete mode 100644 ui/lib/icons/rise.js delete mode 100644 ui/lib/icons/rmb-fill.js delete mode 100644 ui/lib/icons/rmb.js delete mode 100644 ui/lib/icons/roadblock-fill.js delete mode 100644 ui/lib/icons/roadblock.js delete mode 100644 ui/lib/icons/rocket-fill.js delete mode 100644 ui/lib/icons/rocket.js delete mode 100644 ui/lib/icons/router-fill.js delete mode 100644 ui/lib/icons/router.js delete mode 100644 ui/lib/icons/row-fill.js delete mode 100644 ui/lib/icons/row.js delete mode 100644 ui/lib/icons/rss-fill.js delete mode 100644 ui/lib/icons/rss-full.js delete mode 100644 ui/lib/icons/rss.js delete mode 100644 ui/lib/icons/rubber-fill.js delete mode 100644 ui/lib/icons/rubber.js delete mode 100644 ui/lib/icons/s.js delete mode 100644 ui/lib/icons/sad-fill.js delete mode 100644 ui/lib/icons/sad-full.js delete mode 100644 ui/lib/icons/sad.js delete mode 100644 ui/lib/icons/safe-fill.js delete mode 100644 ui/lib/icons/safe.js delete mode 100644 ui/lib/icons/satellite-fill.js delete mode 100644 ui/lib/icons/satellite-signal-fill.js delete mode 100644 ui/lib/icons/satellite-signal.js delete mode 100644 ui/lib/icons/satellite.js delete mode 100644 ui/lib/icons/save-fill.js delete mode 100644 ui/lib/icons/save.js delete mode 100644 ui/lib/icons/search-fill.js delete mode 100644 ui/lib/icons/search.js delete mode 100644 ui/lib/icons/security-shield-fill.js delete mode 100644 ui/lib/icons/security-shield.js delete mode 100644 ui/lib/icons/send-sms-fill.js delete mode 100644 ui/lib/icons/send-sms.js delete mode 100644 ui/lib/icons/server-fill.js delete mode 100644 ui/lib/icons/server-host-fill.js delete mode 100644 ui/lib/icons/server-host.js delete mode 100644 ui/lib/icons/server-update-fill.js delete mode 100644 ui/lib/icons/server-update.js delete mode 100644 ui/lib/icons/server.js delete mode 100644 ui/lib/icons/service-fill.js delete mode 100644 ui/lib/icons/service.js delete mode 100644 ui/lib/icons/servicer-fill.js delete mode 100644 ui/lib/icons/servicer.js delete mode 100644 ui/lib/icons/set.js delete mode 100644 ui/lib/icons/setting-fill.js delete mode 100644 ui/lib/icons/setting.js delete mode 100644 ui/lib/icons/sf.js delete mode 100644 ui/lib/icons/share-fill.js delete mode 100644 ui/lib/icons/share.js delete mode 100644 ui/lib/icons/sheet-fill.js delete mode 100644 ui/lib/icons/sheet.js delete mode 100644 ui/lib/icons/shield-fill.js delete mode 100644 ui/lib/icons/shield.js delete mode 100644 ui/lib/icons/ship-fill.js delete mode 100644 ui/lib/icons/ship.js delete mode 100644 ui/lib/icons/shoe-print-fill.js delete mode 100644 ui/lib/icons/shoe-print.js delete mode 100644 ui/lib/icons/shop-fill.js delete mode 100644 ui/lib/icons/shop.js delete mode 100644 ui/lib/icons/sign-review-fill.js delete mode 100644 ui/lib/icons/sign-review.js delete mode 100644 ui/lib/icons/signal-fill.js delete mode 100644 ui/lib/icons/signal.js delete mode 100644 ui/lib/icons/sim-fill.js delete mode 100644 ui/lib/icons/sim.js delete mode 100644 ui/lib/icons/sketchpad-fill.js delete mode 100644 ui/lib/icons/sketchpad-theme.js delete mode 100644 ui/lib/icons/sketchpad.js delete mode 100644 ui/lib/icons/slider-fill.js delete mode 100644 ui/lib/icons/slider.js delete mode 100644 ui/lib/icons/smile-fill.js delete mode 100644 ui/lib/icons/smile.js delete mode 100644 ui/lib/icons/sms-fill.js delete mode 100644 ui/lib/icons/sms.js delete mode 100644 ui/lib/icons/soound-min.js delete mode 100644 ui/lib/icons/sort-asc-fill.js delete mode 100644 ui/lib/icons/sort-asc.js delete mode 100644 ui/lib/icons/sort-desc-fill.js delete mode 100644 ui/lib/icons/sort-desc.js delete mode 100644 ui/lib/icons/sort-down-fill.js delete mode 100644 ui/lib/icons/sort-down.js delete mode 100644 ui/lib/icons/sort-fill.js delete mode 100644 ui/lib/icons/sort-up-fill.js delete mode 100644 ui/lib/icons/sort-up.js delete mode 100644 ui/lib/icons/sort.js delete mode 100644 ui/lib/icons/sound-max-fill.js delete mode 100644 ui/lib/icons/sound-max.js delete mode 100644 ui/lib/icons/sound-min-fill.js delete mode 100644 ui/lib/icons/sound-min.js delete mode 100644 ui/lib/icons/sound.js delete mode 100644 ui/lib/icons/sound2-fill.js delete mode 100644 ui/lib/icons/sound2.js delete mode 100644 ui/lib/icons/spanner.js delete mode 100644 ui/lib/icons/speaker-fill.js delete mode 100644 ui/lib/icons/speaker.js delete mode 100644 ui/lib/icons/spin-fill.js delete mode 100644 ui/lib/icons/spin.js delete mode 100644 ui/lib/icons/spin2-fill.js delete mode 100644 ui/lib/icons/spin2.js delete mode 100644 ui/lib/icons/split-screen-compare-fill.js delete mode 100644 ui/lib/icons/split-screen-compare.js delete mode 100644 ui/lib/icons/spread-fill.js delete mode 100644 ui/lib/icons/spread.js delete mode 100644 ui/lib/icons/stamp-fill.js delete mode 100644 ui/lib/icons/stamp.js delete mode 100644 ui/lib/icons/star-fill.js delete mode 100644 ui/lib/icons/star-half.js delete mode 100644 ui/lib/icons/star-line.js delete mode 100644 ui/lib/icons/star-on.js delete mode 100644 ui/lib/icons/star.js delete mode 100644 ui/lib/icons/start-fill.js delete mode 100644 ui/lib/icons/start.js delete mode 100644 ui/lib/icons/statistics-fill.js delete mode 100644 ui/lib/icons/statistics.js delete mode 100644 ui/lib/icons/stomach-fill.js delete mode 100644 ui/lib/icons/stomach.js delete mode 100644 ui/lib/icons/stop-circle-fill.js delete mode 100644 ui/lib/icons/stop-circle.js delete mode 100644 ui/lib/icons/stop-fill.js delete mode 100644 ui/lib/icons/stop.js delete mode 100644 ui/lib/icons/story-building-fill.js delete mode 100644 ui/lib/icons/story-building.js delete mode 100644 ui/lib/icons/stranger-fill.js delete mode 100644 ui/lib/icons/stranger.js delete mode 100644 ui/lib/icons/subway-fill.js delete mode 100644 ui/lib/icons/subway.js delete mode 100644 ui/lib/icons/success-fill.js delete mode 100644 ui/lib/icons/success.js delete mode 100644 ui/lib/icons/suitcase-fill.js delete mode 100644 ui/lib/icons/suitcase.js delete mode 100644 ui/lib/icons/supervision-fill.js delete mode 100644 ui/lib/icons/supervision.js delete mode 100644 ui/lib/icons/survival-fill.js delete mode 100644 ui/lib/icons/survival.js delete mode 100644 ui/lib/icons/suspect-fill.js delete mode 100644 ui/lib/icons/suspect.js delete mode 100644 ui/lib/icons/synthetic-combat-fill.js delete mode 100644 ui/lib/icons/synthetic-combat.js delete mode 100644 ui/lib/icons/t-pc-fill.js delete mode 100644 ui/lib/icons/t-pc.js delete mode 100644 ui/lib/icons/tableware-fill.js delete mode 100644 ui/lib/icons/tableware.js delete mode 100644 ui/lib/icons/tag-fill.js delete mode 100644 ui/lib/icons/tag.js delete mode 100644 ui/lib/icons/tags-fill.js delete mode 100644 ui/lib/icons/tags.js delete mode 100644 ui/lib/icons/tandem-fill.js delete mode 100644 ui/lib/icons/tandem.js delete mode 100644 ui/lib/icons/target-fill.js delete mode 100644 ui/lib/icons/target.js delete mode 100644 ui/lib/icons/taxi-fill.js delete mode 100644 ui/lib/icons/taxi.js delete mode 100644 ui/lib/icons/team-fill.js delete mode 100644 ui/lib/icons/team.js delete mode 100644 ui/lib/icons/teamwork-fill.js delete mode 100644 ui/lib/icons/teamwork.js delete mode 100644 ui/lib/icons/theft-fill.js delete mode 100644 ui/lib/icons/theft.js delete mode 100644 ui/lib/icons/thief-fill.js delete mode 100644 ui/lib/icons/thief.js delete mode 100644 ui/lib/icons/ticket-fill.js delete mode 100644 ui/lib/icons/ticket.js delete mode 100644 ui/lib/icons/time-fill.js delete mode 100644 ui/lib/icons/time.js delete mode 100644 ui/lib/icons/tongue-fill.js delete mode 100644 ui/lib/icons/tongue.js delete mode 100644 ui/lib/icons/tooth-fill.js delete mode 100644 ui/lib/icons/tooth.js delete mode 100644 ui/lib/icons/traffic-light-fill.js delete mode 100644 ui/lib/icons/traffic-light.js delete mode 100644 ui/lib/icons/train-fill.js delete mode 100644 ui/lib/icons/train.js delete mode 100644 ui/lib/icons/tram-fill.js delete mode 100644 ui/lib/icons/tram.js delete mode 100644 ui/lib/icons/transport-fill.js delete mode 100644 ui/lib/icons/transport.js delete mode 100644 ui/lib/icons/treatment-fill.js delete mode 100644 ui/lib/icons/treatment.js delete mode 100644 ui/lib/icons/trophy-fill.js delete mode 100644 ui/lib/icons/trophy.js delete mode 100644 ui/lib/icons/truck-fill.js delete mode 100644 ui/lib/icons/truck.js delete mode 100644 ui/lib/icons/tv-box-fill.js delete mode 100644 ui/lib/icons/tv-box.js delete mode 100644 ui/lib/icons/tv-fill.js delete mode 100644 ui/lib/icons/tv.js delete mode 100644 ui/lib/icons/txt-fill.js delete mode 100644 ui/lib/icons/txt.js delete mode 100644 ui/lib/icons/umbrella.js delete mode 100644 ui/lib/icons/undo-fill.js delete mode 100644 ui/lib/icons/undo.js delete mode 100644 ui/lib/icons/union-pay-fill.js delete mode 100644 ui/lib/icons/union-pay.js delete mode 100644 ui/lib/icons/university-fill.js delete mode 100644 ui/lib/icons/university.js delete mode 100644 ui/lib/icons/unlock-fill.js delete mode 100644 ui/lib/icons/unlock.js delete mode 100644 ui/lib/icons/upload-fill.js delete mode 100644 ui/lib/icons/upload.js delete mode 100644 ui/lib/icons/usb-fill.js delete mode 100644 ui/lib/icons/usb.js delete mode 100644 ui/lib/icons/user-fill.js delete mode 100644 ui/lib/icons/user-man-fill.js delete mode 100644 ui/lib/icons/user-man.js delete mode 100644 ui/lib/icons/user-v2.js delete mode 100644 ui/lib/icons/user-women-fill.js delete mode 100644 ui/lib/icons/user-women.js delete mode 100644 ui/lib/icons/user.js delete mode 100644 ui/lib/icons/vcr-fill.js delete mode 100644 ui/lib/icons/vcr.js delete mode 100644 ui/lib/icons/victim.js delete mode 100644 ui/lib/icons/video-camera-fill.js delete mode 100644 ui/lib/icons/video-camera.js delete mode 100644 ui/lib/icons/view-fill.js delete mode 100644 ui/lib/icons/view.js delete mode 100644 ui/lib/icons/visible-fill.js delete mode 100644 ui/lib/icons/visible.js delete mode 100644 ui/lib/icons/voice-box-fill.js delete mode 100644 ui/lib/icons/voice-box.js delete mode 100644 ui/lib/icons/voiceprint-fill.js delete mode 100644 ui/lib/icons/voiceprint.js delete mode 100644 ui/lib/icons/warning-fill.js delete mode 100644 ui/lib/icons/warning.js delete mode 100644 ui/lib/icons/warning2-fill.js delete mode 100644 ui/lib/icons/warning2.js delete mode 100644 ui/lib/icons/warplane-fill.js delete mode 100644 ui/lib/icons/warplane.js delete mode 100644 ui/lib/icons/wechat.js delete mode 100644 ui/lib/icons/where-fill.js delete mode 100644 ui/lib/icons/where.js delete mode 100644 ui/lib/icons/whole-fill.js delete mode 100644 ui/lib/icons/whole.js delete mode 100644 ui/lib/icons/wifi-fill.js delete mode 100644 ui/lib/icons/wifi.js delete mode 100644 ui/lib/icons/window-close-fill.js delete mode 100644 ui/lib/icons/window-close-full.js delete mode 100644 ui/lib/icons/window-close.js delete mode 100644 ui/lib/icons/window-down-fill.js delete mode 100644 ui/lib/icons/window-down-full.js delete mode 100644 ui/lib/icons/window-down.js delete mode 100644 ui/lib/icons/window-fill.js delete mode 100644 ui/lib/icons/window-max-fill.js delete mode 100644 ui/lib/icons/window-max-full.js delete mode 100644 ui/lib/icons/window-max.js delete mode 100644 ui/lib/icons/window-min-fill.js delete mode 100644 ui/lib/icons/window-min-full.js delete mode 100644 ui/lib/icons/window-min.js delete mode 100644 ui/lib/icons/window-normal-fill.js delete mode 100644 ui/lib/icons/window-normal-full.js delete mode 100644 ui/lib/icons/window-normal.js delete mode 100644 ui/lib/icons/window-up-fill.js delete mode 100644 ui/lib/icons/window-up-full.js delete mode 100644 ui/lib/icons/window-up.js delete mode 100644 ui/lib/icons/window.js delete mode 100644 ui/lib/icons/women-fill.js delete mode 100644 ui/lib/icons/women.js delete mode 100644 ui/lib/icons/word-fill.js delete mode 100644 ui/lib/icons/word.js delete mode 100644 ui/lib/icons/work-card-fill.js delete mode 100644 ui/lib/icons/work-card-fuil.js delete mode 100644 ui/lib/icons/work-card.js delete mode 100644 ui/lib/icons/work-permit-fill.js delete mode 100644 ui/lib/icons/work-permit.js delete mode 100644 ui/lib/icons/wrench-fill.js delete mode 100644 ui/lib/icons/wrench.js delete mode 100644 ui/lib/icons/yidong-fill.js delete mode 100644 ui/lib/icons/yidong.js delete mode 100644 ui/lib/icons/zip-fill.js delete mode 100644 ui/lib/icons/zip.js delete mode 100644 ui/lib/import/app/development.js delete mode 100644 ui/lib/import/app/production.js delete mode 100644 ui/lib/import/app/test.js delete mode 100644 ui/lib/import/theme/development.js delete mode 100644 ui/lib/import/theme/production.js delete mode 100644 ui/lib/import/view/development.js delete mode 100644 ui/lib/import/view/production.js delete mode 100644 ui/lib/import/view/test.js delete mode 100644 ui/lib/index.js delete mode 100644 ui/lib/master.js delete mode 100644 ui/lib/styles/base.scss delete mode 100644 ui/lib/styles/common/_colors.scss delete mode 100644 ui/lib/styles/common/_ui.scss delete mode 100644 ui/lib/styles/common/_var.scss delete mode 100644 ui/lib/styles/extend/fix-element-ui.scss delete mode 100644 ui/lib/styles/extend/picker-panel.scss delete mode 100644 ui/lib/styles/index.scss delete mode 100644 ui/lib/styles/mixins/_config.scss delete mode 100644 ui/lib/styles/mixins/_function.scss delete mode 100644 ui/lib/styles/mixins/_index.scss delete mode 100644 ui/lib/styles/mixins/_mixins.scss delete mode 100644 ui/lib/styles/mixins/_utils.scss delete mode 100644 ui/lib/styles/my-affix.scss delete mode 100644 ui/lib/styles/my-anchor.scss delete mode 100644 ui/lib/styles/my-at-input.scss delete mode 100644 ui/lib/styles/my-autocomplete.scss delete mode 100644 ui/lib/styles/my-avatar.scss delete mode 100644 ui/lib/styles/my-avatars.scss delete mode 100644 ui/lib/styles/my-back-top.scss delete mode 100644 ui/lib/styles/my-breadcrumb.scss delete mode 100644 ui/lib/styles/my-card-list.scss delete mode 100644 ui/lib/styles/my-cascader.scss delete mode 100644 ui/lib/styles/my-checkbox.scss delete mode 100644 ui/lib/styles/my-child-app.scss delete mode 100644 ui/lib/styles/my-clipboard.scss delete mode 100644 ui/lib/styles/my-color-picker.scss delete mode 100644 ui/lib/styles/my-config.scss delete mode 100644 ui/lib/styles/my-container.scss delete mode 100644 ui/lib/styles/my-contextmenu.scss delete mode 100644 ui/lib/styles/my-corner-mark.scss delete mode 100644 ui/lib/styles/my-cron.scss delete mode 100644 ui/lib/styles/my-crud.scss delete mode 100644 ui/lib/styles/my-date-picker.scss delete mode 100644 ui/lib/styles/my-date.scss delete mode 100644 ui/lib/styles/my-description.scss delete mode 100644 ui/lib/styles/my-detail-item.scss delete mode 100644 ui/lib/styles/my-detail.scss delete mode 100644 ui/lib/styles/my-dialog.scss delete mode 100644 ui/lib/styles/my-drag.scss delete mode 100644 ui/lib/styles/my-drop.scss delete mode 100644 ui/lib/styles/my-edit-tags.scss delete mode 100644 ui/lib/styles/my-editor.scss delete mode 100644 ui/lib/styles/my-empty.scss delete mode 100644 ui/lib/styles/my-filter.scss delete mode 100644 ui/lib/styles/my-fixed.scss delete mode 100644 ui/lib/styles/my-flex-item.scss delete mode 100644 ui/lib/styles/my-flex.scss delete mode 100644 ui/lib/styles/my-flip.scss delete mode 100644 ui/lib/styles/my-float-item.scss delete mode 100644 ui/lib/styles/my-float.scss delete mode 100644 ui/lib/styles/my-form-custom.scss delete mode 100644 ui/lib/styles/my-form.scss delete mode 100644 ui/lib/styles/my-go-draft.scss delete mode 100644 ui/lib/styles/my-header.scss delete mode 100644 ui/lib/styles/my-highlight.scss delete mode 100644 ui/lib/styles/my-icon.scss delete mode 100644 ui/lib/styles/my-img-wall.scss delete mode 100644 ui/lib/styles/my-input-number.scss delete mode 100644 ui/lib/styles/my-input.scss delete mode 100644 ui/lib/styles/my-key-val-list.scss delete mode 100644 ui/lib/styles/my-layout.scss delete mode 100644 ui/lib/styles/my-lazy.scss delete mode 100644 ui/lib/styles/my-list.scss delete mode 100644 ui/lib/styles/my-location-picker.scss delete mode 100644 ui/lib/styles/my-login.scss delete mode 100644 ui/lib/styles/my-marquee.scss delete mode 100644 ui/lib/styles/my-master-app.scss delete mode 100644 ui/lib/styles/my-menu.scss delete mode 100644 ui/lib/styles/my-micro-app.scss delete mode 100644 ui/lib/styles/my-navbar.scss delete mode 100644 ui/lib/styles/my-number.scss delete mode 100644 ui/lib/styles/my-panel.scss delete mode 100644 ui/lib/styles/my-paragraph.scss delete mode 100644 ui/lib/styles/my-particle.scss delete mode 100644 ui/lib/styles/my-popper.scss delete mode 100644 ui/lib/styles/my-print.scss delete mode 100644 ui/lib/styles/my-pro.scss delete mode 100644 ui/lib/styles/my-promise.scss delete mode 100644 ui/lib/styles/my-radial-menu.scss delete mode 100644 ui/lib/styles/my-radio.scss delete mode 100644 ui/lib/styles/my-range.scss delete mode 100644 ui/lib/styles/my-rate.scss delete mode 100644 ui/lib/styles/my-resize.scss delete mode 100644 ui/lib/styles/my-result.scss delete mode 100644 ui/lib/styles/my-revolve.scss delete mode 100644 ui/lib/styles/my-search-box.scss delete mode 100644 ui/lib/styles/my-select-field.scss delete mode 100644 ui/lib/styles/my-select.scss delete mode 100644 ui/lib/styles/my-sidebar.scss delete mode 100644 ui/lib/styles/my-skeleton.scss delete mode 100644 ui/lib/styles/my-slide-layout.scss delete mode 100644 ui/lib/styles/my-slider.scss delete mode 100644 ui/lib/styles/my-sortable.scss delete mode 100644 ui/lib/styles/my-spin.scss delete mode 100644 ui/lib/styles/my-stat-card.scss delete mode 100644 ui/lib/styles/my-svg-line.scss delete mode 100644 ui/lib/styles/my-switch.scss delete mode 100644 ui/lib/styles/my-table.scss delete mode 100644 ui/lib/styles/my-tabs.scss delete mode 100644 ui/lib/styles/my-tag-canvas.scss delete mode 100644 ui/lib/styles/my-tag-input.scss delete mode 100644 ui/lib/styles/my-tag-select.scss delete mode 100644 ui/lib/styles/my-text.scss delete mode 100644 ui/lib/styles/my-three-menu.scss delete mode 100644 ui/lib/styles/my-timer.scss delete mode 100644 ui/lib/styles/my-title.scss delete mode 100644 ui/lib/styles/my-tree-connect.scss delete mode 100644 ui/lib/styles/my-tree-select.scss delete mode 100644 ui/lib/styles/my-typography.scss delete mode 100644 ui/lib/styles/my-water-fall-slot.scss delete mode 100644 ui/lib/styles/my-water-fall.scss delete mode 100644 ui/lib/styles/my-watermark.scss delete mode 100644 ui/lib/styles/my-wave.scss delete mode 100644 ui/lib/styles/my-wrapper.scss delete mode 100644 ui/lib/styles/themes/_dark.scss delete mode 100644 ui/lib/styles/themes/_default.scss delete mode 100644 ui/lib/utils/ajax.js delete mode 100644 ui/lib/utils/axios.js delete mode 100644 ui/lib/utils/bom.js delete mode 100644 ui/lib/utils/bridge.js delete mode 100644 ui/lib/utils/bus.js delete mode 100644 ui/lib/utils/color.js delete mode 100644 ui/lib/utils/cookie.js delete mode 100644 ui/lib/utils/crypto.js delete mode 100644 ui/lib/utils/date.js delete mode 100644 ui/lib/utils/dictionary.js delete mode 100644 ui/lib/utils/dom.js delete mode 100644 ui/lib/utils/download.js delete mode 100644 ui/lib/utils/events.js delete mode 100644 ui/lib/utils/excel.js delete mode 100644 ui/lib/utils/helper.js delete mode 100644 ui/lib/utils/log.js delete mode 100644 ui/lib/utils/lunar.js delete mode 100644 ui/lib/utils/messager.js delete mode 100644 ui/lib/utils/mock.js delete mode 100644 ui/lib/utils/money.js delete mode 100644 ui/lib/utils/queue.js delete mode 100644 ui/lib/utils/regex.js delete mode 100644 ui/lib/utils/responsive-col.js delete mode 100644 ui/lib/utils/responsive.js delete mode 100644 ui/lib/utils/scale.js delete mode 100644 ui/lib/utils/skin.js delete mode 100644 ui/lib/utils/socket.js delete mode 100644 ui/lib/utils/storage.js delete mode 100644 ui/lib/utils/styleChecker.js delete mode 100644 ui/lib/utils/tree.js delete mode 100644 ui/lib/utils/tween.js delete mode 100644 ui/lib/utils/url.js delete mode 100644 ui/lib/utils/util.js delete mode 100644 ui/lib/widgets/charts/column-bar/index.vue delete mode 100644 ui/lib/widgets/dict-management/dict-module.js delete mode 100644 ui/lib/widgets/dict-management/dict-opts.js delete mode 100644 ui/lib/widgets/dict-management/filter/date-format.js delete mode 100644 ui/lib/widgets/dict-management/filter/index.js delete mode 100644 ui/lib/widgets/dict-management/index.js delete mode 100644 ui/lib/widgets/go-panel-node/panel-node.js delete mode 100644 ui/lib/widgets/list-picker/core.vue delete mode 100644 ui/lib/widgets/list-picker/index.vue delete mode 100644 ui/lib/widgets/member-picker/auto-complete.vue delete mode 100644 ui/lib/widgets/member-picker/core.vue delete mode 100644 ui/lib/widgets/member-picker/index.vue delete mode 100644 ui/lib/widgets/member-picker/input-area.vue delete mode 100644 ui/lib/widgets/member-picker/org-list.vue delete mode 100644 ui/lib/widgets/org-member-picker/index.vue delete mode 100644 ui/lib/widgets/org-member-picker/org-tree.vue delete mode 100644 ui/lib/widgets/org-member-picker/person-list.vue delete mode 100644 ui/lib/widgets/path.js delete mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7053c49..0000000 --- a/.editorconfig +++ /dev/null @@ -1,5 +0,0 @@ -[*.{js,jsx,ts,tsx,vue}] -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/.gitignore b/.gitignore index ed4489f..e0db44c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,108 @@ -.DS_Store -.temp -.my -node_modules -/dist -/apps -/docs/.vuepress/public/api -/src/views/josephtest/ -/debug.log -# local env files -.env.local -.env.*.local - -# Log files +.idea + +# Logs +logs +*.log npm-debug.log* yarn-debug.log* yarn-error.log* +lerna-debug.log* -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +package-lock.json diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 9d8abe0..0000000 --- a/.npmignore +++ /dev/null @@ -1,27 +0,0 @@ -.DS_Store -*.map -.temp -.my -.npmignore -.editorconfig -.eslintignore -.idea -.gitignore -/node_modules -/schemas -/public -/apps -/src -/svg -!ui/**/* -/tests -/docs -!web/docs -/dist -/my.config.js -/babel.config.js -!core/babel.config.js -/vue.config.js -!core/vue.config.js -/debug.log - diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ec8f326 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# 安装依赖及打包 +FROM node:12-alpine AS Builder + +WORKDIR /app + +COPY ./package*.json /app/ + +RUN npm install + +COPY . /app + +RUN npm run build + +# 配置 nginx 资源转发 +FROM nginx:alpine + +COPY --from=Builder app/dist/ /usr/share/nginx/html/ + +COPY --from=Builder \ + app/nginx.conf \ + /etc/nginx/conf.d/default.conf + +EXPOSE 80 + + +# 可直接配置 nginx, 在项目外部打包 diff --git a/LICENSE b/LICENSE index f3afe62..261eeb9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,201 @@ -MIT License - -Copyright (c) 2017-present 陈华春 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index a3d3d93..3a6ecbc 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,202 @@ -# Vue2+ElementUI+BPMN2.0整合(基于Bpmn Process Designer) -- 克隆项目自定义 -``` -git clone https://gitee.com/lwstudy/vue2_el_bpmn.git -yarn -npm run dev +

+ + logo + +

+ +

Bpmn Process Designer

+ +

+GitHub stars +GitHub stars +star +fork +

+ +

+ + + +

+ + +### 项目简介 + +一个基于 `bpmn.js`,`Vue 2.x` 和 `ElementUI` 开发的流程设计器。 + +您可以使用它在浏览器上查看和编辑符合 `BPMN 2.0` 规范的流程文件。 + +在线demo请访问 [MiyueFE Blog](https://miyuesc.github.io/process-designer/) + +码云同步镜像请访问 [Gitee/MiyueSC Process Designer](https://miyuesc.gitee.io/process-designer/) + +> 🚀🚀🚀 +> +> **Vite + Vue 3 + pinia + naiveUI 新项目,取消了window命名空间保存bpmn实例的方式,并进行了大部分显示自定义功能,完成了 bpmn.js 基本依赖的 typescript 类型声明。** +> +> **体验请访问:[vite-vue-bpmn-process](https://miyuesc.github.io/vite-vue-bpmn-process/)** +> +> **国内同步体验地址:[vite-vue-bpmn-process](https://miyuesc.gitee.io/vite-vue-bpmn-process/)** +> +> 付费咨询请加微信(毕竟生活太累了😩😩😩) +> +> 源码地址:[vite-vue-bpmn-process](https://github.com/moon-studio/vite-vue-bpmn-process) + + +### 友情链接 + +1. Me: [Bpmn.js 中文文档、json描述文件说明等](https://juejin.cn/column/6964382482007490590) +2. Yiuman: 低代码平台 [citrus](https://github.com/Yiuman/citrus) ,已集成 activiti7 工作流引擎后端部分 +3. [霖呆呆(掘金五级大佬)](https://juejin.cn/user/360295513463912): [《全网最详bpmn.js教材目录》](https://juejin.cn/post/6844904017567416328),[关于bpmn.js交流群的说明](https://juejin.cn/post/6844904041026158599) +4. PL-FE: [Bpmn Document](https://github.com/PL-FE/bpmn-doc) +5. 芋道源码: [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) ,一套全部开源的企业级的快速开发平台,毫无保留给个人及企业免费使用。 +6. 运维咖啡吧: [《BPMN系列原创文章》](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU5MDY1MzcyOQ==&action=getalbum&album_id=1576254888626454529&scene=173&from_msgid=2247484449&from_itemidx=1&count=3&nolastread=1#wechat_redirect) + + +## 友情赞助 + +生活不易,偷偷丢个赞赏码吧,各位大佬赏个饭钱🤪🤪🤪🤪~~~~ + +

+微信 +支付宝 +

+ +> 付费咨询联系微信: +> +> wechat.png + +## 1. 安装依赖 Installation + +```shell +npm install +// or yarn install ``` -- 引入依赖 -```bash -npm install vue2-el-bpmn + +## 2. 运行 Quick Start + +```shell +npm run demo +// or yarn run demo ``` -- 效果图 -![avatar](https://gitee.com/lwstudy/vue2_el_bpmn/home.jpg) +## 3. 文档说明 Documentation + +### 3.1 MyProcessDesigner + +#### 3.1.1 Attributes + +| Attribute | Description | Type | Accepted Values | Default | +| --------------------- | --------------------------------------------------------- | ----------- | -------------------------------------- | ------------------------------------------------------------ | +| `value/v-model` | 初始化流程对应的 `xml` 字符串 | String | - | - | +| `translations` | 翻译文件 | Object | - | [zh.js](https://github.com/miyuesc/bpmn-process-designer/blob/main/package/designer/plugins/translate/zh.js) | +| `additionalModel` | 自定义的附加模块 | Object[] / Object | - | - | +| `moddleExtension` | 自定义的扩展模块 | Object | - | - | +| `onlyCustomizeAddi` | 仅使用开发时的自定义附加模块 | Boolean | - | `false` | +| `onlyCustomizeModdle` | 仅使用开发时的自定义扩展模块 | Boolean | - | `false` | +| `prefix` | 流程引擎对应扩展属性前缀 | String | `camunda`, `activiti`, `flowable` | `camunda` | +| `events` | 需要使用的事件列表,可用事件见 [Bpmn.js 中文文档](https://github.com/miyuesc/blog/blob/master/bpmn/docs/Bpmn.js%20document.md#%E4%B8%89-%E4%BA%8B%E4%BB%B6) | Array | - | `[element.click]` | +| `headerButtonSize` | 头部按钮组的大小 | String | `"default", "medium", "small", "mini"` | `small` | + +#### 3.1.2 Events + +| Event Name | Description | Callback Parameters | +| --------------- | ------------------------------------------------------------ | -------------------------------- | +| `init-finished` | 流程实例等初始化完成之后 | `modeler` | +| `change` | 流程发生可监听的改变时 ( `EventBus.on("commandStack.changed")`) | `XMLString` | +| `destroy` | 组件准备销毁时,此时流程实例已经销毁 | `modeler` | +| `BpmnEvents` | Like `element.click`, will replace `.` to `-` (`ex: "element.click" => "element-click"` ). If you want to use an event, you must add the event name to the "`events`" parameter
传入参数 `events` 对应的事件发生时触发,会将 `events` 数组内部的事件名称中的 `.` 替换成 `-` 来适配 `vue` 的自定义监听事件。比如 `"element.click"` 会变成 `element-click` | `element, InternalEventInstance` | + +#### 3.1.3 Methods + +| Method Name | Parameters | Description | +| ----------------------- | ------------------------------ | ---------------------------------------- | +| `downloadProcessAsXml` | `name: string = "diagram"` | 下载文件为 `${name}.xml` 格式的文件 | +| `downloadProcessAsBpmn` | `name: string = "diagram"` | 下载文件为 `${name}.bpmn` 格式的文件 | +| `downloadProcessAsSvg` | `name: string = "diagram"` | 下载文件为 `${name}.svg` 格式的文件 | +| `processRedo` | - | 恢复上次操作 | +| `processUndo` | - | 撤销本次操作 | +| `processZoomIn` | `newZoom: number = 0.1` | 按照指定倍率缩小视图(小数点后两位) | +| `processZoomOut` | `newZoom: number = 1` | 按照指定倍率放大视图(小数点后两位) | +| `processZoomTo` | `newZoom: number = 1` | 缩放视图到指定倍率 | +| `processReZoom` | - | 重置缩放倍率并居中显示全部元素 | +| `processRestart` | - | 重置所有编辑过程并清空画布 | +| `createNewDiagram` | `xml: string` | 重新导入新的xml字符串 | + +### 3.2 MyProcessPenal + +#### 3.2.1 Attributes + +| Attribute | Description | Type | Accepted Values | Default | +| -------------- | --------------------------------- | ------ | --------------------------------- | --------- | +| `bpmn-modeler` | 初始化生成的 `modeler` 实例,必须 | Object | - | - | +| `prefix` | 流程引擎对应扩展属性前缀 | String | `camunda`, `activiti`, `flowable` | `camunda` | +| `width` | 侧边栏宽度 | Number | - | 480 | + + +## 4. 功能说明 + +1. 工具栏:包含常见操作,比如打开文件、下载文件、预览、对齐方式、缩放管理、撤销删除等 +2. 常规信息:id、名称、扩展属性、元素文档 +3. 特殊节点属性: + 1. 流程全局消息与信号 + 2. 执行监听器 + 3. 用户任务节点 任务监听器 + 4. 表单配置 + 5. 任务配置 + 6. 多实例任务 + 7. 流转条件 +4. 内置常用 `camunda` ,`flowable`,`activiti` 解析文件 +5. 自定义左侧元素栏 `platte` 与弹出菜单 `contentPad` 示例模块 +6. 自定义渲染方法 `renderer` 模块实例 + + +## 5. 运行截图 + +### 5.1 初始界面 + +![image-20210422140659561](screenshot/image-20210422140659561.png) + +### 5.2 监听器 + +![image-20210422140728176](screenshot/image-20210422140728176.png) + + + +![image-20210422140805725](screenshot/image-20210422140805725.png) + +### 5.3 扩展属性 + +![image-20210422140906725](screenshot/image-20210422140906725.png) + +### 5.4 流转路径配置 + +![image-20210422140924114](screenshot/image-20210422140924114.png) + + +### 5.5 任务配置 + +![image-20210422141009316](screenshot/image-20210422141009316.png) + +### 5.6 多实例任务 + +![image-20210422141035638](screenshot/image-20210422141035638.png) + +### 5.8 表单配置 + +![image-20210422141220571](screenshot/image-20210422141220571.png) + +![image-20210422141354311](screenshot/image-20210422141354311.png) + +### 5.9 预览 + +![image-20210422140939414](screenshot/image-20210422140939414.png) + + +## 学习交流 + +如果您觉得这些文章对您有帮助,想和我一起学习,欢迎您关注我的微信订阅号。 + +订阅号名称:前端小白MiyueFE +订阅号:[前端小白MiyueFE](https://images.weserv.nl/?url=https://i0.hdslb.com/bfs/article/fdef0d8f1731ed03b4123d22b7d82acacb6ca10c.jpg) diff --git a/babel.config.js b/babel.config.js index ac34f0f..e955840 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,5 @@ -// 需要在项目根目录放置 babel.config.js -// 通过修改webpack配置制定configFile路径,发现打包主题有缓存,结果全部都是第一次编译的主题,在根目录放置配置文件即正常 -module.exports = require('./core/babel.config') +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/bin/my.js b/bin/my.js deleted file mode 100644 index 3f040e9..0000000 --- a/bin/my.js +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env node - -const {semver, error, warn} = require('@vue/cli-shared-utils') -const requiredVersion = require('../package.json').engines.node - -if (!semver.satisfies(process.version, requiredVersion)) { - error( - `您在用的Node版本是 ${process.version} 但是 my 命令行工具要求 Node 版本 ${requiredVersion}。 请您升级Node版本!` - ) - process.exit(1) -} - -const defaultCommand = function (args, type) { - warn( - `my不支持${type}命令,请检查输入是否正确,或查看my命令文档和用法。` - ) -} - -const commandArray = [ - 'coder', - 'fix', - 'color', - 'jsdoc', - 'svg', - 'demo', - 'theme', - 'ready', - 'route', - 'bridge', - 'start', - 'server', - 'preview', - 'app', - 'page', - 'widgets', - 'create' -] -const commandMap = Object.create(null) -commandArray.forEach(name => { - commandMap[name] = require(`../core/bin/${name}`) -}) - -const rawArgv = process.argv.slice(2) -const [type, ...args] = rawArgv -const commandHandler = commandMap[type] || defaultCommand - -commandHandler(args, type) diff --git a/core/babel.config.js b/core/babel.config.js deleted file mode 100644 index e957f99..0000000 --- a/core/babel.config.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * babel 配置 - * @author chenhuachun - */ -module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset' - ], - sourceType: 'unambiguous', - plugins: [ - [ - 'component', - { - libraryName: 'element-ui', - styleLibraryName: `~.my/el-themes/${process.env.THEME || 'default'}` - } - ], - [ - 'component', - { - libraryName: '$ui', - libDir: 'components', - styleLibraryName: `~.my/ui-themes/${process.env.THEME || 'default'}` - }, - '$ui' - ], - [ - 'component', - { - libraryName: '$ui/charts', - libDir: 'packages', - style: false - }, - '$ui/charts' - ], - [ - 'component', - { - libraryName: '$ui/map', - libDir: 'packages', - style: false - }, - '$ui/map' - ], - [ - 'component', - { - libraryName: '$ui/dv', - libDir: 'packages', - style: false - }, - '$ui/dv' - ] - ] -} diff --git a/core/babel.plugins.js b/core/babel.plugins.js deleted file mode 100644 index 9794587..0000000 --- a/core/babel.plugins.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * 基础项目引用的babel插件 - */ -module.exports = [ - [ - 'component', - { - libraryName: 'element-ui', - styleLibraryName: 'theme-chalk' - } - ], - [ - 'component', - { - libraryName: '$ui', - libDir: 'components', - styleLibraryName: '~node_modules/@xdh/my/ui/lib/styles', - ext: '.scss' - }, - '$ui' - ], - [ - 'component', - { - libraryName: '$ui/charts', - libDir: 'packages', - style: false - }, - '$ui/charts' - ], - [ - 'component', - { - libraryName: '$ui/map', - libDir: 'packages', - style: false - }, - '$ui/map' - ], - [ - 'component', - { - libraryName: '$ui/dv', - libDir: 'packages', - style: false - }, - '$ui/dv' - ] -] diff --git a/core/bin/app.js b/core/bin/app.js deleted file mode 100644 index 93e3763..0000000 --- a/core/bin/app.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = function (args = []) { - const app = require('../build/app') - const utils = require('../utils') - const [action, appName, port] = args - - switch (action) { - case 'add': - if (!appName) { - utils.log('需要指定应用名称', 'warning') - return false - } - app.add(appName, parseInt(port || 8001)) - break; - case 'remove': - if (!appName) { - utils.log('需要指定应用名称', 'warning') - return false - } - app.remove(appName) - break; - case 'build': - app.build() - break; - default: - utils.log('缺少操作名称', 'warning') - break; - } - -} diff --git a/core/bin/bridge.js b/core/bin/bridge.js deleted file mode 100644 index 950b88b..0000000 --- a/core/bin/bridge.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function() { - require('../build/bridge-builder') -} diff --git a/core/bin/coder.js b/core/bin/coder.js deleted file mode 100644 index 804233a..0000000 --- a/core/bin/coder.js +++ /dev/null @@ -1,7 +0,0 @@ -const coder = require('../build/coder') - -module.exports = function (args) { - const force = !!args[0] - coder(force) - -} diff --git a/core/bin/color.js b/core/bin/color.js deleted file mode 100644 index 518e203..0000000 --- a/core/bin/color.js +++ /dev/null @@ -1,4 +0,0 @@ -const palette = require('../build/colors.js') -module.exports = function (args) { - palette.write() -} diff --git a/core/bin/create.js b/core/bin/create.js deleted file mode 100644 index 109c4e7..0000000 --- a/core/bin/create.js +++ /dev/null @@ -1,30 +0,0 @@ -const core = require('../index') -const utils = require('../utils') -const join = utils.join -const root = core.MyRootPath -const pathsList = { - bin: join(root, 'bin'), - core: join(root, 'core'), - types: join(root, 'types'), - ui: join(root, 'ui'), - web: join(root, 'web'), - LICENSE: join(root, 'LICENSE'), - 'package.json': join(root, 'package.json'), - 'README.md': join(root, 'README.md') -} - -const localPath = join(core.ProjectRootPath, '.my', '@xdh', 'my') - -module.exports = function(args = []) { - utils.mkdir(localPath) - const allCopy = Object.entries(pathsList).map((entry) => { - return utils.copy(entry[1], join(localPath, entry[0])).then((res) => { - utils.log(`复制${entry[0]}成功`, 'success') - return Promise.resolve() - }) - }) - Promise.all(allCopy).then(() => { - utils.log('创建完成', 'success') - }) - -} \ No newline at end of file diff --git a/core/bin/demo.js b/core/bin/demo.js deleted file mode 100644 index 2078dec..0000000 --- a/core/bin/demo.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - require('../build/demo-builder')() -} diff --git a/core/bin/fix.js b/core/bin/fix.js deleted file mode 100644 index 5b951ae..0000000 --- a/core/bin/fix.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (args) { - require('../build/fix') -} diff --git a/core/bin/jsdoc.js b/core/bin/jsdoc.js deleted file mode 100644 index bc1dd2b..0000000 --- a/core/bin/jsdoc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = function () { - const builder = require('../build/jsdoc-builder') - builder('utils') - builder('components') - builder('map') - builder('charts') - builder('dv') -} diff --git a/core/bin/page.js b/core/bin/page.js deleted file mode 100644 index f174fea..0000000 --- a/core/bin/page.js +++ /dev/null @@ -1,35 +0,0 @@ -const fs = require('fs') -const core = require('../index') -const utils = require('../utils') -const packageJSON = core.IsInstalled ? require('../../../../../package.json') : require('../../package.json') - -function isExistApp(app) { - return !!(packageJSON.apps || {})[app] -} - -module.exports = function (args = []) { - const [page, local, app] = args - if (!page || !local) { - utils.log('缺少 page 和 local 参数', 'error') - return - } - if (app && !isExistApp(app)) { - utils.log(`子应用 ${app} 不存在`, 'error') - return; - } - - const pagePath = utils.join(core.LibPath, 'pages', page + '.vue') - if (!fs.existsSync(pagePath)) { - utils.log(`不存在 ${page} 的页面模板`, 'warning') - return - } - const localPath = app - ? utils.join(core.AppsPath, app, 'views', local + '.vue') - : utils.join(core.ProjectRootPath, 'src', 'views', local + '.vue') - if (fs.existsSync(localPath)) { - utils.log(`当前目录已存在 ${local} 的文件,请更换名称或删除该文件。`, 'warning') - return - } - utils.copyFile(pagePath, localPath) - utils.log(`页面已经安装成功,位置:${localPath}`, 'success') -} diff --git a/core/bin/preview.js b/core/bin/preview.js deleted file mode 100644 index a7bb7f0..0000000 --- a/core/bin/preview.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = function () { - const config = require('../config')(); - const core = require('../index') - const utils = require('../utils') - const createHttpServer = require('../server/http') - - createHttpServer({ - port: config.previewServerPort, - root: utils.join(core.ProjectRootPath, config.outputDir), - path: config.publicPath, - routes: [], - open: true - }) - -} diff --git a/core/bin/ready.js b/core/bin/ready.js deleted file mode 100644 index 6270c23..0000000 --- a/core/bin/ready.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 初始化,在启动开发环境或生产环境打包之前要完成的操作 - */ - - -module.exports = function (args) { - - const fs = require('fs') - const core = require('../index') - const themeBuilder = require('./theme') - const elThemes = core.OutputElementThemePath - const uiThemes = core.OutputUIThemePath - - -// 如不存在 el-themes 即 编译 - if (!fs.existsSync(elThemes)) { - themeBuilder(['el']) - } -// 如不存在 ui-themes 即编译 - if (!fs.existsSync(uiThemes)) { - themeBuilder(['ui']) - } - -// 重新生成代码 - require('./coder')(args) -} diff --git a/core/bin/route.js b/core/bin/route.js deleted file mode 100644 index 15d0b4d..0000000 --- a/core/bin/route.js +++ /dev/null @@ -1,43 +0,0 @@ -module.exports = function (args = []) { - const core = require('../index') - const utils = require('../utils') - const config = require('../config')() - const packageJson = core.IsInstalled ? require('../../../../../package.json') : require('../../package.json') - - const [routeAction, routeApp] = args - const routesBuilder = require('../build/routes') - let viewPath = '' - let outFile = '' - let autoRoutes = true - if (routeApp) { - const apps = packageJson.apps || {} - const app = apps[routeApp] - if (app) { - viewPath = utils.join(core.AppsPath, routeApp, 'views') - outFile = utils.join(core.TempPath, 'routes', `${routeApp}.js`) - autoRoutes = app.autoRoutes - } else { - utils.log(`应用${routeApp}不存在`) - } - } else { - viewPath = core.ViewsPath - outFile = core.OutputRoutesFile - autoRoutes = config.autoRoutes - } - - if (routeAction === 'watch') { - routesBuilder.watch( - viewPath, - outFile, - !autoRoutes - ) - } - - if (routeAction === 'build') { - routesBuilder.build( - viewPath, - outFile, - !autoRoutes - ) - } -} diff --git a/core/bin/server.js b/core/bin/server.js deleted file mode 100644 index 117c260..0000000 --- a/core/bin/server.js +++ /dev/null @@ -1,4 +0,0 @@ -// 适配兼容旧版本,新版改为 start -module.exports = function () { - require('../server/app') -} diff --git a/core/bin/start.js b/core/bin/start.js deleted file mode 100644 index 5b7e8c1..0000000 --- a/core/bin/start.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - require('../server/app') -} diff --git a/core/bin/svg.js b/core/bin/svg.js deleted file mode 100644 index 56770be..0000000 --- a/core/bin/svg.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - require('../build/svg') -} diff --git a/core/bin/theme.js b/core/bin/theme.js deleted file mode 100644 index 6068a3f..0000000 --- a/core/bin/theme.js +++ /dev/null @@ -1,35 +0,0 @@ -const builder = require('../build/theme') - - -module.exports = function (args) { - const type = args[0] - switch (type) { - case 'el': - case 'ui': - builder(type, (stats, ret) => { - if (!ret) { - console.log(stats.toString({ - chunks: false, - colors: true - })) - } - }) - break; - case 'prod': - require('../build/prod-theme-builder')(args[1]) - break; - default: - ['el', 'ui'].forEach(t => { - builder(t, (stats, ret) => { - if (!ret) { - console.log(stats.toString({ - chunks: false, - colors: true - })) - } - }) - }) - break - } - -} diff --git a/core/bin/widgets.js b/core/bin/widgets.js deleted file mode 100644 index 453fc3a..0000000 --- a/core/bin/widgets.js +++ /dev/null @@ -1,20 +0,0 @@ -// const fs = require('fs') -const core = require('../index') -const utils = require('../utils') -const pathList = require(utils.join(core.LibPath, 'widgets/path.js')) - -module.exports = function(args = []) { - const pathName = args[0] - if (!pathName || !pathList[pathName]) { - utils.log('缺少 工具参数 或 没有当前工具', 'error') - return - } - const widgetPath = utils.join(core.LibPath, 'widgets', pathList[pathName]) - - const localPath = utils.join(core.ProjectRootPath, '.my', 'widgets', pathList[pathName]) - - // console.log(widgetPath, localPath) - - utils.copy(widgetPath, localPath) - utils.log(`工具已经安装成功,位置:${localPath}`, 'success') -} \ No newline at end of file diff --git a/core/build/app.js b/core/build/app.js deleted file mode 100644 index b56b338..0000000 --- a/core/build/app.js +++ /dev/null @@ -1,227 +0,0 @@ -const fs = require('fs') -const process = require('child_process') -const utils = require('../utils') -const core = require('../index') -const packageJSON = core.IsInstalled ? require('../../../../../package.json') : require('../../package.json') - -const packageFile = utils.join(core.ProjectRootPath, 'package.json') -const appsDir = core.AppsPath -const appsConfigJSON = packageJSON.apps || {} - -/** - * 验证要创建的应用名称是否合法 - * @param name - * @return {boolean} - */ -function validate(name) { - if (core.AppReservedWords.includes(name)) { - utils.log(`>>> ${name} 是保留关键字,请更换其他名称再试!`, 'warning') - return false - } - if (fs.existsSync(appsDir)) { - const dirs = fs.readdirSync(appsDir) - if (dirs.includes(name)) { - utils.log(`>>> 站点名称 ${name} 已被使用 ,请更换其他名称再试!`, 'warning') - return false - } - } - return true -} - -/** - * 写入package.json命令 - * @param name - */ -function insertCommander(name) { - const dev = `npm run ready && cross-env APP=${name} concurrently "npm run serve -- --open" "npm run route watch ${name}"` - const build = `npm run ready && npm run route build ${name} && npm run theme prod ${name} && cross-env APP=${name} npm run build` - packageJSON.scripts[`dev:${name}`] = dev - packageJSON.scripts[`build:${name}`] = build - utils.writeFile( - packageFile, - JSON.stringify(packageJSON, null, 2) - ) -} - -/** - * 删除package.json命令 - * @param name - */ -function removeCommander(name) { - delete packageJSON.scripts[`dev:${name}`] - delete packageJSON.scripts[`build:${name}`] - utils.writeFile( - packageFile, - JSON.stringify(packageJSON, null, 2) - ) -} - -/** - * 写入配置 - * @param name - * @param port - */ -function writeConfig(name, port) { - appsConfigJSON[name] = { - name: name, - port: port, - autoRoutes: true, - // 默认自动 - publicPath: null, - // 默认自动 - outputDir: null, - // 是否采用独立的静态配置文件,false表示取主应用的配置 - staticConfig: false, - // 开启模拟数据 - mock: false, - contentBase: [] - } - - packageJSON.apps = appsConfigJSON - - utils.writeFile( - packageFile, - JSON.stringify(packageJSON, null, 2) - ) -} - -/** - * 把应用名称写入到配置文件 - * @param to - * @param name - */ -function injectAppName(to, name) { - const file = utils.join(to, 'config.js') - let content = fs.readFileSync(file, 'utf-8') - if (content) { - content = content.replace(/{{appName}}/gi, name) - } - utils.writeFile( - file, - content - ) -} - -/** - * 清除配置文件 - * @param name - */ -function clearConfig(name) { - delete appsConfigJSON[name] - packageJSON.apps = appsConfigJSON - - const content = JSON.stringify(packageJSON, null, 2) - utils.writeFile(packageFile, content) -} - -/** - * 新增应用 - * @param name 应用名称 - * @param port 开发环境端口号 - */ -function add(name, port) { - if (!validate(name)) return - - // 写入配置文件 - writeConfig(name, port) - - const from = core.AppTemplatePath - const to = utils.join(core.AppsPath, name) - - // 复制app模板到 apps目录 - utils.copy(from, to).then(() => { - // 注入应用名称到配置文件 - injectAppName(to, name) - }) - - // 写入 package.json 命令 - insertCommander(name) - - utils.log(`>>>【 ${name} 】站点创建成功!`, 'success') -} - -/** - * 删除应用 - * @param name 应用名称 - */ -function remove(name) { - - // 清除命令 - removeCommander(name) - - // 清除命令 - clearConfig(name) - - // 删除应用文件 - utils.rm(utils.join(core.AppsPath, name)) - - utils.log(`>>>【 ${name} 】站点删除成功!`, 'success') -} - -/** - * 执行队列函数 - * @param array - * @param func - * @param finish - */ -function queue(array, func, finish) { - if (array.length > 0) { - const item = array.shift(); - func(item) - .then(() => { - queue(array, func, finish); - }) - .catch(e => { - queue(array, func, finish); - }); - } else { - finish && finish(); - } -} - -/** - * 发布全部应用 - */ -function build() { - const apps = Object.keys(appsConfigJSON) - const total = apps.length - if (total === 0) { - utils.log('没有可发布的子应用', 'warning') - return - } - const startTime = new Date().getTime(); - utils.log('开始发布子应用') - queue(apps, - function (name) { - utils.log(`>>> ${name} ...`) - return new Promise((resolve, reject) => { - const cmd = `npm run build:${name}` - process.exec(cmd, (err, std) => { - if (err) { - utils.log(err, 'error') - utils.log(`>>> 【${name}】应用编译失败,错误信息:`, 'warning') - utils.log(std) - reject(err) - return - } - resolve() - utils.log(`>>>【${name}】应用编译成功!`, 'success') - }) - }) - - }, - function () { - const endTime = (new Date().getTime() - startTime) / 1000; - utils.log(`>>> 全部子应用发布完成, 耗时:${endTime}秒, 平均每个应用耗时:${endTime / total}秒`, 'success') - }) - -} - - -module.exports = { - add, - remove, - build -} - - diff --git a/core/build/bridge-builder.js b/core/build/bridge-builder.js deleted file mode 100644 index b417718..0000000 --- a/core/build/bridge-builder.js +++ /dev/null @@ -1,21 +0,0 @@ -const webpack = require('webpack') -const utils = require('../utils') -const config = require('../config/webpack.bridge.config') -const libConfig = require('../config/wepack.bridge.lib.config') - -utils.rm(config.output.path) -utils.log('正在执行编译bridge ...') -webpack(config, (err, stats) => { - if (err || stats.hasErrors()) { - utils.log(stats, 'error') - } else { - // 打包类库 - webpack(libConfig, (err, stats) => { - if (err || stats.hasErrors()) { - utils.log(stats, 'error') - } else { - utils.log('>>> bridge 编译完成', 'success') - } - }) - } -}) diff --git a/core/build/bridge-entry.js b/core/build/bridge-entry.js deleted file mode 100644 index da7e53b..0000000 --- a/core/build/bridge-entry.js +++ /dev/null @@ -1,10 +0,0 @@ -import Messager, {MESSAGE_TYPE} from '$ui/utils/messager' - -const messager = new Messager({ - target: parent.window -}) - -messager.on(MESSAGE_TYPE, function (data) { - messager.pass(data) -}) - diff --git a/core/build/coder.js b/core/build/coder.js deleted file mode 100644 index 54c0b47..0000000 --- a/core/build/coder.js +++ /dev/null @@ -1,510 +0,0 @@ -/** - * 代码生成器 - * @author chenhuachun - */ -const fs = require('fs') -const path = require('path') -const {logWithSpinner, stopSpinner} = require('@vue/cli-shared-utils') -const _ = require('lodash') -const pathToRegexp = require('path-to-regexp') -const config = require('../config/coder.config') -const utils = require('../utils') - -const schemaFiles = getSchemaFiles(config.schemasDir) -const schemaInfo = getSchemaInfo(schemaFiles) -const schemaJSON = parseSchemas(schemaInfo) -const apiRender = getRender('api.js') -const mockRender = getRender('mock.js') -const storeRender = getRender('store.js') -const mixinRender = getRender('mixin.js') -const typesRender = getRender('types.js') -const iconsRender = getRender('icons.js') - -/** - * 读取模板渲染函数 - * @param file - */ -function getRender(file) { - return require(path.join(config.templatesDir, file)) -} - -/** - * 转换成规范的js命名,如:sys_log.js 转换成 sysLog - * @param name - */ -function toSchemaName(name) { - return _.camelCase(name.replace('.js', '')) -} - -/** - * 获取架构配置文件列表 - * @param root 从那个路径开始查找 - * @param parent 当前的目录名称,可选 - * @returns {Array} - */ -function getSchemaFiles(root, parent) { - let fileList = [] - if (!fs.existsSync(root)) { - utils.log('警告:schemas已自动创建', 'warning') - fs.mkdirSync(root) - return fileList - } - const files = fs.readdirSync(root) - _.each(files, function (file) { - const filePath = path.join(root, file) - const stat = fs.lstatSync(filePath) - if (stat.isDirectory()) { - fileList = fileList.concat(getSchemaFiles(filePath, file)) - } else { - if (file.indexOf('.js') > 0) { - fileList.push({ - name: toSchemaName(parent ? [parent, file].join('_') : file), - path: filePath - }) - } - } - }) - return fileList -} - -/** - * 根据配置文件生成配置JSON - * @param files - * @returns {{}} - */ -function getSchemaInfo(files) { - const models = {} - _.each(files, function (file) { - models[file.name] = require(file.path) - }) - return models -} - -/** - * 创建文件 - * @param path - * @param fileName - * @param content - */ -function writeFile(path, fileName, content) { - utils.writeFile(utils.join(path, fileName + '.js'), content) -} - -function toUpperCase(name) { - return name.toUpperCase() -} - -/** - * Foo Bar | --foo-bar | __foo_bar__ => fooBar - * @param name - */ -function toCamelCase(name) { - return _.camelCase(name) -} - -/** - * Foo Bar | fooBar | --foo-bar => foo_bar - * @param name - */ -function toSnakeCase(name) { - return _.snakeCase(name) -} - -/** - * fooBar => foo-bar - * @param name - */ -function toKebabCase(name) { - return _.kebabCase(name) -} - -function toUpperSnakeCaseName(name) { - return toUpperCase(toSnakeCase(name)) -} - - -/** - * JSON转换成字符串,并把双引号转换成单引号 - * @param json - */ -function stringify(json) { - const str = JSON.stringify(json) - return str ? str.replace(/'/g, '\\\'').replace(/"/g, '\'') : '' -} - -/** - * 解析models - * @param schemas - * @returns {{}} - */ -function parseSchemas(schemas) { - const result = {} - _.each(schemas, function (schema, name) { - result[name] = parseModel(schema.model, name, schema.vuex) - }) - return result -} - -function getTitle(name, item, info) { - const methodComment = config.methodCommentMap[item.methodType] || item.title || '<%=cname%> ' + (item.upperSnakeCaseName || '') - return _.template(methodComment)({cname: info[name].name || name}) -} - -/** - * 解析单个model - * @param model - * @param name - * @param vuex - * @returns {Array} - */ -function parseModel(model, name, vuex) { - let result = [] - if (_.isArray(model)) { - _.each(model, function (item) { - if (item.disabled !== true && item.path) { - result = result.concat(parseModel(item, name, vuex)) - } - }) - } else { - if (model.disabled !== true && model.path) { - if (model.methods === false) { - if (!model.name) { - throw Error('methods为false时,必须要设置name') - } - if (vuex && (!model.state && !model.method)) { - throw Error('vuex模式,methods为false,并且method为空时,必须要设置state') - } - - if (model.method && !config.methods.includes(model.method)) { - throw Error('method的值必须是' + config.methods.join(' ') + '中的一个') - } - // ajax请求类型 - const httpMethod = config.methodTypeMap[model.method || model.name] || 'post' - - const options = _.extend({}, {method: httpMethod}, model.options || {}) - result.push({ - path: model.path, - prefix: model.prefix || config.pathPrefix, - transform: model.transform, - options: options, - columns: model.columns, - methodType: model.method || model.name, - httpMethod: options.method, - suffix: '', - upperSnakeCaseName: toUpperSnakeCaseName(model.name), - camelCaseName: toCamelCase(model.name), - template: model.template, - name: model.name, - state: model.state, - title: model.title, - cache: model.cache, - socket: model.socket - }) - } else { - const methods = model.methods || config.methods - _.each(methods, function (method) { - - // 检测是否开启了批量删除 - if (method === 'batch' && !config.batchEnabled) return - - // ajax请求类型 - const httpMethod = config.methodTypeMap[method] || 'get' - // axios options - const options = _.extend({}, {method: httpMethod}, model.options || {}) - result.push({ - path: model.path, - transform: model.transform, - prefix: model.prefix || config.pathPrefix, - suffix: config.methodSuffixMap[method] || '', - options: options, - columns: model.columns, - methodType: method, - httpMethod: httpMethod, - upperSnakeCaseName: toUpperSnakeCaseName(method + '_' + name), - camelCaseName: toCamelCase(method + '_' + name), - template: model.template, - title: model.title, - cache: model.cache, - socket: model.socket - }) - }) - } - } - } - return result -} - -/** - * 生成api文件 - */ -function writeApi(json, info) { - _.each(json, function (model, name) { - const items = [] - let configKeys = [], transforms = [] - _.each(model, function (item) { - if (item.prefix) { - configKeys.push(item.prefix) - } - if (item.transform) { - transforms.push(item.transform) - } - const url = item.path + item.suffix - const keys = [] - pathToRegexp(url, keys) - - // 去重,在数组中已存在的URL不加进去 - if (!items.some(n => n.URL === item.upperSnakeCaseName)) { - items.push({ - URL: item.upperSnakeCaseName, - url: item.path + item.suffix, - prefix: item.prefix, - params: keys.map(n => n.name), - camelCaseName: item.camelCaseName, - options: item.options, - ajaxParam: 'data', - transform: item.transform, - title: getTitle(name, item, info), - cache: item.cache, - socket: item.socket - }) - } - }) - // 去重 - configKeys = _.uniq(configKeys) - transforms = _.uniq(transforms) - writeFile(config.outApiPath, toKebabCase(name), utils.beautifyJs(apiRender({ - cname: info[name].name, - name: name, - transforms: transforms, - configKeys: configKeys, - items: items - }))) - }) -} - -/** - * 生成mock文件 - */ -function writeMock(json) { - const dbConfig = [], extendsArray = []; - _.each(json, function (model, name) { - const kebabCaseName = toKebabCase(name) - dbConfig.push(`import ${name} from '$my/code/mock/${kebabCaseName}'`) - extendsArray.push(`...${name}`) - const mocks = [] - let importApiArray = [], templateArray = [] - _.each(model, function (item) { - if (item.columns || item.template) { - importApiArray.push(item.upperSnakeCaseName) - } - if (item.template) { - templateArray.push(item.template) - } - if (item.columns || item.template) { - mocks.push({ - URL: item.upperSnakeCaseName, - page: config.statePageName || 'page', - limit: config.statePageSizeName || 'limit', - total: config.stateTotalName || 'total', - list: config.stateListName || 'list', - httpMethod: item.httpMethod, - methodType: item.methodType, - columns: stringify(item.columns || {}, '', '\t'), - template: item.template - }) - } - }) - importApiArray = _.uniq(importApiArray) - templateArray = _.uniq(templateArray) - writeFile(config.outMockPath, toKebabCase(name), utils.beautifyJs(mockRender({ - importApiArray: importApiArray, - name: name, - kebabCaseName: toKebabCase(name), - mocks: mocks, - code: config.mockCodeName || 'code', - data: config.mockDataName || 'data', - message: config.mockMsgName || 'message', - templateArray: templateArray, - codeValue: config.successCodeValue, - addData: stringify(config.addMockData), - updateData: stringify(config.updateMockData), - removeData: stringify(config.removeMockData), - batchData: stringify(config.batchMockData) - }))) - }) - dbConfig.push(`export default [${extendsArray.join(', ')}]`) - writeFile(config.outMockConfig, 'rules', dbConfig.join('\n') + '\n') -} - -/** - * 生成mixin文件 - */ -function writeMixin(json, info) { - _.each(json, function (model, name) { - if (info[name].vuex) { - return - } - let importTypeArray = [], - importApiArray = [], - customStateArray = [] - const items = [] - _.each(model, function (item) { - importTypeArray.push(item.upperSnakeCaseName) - importApiArray.push(item.camelCaseName) - if (item.state) { - customStateArray.push({ - state: item.state, - title: item.title || item.upperSnakeCaseName - }) - } - const url = item.path + item.suffix - const keys = [] - pathToRegexp(url, keys) - - items.push({ - NAME: item.upperSnakeCaseName, - name: item.camelCaseName, - state: item.state, - params: keys.map(n => n.name), - httpMethod: item.httpMethod, - methodType: item.methodType, - ajaxParam: 'data', - title: getTitle(name, item, info), - cache: item.cache - }) - }) - importTypeArray = _.uniq(importTypeArray) - importApiArray = _.uniq(importApiArray) - customStateArray = _.uniq(customStateArray) - writeFile(config.outMixinPath, toKebabCase(name), utils.beautifyJs(mixinRender({ - name: name, - cname: info[name].name || name, - kebabCaseName: toKebabCase(name), - importTypeArray: importTypeArray, - importApiArray: importApiArray, - customStateArray: customStateArray, - page: config.statePageName || 'page', - limit: config.statePageSizeName || 'limit', - total: config.stateTotalName || 'total', - list: config.stateListName || 'list', - model: config.stateModelName || 'model', - items: items - }))) - }) -} - -/** - * 生成store文件 - */ -function writeStore(json, info) { - const types = {} - const modules = [], extendsArray = [] - _.each(json, function (model, name) { - if (!info[name].vuex) { - return - } - modules.push(`import {${name}} from '$my/code/store/${toKebabCase(name)}'`) - extendsArray.push(name) - - let importTypeArray = [], - importApiArray = [], - customStateArray = [] - const items = [] - types[name] = [] - _.each(model, function (item) { - types[name].push({ - name: item.upperSnakeCaseName, - title: getTitle(name, item, info) - }) - importTypeArray.push(item.upperSnakeCaseName) - importApiArray.push(item.camelCaseName) - if (item.state) { - customStateArray.push({ - state: item.state, - title: item.title || item.upperSnakeCaseName - }) - } - const url = item.path + item.suffix - const keys = [] - pathToRegexp(url, keys) - items.push({ - NAME: item.upperSnakeCaseName, - name: item.camelCaseName, - state: item.state, - params: keys.map(n => n.name), - httpMethod: item.httpMethod, - methodType: item.methodType, - ajaxParam: 'data', - title: getTitle(name, item, info), - cache: item.cache - }) - }) - importTypeArray = _.uniq(importTypeArray) - importApiArray = _.uniq(importApiArray) - customStateArray = _.uniq(customStateArray) - writeFile(config.outStorePath, toKebabCase(name), utils.beautifyJs(storeRender({ - name: name, - cname: info[name].name || name, - kebabCaseName: toKebabCase(name), - importTypeArray: importTypeArray, - importApiArray: importApiArray, - customStateArray: customStateArray, - page: config.statePageName || 'page', - limit: config.statePageSizeName || 'limit', - total: config.stateTotalName || 'total', - list: config.stateListName || 'list', - model: config.stateModelName || 'model', - items: items - }))) - }) - - writeFile(config.outStoreType, 'types', utils.beautifyJs(typesRender({types: types}))) - modules.push(`export default {${extendsArray.join(', ')}}`) - writeFile(config.outStoreType, 'modules', modules.join('\n') + '\n') -} - -function getMyIconData() { - const content = fs.readFileSync(config.iconCssFile, {encoding: 'utf-8'}) - const regex = /.icon-[\w-_]+:/g - const matches = content.match(regex) - return matches.map(function (item) { - return item.replace('.', '').replace(':', '') - }) -} - -function writeIconData() { - // element-ui icon - const content = fs.readFileSync(config.elIconCssFile, {encoding: 'utf-8'}) - const regex = /.el-icon-[\w-_]+:/g - const matches = content.match(regex) - const elItems = matches.map(function (item) { - return item.replace('.el-', 'el-').replace(':', '') - }) - - const items = getMyIconData() - - const fileContent = iconsRender({items: stringify(items), elItems: stringify(elItems)}) - fs.writeFileSync(config.outIconFile, - utils.beautifyJs(fileContent), - 'utf-8') -} - -module.exports = function (force) { - if (force) { - utils.rm(config.outDir) - logWithSpinner('清空目录') - } - logWithSpinner('构建代码') - if (!fs.existsSync(config.outDir)) { - utils.mkdir(config.outDir) - } - writeApi(schemaJSON, schemaInfo) - writeMock(schemaJSON) - writeStore(schemaJSON, schemaInfo) - writeMixin(schemaJSON, schemaInfo) - writeIconData() - stopSpinner() -} - - - diff --git a/core/build/colors.js b/core/build/colors.js deleted file mode 100644 index c532ceb..0000000 --- a/core/build/colors.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * 创建 Ant Design 配色SCSS变量文件 - */ -const {logWithSpinner, stopSpinner} = require('@vue/cli-shared-utils') -const palette = require('@ant-design/colors') -const utils = require('../utils') -const core = require('../index') - -function getNeutral(color, index) { - const percents = [1, 0.85, 0.65, 0.45, 0.25, 0.15, 0.09, 0.04, 0.02, 0] - const val = color === 'black' ? 0 : 255 - return `rgba(${val}, ${val}, ${val}, ${percents[index]})` -} - -function createNeutralVars() { - const neutralBlack = [] - const neutralWhite = [] - - for (let i = 0; i < 10; i++) { - neutralBlack.push(getNeutral('black', i)) - neutralWhite.push(getNeutral('white', i)) - } - return { - 'neutral-black': neutralBlack, - 'neutral-white': neutralWhite - } -} - - -// #409EFF -function writeScssVar() { - logWithSpinner(core.ColorsVarFilePath) - const colors = palette.presetPalettes - colors.custom = generate('#409EFF') - const content = [] - content.push('// base') - content.push('$black: #000 !default;') - content.push('$white: #fff !default;') - content.push('$none: transparent !default;') - - Object.keys(colors).forEach(name => { - const items = colors[name] - content.push(`// ${name}`) - content.push(`$${name}-primary: ${items.primary} !default;`) - items.reverse().forEach((val, index) => { - content.push(`$${name}-${index + 1}: ${val} !default;`) - }) - }) - const neutrals = createNeutralVars() - Object.keys(neutrals).forEach(name => { - const items = neutrals[name] - content.push(`// ${name}`) - items.forEach((val, index) => { - content.push(`$${name}-${index + 1}: ${val} !default;`) - }) - }) - - - utils.writeFile(core.ColorsVarFilePath, content.join('\n')) - stopSpinner() -} - -function generate(color) { - const items = palette.generate(color); - items.primary = color; - return items; -} - -module.exports = { - write: writeScssVar -} - diff --git a/core/build/demo-builder.js b/core/build/demo-builder.js deleted file mode 100644 index 8e443dc..0000000 --- a/core/build/demo-builder.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * markdown文档生成demo vue组件 - * - * @author chenhuachun - */ -const fs = require('fs') -const {logWithSpinner, stopSpinner} = require('@vue/cli-shared-utils') -const MarkdownIt = require('markdown-it') -const mdLoader = require('../loaders/docs-extend-md-loader') -const core = require('../index') -const utils = require('../utils') -const demoDir = core.DocsTempDemoPath - -/** - * 删除demo文件夹 - */ -function clear() { - utils.rm(demoDir) -} - -/** - * 分析md文件,生成demo vue组件 - */ -function build() { - logWithSpinner('构建markdown代码示例demo') - const files = utils.getFiles(core.DocsPath) - .filter(file => file.includes('.md')) - - const md = new MarkdownIt({ - html: true - }) - - mdLoader(md) - - files.forEach((file, index) => { - const content = fs.readFileSync(file, 'utf-8') - md.render(content) - if (index >= files.length - 1) { - stopSpinner() - } - }) -} - -module.exports = function () { - // 先清空目录再生成 - clear() - build() -} - diff --git a/core/build/dev-theme-switch.js b/core/build/dev-theme-switch.js deleted file mode 100644 index 8d5adad..0000000 --- a/core/build/dev-theme-switch.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 开发环境在线切换主题配置,通过改变文件触发热更新实现组件主题刷新 - * - * @author chenhuachun - */ -const utils = require('../utils') -const core = require('../index') -const fs = require('fs') - -/** - * 更换主题 - * @param theme 主题名称 - */ -module.exports = function (theme) { - if (theme) { - const content = `@import "../themes/${theme}";` - utils.writeFile(core.ProjectThemeScssFile, content) - const elCssFile = utils.join(core.TempPath, 'el-themes', theme, 'index.css') - const uiCssFile = utils.join(core.TempPath, 'ui-themes', theme, 'index.css') - let cssContent = '' - try { - const elCss = fs.readFileSync(elCssFile, 'utf-8') - const uiCss = fs.readFileSync(uiCssFile, 'utf-8') - cssContent = [elCss, uiCss].join('\n') - } catch (e) { - utils.log(e, 'error') - } - return cssContent - - } -} diff --git a/core/build/fix.js b/core/build/fix.js deleted file mode 100644 index a380870..0000000 --- a/core/build/fix.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * 修复 node_modules 源码的bug - */ -const fs = require('fs') -const chalk = require('chalk') -const ELEMENT_UI_FILE = 'node_modules/element-ui/lib/element-ui.common.js' -const ELEMENT_UI_UPLOAD_AJAX = 'node_modules/element-ui/lib/upload.js' -const AXIOS_FILE = 'node_modules/axios/lib/adapters/xhr.js' -const GOJS_FILE = 'node_modules/gojs/release/go.js' - -function fixElementUI(file) { - try { - let content = fs.readFileSync(file, 'utf-8') - // flag1 与 flag2 互换位置 - const flag1 = 'xhr.open(\'post\', action, true);' - const flag2 = `if (option.withCredentials && 'withCredentials' in xhr) { - xhr.withCredentials = true; - }`; - if (content.includes('/*flag1*/')) { - console.log(`fix ${file} ${chalk.yellow('fixed')}`) - return - } - - if (content.includes(flag1) && content.includes(flag2)) { - content = content - .replace(flag1, `/*flag1*/${flag1}/*flag1*/`) - .replace(flag2, `/*flag2*/${flag2}/*flag2*/`) - - - content = content.replace(`/*flag1*/${flag1}/*flag1*/`, `/*flag1*/${flag2}/*flag1*/`) - .replace(`/*flag2*/${flag2}/*flag2*/`, `/*flag2*/${flag1}/*flag2*/`) - - fs.writeFileSync(file, content, 'utf-8') - - console.log(`fix ${file} ${chalk.green('success')}`) - } else { - console.log(`fix ${file} ${chalk.red('fail')}`) - } - } catch (e) { - console.log(`fix ${file} ${chalk.red('fail')}`) - } -} - -function fixAxios() { - try { - let content = fs.readFileSync(AXIOS_FILE, 'utf-8') - // flag1 移到 flag2 的前面 - const flag1 = `if (!utils.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; - }` - const flag2 = 'request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);' - if (content.includes('/*flag2*/')) { - console.log(`fix ${AXIOS_FILE} ${chalk.yellow('fixed')}`) - return - } - // console.log(content.includes(flag1), content.includes(flag2)) - if (content.includes(flag1) && content.includes(flag2)) { - - content = content - .replace(flag1, `/*flag1*/${flag1}/*flag1*/`) - .replace(flag2, `/*flag2*/${flag2}/*flag2*/`) - - content = content - .replace(flag2, `${flag1} \n ${flag2}`) - .replace(`/*flag1*/${flag1}/*flag1*/`, '') - - - fs.writeFileSync(AXIOS_FILE, content, 'utf-8') - - console.log(`fix ${AXIOS_FILE} ${chalk.green('success')}`) - } else { - console.log(`fix ${AXIOS_FILE} ${chalk.red('fail')}`) - } - } catch (e) { - console.log(`fix ${AXIOS_FILE} ${chalk.red('fail')}`) - } -} - -function fixGojs(file) { - try { - let content = fs.readFileSync(file, 'utf-8') - if (content.includes('/*flag*/')) { - console.log(`fix ${file} ${chalk.yellow('fixed')}`) - return - } - // 破解gojs - const flag = '7eba17a4ca3b1a8346' - const index = content.indexOf(flag) - if (index > 0) { - const start = index - 8, end = index + 32 + flag.length - const section = content.substring(start, end) - content = content.replace(section, 'function(){return true;};/*flag*/') - content = content.replace('bfunction(){return true;}', 'function(){return true;}') - fs.writeFileSync(file, content, 'utf-8') - - console.log(`fix ${file} ${chalk.green('success')}`) - } else { - console.log(`fix ${file} ${chalk.red('fail')}`) - } - } catch (e) { - console.log(`fix ${file} ${chalk.red('fail')}`) - } -} - -fixElementUI(ELEMENT_UI_FILE) -fixElementUI(ELEMENT_UI_UPLOAD_AJAX) -fixAxios() -fixGojs(GOJS_FILE) -fixGojs(GOJS_FILE.replace('go.js', 'go-module.js')) -fixGojs(GOJS_FILE.replace('go.js', 'go-debug.js')) -fixGojs(GOJS_FILE.replace('go.js', 'go-debug-module.js')) -fixGojs(GOJS_FILE.replace('go.js', 'go.mjs')) -fixGojs(GOJS_FILE.replace('go.js', 'go-debug.mjs')) - - - diff --git a/core/build/front-matter.js b/core/build/front-matter.js deleted file mode 100644 index 832d1c2..0000000 --- a/core/build/front-matter.js +++ /dev/null @@ -1,65 +0,0 @@ -// see: https://github.com/jonschlinkert/gray-matter - -/* - -属性 ---- -title: 标题 ---- - -数组 ---- -list: - - one - - two ---- - -对象 ---- -obj: - name: kenny - age: 18 ---- - -数组包含对象 ---- -list: - - - name: kenny - age: 18 - - - name: sam - age: 20 ---- - - */ - - -const fs = require('fs') -const matter = require('gray-matter'); -const _ = require('lodash') -const utils = require('../utils') - -const regex = /---\n?[\s\S]*\n?---/gi - -/** - * 解释文件,返回标记数据 - * @param file 文件路径 - * @param isString 是否返回字符串 - * @return {null|*} - */ -function parse(file, isString) { - const content = fs.readFileSync(file, 'utf-8') - const matches = content.match(regex) || [] - if (matches.length === 0) { - return null - } - const results = matches.map(block => { - return matter(block.trim()).data || {} - }); - const data = _.merge.apply(_.merge, results) - return _.isPlainObject(data) ? (isString ? utils.stringify(data) : data) : null -} - - -module.exports = parse diff --git a/core/build/jsdoc-builder.js b/core/build/jsdoc-builder.js deleted file mode 100644 index 6aaae4f..0000000 --- a/core/build/jsdoc-builder.js +++ /dev/null @@ -1,24 +0,0 @@ -const process = require('child_process') -const {logWithSpinner, stopSpinner, failSpinner} = require('@vue/cli-shared-utils') -const utils = require('../utils') - -const jsdoc = 'node node_modules/jsdoc/jsdoc.js' - -function getConfigPath(dir) { - return utils.resolve(`core/config/jsdoc.${dir}.config.js`) -} - -function builder(dir) { - const cmd = `${jsdoc} -c ${getConfigPath(dir)} -r` - logWithSpinner(`${dir}文档生成完成`) - process.exec(cmd, (err, std) => { - if (err) { - failSpinner(`${dir}文档生成失败`) - utils.log(err, 'error') - return - } - stopSpinner() - }) -} - -module.exports = builder diff --git a/core/build/prod-theme-builder.js b/core/build/prod-theme-builder.js deleted file mode 100644 index ba3a049..0000000 --- a/core/build/prod-theme-builder.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * 编译生产环境主题样式 - * - * @author chenhuachun - */ -const process = require('child_process') -const {logWithSpinner, stopSpinner} = require('@vue/cli-shared-utils') -const fs = require('fs') -const config = require('../config')() -const utils = require('../utils') -const core = require('../index') - - -// 获取项目的主题变量文件 -const themeConfigFiles = fs.readdirSync(core.ProjectThemeVarPath) || [] - -// 编译临时存放的目录 -const tempDir = core.ProductionThemesCompiledPath - -// 编译完成后输出的css目录路径 -const compiledCssPath = utils.join(core.BuildThemeDistPath, config.assetsDir, 'css') - -// 主题名称数组 -const themes = themeConfigFiles.map(item => { - return item.replace('.scss', '').substring(1) -}).filter(item => item !== 'default') - -/** - * 编译函数 - * @param themes 主题名称数组 - */ -function builder(themes, app) { - if (themes.length === 0) return - const theme = themes.pop() - const appLabel = app ? `APP=${app}` : '' - const cmd = `node ./node_modules/cross-env/src/bin/cross-env.js BUILD_THEME=true THEME=${theme} ${appLabel} node node_modules/@vue/cli-service/bin/vue-cli-service.js build` - logWithSpinner(`打包生产环境主题【${theme}】`) - process.exec(cmd, function (err, sto) { - if (err) { - utils.log(err, 'error') - console.log(sto) - return - } - // utils.log(`>>> 生产环境主题【${theme}】打包成功!`, 'success') - stopSpinner() - // 存储结果到临时文件夹 - utils.copyFiles(compiledCssPath, tempDir) - - // 删除临时目录 - utils.rm(core.BuildThemeDistPath) - // 递归 - builder(themes) - }) -} - - -module.exports = function (app) { - // 先删除上次编译产生的临时文件 - utils.rm(tempDir) - utils.rm(core.BuildThemeDistPath) -// 执行编译 - builder(themes, app) -} diff --git a/core/build/routes.js b/core/build/routes.js deleted file mode 100644 index 46e5406..0000000 --- a/core/build/routes.js +++ /dev/null @@ -1,378 +0,0 @@ -const fs = require('fs') -const url = require('url') -const isEqual = require('lodash/isEqual') -const _set = require('lodash/set') -// const core = require('../index') -const utils = require('../utils') -const frontMatter = require('./front-matter') -const routesRender = require('../renders/routes') -const routesWrapperRender = require('../renders/routes-wrapper') - - -const vueFileRegex = /\.vue$/ - -// const dir = core.ViewsPath - - -/** - * 当前目录文件解析元数据缓存 - * 数据示例 - * {'file path': {file:文件路径, name: 文件名, path: 路由路径, parent: 上级路径, vue: 是否vue后缀文件, meta: 标记数据}} - * @type {FilesMap} - */ -let FilesMap = null - -/** - * 解析函数,把路由配置解析成js代码 - * @param routes - * @return {*} - */ -function render(routes) { - const content = routesRender({ - items: routes, - render: routesRender - }) - const wrapper = routesWrapperRender({ - content: content - }) - return utils.beautifyJs(wrapper) -} - -/** - * 写入路由代码文件 - * @param content 内容 - * @param path 保存位置 - */ -function saveFile(content, path) { - utils.writeFile(path, content) -} - -/** - * 还原文件默认内容 - * @param path - */ -function cleanFile(path) { - const content = render([]) - saveFile(content, path) -} - - -/** - * 检测文件是否存在 - * @param dir - * @param file - * @return {boolean} - */ -function isExistFile(dir, file) { - return fs.existsSync(utils.join(dir, file)) -} - - -/** - * 解析文件得到标记信息 - * @param root 目录 - * @param path 文件路径 - * @return {{path: string, parent: string, file: *, meta: *, vue: boolean, name: *}} - */ -function parseFile(root, path) { - const msg = utils.parsePath(path) - const absolutePath = utils.join(root, path) - const info = fs.statSync(absolutePath) - const isDirectory = info.isDirectory() - let meta = null - try { - meta = frontMatter(absolutePath) - } catch (e) { - utils.log(e, 'error') - } - - return { - file: path, - name: msg.base, - path: url.format(utils.join('/', msg.dir, msg.name)), - parent: url.format(msg.dir), - vue: !isDirectory, - meta: meta - } -} - -/** - * 采集文件下全部文件的标记信息 - * @param dir - */ -function collectFilesMap(dir) { - const files = utils.getFiles(dir) - // 筛选出vue文件 - .filter(file => vueFileRegex.test(file)) - // 取出相对根目录路径 - .map(file => file.replace(dir, '')) - const result = {} - files.forEach(file => { - result[file] = parseFile(dir, file) - }) - return result -} - -/** - * 递归元数据转化成数组 - * @param data - * @param parent - * @return {Array} - */ -function walk(data = {}, parent) { - const nodes = [] - for (const key in data) { - const item = data[key] - if (item.vue) { - nodes.push(item) - } else { - const path = utils.join(parent, key) - const node = { - name: key, - path: path, - vue: false, - children: walk(item, path) - } - nodes.push(node) - } - } - return nodes - -} - -/** - * 元数据转换成树结构 - * @param map - * @return {Array} - */ -function mapToTree(map) { - const list = Object.keys(map).map(key => map[key]) - const result = {} - list.forEach(item => { - const attrs = item.path.substring(1).split('/') - _set(result, attrs.join('.'), item) - }) - - return walk(result, '/') -} - -/** - * 分析元数据结构树,得到路由数据 - * @param tree - * @param name - * @param path - * @return {{layout: *, path: string, excludes: *[], name: string, index: *, files: *[], any: *}} - */ -function analyser(tree = [], name = '', path = '/') { - // 布局文件 - const layout = tree.find(item => item.name === '_layout.vue') - // 外置 404 文件 - const any = tree.find(item => item.name === '_404.vue') - // 内置 404 文件 - const innerAny = tree.find(item => item.name === '404.vue') - // 主页 - const index = tree.find(item => item.name === 'index.vue') - // 子目录 - const children = tree.filter(item => !!item.children) - - // 不放入二级路由的页面 - const excludes = tree.filter(item => { - return /^_/.test(item.name) && ![layout, any].includes(item) - }) - - // 纳入路由的其他文件,不包含:布局、404、主页、外置页面 - const files = tree.filter(item => { - return ![layout, any, index, innerAny].includes(item) && !children.includes(item) && !excludes.includes(item) - }) - - const config = { - name: name, - path: path, - layout, - index, - any, - files, - excludes, - innerAny - } - - // 递归子目录 - if (children.length > 0) { - config.children = children.map(child => { - return analyser(child.children, child.name, child.path) - }) - } - - return config - -} - -function transformToken(config, context) { - // 处理主页 - if (config.index) { - context.push({ - path: config.index.path.replace('/index', '').replace(/\/\$/gi, '/:'), - component: config.index.path.substring(1), - meta: utils.stringify(config.index.meta) - }) - } - - // 处理普通页面 - config.files.forEach(file => { - context.push({ - path: file.path.replace(/\/\$/gi, '/:'), - component: file.path.substring(1), - meta: utils.stringify(file.meta) - }) - }) - - // 处理子目录 - if (config.children) { - config.children.forEach(child => { - context = context.concat(transform(child)) - }) - } - - // 处理内置的404 - if (config.innerAny) { - context.push({ - path: config.innerAny.path.replace('/404', '/*').replace(/\/\$/gi, '/:'), - component: config.innerAny.path.substring(1), - meta: utils.stringify(config.innerAny.meta) - }) - } - - return context -} - -/** - * 路由数据转换成配置信息 - * @param config - * @return {Array} - */ -function transform(config) { - let routes = [] - - if (config.layout) { - - const route = { - path: utils.urlFormat(config.path).replace(/\/\$/gi, '/:'), - component: config.layout.path.substring(1), - meta: utils.stringify(config.layout.meta), - children: [] - } - - route.children = transformToken(config, route.children) - routes.push(route) - - config.excludes.forEach(file => { - routes.unshift({ - path: file.path.replace(/\/_/gi, '/').replace(/\/\$/gi, '/:'), - component: file.path.substring(1), - meta: utils.stringify(file.meta) - }) - }) - - } else { - config.files = config.files.concat(config.excludes) - routes = transformToken(config, routes) - } - - // 处理404页面 - if (config.any) { - routes.push({ - path: config.any.path.replace('_404', '*'), - component: config.any.path.substring(1), - meta: utils.stringify(config.any.meta) - }) - } - - - return routes -} - -/** - * 检查文件的标记是否发生了改变 - * @param file - * @param message - * @return {boolean} - */ -function isChange(file, message) { - const item = FilesMap[file] - return !isEqual(message, item) -} - - -/** - * 生成路由配置 - * @param viewsPath 视图文件夹绝对路径 - * @param outPath 数据路由配置文件路径 - * @param disabled 是否禁用 - */ -function build(viewsPath, outPath, disabled = false) { - // 如果禁用,将还原初始空配置,不做任何处理 - if (disabled) { - cleanFile(outPath) - return - } - - if (!FilesMap) { - FilesMap = collectFilesMap(viewsPath) - } - const tree = mapToTree(FilesMap) - const config = analyser(tree) - const routes = transform(config) - const content = render(routes) - saveFile(content, outPath) - utils.log('>>> 更新路由文件', 'success') -} - -/** - * 侦听文件变化做响应处理 - * @param viewsPath 视图文件夹绝对路径 - * @param outPath 数据路由配置文件路径 - * @param disabled 是否禁用 - */ -function watch(viewsPath, outPath, disabled = false) { - - build(viewsPath, outPath, disabled) - - if (disabled) return - - if (!FilesMap) { - FilesMap = collectFilesMap(viewsPath) - } - - fs.watch(viewsPath, {recursive: true}, (eventType, filename) => { - - const file = '/' + filename - if (!vueFileRegex.test(file)) { - return - } - - // 新增、修改文件 - if (isExistFile(viewsPath, file)) { - const message = parseFile(viewsPath, file) - // 标记是否发生了变化 - if (isChange(file, message)) { - FilesMap[file] = message - build(viewsPath, outPath, disabled) - } - } else { - // 删除了文件 - delete FilesMap[file] - build(viewsPath, outPath, disabled) - } - - }) - - utils.log(`watch: ${viewsPath}`, 'success') -} - -module.exports = { - watch, - build -} - - - diff --git a/core/build/svg.js b/core/build/svg.js deleted file mode 100644 index 338413d..0000000 --- a/core/build/svg.js +++ /dev/null @@ -1,46 +0,0 @@ -const fs = require('fs') -const {logWithSpinner, stopSpinner, failSpinner} = require('@vue/cli-shared-utils') -const utils = require('../utils') -const core = require('../index') -// const constant = require('../constant') -const render = require('../renders/svg-component') -const regex = /()|()/gi -const fillRegex = /\sfill="[\w#]*"/gi -const svgFiles = utils.getFiles(core.SVGSrcPath) -const saveDir = core.SVGIconPath -const imports = [] - - -logWithSpinner('生成SVG组件') -try { - svgFiles.forEach(file => { - const content = fs.readFileSync(file, 'utf-8') - const matches = content.match(regex) || [] - const cleanPaths = matches.map(n => { - const fills = n.match(fillRegex) || [] - fills.forEach(f => { - n = n.replace(f, '') - }) - n = n.replace(/\s*\/>/gi, '/>') - .replace(//gi, '') - .replace(/<\/g>/gi, '') - .replace(/\n/gi, ' ') - .replace(/\t/gi, ' ') - .replace(/\s\s/gi, ' ') - return n - }) - if (cleanPaths.length > 0) { - const fileMsg = utils.parsePath(file) - const importPath = `import './${fileMsg.name}'` - const fileContent = render({paths: cleanPaths, name: fileMsg.name}) - utils.writeFile(utils.join(saveDir, fileMsg.name + '.js'), fileContent) - imports.push(importPath) - } - }) - - utils.writeFile(utils.join(saveDir, 'index.js'), imports.join('\n')) - stopSpinner() -} catch (e) { - utils.log(e, 'error') - failSpinner('生成SVG组件失败!') -} diff --git a/core/build/theme.js b/core/build/theme.js deleted file mode 100644 index 7d3b1c4..0000000 --- a/core/build/theme.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * 主题预编译, 把Element 和 UI 主题scss 预先编译成css, 提高运行时编译效率 - * - * @author chenhuachun - * - */ - -const fs = require('fs') -const webpack = require('webpack') -const {logWithSpinner, stopSpinner} = require('@vue/cli-shared-utils') -const utils = require('../utils') -const core = require('../index') - -// webpack config 创建函数 -const configFactory = require('../config/webpack.theme.factory') - - -/** - * 获取本地的主题配置文件 - * @return {{file: *, name: *}[]} - */ -function getLocalVarFiles() { - const path = core.ProjectThemeVarPath - const dirs = fs.readdirSync(path) || [] - return dirs.map(item => { - return { - file: item, - name: utils.kebabCase(item.replace('.scss', '')) - } - }) -} - -/** - * 获取主题编译后存放位置 - * @param type - * @return {string} - */ -function getSavePath(type) { - return type === 'el' ? core.OutputElementThemePath : core.OutputUIThemePath -} - -/** - * 获取样式源码目录 - * @param type - * @return {string} - */ -function getSrcPath(type) { - return type === 'el' ? core.ElementThemeSrcPath : core.UIThemeSrcPath -} - -/** - * 创建入口文件js文件,并写入scss引用, webpack4入口文件必须要js文件 - * @param type 框架类型了 ,el 或 ui - * @param entryDir 入口文件存放目录 - * @return {*[]} - */ -function createEntryFile(type, entryDir) { - const themeSrcDir = getSrcPath(type) - if (!fs.existsSync(themeSrcDir)) { - utils.log(`${themeSrcDir} 目录不存在`, 'error') - return [] - } - const files = (fs.readdirSync(themeSrcDir) || []) - .filter(item => item.includes('.scss')) - - files.forEach(item => { - const msg = utils.parsePath(item) - const content = type === 'el' - ? `import 'element-ui/packages/theme-chalk/src/${msg.base}'` - : `import '${utils.urlFormat(utils.join(core.LibPath, 'styles', msg.base))}'`; - - utils.writeFile(`${entryDir}/${msg.base.replace('.scss', '.js')}`, content, 'utf-8') - }) - return files -} - -/** - * 构建入口的配置信息 - * @param files 入口文件名数组 - * @param entryDir 入口文件目录 - */ -function getEntry(files, entryDir) { - const entry = {} - files.forEach(file => { - const name = file.replace('.scss', '') - entry[name] = utils.join(entryDir, name + '.js') - }) - return entry -} - -/** - * 清理无用的文件 - * @param {string} type 框架类型了 ,el 或 ui - * @param {object} theme 主题描述对象 - * @param {string} entryDir - */ -function clean(type, theme, entryDir) { - const savePath = getSavePath(type) - const buildDir = utils.join(savePath, theme.name, 'build') - utils.rm(entryDir) - utils.rm(buildDir) -} - -function filesWriteToIndex() { - const dir = utils.join(core.LibPath, 'styles') - const files = fs.readdirSync(dir) || [] - const scss = files.filter(f => (f.includes('.scss') && f !== 'index.scss')) - const content = scss.map(f => { - return `@import "${f}";` - }) - fs.writeFileSync(utils.join(dir, 'index.scss'), content.join('\n'), 'utf-8') -} - - -/** - * 编译函数 - * @param type - * @param themes - * @param entryDir - * @param callback - */ -function build(type, themes, entryDir, callback) { - const theme = themes.pop() - // utils.log(`正在编译${type === 'el' ? 'Element' : 'UI'}主题【${theme.name}】...`) - logWithSpinner(`编译${type === 'el' ? 'Element' : 'UI'}主题【${theme.name}】`) - - // 创建入口文件 - const files = createEntryFile(type, entryDir) - - - // 入口文件构造成webpack配置的entry对象 - const entry = getEntry(files, entryDir) - - - // 构建webpack配置 - const config = configFactory(theme, entry, getSavePath(type)) - - - // 执行编译 - webpack(config, (err, stats) => { - // 编译成功,清理无用文件 - clean(type, theme, entryDir) - - if (err || stats.hasErrors()) { - callback && callback(stats, false) - } else { - // utils.log(`>>> ${type === 'el' ? 'Element' : 'UI'}主题【${theme.name}】编译成功!`, 'success') - stopSpinner() - callback && callback(stats, true) - if (themes.length > 0) { - build(type, themes, entryDir, callback) - } - } - }) -} - -module.exports = function (type = 'el', callback) { - filesWriteToIndex() - // 同步官方变量文件 - // copySrcToLocal(type) - const savePath = getSavePath(type) - const entryDir = utils.join(savePath, '.entry') - - // 获取项目主题文件 - const themes = getLocalVarFiles() || [] - - // 递归编译主题 - if (themes.length > 0) { - build(type, themes, entryDir, callback) - } else { - utils.log('主题配置文件', 'warning') - } -} - - diff --git a/core/config.js b/core/config.js deleted file mode 100644 index f1cf251..0000000 --- a/core/config.js +++ /dev/null @@ -1,142 +0,0 @@ -/** - * 工程配置 - */ -const fs = require('fs') -const utils = require('./utils') -const core = require('./index') -const merge = require('lodash/merge') -const configPath = utils.join(core.ProjectRootPath, 'my.config.js') -let myConfig = null -// 如果项目工程根目录有 my.config.js 文件,即读取配置文件,合并到配置信息 -if (!myConfig && fs.existsSync(configPath)) { - myConfig = core.IsInstalled ? require('../../../../my.config.js') : require('../my.config') -} - -let __config__ = { - /** - * 部署应用时的基本 URL, VueCli v3.3 改名为 publicPath - */ - publicPath: '/', - - /** - * 入口文件 - */ - entry: './src/main.js', - - /** - * 开发环境端口号 - */ - devServerPort: 8000, - - /** - * 开发环境代理配置, 不能设置空对象 {} - */ - devServerProxy: null, - - /** - * dist 预览服务器端口 - */ - previewServerPort: 7000, - - /** - * 生成的生产环境构建文件的目录 - */ - outputDir: 'dist', - - /** - * 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。 - */ - assetsDir: 'assets', - - /** - * 扩展的静态资源目录,只对主站有效 - */ - extendContentBase: [], - - /** - * 强制 eslint-loader 将 lint 错误输出为编译错误 - */ - lintOnSave: 'error', - - /** - * 开启预加载,页面加载完成后,利用空闲时间提前获取用户未来可能会访问的内容 - * - * Prefetch 链接将会消耗带宽。 - * 如果你的应用很大且有很多 async chunk,而用户主要使用的是对带宽较敏感的移动端, - * 那么你可能需要关掉 prefetch 链接并手动选择要提前获取的代码区块。 - */ - prefetch: false, - - /** - * 生产环境打包dll - */ - dll: ['vue', 'vue-router', 'vuex', 'axios', 'path-to-regexp', 'nprogress'], - - - /** - * 文档开发环境启动端口号 - */ - docsDevPort: 3001, - - /** - * 文档部署目录 - */ - docsBaseUrl: '/my/', - - /** - * 文档编译输出目录 - */ - docsOutputDir: 'web', - - /** - * 自动生成路由表 - */ - autoRoutes: true, - - /** - * 服务端启动端口号 - */ - serverPort: 7001, - - /** - * 开启静态配置 - */ - staticConfig: true, - - /** - * 代码生成器配置 - */ - coder: {}, - - /** - * 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。 - */ - transpileDependencies: ['@xdh/my'], - - // 生成环境是否生成SourceMap - productionSourceMap: false, - - /** - * 开启模拟数据 - */ - mock: process.env.NODE_ENV !== 'production', - - /** - * 开启微应用服务 - */ - microApp: false, - - // Webpack自定义配置 - chainWebpack: chain => { - } -} - -__config__ = merge(__config__, myConfig || {}) - - -module.exports = config => { - if (config) { - return merge(__config__, config || {}) - } - return __config__ -} diff --git a/core/config/coder.config.js b/core/config/coder.config.js deleted file mode 100644 index c9fade5..0000000 --- a/core/config/coder.config.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * 代码生成器配置 - * @author chenhuachun - */ -const _ = require('lodash') -const utils = require('../utils') -const core = require('../index') -const config = require('../config')() -const outDir = core.OutputCodePath - - -module.exports = _.merge({ - // 架构配置文件目录 - schemasDir: core.SchemasPath, - - // 模板文件目录 - templatesDir: utils.resolve('core/renders/coder'), - - outDir: outDir, - - // iconfont css文件路径 - iconCssFile: utils.join(core.LibPath, 'assets/icons/iconfont.css'), - - // svg图标目录 - svgIconDir: utils.join(core.LibPath, 'assets/svg/'), - - // element-ui icon - elIconCssFile: utils.join(core.ProjectRootPath, 'node_modules/element-ui/packages/theme-chalk/lib/icon.css'), - - // 生成api文件路径 - outApiPath: utils.join(outDir, 'api'), - - // 生成mock文件路径 - outMockPath: utils.join(outDir, 'mock'), - - // 生成mock配置文件路径 - outMockConfig: outDir, - - // 生成store文件路径 - outStorePath: utils.join(outDir, 'store'), - - // 生成store配置文件路径 - outStoreType: outDir, - - // 生成mixin文件路径 - outMixinPath: utils.join(outDir, 'mixin'), - - // 生成icon文件路径 - outIconFile: utils.join(outDir, 'icons.js'), - - // api请求地址前缀 - pathPrefix: 'API_HOST', - - // api支持的请求方法 - methods: [ - 'fetch', // 获取列表数据,响应数据含有分页信息,如:总数、当前页码、页大小 - 'get', // 获取单条实体数据, 响应数据是对象形式 - 'add', // 新增实体数据 - 'update', // 更新实体数据 - 'remove', // 删除实体 - 'batch' // 批量删除 - ], - - // 数据请求类型对应http请求方法的映射 - methodTypeMap: { - fetch: 'get', - get: 'get', - add: 'post', - update: 'patch', - remove: 'delete', - batch: 'post' - }, - - // 数据请求类型对应api地址的后缀映射 - methodSuffixMap: { - fetch: '', - get: '/:id', - add: '', - update: '', - remove: '/:id', - batch: '/remove' - }, - - // 请求方法对应的中文注释 - methodCommentMap: { - fetch: '获取<%=cname%>列表', - get: '获取<%=cname%>单条记录', - add: '新增<%=cname%>', - update: '更新<%=cname%>', - remove: '删除<%=cname%>', - batch: '批量删除<%=cname%>' - }, - - // 是否开启生成批量删除 - batchEnabled: true, - - // store 或 mixin 状态保存列表的字段名称,和接口响应数据对应, 默认:list - stateListName: 'list', - - // store 或 mixin 状态保存单个实体字段名称,默认:model - stateModelName: 'model', - - // store 或 mixin 状态保当前页码的字段名称,和接口响应数据对应, 默认:page - statePageName: 'page', - - // store 或 mixin 状态保存页大小的字段名称,和接口响应数据对应,默认:limit - statePageSizeName: 'limit', - - // store 或 mixin 状态保存数据总条数字段名称,和接口响应数据对应,默认:total - stateTotalName: 'total', - - // Mock响应数据字段名称,默认:data - mockDataName: 'data', - - // Mock响应状态字段名称,默认:code - mockCodeName: 'code', - - // Mock响应信息说明字段名称,默认:msg - mockMsgName: 'msg', - - // Mock响应成功时的code值,默认:0 - successCodeValue: 0, - - // Mock新增接口响应mock信息 - addMockData: { - id: '@guid' - }, - - // Mock更新接口响应mock信息 - updateMockData: true, - - // Mock删除接口响应mock信息 - removeMockData: true, - - // Mock批量删除响应mock信息 - batchMockData: true - -}, config.coder || {}) diff --git a/core/config/jsdoc.charts.config.js b/core/config/jsdoc.charts.config.js deleted file mode 100644 index 199c741..0000000 --- a/core/config/jsdoc.charts.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const factory = require('./jsdoc.factory') -module.exports = factory( - 'ui/lib/charts', - 'docs/.vuepress/public/api/charts', - 'docs/ui/charts/README.md' -) diff --git a/core/config/jsdoc.components.config.js b/core/config/jsdoc.components.config.js deleted file mode 100644 index e853ef0..0000000 --- a/core/config/jsdoc.components.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * ui/components jsdoc 配置 - * @author chenhuachun - */ -const factory = require('./jsdoc.factory') -module.exports = factory( - 'ui/lib/components', - 'docs/.vuepress/public/api/components', - 'docs/ui/components/README.md' -) diff --git a/core/config/jsdoc.dv.config.js b/core/config/jsdoc.dv.config.js deleted file mode 100644 index f4a95f6..0000000 --- a/core/config/jsdoc.dv.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const factory = require('./jsdoc.factory') -module.exports = factory( - 'ui/lib/dv', - 'docs/.vuepress/public/api/dv', - 'docs/ui/dv/README.md' -) diff --git a/core/config/jsdoc.factory.js b/core/config/jsdoc.factory.js deleted file mode 100644 index e5cfb52..0000000 --- a/core/config/jsdoc.factory.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * jsdoc 配置工厂函数 - * @author chenhuachun - */ -const utils = require('../utils') -module.exports = function (src, out, readme) { - return { - tags: { - allowUnknownTags: true, - dictionaries: ['jsdoc', 'closure'] - }, - source: { - include: [ - utils.resolve(src), - utils.resolve(readme) - ], - includePattern: '\\.(vue|js)$' - }, - plugins: [ - 'plugins/markdown', - utils.resolve('core/plugins/vue-jsdoc-plugin.js') - ], - templates: { - cleverLinks: false, - monospaceLinks: false - }, - opts: { - destination: utils.resolve(out), - template: 'core/templates/jsdoc' - } - } -} diff --git a/core/config/jsdoc.map.config.js b/core/config/jsdoc.map.config.js deleted file mode 100644 index a4aab27..0000000 --- a/core/config/jsdoc.map.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const factory = require('./jsdoc.factory') -module.exports = factory( - 'ui/lib/map', - 'docs/.vuepress/public/api/map', - 'docs/ui/map/README.md' -) diff --git a/core/config/jsdoc.utils.config.js b/core/config/jsdoc.utils.config.js deleted file mode 100644 index cf8064c..0000000 --- a/core/config/jsdoc.utils.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * ui/utils jsdoc 配置 - * @author chenhuachun - */ -const factory = require('./jsdoc.factory') -module.exports = factory( - 'ui/lib/utils', - 'docs/.vuepress/public/api/utils', - 'docs/ui/utils/README.md' -) diff --git a/core/config/proxy.factory.js b/core/config/proxy.factory.js deleted file mode 100644 index d60b094..0000000 --- a/core/config/proxy.factory.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * webpack 子应用 代理构建函数 - */ -const utils = require('../utils') -const config = require('../config')() - -module.exports = function (apps) { - // 无代理要返回 null,不能返回{} - let proxy = null - Object.keys(apps).forEach(name => { - const item = apps[name] - proxy = proxy || {} - proxy[utils.urlFormat(utils.join(config.publicPath, item.name))] = { - ws: true, - changeOrigin: true, - target: `http://localhost:${item.port}` - } - }) - return proxy -} diff --git a/core/config/webpack.base.extend.js b/core/config/webpack.base.extend.js deleted file mode 100644 index 5a54356..0000000 --- a/core/config/webpack.base.extend.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * 开发环境 和 生产环境的共同webpack配置 - * - * @author chenhuachun - */ -const utils = require('../utils') -const HtmlInjectConfigPlugin = require('../plugins/html-inject-config-plugin') -const core = require('../index') -const config = require('../config')() - -module.exports = function (chain, theme, app) { - const entry = app ? `./apps/${app.name}/main.js` : config.entry - // 修改入口文件 - chain.entry('app') - .clear() - .add(entry).end(); - - // 不显示文件过大警告 - chain.performance.hints(false) - - // 自动注入注册ElementUI组件代码 - chain.module.rule('vue') - .use('component-loader') - .loader(core.ComponentLoaderPath) - .tap(opt => { - return { - ...opt, - cacheDirectory: utils.join(core.ProjectRootPath, 'node_modules/.cache/vue-loader'), - theme: theme - } - }) - - // 增加 ui 别名 - chain.resolve.alias.set('$ui', core.LibPath) - - // 增加 $my 别名 - chain.resolve.alias.set('$my', core.TempPath) - - // 增加 $apps 别名 - chain.resolve.alias.set('$apps', core.AppsPath) - - let configBaseUrl = config.publicPath - let contentBase = config.extendContentBase || [] - let extraEnv = {} - if (app) { - // 是否设置独立的静态配置 - if (app.staticConfig) { - configBaseUrl = app.publicPath || utils.join(config.publicPath, app.name, '/') - chain.plugin('HtmlInjectConfigPlugin').use(HtmlInjectConfigPlugin, [configBaseUrl]) - } - contentBase = app.contentBase || [] - extraEnv = { - // 子应用不需要 MY_MICRO_APP - MY_MICRO_APP: JSON.stringify('false'), - MY_MOCK: JSON.stringify(`${!!app.mock}`) - } - } else { - // 注入配置文件 - if (config.staticConfig) { - chain.plugin('HtmlInjectConfigPlugin').use(HtmlInjectConfigPlugin, [configBaseUrl]) - } - extraEnv = { - MY_MICRO_APP: JSON.stringify(`${!!config.microApp}`), - MY_MOCK: JSON.stringify(`${!!config.mock}`) - } - - } - - // 注入环境变量 - chain - .plugin('define') - .tap(opt => { - const env = opt[0]['process.env'] - Object.assign(env, extraEnv) - opt[0] = { - 'process.env': env - } - return opt - }) - - // 扩展复制静态目录 - chain.plugin('copy').tap(opt => { - const items = contentBase.map(dir => { - const toPath = utils.join(core.ProjectRootPath, config.outputDir, configBaseUrl) - return { - from: utils.join(core.ProjectRootPath, dir), - to: toPath, - toType: 'dir', - ignore: [ - '.DS_Store', - '.idea' - ] - } - }) - opt[0] = opt[0].concat(items) - return opt - }) - - -} diff --git a/core/config/webpack.bridge.config.js b/core/config/webpack.bridge.config.js deleted file mode 100644 index 2c22584..0000000 --- a/core/config/webpack.bridge.config.js +++ /dev/null @@ -1,36 +0,0 @@ -const utils = require('../utils') -const core = require('../index') -const HtmlWebpackPlugin = require('html-webpack-plugin') - -module.exports = { - mode: 'production', - entry: { - bridge: core.BridgeEntry - }, - output: { - filename: 'js/[name].[contenthash:8].js', - path: utils.join(core.ProjectRootPath, 'public/assets/bridge'), - publicPath: '', - chunkFilename: 'js/[name].[contenthash:8].js' - }, - resolve: { - alias: { - $ui: core.LibPath - } - }, - module: { - rules: [ - { - exclude: /node_modules/, - use: { - loader: 'babel-loader' - } - } - ] - }, - plugins: [ - new HtmlWebpackPlugin({ - title: 'Message Bridge' - }) - ] -} diff --git a/core/config/webpack.dev.extend.js b/core/config/webpack.dev.extend.js deleted file mode 100644 index f83bb63..0000000 --- a/core/config/webpack.dev.extend.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * 工程开发环境webpack配置 - * - * @author chenhuachun - */ -const utils = require('../utils') -const config = require('../config')() -const core = require('../index') -const devThemeSwitch = require('../build/dev-theme-switch') -// const routesBuilder = require('../build/routes') - -module.exports = function (chain, theme) { - - // 扩展静态目录 - const contentBase = (config.extendContentBase || []).map(dir => utils.resolve(dir)) - - // 监听文件views文件编号,生成路由配置 - // routesBuilder.watch( - // core.ViewsPath, - // core.OutputRoutesFile, - // !config.autoRoutes - // ) - - - // 扩展静态文件服务目录 - chain.devServer.contentBase([ - utils.join(core.ProjectRootPath, 'public'), - core.TempPath, - ...contentBase - ]) - - // 在线更换主题服务接口 - chain.devServer.setup(server => { - server.get(core.DevThemeSwitchServiceApi, function (req, res) { - const theme = req.query.theme - let code = -1 - let data = null - if (theme) { - data = devThemeSwitch(theme) - code = 0 - } - res.json({ - code: code, - data - }) - }) - }) -} - - diff --git a/core/config/webpack.docs.extend.js b/core/config/webpack.docs.extend.js deleted file mode 100644 index a59ffd5..0000000 --- a/core/config/webpack.docs.extend.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * 文档webpack配置 - */ - -const core = require('../index') - -module.exports = function (chain) { - - // 自动注入注册ElementUI组件代码 - chain.module.rule('vue') - .use('component-loader') - .loader(core.ComponentLoaderPath) - - // 修改babel配置文件 - chain.module.rule('js') - .use('babel-loader') - .tap(opt => { - return { - configFile: core.BabelConfigFile - } - }) - - // 增加 ui 别名 - chain.resolve.alias.set('$ui', core.LibPath) - - // 增加 $my 别名 - chain.resolve.alias.set('$my', core.TempPath) - - chain.resolve.alias.set('@', core.ProjectRootPath + '/src') - - // 增加 $docs 别名 - chain.resolve.alias.set('$docs', core.DocsPath + '/.vuepress') - - // 为了同时兼容 core-js 2.x 和 core-js 3.x - chain.resolve.alias.set('core-js/library', 'babel-runtime/node_modules/core-js/library') - chain.resolve.alias.set('core-js/fn', 'babel-runtime/node_modules/core-js/fn') - chain.resolve.alias.set('core-js/shim', 'babel-runtime/node_modules/core-js/shim') - chain.resolve.alias.set('core-js/core', 'babel-runtime/node_modules/core-js/core') - chain.resolve.alias.set('core-js/es5', 'babel-runtime/node_modules/core-js/es5') - chain.resolve.alias.set('core-js/es6', 'babel-runtime/node_modules/core-js/es6') - chain.resolve.alias.set('core-js/es7', 'babel-runtime/node_modules/core-js/es7') - chain.resolve.alias.set('core-js/client', 'babel-runtime/node_modules/core-js/client') -} - - diff --git a/core/config/webpack.prod.extend.js b/core/config/webpack.prod.extend.js deleted file mode 100644 index 53a7914..0000000 --- a/core/config/webpack.prod.extend.js +++ /dev/null @@ -1,121 +0,0 @@ -/** - * 工程生产环境 webpack 配置 - * - * @author chenhhuachun - */ -const AutoDllPlugin = require('autodll-webpack-plugin') -const ThemeSwitchForCompilePlugin = require('../plugins/theme-switch-for-compile-plugin') -const CopyThemeAfterCompiledPlugin = require('../plugins/copy-theme-after-compiled-plugin') -const HtmlInjectThemePlugin = require('../plugins/html-inject-theme-plugin') -const config = require('../config')() -const utils = require('../utils') -const core = require('../index') - -module.exports = function (chain, theme, app) { - - // 移除 prefetch 插件 - if (!config.prefetch) { - chain.plugins.delete('prefetch') - } - - // 合并css文件、vue组件style - chain.optimization.splitChunks({ - cacheGroups: { - style: { - name: 'style', - test(module, chunks) { - const r = module.resource || '', t = module.type - // 合并 css、scss、vue文件的style - return r.includes('.scss') || r.includes('.css') || t.includes('css') - }, - chunks: 'all', - enforce: true - } - } - }) - - // 独立打包基础公共文件 - chain.plugin('dll').use(AutoDllPlugin, [{ - inject: true, - debug: true, - filename: '[name]_[hash:8].js', - path: utils.urlFormat(utils.join(config.assetsDir, 'js')), - entry: { - vendor: config.dll - } - }]) - - // 抽取css到独立文件 - chain.plugin('extract-css').tap(args => { - return [ - { - filename: `assets/css/${theme}-[name].[contenthash:8].css`, - chunkFilename: `assets/css/${theme}-[name].[contenthash:8].css`, - // 忽略css引用顺序导致的警告 - ignoreOrder: true - } - ] - }) - - // 修改主题,指定要打包的主题 - chain.plugin('ThemeSwitchForCompilePlugin').use(ThemeSwitchForCompilePlugin, [{ - theme: theme, - src: core.ProjectThemeScssFile - }]) - - if (theme === 'default') { - let toPath = utils.join(core.ProjectRootPath, config.outputDir, config.publicPath, config.assetsDir, 'css') - let themePath = utils.join(config.publicPath, config.assetsDir, 'css') - - if (app) { - toPath = utils.join( - core.ProjectRootPath, - config.outputDir, - config.publicPath, - app.outputDir || app.name, - app.publicPath || '', - config.assetsDir, - 'css') - - themePath = utils.join(config.publicPath, app.publicPath || app.name, config.assetsDir, 'css') - - } - - // 默认主题打包完成后,复制已编译好的主题放入css目录 - chain.plugin('CopyThemeAfterCompiledPlugin').use(CopyThemeAfterCompiledPlugin, [{ - from: core.ProductionThemesCompiledPath, - to: toPath - }]) - - // 注入主题theme.js描述文件 - chain.plugin('HtmlInjectThemePlugin').use(HtmlInjectThemePlugin, [{ - tempDir: core.ProductionThemesCompiledPath, - path: themePath, - appName: app ? app.name : null, - savePath: app - ? utils.join(core.ProjectRootPath, config.outputDir, config.publicPath, app.outputDir || app.name, app.publicPath || '') - : utils.join(core.ProjectRootPath, config.outputDir, config.publicPath), - baseUrl: app - ? utils.join('/', config.publicPath, app.outputDir || app.name, app.publicPath || '') - : utils.join('/', config.publicPath) - }]) - - } - - - // 把样式引用的图片地址改成绝对路径 - const ruleArray = ['css', 'postcss', 'scss', 'less', 'sass', 'stylus'] - const oneOfArray = ['vue-modules', 'vue', 'normal-modules', 'normal'] - const assetsPath = app - ? utils.join('/', config.publicPath, app.outputDir || app.name, app.publicPath || '') - : utils.join('/', config.publicPath) - ruleArray.forEach(rule => { - oneOfArray.forEach(one => { - chain.module.rule(rule).oneOf(one).use('extract-css-loader').tap(opts => { - opts.publicPath = utils.urlFormat(assetsPath) - return opts - }) - }) - }) - -} diff --git a/core/config/webpack.theme.factory.js b/core/config/webpack.theme.factory.js deleted file mode 100644 index aa61fa4..0000000 --- a/core/config/webpack.theme.factory.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Element 主题打包 webpack 配置文件 - * - * @author chenhuachun - */ -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const OptimizeCssnanoPlugin = require('@intervolga/optimize-cssnano-plugin') -const utils = require('../utils') -const core = require('../index') - -module.exports = function (theme, entry, outDir) { - return { - mode: 'production', - entry: entry, - output: { - filename: '[name].js', - path: utils.join(outDir, theme.name, 'build') - }, - resolve: { - alias: { - '@': utils.join(core.ProjectRootPath, 'src'), - $ui: core.LibPath, - $my: core.TempPath - } - }, - module: { - rules: [ - { - test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/i, - use: [ - { - loader: 'url-loader', - options: { - limit: 4096, - fallback: { - loader: 'file-loader', - options: { - name: '../fonts/[name].[ext]' - } - } - } - } - ] - }, - { - test: /\.scss$/, - use: [ - { - loader: MiniCssExtractPlugin.loader, - options: { - hmr: false, - publicPath: 'fonts/' - } - }, - { - loader: 'css-loader', - options: { - sourceMap: false - } - }, - { - loader: 'postcss-loader', - options: { - sourceMap: false - } - }, - { - loader: 'sass-loader', - options: { - sourceMap: false - } - }, - { - loader: core.ThemeVarScssLoaderPath, - options: { - vars: utils.join(core.ProjectThemeVarPath, theme.file) - } - } - ] - } - ] - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: '../[name].css' - }), - new OptimizeCssnanoPlugin( - { - sourceMap: false, - cssnanoOptions: { - preset: [ - 'default', - { - mergeLonghand: false, - cssDeclarationSorter: false - } - ] - } - } - ) - ] - } -} diff --git a/core/config/wepack.bridge.lib.config.js b/core/config/wepack.bridge.lib.config.js deleted file mode 100644 index 9ba974c..0000000 --- a/core/config/wepack.bridge.lib.config.js +++ /dev/null @@ -1,30 +0,0 @@ -const utils = require('../utils') -const core = require('../index') - -module.exports = { - mode: 'production', - entry: core.BridgeLibEnter, - output: { - filename: 'index.js', - path: utils.join(core.ProjectRootPath, 'public/assets/bridge/lib'), - publicPath: '', - libraryTarget: 'umd', - chunkFilename: 'index.js', - library: 'MyBridge' - }, - resolve: { - alias: { - $ui: core.LibPath - } - }, - module: { - rules: [ - { - exclude: /node_modules/, - use: { - loader: 'babel-loader' - } - } - ] - } -} diff --git a/core/index.js b/core/index.js deleted file mode 100644 index 62c0f10..0000000 --- a/core/index.js +++ /dev/null @@ -1,141 +0,0 @@ -const utils = require('./utils') - -// 检查当前是否安装模式,false表示开发模式 -const IsInstalled = utils.urlFormat(__dirname).includes('node_modules/@xdh/my') - -// My库所在的绝对路径位置 -const MyRootPath = utils.resolve('./') - -// 项目工程根目录 -const ProjectRootPath = IsInstalled ? process.cwd() : MyRootPath - -// UI 所在绝对路径位置 -const UIPath = utils.join(MyRootPath, 'ui') - -// lib 所在绝对路径位置 -const LibPath = utils.join(MyRootPath, 'ui/lib') - -// core 所在绝对路径位置 -const CorePath = utils.join(MyRootPath, 'core') - - -// 临时文件存放绝对路径, 临时目录在工程下 -const TempPath = utils.join(ProjectRootPath, '.my') - -// 调色板scss变量文件位置 -const ColorsVarFilePath = utils.join(LibPath, 'styles/common/_colors.scss') - -// 代码生成器输出目录 -const OutputCodePath = utils.join(TempPath, 'code') - -// 代码生成器配置文件目录 -const SchemasPath = utils.join(ProjectRootPath, 'schemas') - -// SVG文件源文件目录 -const SVGSrcPath = utils.join(ProjectRootPath, 'svg') - -// SVG转成Vue组件存放目录 -const SVGIconPath = utils.join(LibPath, 'icons') - -// ElementUI 主题编译后存放目录 -const OutputElementThemePath = utils.join(TempPath, 'el-themes') - -// UI 主题编译后存放目录 -const OutputUIThemePath = utils.join(TempPath, 'ui-themes') - -// 编译项目主题时产生的临时文件存放路径 -const BuildThemeDistPath = utils.join(TempPath, 'dist') - -// 工程的主题配置SCSS文件夹路径 -const ProjectThemeVarPath = utils.join(ProjectRootPath, 'src/style/themes') - -const ThemeVarScssLoaderPath = utils.join(MyRootPath, 'core/loaders/theme-var-scss-loader.js') - -// ElementUI样式源码目录 -const ElementThemeSrcPath = utils.join(ProjectRootPath, 'node_modules/element-ui/packages/theme-chalk/src') - -// UI主题源码目录 -const UIThemeSrcPath = utils.join(LibPath, 'styles') - -// 组件自动注册加载器loader -const ComponentLoaderPath = utils.join(MyRootPath, 'core/loaders/component-loader.js') - -// 工程项目视图目录 -const ViewsPath = utils.join(ProjectRootPath, 'src/views') - -// 输入路由配置文件位置 -const OutputRoutesFile = utils.join(TempPath, 'routes/index.js') - -// 开发环境切换主题http服务接口路径 -const DevThemeSwitchServiceApi = '/my/dev-theme-switch-service' - -// 项目主题入口文件,显示什么样的主题由该文件决定 -const ProjectThemeScssFile = utils.join(ProjectRootPath, 'src/style/vars/_theme.scss') - -// 预打包生产环境的主题文件存放目录 -const ProductionThemesCompiledPath = utils.join(TempPath, 'compiled') - -// 备份项目主题配置文件存放位置 -const BackupLocalThemesFile = utils.join(TempPath, '_theme.scss') - -// 文档Markdown文件抽取的demo组件存放位置 -const DocsTempDemoPath = utils.join(TempPath, 'demo') - -// 文档工程目录位置 -const DocsPath = utils.join(MyRootPath, 'docs') - -// babel 配置文件 -const BabelConfigFile = utils.join(MyRootPath, 'core/babel.config.js') - -// Bridge入口文件位置 -const BridgeEntry = utils.join(MyRootPath, 'core/build/bridge-entry.js') - -// Bridge类库入口文件位置 -const BridgeLibEnter = utils.join(LibPath, 'utils/bridge.js') - -// apps目录 -const AppsPath = utils.join(ProjectRootPath, 'apps') - -// app名称保留关键字 -const AppReservedWords = ['docs'] - -// app模板目录 -const AppTemplatePath = utils.join(MyRootPath, 'core/templates/app') - -module.exports = { - IsInstalled, - MyRootPath, - ProjectRootPath, - UIPath, - LibPath, - CorePath, - TempPath, - ColorsVarFilePath, - OutputCodePath, - SchemasPath, - SVGSrcPath, - SVGIconPath, - OutputElementThemePath, - OutputUIThemePath, - ProjectThemeVarPath, - ThemeVarScssLoaderPath, - ElementThemeSrcPath, - UIThemeSrcPath, - ComponentLoaderPath, - ViewsPath, - OutputRoutesFile, - DevThemeSwitchServiceApi, - ProjectThemeScssFile, - ProductionThemesCompiledPath, - BackupLocalThemesFile, - DocsTempDemoPath, - DocsPath, - BabelConfigFile, - BridgeEntry, - BridgeLibEnter, - AppsPath, - AppReservedWords, - AppTemplatePath, - BuildThemeDistPath -} - diff --git a/core/loaders/component-loader.js b/core/loaders/component-loader.js deleted file mode 100644 index 961e2b9..0000000 --- a/core/loaders/component-loader.js +++ /dev/null @@ -1,145 +0,0 @@ -/** - * ElementUI 组件自动注册 webpack loader - * @author chenhuachun - * - * @description - * - * 在 webpack 加载 *.vue 文件的时候,检测文件收集template块使用到的element-ui组件,注入全局注册成Vue组件的的的代码 - * - * @example - * - * config.module.rule('vue') - * .use('el-loader') - * .loader(utils.resolve('.my/core/loaders/el-loader.js')) - * - */ - -const compiler = require('vue-template-compiler') -const utils = require('../utils') -const elTagRegex = / t + ' as __' + t + '__').join(',')}} from 'element-ui';` - : ''; - - const elUse = elTags.length - ? `${elTags.map(t => '__vue__.use(__' + t + '__)').join(';\n')}` - : ''; - - const myCharts = myTags.filter(tag => tag.includes('MyChart')) - const myMaps = myTags.filter(tag => tag.includes('MyMap')) - const myDv = myTags.filter(tag => tag.includes('MyDv')) - const myComponents = myTags.filter(tag => !myCharts.includes(tag) && !myMaps.includes(tag) && !myDv.includes(tag)) - - const myComponentsImport = myComponents.length - ? `import {${myComponents.map(t => t + ' as __' + t + '__').join(',')}} from '$ui';` - : ''; - const myChartsImport = myCharts.length - ? `import {${myCharts.map(t => t + ' as __' + t + '__').join(',')}} from '$ui/charts';` - : ''; - - const myMapsImport = myMaps.length - ? `import {${myMaps.map(t => t + ' as __' + t + '__').join(',')}} from '$ui/map';` - : ''; - - const myDvImport = myDv.length - ? `import {${myDv.map(t => t + ' as __' + t + '__').join(',')}} from '$ui/dv';` - : ''; - - const myUse = myTags.length - ? `${myTags.map(t => '__vue__.use(__' + t + '__)').join(';\n')}` - : ''; - - return ` - import __vue__ from 'vue'; - ${elImport} - ${myComponentsImport} - ${myChartsImport} - ${myMapsImport} - ${myDvImport} - ${code || 'export default {};'} - ${elUse} - ${myUse} - ` -} - -/** - * 替换script内容 - * @param {string} source vue文件的源码 - * @param {number} start script块内容在源码的开始索引 - * @param {number} end script块内容在源码的结束索引 - * @param {string} content 需要替换的内容 - * @return {string} 替换后的源码 - */ -function replaceScript(source, start, end, content) { - const left = source.substring(0, start) - const right = source.substring(end, source.length) - return ` - ${left} - ${content} - ${right} - ` -} - -module.exports = function (source) { - const theme = process.env.THEME || 'default' - - // 利用 vue-template-compiler 解析vue文件内容 - const vue = compiler.parseComponent(source) - - // 没有模板,不处理 - if (!vue.template || !vue.template.content) return source - - let elTags = vue.template.content.match(elTagRegex) || [] - - let myTags = vue.template.content.match(myTagRegex) || [] - - - - // 没有 my 和 el 组件,不需要处理 - if (elTags.length === 0 && myTags.length === 0) { - return source - } - - if (elTags.length) { - // 匹配到element-ui组件名称去掉el-前缀,并转换成大写开头的驼峰式 - elTags = elTags.map(item => item.replace(' utils.upperFirst(utils.camelCase(tag))) - } - - if (myTags.length) { - // 匹配到my组件名称去掉<符号,并转换成大写开头的驼峰式 - myTags = myTags.map(item => item.replace('<', '')) - // 去重 并 转换成大小开头的驼峰 - myTags = [...new Set(myTags)].map(tag => utils.upperFirst(utils.camelCase(tag))) - } - - // 源码有script块,注入的代码替换script的内容 - if (vue.script) { - const code = source.substring(vue.script.start, vue.script.end).trim() - const scriptContent = injectCode(code, elTags, myTags, theme) - return replaceScript(source, vue.script.start, vue.script.end, scriptContent) - } else { - // 源码没有script块,追加注入内容 - return ` - ${source} - - ` - } -} diff --git a/core/loaders/docs-extend-md-loader.js b/core/loaders/docs-extend-md-loader.js deleted file mode 100644 index da3c2c4..0000000 --- a/core/loaders/docs-extend-md-loader.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * 扩展 markdown loader - * @author chenhuachun - */ -const path = require('path') -const fs = require('fs') -const crypto = require('crypto-browserify') -const core = require('../index') -const utils = require('../utils') - -const CACHE_DIR = core.DocsTempDemoPath - -const regex = /^demo(\(?)\s*(.*)(\)?)$/ -const nameRegex = /(?<=demo\().+(?=\))/ - -function getMd5(content) { - return crypto.createHash('sha1').update(content).digest('hex') -} - -function initCacheDir(dir) { - utils.mkdir(dir) -} - -function hasCacheFile(md5) { - const filePath = path.join(CACHE_DIR, md5 + '.vue') - return fs.existsSync(filePath) -} - -function saveFile(md5, content) { - const filePath = path.join(CACHE_DIR, md5 + '.vue') - utils.writeFile(filePath, content) -} - -function createCache(content) { - const md5 = getMd5(content) - if (!hasCacheFile(md5)) { - saveFile(md5, content) - } - return md5 -} - -function createFile(name, content) { - saveFile(name, content) - return name -} - -initCacheDir(CACHE_DIR) - -module.exports = (md, d) => { - md.use(require('markdown-it-container'), 'demo', { - validate(params) { - return params.trim().match(regex) - }, - render(tokens, idx) { - const token = tokens[idx], - info = token.info.trim(); - - // 匹配 demo(name) - let titles = info.match(/^demo\(.+\)\s+(.*)$/) - if (!titles) { - // 匹配 demo - titles = info.match(/^demo\s+(.*)$/) - } - - titles = titles || [] - - if (token.nesting === 1) { - const nextToken = tokens[idx + 1] || {} - const matchName = info.match(nameRegex) - // 有命名的demo,采用命名,无即生成md5名称 - const fileName = matchName - ? createFile(matchName[0], nextToken.content) - : createCache(nextToken.content) - - let descComponent = '' - const title = titles[1] - if (title) { - const desc = md.render(title).html - descComponent = !!title ? `
${desc}
` : '' - } - return ` - -
` - } else { - return '
' - } - - } - }) -} diff --git a/core/loaders/theme-var-scss-loader.js b/core/loaders/theme-var-scss-loader.js deleted file mode 100644 index 8723cd5..0000000 --- a/core/loaders/theme-var-scss-loader.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * 主题样式变量文件更换 webpack loader - * @author chenhuachun - */ - -const utils = require('../utils') -module.exports = function (source) { - const vars = `@import "${utils.urlFormat(this.query.vars)}";\n` - return vars + source -} diff --git a/core/plugins/auto-routes-plugin.js b/core/plugins/auto-routes-plugin.js deleted file mode 100644 index 79600db..0000000 --- a/core/plugins/auto-routes-plugin.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * 根据views目录,自动生成路由表 Webpack 插件 - * - * @author chenhuachun - */ - -const utils = require('../utils') -const builder = require('../build/routes') -const routesRender = require('../renders/routes') -const routesWrapperRender = require('../renders/routes-wrapper') - -/** - * 解析函数,把路由配置解析成js代码 - * @param routes - * @return {*} - */ -function parse(routes) { - const content = routesRender({ - items: routes, - render: routesRender - }) - const wrapper = routesWrapperRender({ - content: content - }) - return utils.beautifyJs(wrapper) -} - -/** - * 写入路由代码文件 - * @param content 内容 - * @param path 保存位置 - */ -function saveFile(content, path) { - utils.writeFile(path, content) -} - -/** - * 还原文件默认内容 - * @param path - */ -function cleanFile(path) { - const content = parse([]) - saveFile(content, path) -} - -/** - * 自动生成路由表 webpack插件 - */ -class AutoRoutesPlugin { - - constructor(options) { - this.options = { - // 是否禁用 - disabled: false, - - // 生成的路由表文件路径,包括文件名 - routes: './routes.js', - - // views的目录位置 - views: './src/views', - - // 开启 FrontMatter - enableFrontMatter: false, - - ...(options || {}) - } - this.cache = '' - // views目录路径 - this.views = this.options.views - - this.enableFrontMatter = this.options.enableFrontMatter - - // 禁用插件时,重置路由文件 - if (this.options.disabled) { - cleanFile(this.options.routes) - } - } - - apply(compiler) { - compiler.hooks.beforeCompile.tap('RoutesBuilderPlugin', () => { - if (this.options.disabled) return - const content = parse(builder(this.views)) - if (this.cache !== content) { - this.cache = content - saveFile(content, this.options.routes) - } - - }) - - } -} - -module.exports = AutoRoutesPlugin diff --git a/core/plugins/copy-theme-after-compiled-plugin.js b/core/plugins/copy-theme-after-compiled-plugin.js deleted file mode 100644 index ff7b9dc..0000000 --- a/core/plugins/copy-theme-after-compiled-plugin.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * 生产环境编译完成后,复制已编译好的主题样式文件到发布目录 - * - * @author chenhuachun - */ - -const utils = require('../utils') - -class CopyThemeAfterCompiledPlugin { - constructor (opt = {}) { - this.options = { - // 源文件目录 - from: '', - // 复制到目录 - to: '', - ...opt - } - } - - apply (compiler) { - compiler.hooks.done.tap('copy', () => { - const o = this.options - utils.copyFiles(o.from, o.to) - }) - } -} - -module.exports = CopyThemeAfterCompiledPlugin diff --git a/core/plugins/html-inject-config-plugin.js b/core/plugins/html-inject-config-plugin.js deleted file mode 100644 index 202a6ac..0000000 --- a/core/plugins/html-inject-config-plugin.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * 在html文件注入配置文件 - * @author chenhuachun@xdh.net.cn - * - * @example - * - * new HtmlInjectConfig() - */ - - -/** - * @class - */ -class HtmlInjectConfigPlugin { - /** - * 构造函数 - */ - constructor(baseUrl = '') { - this.files = [baseUrl + 'config.js?t=' + (new Date().getTime())] - } - - apply(compiler) { - compiler.hooks.compilation.tap('HtmlInjectConfigPlugin', compilation => { - compilation.hooks.htmlWebpackPluginBeforeHtmlProcessing.tapAsync('HtmlInjectConfig', (data, callback) => { - data.assets.js = this.files.concat(data.assets.js) - callback(null, data) - }) - }) - } -} - -module.exports = HtmlInjectConfigPlugin diff --git a/core/plugins/html-inject-theme-plugin.js b/core/plugins/html-inject-theme-plugin.js deleted file mode 100644 index 62542b2..0000000 --- a/core/plugins/html-inject-theme-plugin.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * 生产环境编译, 引入主题文件信息描述的js文件 - * - */ -const fs = require('fs') -const utils = require('../utils') - - -class InsertThemeScriptInHtmlPlugin { - constructor(opt) { - this.options = { - - // 应用名称 - appName: null, - - // 生产环境编译主题时的临时存放目录 - tempDir: '', - - // 主题样式文件的访问路径 - path: '', - - // theme.js文件保存路径 - savePath: '', - // theme.js 在html的引用路径 - baseUrl: '', - - ...opt - } - } - - apply(compiler) { - compiler.hooks.compilation.tap('InsertThemeScriptInHtmlPlugin', compilation => { - compilation.hooks.htmlWebpackPluginBeforeHtmlProcessing.tapAsync('insert', (data, callback) => { - const themes = {} - // const tempDir = utils.join(this.options.tempDir, this.options.baseUrl) - // 目录不存在,不处理 - if (!fs.existsSync(this.options.tempDir)) { - callback(null, data) - } - // 读取主题文件名称 - const themeFiles = fs.readdirSync(this.options.tempDir) || [] - // 无主题文件,不需要创建 - if (themeFiles.length === 0) return - - // 构造主题的访问路径映射 - themeFiles.forEach(file => { - const name = file.split('-')[0] - themes[name] = utils.urlFormat(utils.join(this.options.path, file)) - }) - - const varName = this.options.appName ? `__MY_THEMES_${this.options.appName}__` : '__MY_THEMES__' - const content = `(function(global){global.${varName}=${JSON.stringify(themes)}})(window)` - utils.writeFile(utils.join(this.options.savePath, 'theme.js'), content) - const file = utils.urlFormat(utils.join(this.options.baseUrl, '/theme.js?t=' + (new Date().getTime()))) - data.assets.js = [file].concat(data.assets.js) - callback(null, data) - }) - }) - } -} - -module.exports = InsertThemeScriptInHtmlPlugin diff --git a/core/plugins/theme-switch-for-compile-plugin.js b/core/plugins/theme-switch-for-compile-plugin.js deleted file mode 100644 index c54ef0e..0000000 --- a/core/plugins/theme-switch-for-compile-plugin.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * 更换主题配置文件webpack插件,修改主题配置,指定要打包的主题 - * - * @author chenhuachun - * - * 步骤: - * 1. 先备份 _theme.scss - * 2. 开始编译之前写入_theme.scss此次编译主题 - * 3. 编译完成后还原_theme.scss文件 - * - * - */ -const utils = require('../utils') -const core = require('../index') -const backupFilePath = core.BackupLocalThemesFile - -class ThemeSwitchForCompilePlugin { - - constructor(opt = {}) { - const o = this.options = { - // 主题名称 - theme: 'default', - - // 主题scss引入文件路径,即 _theme.scss 的路径 - src: '', - - ...opt - } - - // 先备份文件 - utils.copyFile(o.src, backupFilePath) - } - - apply(compiler) { - // 开始编译之前写入主题路径 - compiler.hooks.beforeCompile.tap('writeFile', () => { - const o = this.options - const content = `@import "../themes/${o.theme}";` - utils.writeFile(o.src, content) - }) - - // 编译完成,还原配置 - compiler.hooks.done.tap('restore', () => { - utils.copyFile(backupFilePath, this.options.src) - // 删除备份文件 - utils.rm(backupFilePath) - }) - } -} - -module.exports = ThemeSwitchForCompilePlugin diff --git a/core/plugins/vue-jsdoc-plugin.js b/core/plugins/vue-jsdoc-plugin.js deleted file mode 100644 index e5621ea..0000000 --- a/core/plugins/vue-jsdoc-plugin.js +++ /dev/null @@ -1,11 +0,0 @@ -const compiler = require('vue-template-compiler') - -exports.handlers = { - // 利用 vue-template-compiler 编译 vue 模板 - beforeParse: function (e) { - if (/\.vue$/.test(e.filename)) { - const output = compiler.parseComponent(e.source); - e.source = output.script ? output.script.content : ''; - } - } -} diff --git a/core/renders/coder/api.js b/core/renders/coder/api.js deleted file mode 100644 index ef8e5f3..0000000 --- a/core/renders/coder/api.js +++ /dev/null @@ -1,82 +0,0 @@ -const _ = require('lodash') -module.exports = _.template(` -/** - * <%=cname%> api - * @module code/api/<%=name%> - * @author coder - */ - -<%if(configKeys.length>0){%> -// <%=configKeys.join(', ')%> -import { <%=configKeys.join(', ')%>} from '@/constant' -<%}%> - -<%if(transforms.length>0){%> -// ajax -import ajax, { transformHandler } from '$ui/utils/ajax' - -// transformer -import transformer from '@/mapping/index' -const { <%=transforms.join(', ')%> } = transformer - -<%}else{%> -// ajax -import ajax from '$ui/utils/ajax' -<%}%> - -<%_.each(items, function(item, i){%> -/** - * <%=item.title||item.URL%> - * @const - * @type {String} - * @default '<%if(item.prefix){%>[<%=item.prefix%>]<%}%><%=item.url%>' - */ -export const <%=item.URL%> = <%if(item.prefix){%> <%=item.prefix%> + <%}%>'<%=item.url%>' - -/** - * <%=item.title||item.camelCaseName%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> Url参数<%=param%> - <%})%> - * @param {object} [<%=item.ajaxParam%>] 发送键值对数据 - * @param {object} [options] ajax参数选项 - * @returns {Promise} - */ -export function <%=item.camelCaseName%> ( - -<%=item.params.join(', ')%> - -<%if(item.params.length>0){%>,<%}%> - - <%=item.ajaxParam%> - -, options - -) { - return ajax({ - <%if(item.options){%> - <%_.each(item.options, function(value, key){%> - <%=key%>: <%if(typeof value=='string'){%> '<%=value%>' <%}else{%> <%=JSON.stringify(value)%> <%}%>, - <%})%> - <%}%> - - <%if(item.params.length>0){%> - params:{<%=item.params.join(', ')%>}, - <%}%> - - <%if(item.transform && item.transform.length>0){%> - transformResponse: [transformHandler(<%=item.transform%>, '<%=item.camelCaseName%>', <%=item.ajaxParam%>, options - <%if(item.params.length>0){%> - ,{<%=item.params.join(', ')%>} - <%}%>)], - <%}%> - - <%=item.ajaxParam%>:<%=item.ajaxParam%>, - - url: <%=item.URL%>, - - ...options - }) -} -<%})%> -`) diff --git a/core/renders/coder/icons.js b/core/renders/coder/icons.js deleted file mode 100644 index cb30a38..0000000 --- a/core/renders/coder/icons.js +++ /dev/null @@ -1,16 +0,0 @@ -const _ = require('lodash') - -module.exports = _.template(` -/** - * icons - * @module $my/code/icons - * @author coder - */ - -export const elIcons = <%=elItems%>; - -export const myIcons = <%=items%> - -export default {elIcons, myIcons} - -`) diff --git a/core/renders/coder/mixin.js b/core/renders/coder/mixin.js deleted file mode 100644 index 21e8638..0000000 --- a/core/renders/coder/mixin.js +++ /dev/null @@ -1,308 +0,0 @@ -const _ = require('lodash') -module.exports = _.template(` -/** - * <%=cname%> mixin module - * @module $my/code/mixin/<%=name%> - * @author coder - */ -import { <%=importApiArray.join(', ')%> } from '$my/code/api/<%=kebabCaseName%>' - -// mixin -export default { - /** - * <%=cname%>数据存储载体对象 - * @member <%=name%> - <%_.each(customStateArray, function(item){ %> - * @property {*} [<%=item.state%>=null] <%=item.title%>响应数据 - <%})%> - * @property {Array} [<%=list%>=\\[\\]] 获取<%=cname%>列表响应数据 - * @property {number} [<%=page%>=null] 获取<%=cname%>列表响应页码 - * @property {number} [<%=limit%>=null] 获取<%=cname%>列表页大小,每页记录条数 - * @property {number} [<%=total%>=0] 获取<%=cname%>列表数据记录总条数 - * @property {object} [<%=model%>=null] 获取<%=cname%>单条记录 - */ - data() { - return { - <%=name%>: { - <%_.each(customStateArray, function(item){ %> - <%=item.state%>: null, - <%})%> - <%=list%>: [], - <%=page%>: null, - <%=limit%>: null, - <%=total%>: 0, - <%=model%>: null - } - } - }, - methods: { - - <%_.each(items, function(item, i){%> - <%if(i>0){%>,<%}%> - - <%if(item.methodType == 'fetch'){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - this.<%=name%>.<%=list%> = res.<%=list%> || [] - this.<%=name%>.<%=page%> = Number.parseInt(res.<%=page%>) || 0 - this.<%=name%>.<%=limit%> = Number.parseInt(res.<%=limit%>) || 0 - this.<%=name%>.<%=total%> = Number.parseInt(res.<%=total%>) || 0 - return res - }) - - } - <%}%> - - <%if(item.methodType == 'add'){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {number} [index] 新增到列表的位置索引,默认最近到列表最后 - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options - ).then(res => { - const model = Object.assign({}, <%=item.ajaxParam%>, res||{}) - const list = [...this.<%=name%>.<%=list%>] - if(index !== undefined) { - list.splice(index, 0, model) - }else { - list.push(model); - } - this.<%=name%>.<%=list%> = list - this.<%=name%>.<%=total%> += 1; - return res - }) - } - - <%}%> - - <%if(item.methodType == 'update'){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {number} [index] 源实体在列表的位置索引,如没有index,即不更新实体在源列表数据 - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options - ).then(res => { - const model = Object.assign({}, <%=item.ajaxParam%>, res||{}) - const list = [...this.<%=name%>.<%=list%>] - if(index !== undefined) { - list.splice(index, 1, model) - } - this.<%=name%>.<%=list%> = list - return res - }) - } - - - <%}%> - - <%if(item.methodType == 'remove'){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {number} [index] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据 - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - const list = [...this.<%=name%>.<%=list%>] - if(index !== undefined) { - list.splice(index, 1) - } - this.<%=name%>.<%=list%> = list - this.<%=name%>.<%=total%> -= 1; - return res - - }) - } - - <%}%> - - <%if(item.methodType == 'get'){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - this.<%=name%>.model = Object.assign({}, <%=item.ajaxParam%>, res||{}) - return res - }) - } - <%}%> - - - <%if(item.methodType == 'batch'){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {number[]} [indexes] 源实体在列表的位置索引,如没有indexes,即不删除实体在源列表数据 - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - indexes = [], - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - if(indexes.length > 0) { - this.<%=name%>.<%=list%> = this.<%=name%>.<%=list%>.filter((item, index) => !indexes.includes(index)) - } - this.<%=name%>.<%=total%> -= indexes.length; - return res - }) - } - - <%}%> - - <%if(['fetch','get','add','update','remove','batch'].indexOf(item.methodType)==-1){%> - /** - * <%=item.title%> - * @function <%=item.name%> - <%_.each(item.params, function(param){%> - * @param {string|number} <%=param%> 请求URL路径参数<%=param%>数据 - <%})%> - * @param {object} data 请求发送的数据<%=item.ajaxParam%> - * @param {object} [options] ajax参数选项 - * @returns {Promise} Promise实例 - */ - <%=item.name%>({ - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options }={} - ) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - <%if(item.state){%> - this.<%=name%>.<%=item.state%> = res - <%}%> - return res - }) - } - - <%}%> - - <%})%> - } -} -`) diff --git a/core/renders/coder/mock.js b/core/renders/coder/mock.js deleted file mode 100644 index 898d4be..0000000 --- a/core/renders/coder/mock.js +++ /dev/null @@ -1,154 +0,0 @@ -const _ = require('lodash') -module.exports = _.template(` -<% if(importApiArray.length>0){%> -// <%=importApiArray.join(', ')%> -import { <%=importApiArray.join(', ')%> } from '$my/code/api/<%=kebabCaseName%>' -<%}%> -<%if(templateArray.length>0){%> -// <%=templateArray.join(', ')%> -import { <%=templateArray.join(', ')%>} from '@/mock/templates' -<%}%> -// Mock -export default [ -<%_.each(mocks, function(item, i){%> - <%if(i>0){%>,<%}%> - - <%if(item.methodType == 'fetch'){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: { - <%=item.page%>: 1, - <%=item.limit%>: 10 - }, - <%if(item.template){%> - template: <%=item.template%> } - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '获取列表成功', - <%=data%>: { - <%=item.page%>: '{{<%=item.page%>}}', - <%=item.limit%>: '{{<%=item.limit%>}}', - <%=item.total%>: 1000, - '<%=item.list%>|{{<%=item.limit%>}}': [<%=item.columns%>] - } - } - } - - <%}%> - <%}%> - - <%if(item.methodType == 'update'){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: {}, - <%if(item.template){%> - template: <%=item.template%> - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '更新成功', - <%=data%>: <%=updateData%> - } - <%}%> - } - <%}%> - - <%if(item.methodType == 'get'){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: {}, - <%if(item.template){%> - template: <%=item.template%> - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '获取成功', - <%=data%>: <%=item.columns%> - } - <%}%> - } - <%}%> - - <%if(item.methodType == 'add'){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: {}, - <%if(item.template){%> - template: <%=item.template%> - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '添加成功', - <%=data%>: <%=addData%> - } - <%}%> - } - <%}%> - - <%if(item.methodType == 'remove'){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: {}, - <%if(item.template){%> - template: <%=item.template%> - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '删除成功', - <%=data%>: <%=removeData%> - } - <%}%> - } - <%}%> - - <%if(item.methodType == 'batch'){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: {}, - <%if(item.template){%> - template: <%=item.template%> - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '批量删除成功', - <%=data%>: <%=batchData%> - } - <%}%> - } - <%}%> - - <%if(['fetch','get','update','remove','add','batch'].indexOf(item.methodType)==-1){%> - { - title: '<%=item.URL%>', - url: <%=item.URL%>, - method: '<%=item.httpMethod%>', - params: {}, - <%if(item.template){%> - template: <%=item.template%> - <%} else {%> - template: { - <%=code%>: <%=codeValue%>, - <%=message%>: '请求成功', - <%=data%>: <%=item.columns%> - } - <%}%> - } - <%}%> - - -<%})%> -] -`) diff --git a/core/renders/coder/store.js b/core/renders/coder/store.js deleted file mode 100644 index 4f74400..0000000 --- a/core/renders/coder/store.js +++ /dev/null @@ -1,465 +0,0 @@ -const _ = require('lodash') -module.exports = _.template(` -/** - * <%=cname%> store module - * @module $my/code/store/<%=name%> - * @author coder - */ - -import {mapState, mapActions} from 'vuex' -import { <%=importTypeArray.join(', ')%> } from '$my/code/types' -import { <%=importApiArray.join(', ')%> } from '$my/code/api/<%=kebabCaseName%>' -// store module -export const <%=name%> = { - /** - * 状态数据 - * @member state - <%_.each(customStateArray, function(item){ %> - * @property {*} <%=item.state%> <%=item.title%>响应数据 - <%})%> - * @property {Array} <%=list%> 获取<%=cname%>列表响应数据 - * @property {Number} <%=page%> 获取<%=cname%>列表响应页码 - * @property {Number} <%=limit%> 获取<%=cname%>列表页大小,每页记录条数 - * @property {Number} <%=total%> 获取<%=cname%>列表数据记录总条数 - * @property {Object} <%=model%> 获取<%=cname%>单条记录 - */ - state: { - <%_.each(customStateArray, function(item){ %> - <%=item.state%>: null, - <%})%> - <%=list%>: [], - <%=page%>: 1, - <%=limit%>: 0, - <%=total%>: 0, - <%=model%>: null - }, - mutations: { - <%_.each(items, function(item, i){%> - <%if(i>0){%>,<%}%> - - <%if(item.methodType == 'fetch'){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {Array} [payload.<%=list%>] 数据列表 - * @param {number} [payload.<%=page%>=0] 数据页码 - * @param {number} [payload.<%=limit%>=0] 每页条数 - * @param {number} [payload.<%=total%>=0] 总记录数 - */ - [<%=item.NAME%>](state, payload) { - state.<%=list%> = payload.<%=list%> || []; - state.<%=page%> = payload.<%=page%> || 0; - state.<%=limit%> = payload.<%=limit%> || 0; - state.<%=total%> = payload.<%=total%> || 0; - } - <%}%> - - <%if(item.methodType == 'add'){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {number} [payload.index] 新增到列表的位置索引,默认最近到列表最后 - * @param {object} payload.<%=model%> 新增的实体对象 - */ - [<%=item.NAME%>](state, payload) { - const list = [...state.<%=list%>] - if(payload.index !== undefined) { - list.splice(payload.index, 0, payload.<%=model%>) - }else { - list.push(payload.<%=model%>); - } - state.<%=list%> = list - state.<%=total%> += 1 - } - <%}%> - - <%if(item.methodType == 'update'){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不更新源列表数据 - * @param {object} payload.<%=model%> 更新的实体对象 - */ - [<%=item.NAME%>](state, payload) { - if(payload.index !== undefined) { - const list = [...state.<%=list%>] - list.splice(payload.index, 1, payload.<%=model%>) - state.<%=list%> = list - } - } - <%}%> - - <%if(item.methodType == 'remove'){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据 - */ - [<%=item.NAME%>](state, payload) { - if(payload.index !== undefined) { - const list = [...state.<%=list%>] - list.splice(payload.index, 1) - state.<%=list%> = list - } - state.<%=total%> -= 1 - } - <%}%> - - <%if(item.methodType == 'get'){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {object} payload.<%=model%> 实体对象 - */ - [<%=item.NAME%>](state, payload) { - state.<%=model%> = payload.<%=model%> - } - <%}%> - - <%if(item.methodType == 'batch'){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {number[]} [payload.indexes] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据 - */ - [<%=item.NAME%>](state, payload) { - state.<%=list%> = state.<%=list%>.filter((item, index) => !payload.indexes.includes(index)); - state.<%=total%> -= payload.indexes.length - } - <%}%> - - - <%if(['fetch','get','add','update','remove','batch'].indexOf(item.methodType)==-1){%> - /** - * <%=item.title%> - * @function [mutations]<%=item.NAME%> - * @param {object} state vuex状态 - * @param {object} payload 负载数据 - * @param {object} payload.<%=item.state%> 需保存的数据 - */ - [<%=item.NAME%>](state, payload) { - state.<%=item.state%> = payload.<%=item.state%> - } - <%}%> - - <%})%> - - }, - actions: { - - <%_.each(items, function(item, i){%> - <%if(i>0){%>,<%}%> - <%if(item.methodType == 'fetch'){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - } = {}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - <%=list%>: res.<%=list%>, - <%=page%>: Number.parseInt(res.<%=page%>), - <%=limit%>: Number.parseInt(res.<%=limit%>), - <%=total%>: Number.parseInt(res.<%=total%>) - }) - return res - }) - } - <%}%> - - <%if(item.methodType == 'add'){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {number} [payload.index] 新增到列表的位置索引,默认最近到列表最后 - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options - } = {}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - <%=model%>: Object.assign({}, <%=item.ajaxParam%>, res), - index: index - }) - return res - }) - } - <%}%> - - <%if(item.methodType == 'update'){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不更新实体在源列表数据 - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit, state}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options - }={}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - index: index, - <%=model%>: Object.assign({}, state.<%=list%>[index], <%=item.ajaxParam%>, res) - }) - return res - }) - } - <%}%> - - <%if(item.methodType == 'remove'){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {number} [payload.index] 源实体在列表的位置索引,如没有index,即不删除实体在源列表数据 - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - index, - options - }={}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - index: index - }) - return res - }) - } - <%}%> - - <%if(item.methodType == 'get'){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - }={}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - <%=model%>: res - }) - return res - }) - } - <%}%> - - <%if(item.methodType == 'batch'){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {number[]} [payload.indexes] 源实体在列表的位置索引,如没有indexes,即不删除实体在源列表数据 - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - indexes, - options - }={}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - indexes: indexes || [] - }) - return res - }) - } - <%}%> - - - <%if(['fetch','get','add','update','remove', 'batch'].indexOf(item.methodType)==-1){%> - /** - * <%=item.title%> - * @function [actions]<%=item.NAME%> - * @param {object} context Store实例 - * @param {function} context.commit 提交mutation方法 - * @param {object} payload 负载数据对象 - <%_.each(item.params, function(param){%> - * @param {string|number} payload.<%=param%> URL路径参数数据<%=param%> - <%})%> - * @param {object} payload.<%=item.ajaxParam%> 请求发送数据<%=item.ajaxParam%> - * @param {object} payload.options ajax参数选项 - * @returns {Promise} Promise实例 - */ - [<%=item.NAME%>]({commit}, { - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - }={}) { - return <%=item.name%>( - <%_.each(item.params, function(param){%> - <%=param%>, - <%})%> - <%=item.ajaxParam%>, - options - ).then(res => { - commit({ - type: <%=item.NAME%>, - <%=item.state%>: res - }) - return res - }) - } - <%}%> - - <%})%> - } -} - -/** - * Vue mixin setup - */ -export default { - computed: { - ...mapState(['<%=name%>']) - }, - methods: { - ...mapActions({ - <%_.each(items, function(item, i){%> - <%if(i>0){%>,<%}%> - <%=item.name%>: <%=item.NAME%> - <%})%> - }) - }, - beforeCreate() { - const store = this.$store - if (!store) return - if (!store.state.<%=name%>) { - store.registerModule('<%=name%>', <%=name%>) - } - } -} - -`) diff --git a/core/renders/coder/types.js b/core/renders/coder/types.js deleted file mode 100644 index 9f1a6e2..0000000 --- a/core/renders/coder/types.js +++ /dev/null @@ -1,21 +0,0 @@ -const _ = require('lodash') -module.exports = _.template(` -/** -* Vuex Mutation type -* @module base/types -* @author coder -*/ -<%_.each(types, function(items, name){%> -// ------------------------ <%=name%> ------------------------- - <%_.each(items, function(item){%> - /** - * <%=item.title%> - * @const - * @type {String} - * @default '<%=item.name%>' - */ - export const <%=item.name%> = '<%=item.name%>' - <%})%> - -<%})%> -`) diff --git a/core/renders/routes-wrapper.js b/core/renders/routes-wrapper.js deleted file mode 100644 index 6e5ba8e..0000000 --- a/core/renders/routes-wrapper.js +++ /dev/null @@ -1,17 +0,0 @@ -const _ = require('lodash') - -/** - * 路由外层代码 - * @param {object} options 参数数据 - * @param {string} options.content 内容 - */ -module.exports = _.template(` -/** -* 该文件由 .my/core/build/routes-builder-plugin.js webpack插件自动生成 -*/ -export default function ({get}) { - return <%= content %> - -} - -`) diff --git a/core/renders/routes.js b/core/renders/routes.js deleted file mode 100644 index 3c4868c..0000000 --- a/core/renders/routes.js +++ /dev/null @@ -1,29 +0,0 @@ -const _ = require('lodash') - -/** - * 渲染函数 - * @param {object} options 参数对象 - * @param {object[]} options.items 路由数组 - * @param {function} options.render 渲染函数 - */ -module.exports = _.template(` - [ - <% _.each(items, function(item, index) {%> - <%if(index>0){%>,<%}%> - { - - path: '<%= item.path %>', - component: get('<%= item.component %>') - <%if(item.children && item.children.length>0) { %> - ,children: <%= render({items:item.children, render: render}) %> - <%}%> - <%if(item.meta){%> - ,meta: <%=item.meta%> - <%}%> - ,props: true - } - - <%})%> - - ] -`) diff --git a/core/renders/svg-component.js b/core/renders/svg-component.js deleted file mode 100644 index 32a9b3b..0000000 --- a/core/renders/svg-component.js +++ /dev/null @@ -1,24 +0,0 @@ -const _ = require('lodash') - - -module.exports = _.template(` -/** - * 该文件由 .my/core/build/svg.js 生成 - */ - -import Vue from 'vue' -import globalConfig from '$ui/config' - -const Icon = ({props}) => { - const attrs = {...globalConfig.svg, ...props} - return ( - - <%= paths %> - - ) -} - -Vue.component('icon-<%= name %>', Icon) -export default Icon - -`) diff --git a/core/server/app.js b/core/server/app.js deleted file mode 100644 index be26eba..0000000 --- a/core/server/app.js +++ /dev/null @@ -1,8 +0,0 @@ -const utils = require('../utils') -const core = require('../../core/index') -const createHttpServer = require('./http') -const config = require('../../core/config')() -createHttpServer({ - port: config.serverPort, - root: utils.join(core.MyRootPath, 'web') -}) diff --git a/core/server/db.js b/core/server/db.js deleted file mode 100644 index 2aed9fc..0000000 --- a/core/server/db.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * 文件数据库操作类 - * @author 陈华春 - */ -const fs = require('fs') -const utils = require('../utils') -const constant = require('../constant') -const dbPath = utils.resolve(constant.dbDir) - -const loadFile = function (file) { - if (!fs.existsSync(file)) { - utils.writeFile(file, '{}') - } - return JSON.parse(fs.readFileSync(file, 'utf-8')) -} - -const saveFile = function (path, model) { - utils.writeFile(path, JSON.stringify(model)) -} - -class DB { - constructor(name) { - this.name = name; - this.file = utils.join(dbPath, `${name}.json`); - this.data = loadFile(this.file) - } - - get(id) { - return this.data[id] - } - - add(model) { - const id = utils.uid() - model._id = id; - model._time = new Date().toLocaleString() - this.data[id] = model - utils.writeFile(this.file, this.data) - return id - } - - update(id, model) { - const m = this.data[id]; - if (m) { - model._time = new Date().toLocaleString() - this.data[id] = model - } - saveFile(this.file, this.data) - } - - remove(id) { - const m = this.data[id]; - if (m) { - delete this.data[id]; - } - saveFile(this.file, this.data) - } - - list() { - return Object.keys(this.data).map(key => this.data[key]) - } - - clear() { - this.data = {} - saveFile(this.file, this.data) - } - - drop() { - this.data = null - fs.unlinkSync(this.file) - } - - destroy() { - this.data = null - } -} - - -DB.getFiles = function () { - const files = fs.readdirSync(dbPath) || [] - return files.map(file => { - return new DB(file.replace('.json', '')) - }) -} - -DB.create = function (name) { - return new DB(name) -} - -module.exports = DB diff --git a/core/server/dev.js b/core/server/dev.js deleted file mode 100644 index a25c330..0000000 --- a/core/server/dev.js +++ /dev/null @@ -1,11 +0,0 @@ -const app = require('express')(); -const http = require('http').createServer(app); -const io = require('socket.io')(http); - -io.on('connection', function(socket) { - console.log('a user connected'); -}); - -http.listen(30001, function() { - console.log('listening on *:30001'); -}); diff --git a/core/server/http.js b/core/server/http.js deleted file mode 100644 index 21bd3af..0000000 --- a/core/server/http.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * http 静态文件服务器创建方法 - * - * @author chenhuachun - */ -const express = require('express') -const opn = require('opn') -const bodyParser = require('body-parser') -const utils = require('../utils') - -/** - * 设置通用响应头 - * @param req - * @param res - */ -function setHeaders(req, res) { - res.set({ - 'Access-Control-Allow-Credentials': 'true', - 'Access-Control-Allow-Origin': req.get('Origin') || '*', - 'Access-Control-Allow-Methods': 'GET,POST,DELETE,PUSH,PATCH,OPTIONS', - 'Access-Control-Allow-Headers': 'Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE' - }) -} - -/** - * 创建服务器函数 - * @param {Object} options 参数选项 - * @param {number} options.port 服务启动端口号 - * @param {string} options.root 文件系统根目录路径 - * @param {string} options.path 浏览器打开后访问目录路径 - * @param {boolean} options.open 是否自动打开浏览器 - * @param {object[]} routes 路由配置 {path, type, handler} - * @return {{app, server}} - */ -function createHttpServer({port, root, path, routes, open}) { - const app = express() - - // 设置静态目录 - if (root) { - app.use('/', express.static(root)) - } - - // 参数转换成json格式 - app.use(bodyParser.json()) - - // 通用响应头设置 - app.use(function (req, res, next) { - setHeaders(req, res) - next() - }) - - routes = routes || [] - // 设置接口路由 - routes.forEach(({path, type, handler}) => { - app[type || 'get'](path, handler) - }) - - // 处理跨域 - app.options('/*', (req, res) => { - res.send(null) - }) - - // 启动http服务 - const server = app.listen(port, function (err) { - - if (err) utils.log(err, 'error') - - const port = server.address().port - const host = `http://127.0.0.1:${port}` - const url = host + utils.join('/', path || '') - - utils.log(`http server listening at ${host}`, 'success') - - // 打开浏览器 - opn && opn(url) - - }) - return { - app, - server - } -} - -module.exports = createHttpServer diff --git a/core/templates/app/config.js b/core/templates/app/config.js deleted file mode 100644 index ac2c77b..0000000 --- a/core/templates/app/config.js +++ /dev/null @@ -1,35 +0,0 @@ -import {set as setConfig} from '$ui/config' - -// 写入运行时配置 -setConfig({ - - appName: '{{appName}}', - - routePrefix: '/{{appName}}', - - // 路由模式 - router: { - mode: 'hash', - base: '/' - }, - - // 是否应用自动生成的路由配置 - autoRoutes: true, - - access: { - // 启用请求权限控制 - axios: true, - - // 启用路由权限控制 - router: true, - - // 缓存存储方式 session 或 local - storage: 'session', - - // 登录页面路径 - loginPath: '/login', - - // 权限不足页面路径 - authorizePath: '/403' - } -}) diff --git a/core/templates/app/main.js b/core/templates/app/main.js deleted file mode 100644 index 2e866ea..0000000 --- a/core/templates/app/main.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * 初始化配置 - */ - -import './config' - -/** - * 获取全局配置 - */ -import globalConfig from '$ui/config' - -/** - * 子应用提供的能力 - */ -import {Vuex, getView, progress, createMicroApp} from '$ui/app' - -/** - * 基础通用样式 - */ -import '@/style/index.scss' - -/** - * 项目自定义的路由, 手动写的 - */ -const routesFactory = require(`$apps/${process.env.APP}/router/routes`).default - -/** - * 按views目录下文件自动生成的路由 - */ -const autoRoutesFactory = require(`$my/routes/${process.env.APP}`).default - -/** - * 项目Vuex实例参数选项 - */ -const vuexOptions = require(`$apps/${process.env.APP}/store/index`).default - -/** - * 全局共享数据 Vuex实例 - */ -const store = new Vuex.Store(vuexOptions) - -/** - * 如果启用了自动创建路由功能,获取路由配置信息 - * @type {Array} - */ -const autoRoutes = globalConfig.autoRoutes ? autoRoutesFactory({get: getView}) : [] - -/** - * 项目手工配置的路由与自动路由合并 - */ -const routes = routesFactory({get: getView}).concat(autoRoutes) - -/** - * 前端微服务应用 - */ -const microApp = createMicroApp({ - el: '#app', - config: globalConfig, - routes, - store, - progress -}) - -/** - * 如果没有主应用,即独立运行 - */ -if (!window.__POWERED_BY_MY_APPS__) { - if (process.env.MY_MOCK === 'true') { - require('@/mock/index') - } - microApp.mount() -} - - -/** - * 子应用启动的钩子 - * @type {bootstrap} - */ -export const bootstrap = microApp.bootstrap - -/** - * 子应用挂载钩子 - */ -export const mount = microApp.mount - -/** - * 子应用卸载钩子 - */ -export const unmount = microApp.unmount - -/** - * 子应用更新 - */ -export const update = microApp.update - diff --git a/core/templates/app/router/routes.js b/core/templates/app/router/routes.js deleted file mode 100644 index e308e3c..0000000 --- a/core/templates/app/router/routes.js +++ /dev/null @@ -1,4 +0,0 @@ -export default function ({get}) { - return [] -} - diff --git a/core/templates/app/store/getters.js b/core/templates/app/store/getters.js deleted file mode 100644 index 3a7f220..0000000 --- a/core/templates/app/store/getters.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 自定义store getters - * @module store/getters - * - * @example 定义getter方式 - * - * getterExample(state, getters) { - * // do something... - * return state.list.length // 必须要有返回值 - * } - * - */ -export default {} diff --git a/core/templates/app/store/index.js b/core/templates/app/store/index.js deleted file mode 100644 index e398ef3..0000000 --- a/core/templates/app/store/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * vuex store 初始化入口文件 - * @module store/index - */ - -import state from './state' -import mutations from './mutations' -import getters from './getters' -import modules from '$my/code/modules' - -/** - * Vuex.Store 实例 - */ -export default { - strict: process.env.NODE_ENV !== 'production', - /** - * 自定义 state 在 [store/state]{@link module:store/state} 中定义 - * @type {Object} - */ - state, - /** - * modules, 由代码生成器生成, import modules from '@/base/modules' - * @type {Object} - */ - modules, - /** - * 非代码生成器生成的mutations, 在 [store/mutations]{@link module:store/mutations} 中定义 - * @type {Object} - */ - mutations, - /** - * 自定义的getters 在 [module:store/getters]{@link module:store/getters} 中定义 - * @type {Object} - */ - getters -} diff --git a/core/templates/app/store/mutations.js b/core/templates/app/store/mutations.js deleted file mode 100644 index 59cfa06..0000000 --- a/core/templates/app/store/mutations.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 自定义Mutations - * @module store/mutations - * - * @example 定义mutation方式 - * - * methodName(state, payload) { - * state.moduleName.model = payload - * } - * - */ -export default { -} diff --git a/core/templates/app/store/state.js b/core/templates/app/store/state.js deleted file mode 100644 index c626b01..0000000 --- a/core/templates/app/store/state.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 自定义state - * @module store/state - * - */ -export default {} diff --git a/core/templates/app/views/_404.vue b/core/templates/app/views/_404.vue deleted file mode 100644 index 098d34a..0000000 --- a/core/templates/app/views/_404.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/core/templates/app/views/index.vue b/core/templates/app/views/index.vue deleted file mode 100644 index 5f5739a..0000000 --- a/core/templates/app/views/index.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/core/templates/jsdoc/README.md b/core/templates/jsdoc/README.md deleted file mode 100644 index 2bf476b..0000000 --- a/core/templates/jsdoc/README.md +++ /dev/null @@ -1,147 +0,0 @@ -# Docdash -[![Build Status](https://api.travis-ci.org/clenemt/docdash.png?branch=master)](https://travis-ci.org/clenemt/docdash) [![npm version](https://badge.fury.io/js/docdash.svg)](https://badge.fury.io/js/docdash) [![license](https://img.shields.io/npm/l/docdash.svg)](LICENSE.md) - -A clean, responsive documentation template theme for JSDoc 3. - -![docdash-screenshot](https://cloud.githubusercontent.com/assets/447956/13398144/4dde7f36-defd-11e5-8909-1a9013302cb9.png) - -![docdash-screenshot-2](https://cloud.githubusercontent.com/assets/447956/13401057/e30effd8-df0a-11e5-9f51-66257ac38e94.jpg) - -## Example -See http://clenemt.github.io/docdash/ for a sample demo. :rocket: - -## Install - -```bash -$ npm install docdash -``` - -## Usage -Clone repository to your designated `jsdoc` template directory, then: - -```bash -$ jsdoc entry-file.js -t path/to/docdash -``` - -## Usage (npm) -In your projects `package.json` file add a new script: - -```json -"script": { - "generate-docs": "node_modules/.bin/jsdoc -c jsdoc.json" -} -``` - -In your `jsdoc.json` file, add a template option. - -```json -"opts": { - "template": "node_modules/docdash" -} -``` - -## Sample `jsdoc.json` -See the config file for the [fixtures](fixtures/fixtures.conf.json) or the sample below. - -```json -{ - "tags": { - "allowUnknownTags": false - }, - "source": { - "include": "../js", - "includePattern": ".js$", - "excludePattern": "(node_modules/|docs)" - }, - "plugins": [ - "plugins/markdown" - ], - "opts": { - "template": "assets/template/docdash/", - "encoding": "utf8", - "destination": "docs/", - "recurse": true, - "verbose": true - }, - "templates": { - "cleverLinks": false, - "monospaceLinks": false - } -} -``` - -## Options -Docdash supports the following options: - -``` -{ - "docdash": { - "static": [false|true], // Display the static members inside the navbar - "sort": [false|true], // Sort the methods in the navbar - "sectionOrder": [ // Order the main section in the navbar (default order shown here) - "Classes", - "Modules", - "Externals", - "Events", - "Namespaces", - "Mixins", - "Tutorials", - "Interfaces" - ] - "disqus": "", // Shortname for your disqus (subdomain during site creation) - "openGraph": { // Open Graph options (mostly for Facebook and other sites to easily extract meta information) - "title": "", // Title of the website - "type": "website", // Type of the website - "image": "", // Main image/logo - "site_name": "", // Site name - "url": "" // Main canonical URL for the main page of the site - }, - "meta": { // Meta information options (mostly for search engines that have not indexed your site yet) - "title": "", // Also will be used as postfix to actualy page title, prefixed with object/document name - "description": "", // Description of overal contents of your website - "keyword": "" // Keywords for search engines - }, - "search": [false|true], // Display seach box above navigation which allows to search/filter navigation items - "collapse": [false|true], // Collapse navigation by default except current object's navigation of the current page - "wrap": [false|true], // Wrap long navigation names instead of trimming them - "typedefs": [false|true], // Include typedefs in menu - "navLevel": [integer], // depth level to show in navbar, starting at 0 (false or -1 to disable) - "private": [false|true], // set to false to not show @private in navbar - "removeQuotes": [none|all|trim],// Remove single and double quotes, trim removes only surrounding ones - "scripts": [] // Array of external (or relative local copied using templates.default.staticFiles.include) js or css files to inject into HTML, - "menu":{ // Adding additional menu items after Home - "Project Website":{ // Menu item name - "href":"https://myproject.com", //the rest of HTML properties to add to manu item - "target":"_blank", - "class":"menu-item", - "id":"website_link" - }, - "Forum":{ - "href":"https://myproject.com.forum", - "target":"_blank", - "class":"menu-item", - "id":"forum_link" - } - } - } -} -``` - -Place them anywhere inside your `jsdoc.json` file. - -## Contributors - -[![0](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/0)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/0) -[![1](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/1)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/1) -[![2](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/2)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/2) -[![3](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/3)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/3) -[![4](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/4)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/4) -[![5](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/5)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/5) -[![6](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/6)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/6) -[![7](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/images/7)](https://sourcerer.io/fame/ar2rsawseen/clenemt/docdash/links/7) - -## Thanks -Thanks to [lodash](https://lodash.com) and [minami](https://github.com/nijikokun/minami). - -## License -Licensed under the Apache License, version 2.0. (see [Apache-2.0](LICENSE.md)). diff --git a/core/templates/jsdoc/package.json b/core/templates/jsdoc/package.json deleted file mode 100644 index f1f89ed..0000000 --- a/core/templates/jsdoc/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "docdash", - "_id": "docdash@1.1.1", - "_inBundle": false, - "_integrity": "sha512-WQkkr01zL6kcIfq9YCSXtqqevM6NYoTXLdl+Td0OYCEcX0RgsuEMeqHXQaXFt+p6Lo15RIgA5XhLAn7RL+erhA==", - "_location": "/docdash", - "_phantomChildren": {}, - "_requested": { - "type": "tag", - "registry": true, - "raw": "docdash", - "name": "docdash", - "escapedName": "docdash", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#DEV:/", - "#USER" - ], - "_resolved": "https://registry.npmjs.org/docdash/-/docdash-1.1.1.tgz", - "_shasum": "89924e57938388fc3d1fa900927acfced7f3b24f", - "_spec": "docdash", - "_where": "/Users/kenny/@xdh/my", - "author": { - "name": "Clement Moron", - "email": "clement.moron@gmail.com" - }, - "bugs": { - "url": "https://github.com/clenemt/docdash/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A clean, responsive documentation template theme for JSDoc 3 inspired by lodash and minami", - "devDependencies": { - "browser-sync": "latest", - "jsdoc": "latest", - "watch-run": "latest" - }, - "files": [ - "publish.js", - "static", - "tmpl" - ], - "homepage": "https://github.com/clenemt/docdash#readme", - "keywords": [ - "jsdoc", - "template" - ], - "license": "Apache-2.0", - "main": "publish.js", - "name": "docdash", - "repository": { - "type": "git", - "url": "git+https://github.com/clenemt/docdash.git" - }, - "scripts": { - "sync": "browser-sync start -s ../fixtures-doc -f ../fixtures-doc --reload-delay 1000 --no-ui --no-notify", - "test": "jsdoc -c fixtures/fixtures.conf.json", - "watch": "watch-run -d 1000 -p tmpl/**,static/** \"npm run test\"" - }, - "version": "1.1.1" -} diff --git a/core/templates/jsdoc/publish.js b/core/templates/jsdoc/publish.js deleted file mode 100644 index 74e721b..0000000 --- a/core/templates/jsdoc/publish.js +++ /dev/null @@ -1,775 +0,0 @@ -/*global env: true */ -'use strict'; - -var doop = require('jsdoc/util/doop'); -var fs = require('jsdoc/fs'); -var helper = require('jsdoc/util/templateHelper'); -var logger = require('jsdoc/util/logger'); -var path = require('jsdoc/path'); -var taffy = require('taffydb').taffy; -var template = require('jsdoc/template'); -var util = require('util'); - -var htmlsafe = helper.htmlsafe; -var linkto = helper.linkto; -var resolveAuthorLinks = helper.resolveAuthorLinks; -var scopeToPunc = helper.scopeToPunc; -var hasOwnProp = Object.prototype.hasOwnProperty; - -var data; -var view; - -var outdir = path.normalize(env.opts.destination); - -function copyFile(source, target, cb) { - var cbCalled = false; - - var rd = fs.createReadStream(source); - rd.on("error", function(err) { - done(err); - }); - var wr = fs.createWriteStream(target); - wr.on("error", function(err) { - done(err); - }); - wr.on("close", function(ex) { - done(); - }); - rd.pipe(wr); - - function done(err) { - if (!cbCalled) { - cb(err); - cbCalled = true; - } - } -} - -function find(spec) { - return helper.find(data, spec); -} - -function tutoriallink(tutorial) { - return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' }); -} - -function getAncestorLinks(doclet) { - return helper.getAncestorLinks(data, doclet); -} - -function hashToLink(doclet, hash) { - if ( !/^(#.+)/.test(hash) ) { return hash; } - - var url = helper.createLink(doclet); - - url = url.replace(/(#.+|$)/, hash); - return '' + hash + ''; -} - -function needsSignature(doclet) { - var needsSig = false; - - // function and class definitions always get a signature - if (doclet.kind === 'function' || doclet.kind === 'class' && !doclet.hideconstructor) { - needsSig = true; - } - // typedefs that contain functions get a signature, too - else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names && - doclet.type.names.length) { - for (var i = 0, l = doclet.type.names.length; i < l; i++) { - if (doclet.type.names[i].toLowerCase() === 'function') { - needsSig = true; - break; - } - } - } - // and namespaces that are functions get a signature (but finding them is a - // bit messy) - else if (doclet.kind === 'namespace' && doclet.meta && doclet.meta.code && - doclet.meta.code.type && doclet.meta.code.type.match(/[Ff]unction/)) { - needsSig = true; - } - - return needsSig; -} - -function getSignatureAttributes(item) { - var attributes = []; - - if (item.optional) { - attributes.push('opt'); - } - - if (item.nullable === true) { - attributes.push('nullable'); - } - else if (item.nullable === false) { - attributes.push('non-null'); - } - - return attributes; -} - -function updateItemName(item) { - var attributes = getSignatureAttributes(item); - var itemName = item.name || ''; - - if (item.variable) { - itemName = '…' + itemName; - } - - if (attributes && attributes.length) { - itemName = util.format( '%s%s', itemName, - attributes.join(', ') ); - } - - return itemName; -} - -function addParamAttributes(params) { - return params.filter(function(param) { - return param.name && param.name.indexOf('.') === -1; - }).map(updateItemName); -} - -function buildItemTypeStrings(item) { - var types = []; - - if (item && item.type && item.type.names) { - item.type.names.forEach(function(name) { - types.push( linkto(name, htmlsafe(name)) ); - }); - } - - return types; -} - -function buildAttribsString(attribs) { - var attribsString = ''; - - if (attribs && attribs.length) { - attribsString = htmlsafe( util.format('(%s) ', attribs.join(', ')) ); - } - - return attribsString; -} - -function addNonParamAttributes(items) { - var types = []; - - items.forEach(function(item) { - types = types.concat( buildItemTypeStrings(item) ); - }); - - return types; -} - -function addSignatureParams(f) { - var params = f.params ? addParamAttributes(f.params) : []; - f.signature = util.format( '%s(%s)', (f.signature || ''), params.join(', ') ); -} - -function addSignatureReturns(f) { - var attribs = []; - var attribsString = ''; - var returnTypes = []; - var returnTypesString = ''; - var source = f.yields || f.returns; - - // jam all the return-type attributes into an array. this could create odd results (for example, - // if there are both nullable and non-nullable return types), but let's assume that most people - // who use multiple @return tags aren't using Closure Compiler type annotations, and vice-versa. - if (source) { - source.forEach(function(item) { - helper.getAttribs(item).forEach(function(attrib) { - if (attribs.indexOf(attrib) === -1) { - attribs.push(attrib); - } - }); - }); - - attribsString = buildAttribsString(attribs); - } - - if (source) { - returnTypes = addNonParamAttributes(source); - } - if (returnTypes.length) { - returnTypesString = util.format( ' → %s{%s}', attribsString, returnTypes.join('|') ); - } - - f.signature = '' + (f.signature || '') + '' + - '' + returnTypesString + ''; -} - -function addSignatureTypes(f) { - var types = f.type ? buildItemTypeStrings(f) : []; - - f.signature = (f.signature || '') + '' + - (types.length ? ' :' + types.join('|') : '') + ''; -} - -function addAttribs(f) { - var attribs = helper.getAttribs(f); - var attribsString = buildAttribsString(attribs); - - f.attribs = util.format('%s', attribsString); -} - -function shortenPaths(files, commonPrefix) { - Object.keys(files).forEach(function(file) { - files[file].shortened = files[file].resolved.replace(commonPrefix, '') - // always use forward slashes - .replace(/\\/g, '/'); - }); - - return files; -} - -function getPathFromDoclet(doclet) { - if (!doclet.meta) { - return null; - } - - return doclet.meta.path && doclet.meta.path !== 'null' ? - path.join(doclet.meta.path, doclet.meta.filename) : - doclet.meta.filename; -} - -function generate(type, title, docs, filename, resolveLinks) { - resolveLinks = resolveLinks === false ? false : true; - - var docData = { - type: type, - title: title, - docs: docs - }; - - var outpath = path.join(outdir, filename), - html = view.render('container.tmpl', docData); - - if (resolveLinks) { - html = helper.resolveLinks(html); // turn {@link foo} into foo - } - - fs.writeFileSync(outpath, html, 'utf8'); -} - -function generateSourceFiles(sourceFiles, encoding) { - encoding = encoding || 'utf8'; - Object.keys(sourceFiles).forEach(function(file) { - var source; - // links are keyed to the shortened path in each doclet's `meta.shortpath` property - var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened); - helper.registerLink(sourceFiles[file].shortened, sourceOutfile); - - try { - source = { - kind: 'source', - code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, encoding) ) - }; - } - catch(e) { - logger.error('Error while generating source file %s: %s', file, e.message); - } - - generate('Source', sourceFiles[file].shortened, [source], sourceOutfile, false); - }); -} - -/** - * Look for classes or functions with the same name as modules (which indicates that the module - * exports only that class or function), then attach the classes or functions to the `module` - * property of the appropriate module doclets. The name of each class or function is also updated - * for display purposes. This function mutates the original arrays. - * - * @private - * @param {Array.} doclets - The array of classes and functions to - * check. - * @param {Array.} modules - The array of module doclets to search. - */ -function attachModuleSymbols(doclets, modules) { - var symbols = {}; - - // build a lookup table - doclets.forEach(function(symbol) { - symbols[symbol.longname] = symbols[symbol.longname] || []; - symbols[symbol.longname].push(symbol); - }); - - return modules.map(function(module) { - if (symbols[module.longname]) { - module.modules = symbols[module.longname] - // Only show symbols that have a description. Make an exception for classes, because - // we want to show the constructor-signature heading no matter what. - .filter(function(symbol) { - return symbol.description || symbol.kind === 'class'; - }) - .map(function(symbol) { - symbol = doop(symbol); - - if (symbol.kind === 'class' || symbol.kind === 'function' && !symbol.hideconstructor) { - symbol.name = symbol.name.replace('module:', '(require("') + '"))'; - } - - return symbol; - }); - } - }); -} - -function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) { - var nav = ''; - - if (items && items.length) { - var itemsNav = ''; - var docdash = env && env.conf && env.conf.docdash || {}; - var level = typeof docdash.navLevel === 'number' && docdash.navLevel >= 0 ? - docdash.navLevel : - Infinity; - - items.forEach(function(item) { - var displayName; - var methods = find({kind:'function', memberof: item.longname}); - var members = find({kind:'member', memberof: item.longname}); - var conf = env && env.conf || {}; - var classes = ''; - - // show private class? - if (docdash.private === false && item.access === 'private') return; - - // depth to show? - if (item.ancestors && item.ancestors.length > level) { - classes += 'level-hide'; - } - - classes = classes ? ' class="'+ classes + '"' : ''; - itemsNav += ''; - if ( !hasOwnProp.call(item, 'longname') ) { - itemsNav += linktoFn('', item.name); - } else if ( !hasOwnProp.call(itemsSeen, item.longname) ) { - if (conf.templates.default.useLongnameInNav) { - displayName = item.longname; - } else { - displayName = item.name; - } - itemsNav += linktoFn(item.longname, displayName.replace(/\b(module|event):/g, '')); - - if (docdash.static && members.find(function (m) { return m.scope === 'static'; } )) { - itemsNav += "